////////// ОБЩИЕ КОМАНДЫ ВСЕХ ОБРАБОТЧИКОВ ////////////// // Master 16.12.2011 9:09:00 // Функция осуществляет подключение устройства. // // Параметры: // ОбъектДрайвера - <*> // - ОбъектДрайвера драйвера торгового оборудования. // // Возвращаемое значение: // <Булево> - Результат работы функции. // Функция ПодключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт Результат = Истина; ПараметрыПодключения.Вставить("СерийныйНомерККМ", "0"); ПараметрыПодключения.Вставить("ИДУстройства", ""); ВыходныеПараметры = Новый Массив(); // Проверка параметров устройства Порт = Неопределено; Скорость = Неопределено; Таймаут = Неопределено; ПарольПользователя = Неопределено; ПарольАдминистратора = Неопределено; ОтменятьЧекПриПодключении = Неопределено; НаименованиеОплаты1 = Неопределено; НаименованиеОплаты2 = Неопределено; НомерСекции = Неопределено; // Master 15.12.2011 14:27:32 КодСимволаЧастичногоОтреза = Неопределено; ЖурналОперацийДрайвера = Неопределено; СовместимыеВерсии = Неопределено; Параметры.Свойство("Порт" , Порт); Параметры.Свойство("Скорость" , Скорость); Параметры.Свойство("Таймаут" , Таймаут); Параметры.Свойство("ПарольПользователя" , ПарольПользователя); Параметры.Свойство("ПарольАдминистратора" , ПарольАдминистратора); Параметры.Свойство("ОтменятьЧекПриПодключении" , ОтменятьЧекПриПодключении); Параметры.Свойство("НаименованиеОплаты1" , НаименованиеОплаты1); Параметры.Свойство("НаименованиеОплаты2" , НаименованиеОплаты2); Параметры.Свойство("НомерСекции" , НомерСекции); // Master 15.12.2011 14:27:22 Параметры.Свойство("КодСимволаЧастичногоОтреза", КодСимволаЧастичногоОтреза); Параметры.Свойство("ЖурналОперацийДрайвера" , ЖурналОперацийДрайвера); Если Порт = Неопределено Или Скорость = Неопределено Или Таймаут = Неопределено Или ПарольПользователя = Неопределено Или ПарольАдминистратора = Неопределено Или ОтменятьЧекПриПодключении = Неопределено Или НаименованиеОплаты1 = Неопределено Или НаименованиеОплаты2 = Неопределено Или НомерСекции = Неопределено // Master 15.12.2011 14:27:38 Или КодСимволаЧастичногоОтреза = Неопределено Или ЖурналОперацийДрайвера = Неопределено Тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(НСтр("ru='Не настроены параметры устройства. |Для корректной работы устройства необходимо задать параметры его работы. |Сделать это можно при помощи формы ""Настройка параметров"" модели |подключаемого оборудования в форме ""Подключение и настройка оборудования"".'")); Результат = Ложь; КонецЕсли; Если Результат Тогда Если НЕ ОбъектДрайвера.FPInit(Параметры.Порт,Параметры.Скорость,Параметры.Таймаут,Параметры.Таймаут) тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; Результат = Ложь; Иначе ПараметрыПодключения.СерийныйНомерККМ = ОбъектДрайвера.GetSerialNumber; Если Результат И Параметры.ОтменятьЧекПриПодключении И ОбъектДрайвера.GetCheckOpened Тогда Результат = ОбъектДрайвера.FPResetOrder(); КонецЕсли; Если Результат И Не ОбъектДрайвера.GetSmenaOpened тогда // Если смена не открыта, проведем регламентные процедуры //Проверка времени ВремяСервера = МастерПроцедурыСервера.ТекущаяДатаНаСервере(); Если Результат И НЕ ОбъектДрайвера.CurrentDate=Формат(ВремяСервера,"ДФ=dd.MM.yyyy") тогда ОбъектДрайвера.CurrentDate=Формат(ВремяСервера,"ДФ=dd.MM.yyyy"); КонецЕсли; Если Результат И НЕ Лев(ОбъектДрайвера.CurrentTime,7)=Лев(Формат(ВремяСервера,"ДФ=hh:mm:ss"),7) тогда ОбъектДрайвера.CurrentTime=Формат(МастерПроцедурыСервера.ТекущаяДатаНаСервере(),"ДФ=hh:mm:ss"); КонецЕсли; Если Результат И ((НЕ ОбъектДрайвера.GetTaxQuantity=1) Или (НЕ ОбъектДрайвера.GetBaseTax_A=2000) Или (НЕ ОбъектДрайвера.GetTaxTypeExt=0) или (НЕ ОбъектДрайвера.GetUseMixedTax)) тогда Результат = ОбъектДрайвера.FPSetTaxRate(0, // Пароль программирования 1, // Количество программируемых групп, начиная с группы "А" 0, // Вложенный тип НДС ETaxType.ettWithNDS 2000, // Ставка НДС группы "А" в 0.01% 0, // Ставка НДС группы "Б" в 0.01% 0, // Ставка НДС группы "В" в 0.01% 0, // Ставка НДС группы "Г" в 0.01% 0, // Ставка НДС группы "Д" в 0.01% 0, // Сбор в пенсионный фонд группы "А" в 0.01% 0, // Сбор в пенсионный фонд группы "Б" в 0.01% 0, // Сбор в пенсионный фонд группы "В" в 0.01% 0, // Сбор в пенсионный фонд группы "Г" в 0.01% 0, // Сбор в пенсионный фонд группы "Д" в 0.01% ложь) // Использовать схему составного налога КонецЕсли; КонецЕсли; //Результат = Истина; Если Не Результат тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; КонецЕсли; //мНДС = Новый Массив(); //мНДС.Добавить(20.00); //мНДС.Добавить(0.00); //мНДС.Добавить(0.00); //мНДС.Добавить(0.00); //МассивЗначений = Новый Массив; //МассивЗначений.Добавить(Параметры.Порт); //МассивЗначений.Добавить(Параметры.Скорость); //МассивЗначений.Добавить(Параметры.ПарольПользователя); //МассивЗначений.Добавить(Параметры.ПарольАдминистратора); //МассивЗначений.Добавить(Параметры.Таймаут); //МассивЗначений.Добавить(ПараметрыПодключения.СерийныйНомерККМ); //МассивЗначений.Добавить(мНДС[0]); //МассивЗначений.Добавить(мНДС[1]); //МассивЗначений.Добавить(мНДС[2]); //МассивЗначений.Добавить(мНДС[3]); //МассивЗначений.Добавить(Ложь); //МассивЗначений.Добавить(Параметры.ЖурналОперацийДрайвера); //МассивЗначений.Добавить(Параметры.НаименованиеОплаты1); //МассивЗначений.Добавить(Параметры.НаименованиеОплаты2); //Если НЕ ОбъектДрайвера.Подключить(МассивЗначений, ПараметрыПодключения.ИДУстройства) Тогда // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); // Результат = Ложь; //Иначе // ПараметрыПодключения.СерийныйНомерККМ = МассивЗначений[5]; // Если Параметры.ОтменятьЧекПриПодключении Тогда // ОбъектДрайвера.ОтменитьЧек(ПараметрыПодключения.ИДУстройства); // КонецЕсли; // Результат = Истина; //КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 9:08:45 // Функция осуществляет отключение устройства. // // Параметры: // ОбъектДрайвера - <*> // - ОбъектДрайвера драйвера торгового оборудования. // // Возвращаемое значение: // <Булево> - Результат работы функции. // Функция ОтключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт Результат = Ложь; ВыходныеПараметры = Новый Массив(); Результат = ОбъектДрайвера.FPClose(); Если НЕ Результат тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; //Если НЕ ОбъектДрайвера.Отключить(ПараметрыПодключения.ИДУстройства) Тогда // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); //Иначе // Результат = Истина; //КонецЕсли; Возврат Результат; КонецФункции // Функция получает, обрабатывает и перенаправляет на исполнение команду к драйверу // Функция ВыполнитьКоманду(Команда, ВходныеПараметры = Неопределено, ВыходныеПараметры = Неопределено, ОбъектДрайвера, Параметры, ПараметрыПодключения) Экспорт Результат = Истина; ВыходныеПараметры = Новый Массив(); // Открыть смену Если Команда = "OpenDay" Тогда Результат = ОткрытьСмену(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Печать чека ИначеЕсли Команда = "PrintReceipt" Тогда ТаблицаНоменклатуры = ВходныеПараметры[0]; ТаблицаОплат = ВходныеПараметры[1]; ОбщиеПараметры = ВходныеПараметры[2]; Результат = ПечатьЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаНоменклатуры, ТаблицаОплат, ОбщиеПараметры, ВыходныеПараметры); // Печать слип чека ИначеЕсли Команда = "PrintText" Тогда СтрокаТекста = ВходныеПараметры[0]; Результат = ПечатьТекста(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаТекста, ВыходныеПараметры); // Печать чека внесения/выемки ИначеЕсли Команда = "Encash" Тогда ТипИнкассации = ВходныеПараметры[0]; Сумма = ВходныеПараметры[1]; Результат = Инкассация(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипИнкассации, Сумма, ВыходныеПараметры); // Печать отчета без гашения ИначеЕсли Команда = "PrintXReport" Тогда Результат = НапечататьОтчетБезГашения(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Печать отчета с гашением ИначеЕсли Команда = "PrintZReport" Тогда Результат = НапечататьОтчетСГашением(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Тестирование устройства ИначеЕсли Команда = "CheckHealth" Тогда Результат = ТестУстройства(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Открытие денежного ящика ИначеЕсли Команда = "OpenCashDrawer" Тогда Результат = ОткрытьДенежныйЯщик(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Получение версии драйвера ИначеЕсли Команда = "ПолучитьВерсиюДрайвера" Тогда Результат = ПолучитьВерсиюДрайвера(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Указанная команда не поддерживается данным драйвером Иначе ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(НСтр("ru='Команда ""%Команда%"" не поддерживается данным драйвером.'")); ВыходныеПараметры[1] = СтрЗаменить(ВыходныеПараметры[1], "%Команда%", Команда); Результат = Ложь; КонецЕсли; Возврат Результат; КонецФункции ///////////////////////////////////// // Функции-исполнители команд ///////// СПЕЦИФИЧНЫЕ ПО ТИПУ ОБОРУДОВАНИЯ КОМАНДЫ //////////////// // Функция осуществляет открытие смены Функция ОткрытьСмену(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; Результат = ОбъектДрайвера.FPNullCheck(); Если НЕ Результат тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; // Заполнение выходных параметров ВыходныеПараметры.Добавить(0); ВыходныеПараметры.Добавить(0); ВыходныеПараметры.Добавить(0); ВыходныеПараметры.Добавить(ТекущаяДата()); Возврат Результат; КонецФункции // Осуществляет печать фискального чека Функция ПечатьЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаНоменклатуры, ТаблицаОплат, ОбщиеПараметры, ВыходныеПараметры) Результат = Истина; ЧекНаВозврат = ОбщиеПараметры[0] = 1; // Открываем чек Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ОбщиеПараметры[0] = 1, ОбщиеПараметры[1], ВыходныеПараметры); // Печатаем строки чека СуммаЧека = 0; Если Результат Тогда Для ИндексМассива = 0 По ТаблицаНоменклатуры.Количество() - 1 Цикл Наименование = ТаблицаНоменклатуры[ИндексМассива][0].Значение; Количество = ТаблицаНоменклатуры[ИндексМассива][5].Значение; Цена = ТаблицаНоменклатуры[ИндексМассива][4].Значение; ПроцентСкидки = ТаблицаНоменклатуры[ИндексМассива][8].Значение; Сумма = ТаблицаНоменклатуры[ИндексМассива][9].Значение; СуммаЧека = СуммаЧека + Сумма; НомерСекции = ТаблицаНоменклатуры[ИндексМассива][3].Значение; СтавкаНДС = ТаблицаНоменклатуры[ИндексМассива][12].Значение; Если (НЕ ЧекНаВозврат) И НЕ НапечататьФискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, Наименование, Количество, Цена, ПроцентСкидки, Сумма, НомерСекции, СтавкаНДС, ВыходныеПараметры) Тогда Прервать; ИначеЕсли (ЧекНаВозврат) И НЕ НапечататьФискальнуюСтрокуВозврат(ОбъектДрайвера, Параметры, ПараметрыПодключения, Наименование, Количество, Цена, ПроцентСкидки, Сумма, НомерСекции, СтавкаНДС, ВыходныеПараметры) Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; // Master 19.12.2011 7:49:24 необходимо проверить сумму ФР и базы // Закрываем чек Если Результат Тогда Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры); КонецЕсли; Возврат Результат; КонецФункции // Осуществляет печать слип-чека Функция ПечатьТекста(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаТекста, ВыходныеПараметры) Результат = Истина; // Открываем чек Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, Ложь, Ложь, ВыходныеПараметры); // Печатаем строки чека Если Результат Тогда Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл ВыделеннаяСтрока = СтрПолучитьСтроку(СтрокаТекста, НомерСтроки); Если Найти(ВыделеннаяСтрока, Символ(Параметры.КодСимволаЧастичногоОтреза)) > 0 Тогда ТаблицаОплат = Новый Массив(); Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры); Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, Ложь, Ложь, ВыходныеПараметры); Иначе Если НЕ НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыделеннаяСтрока, ВыходныеПараметры) Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; // Закрываем чек Если Результат Тогда ТаблицаОплат = Новый Массив(); Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры); КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 9:36:08 // Функция осуществляет открытие нового чека. // Функция ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ЧекВозврата, ФискальныйЧек, ВыходныеПараметры) Результат = Истина; НомерСмены = 0; НомерЧека = 0; Результат = ОбъектДрайвера.GetSmenaOpened; Если не Результат тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = "Смена закрыта, печать чека не возможна"; Возврат Результат; КонецЕсли; Результат = НЕ ОбъектДрайвера.GetCheckOpened; Если НЕ Результат тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = "Последний чек не закрыт, закройте чек или перезапустите 1с"; Возврат Результат; КонецЕсли; ВыходныеПараметры.Добавить(ОбъектДрайвера.GetNumZReport+1); Если НЕ ЧекВозврата тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetSaleCheckNumber+1); Иначе ВыходныеПараметры.Добавить(ОбъектДрайвера.GetPayCheckNumber+1); КонецЕсли; ВыходныеПараметры.Добавить(0); ВыходныеПараметры.Добавить(ТекущаяДата()); // Открываем чек //Результат = ОбъектДрайвера.ОткрытьЧек(ПараметрыПодключения.ИДУстройства, ФискальныйЧек, ЧекВозврата, // Истина, НомерЧека, НомерСмены); //Если НЕ Результат Тогда // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); //Иначе // // Заполнение выходных параметров // ВыходныеПараметры.Добавить(НомерСмены); // ВыходныеПараметры.Добавить(НомерЧека); // ВыходныеПараметры.Добавить(0); // ВыходныеПараметры.Добавить(ТекущаяДата()); //КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 14:03:27 // Функция осуществляет печать фискальной строки. // Функция НапечататьФискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, Наименование, Количество, Цена, ПроцентСкидки, Сумма, НомерСекции, СтавкаНДС, ВыходныеПараметры) Результат = Истина; ТКоличество1 = Формат(Количество*1000,"ЧЦ=12; ЧДЦ=0; ЧГ=0"); ТКоличество2 = Формат(Окр(Количество,0)*1000,"ЧЦ=12; ЧДЦ=0; ЧГ=0"); IsOneQuant = Истина; Если ТКоличество1=ТКоличество2 тогда ТКоличество1 = Количество; //IsOneQuant = Истина; Иначе IsOneQuant = Ложь; ТКоличество1 = Число(ТКоличество1); КонецЕсли; Результат = ОбъектДрайвера.FPSaleEx (ТКоличество1, // количество 3, // количество знаков дробной части кол- ва IsOneQuant, Формат(Цена*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // цена в копейках 0, // налоговая группа « А» ложь, // не брать описание товара из ЭККР Лев(Наименование,50), // название товара МастерПроцедурыСервера.Хэш(Лев(Наименование,50),,,214783648)); // Код товара Если ПроцентСкидки > 0 тогда ОбъектДрайвера.FPDiscount(2,Формат(ПроцентСкидки*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"),""); ИначеЕсли ПроцентСкидки < 0 тогда ОбъектДрайвера.FPDiscount(3,Формат(ПроцентСкидки*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"),""); КонецЕсли; Если НЕ Результат тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; //Результат = ОбъектДрайвера.НапечататьФискСтроку(ПараметрыПодключения.ИДУстройства, Наименование, Количество, Цена, // Сумма, НомерСекции, СтавкаНДС); //Если НЕ Результат Тогда // ВыходныеПараметры.Очистить(); // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); // ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); //КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 14:03:27 // Функция осуществляет печать фискальной строки. // Функция НапечататьФискальнуюСтрокуВозврат(ОбъектДрайвера, Параметры, ПараметрыПодключения, Наименование, Количество, Цена, ПроцентСкидки, Сумма, НомерСекции, СтавкаНДС, ВыходныеПараметры) Результат = Истина; ТКоличество1 = Формат(Количество*1000,"ЧЦ=12; ЧДЦ=0; ЧГ=0"); ТКоличество2 = Формат(Окр(Количество,0)*1000,"ЧЦ=12; ЧДЦ=0; ЧГ=0"); IsOneQuant = Истина; Если ТКоличество1=ТКоличество2 тогда ТКоличество1 = Количество; //IsOneQuant = Истина; Иначе IsOneQuant = Ложь; ТКоличество1 = Число(ТКоличество1); КонецЕсли; Результат = ОбъектДрайвера.FPPayMoneyEx(ТКоличество1, // количество 3, // количество знаков дробной части кол- ва IsOneQuant, Формат(Цена*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // цена в копейках 0, // налоговая группа « А» ложь, // не брать описание товара из ЭККР Лев(Наименование,50), // название товара МастерПроцедурыСервера.Хэш(Лев(Наименование,50),,,214783648)); // Код товара Если ПроцентСкидки > 0 тогда ОбъектДрайвера.FPDiscount(2,Формат(ПроцентСкидки*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"),""); ИначеЕсли ПроцентСкидки < 0 тогда ОбъектДрайвера.FPDiscount(3,Формат(ПроцентСкидки*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"),""); КонецЕсли; Если НЕ Результат тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; //Результат = ОбъектДрайвера.НапечататьФискСтроку(ПараметрыПодключения.ИДУстройства, Наименование, Количество, Цена, // Сумма, НомерСекции, СтавкаНДС); //Если НЕ Результат Тогда // ВыходныеПараметры.Очистить(); // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); // ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); //КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 14:03:16 // Функция осуществляет печать нефискальной строки. // Функция НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаТекста, ВыходныеПараметры) Результат = Истина; Результат = ОбъектДрайвера.НапечататьНефискСтроку(ПараметрыПодключения.ИДУстройства, СтрокаТекста); Если НЕ Результат Тогда ВыходныеПараметры.Очистить(); ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(""); ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 13:57:52 // Функция осуществляет закрытие ранее открытого чека. // Функция ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры) Результат = Истина; СуммаНаличнойОплаты = 0; СуммаБезналичнойОплаты1 = 0; СуммаБезналичнойОплаты2 = 0; Результат = ОбъектДрайвера.GetCheckOpened; Если НЕ Результат тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = "Чек не открыт, закрытие не возможно"; Возврат Результат; КонецЕсли; Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение; ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 1 Тогда СуммаБезналичнойОплаты1 = СуммаБезналичнойОплаты1 + ТаблицаОплат[ИндексОплаты][1].Значение; Иначе СуммаБезналичнойОплаты2 = СуммаБезналичнойОплаты2 + ТаблицаОплат[ИндексОплаты][1].Значение; КонецЕсли; КонецЦикла; ЗакрытьАвто = Ложь; Если НЕ СуммаНаличнойОплаты=0 тогда Если СуммаБезналичнойОплаты1=0 и СуммаБезналичнойОплаты2=0 тогда ЗакрытьАвто = Истина; КонецЕсли; Результат = ОбъектДрайвера.FPPayment (3, // форма оплат – наличными Формат((СуммаНаличнойОплаты*100),"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // сумма оплаты в копейках ЗакрытьАвто, // чек не будет закрыт автоматически Истина , // чек закроется как фискальный ""); // комментарий к этой оплате КонецЕсли; Если Результат И (НЕ СуммаБезналичнойОплаты1=0) тогда Если СуммаБезналичнойОплаты2=0 тогда ЗакрытьАвто = Истина; КонецЕсли; Результат = ОбъектДрайвера.FPPayment (0, // форма оплат – наличными Формат(СуммаБезналичнойОплаты1*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // сумма оплаты в копейках ЗакрытьАвто, // чек не будет закрыт автоматически Истина , // чек закроется как фискальный "Карта №1"); // комментарий к этой оплате КонецЕсли; Если Результат И (НЕ СуммаБезналичнойОплаты2=0) тогда Результат = ОбъектДрайвера.FPPayment (0, // форма оплат – наличными Формат(СуммаБезналичнойОплаты2*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0"), // сумма оплаты в копейках Истина, // чек не будет закрыт автоматически Истина , // чек закроется как фискальный "Карта №2"); // комментарий к этой оплате КонецЕсли; Если НЕ Результат тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); КонецЕсли; //Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл // Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда // СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение; // ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 1 Тогда // СуммаБезналичнойОплаты1 = СуммаБезналичнойОплаты1 + ТаблицаОплат[ИндексОплаты][1].Значение; // Иначе // СуммаБезналичнойОплаты2 = СуммаБезналичнойОплаты2 + ТаблицаОплат[ИндексОплаты][1].Значение; // КонецЕсли; //КонецЦикла; //Результат = ОбъектДрайвера.ЗакрытьЧек(ПараметрыПодключения.ИДУстройства, // СуммаНаличнойОплаты, // СуммаБезналичнойОплаты1, // СуммаБезналичнойОплаты2); //Если НЕ Результат Тогда // ВыходныеПараметры.Очистить(); // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); // ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); //КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 13:57:41 // Функция осуществляет отмену ранее открытого чека. // Функция ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; Результат = ОбъектДрайвера.GetCheckOpened; Если Результат тогда // Если Чек открыт только тогда аннулируем Результат = ОбъектДрайвера.FPResetOrder(); КонецЕсли; Если НЕ Результат тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; //ОбъектДрайвера.ОтменитьЧек(ПараметрыПодключения.ИДУстройства); Возврат Результат; КонецФункции // Master 16.12.2011 9:51:52 // Функция осуществляет внесение или выемку суммы на ФР. // Функция Инкассация(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипИнкассации, Сумма, ВыходныеПараметры) Результат = Истина; Если ТипИнкассации=1 тогда Результат = ОбъектДрайвера.FPInToCash(Формат(Сумма*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0")); Иначе Результат = ОбъектДрайвера.FPOutOfCash(Формат(Сумма*100,"ЧЦ=12; ЧДЦ=0; ЧГ=0")); КонецЕсли; Если НЕ Результат Тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = ОбъектДрайвера.GetTextErrorMessage; Иначе // Заполнение выходных параметров ВыходныеПараметры.Добавить(0); ВыходныеПараметры.Добавить(0); ВыходныеПараметры.Добавить(0); ВыходныеПараметры.Добавить(ТекущаяДата()); КонецЕсли; // Результат = ОбъектДрайвера.НапечататьЧекВнесенияВыемки(ПараметрыПодключения.ИДУстройства, // ?(ТипИнкассации = 1, Сумма, -Сумма)); // Если НЕ Результат Тогда // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // КодОшибки = ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); // ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Иначе // // Заполнение выходных параметров // ВыходныеПараметры.Добавить(0); // ВыходныеПараметры.Добавить(0); // ВыходныеПараметры.Добавить(0); // ВыходныеПараметры.Добавить(ТекущаяДата()); // КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 9:08:28 // Функция осуществляет снятие отчёта без гашения. // Функция НапечататьОтчетБезГашения(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; Результат = ОбъектДрайвера.FPDayReport(Параметры.ПарольАдминистратора); Если НЕ Результат Тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1]=ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; //Результат = ОбъектДрайвера.НапечататьОтчетБезГашения(ПараметрыПодключения.ИДУстройства); //Если НЕ Результат Тогда // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); // ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); //Иначе // //КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 9:07:11 // Функция осуществляет снятие отчёта с гашением. // Функция НапечататьОтчетСГашением(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; ТОстатокДенегВФР = ОбъектДрайвера.GetMoneyInBox; ОстатокДенегВФР = ?(ПустаяСтрока(ТОстатокДенегВФР),0,Число(ТОстатокДенегВФР)); Если НЕ ОстатокДенегВФР=0 тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1] = "Остаток суммы наличных в денежном ящике: "+Формат(ОстатокДенегВФР/100,"ЧЦ=12; ЧДЦ=2; ЧРГ=; ЧГ=3,0"); Возврат Ложь; КонецЕсли; Результат = ОбъектДрайвера.FPDayClrReport(Параметры.ПарольАдминистратора); Если НЕ Результат Тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1]=ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; //Результат = ОбъектДрайвера.НапечататьОтчетСГашением(ПараметрыПодключения.ИДУстройства); //Если НЕ Результат Тогда // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); // ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); //Иначе // //КонецЕсли; Возврат Результат; КонецФункции // Master 16.12.2011 9:06:12 // Функция осуществляет открытие денежного ящика // Функция ОткрытьДенежныйЯщик(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; Результат = ОбъектДрайвера.FPOpenBox(); Если НЕ Результат Тогда ВыходныеПараметры.Добавить(ОбъектДрайвера.GetByteResult); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1]=ОбъектДрайвера.GetTextErrorMessage; КонецЕсли; //Попытка // Результат = ОбъектДрайвера.ОткрытьДенежныйЯщик(ПараметрыПодключения.ИДУстройства, 0); // номер ящика по умолчанию 0 //Исключение // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(НСтр("ru='Команда ""Открыть денежный ящик"" не поддерживается данным драйвером.'")); // Возврат Результат; //КонецПопытки; // //Если НЕ Результат Тогда // ВыходныеПараметры.Добавить(999); // ВыходныеПараметры.Добавить(""); // ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); //КонецЕсли; Возврат Результат; КонецФункции //////////// ДОПОЛНИТЕЛЬНЫЕ КОМАНДЫ //////////////////// // Master 16.12.2011 9:06:22 // Функция осуществляет тестирование устройства // Функция ТестУстройства(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; РезультатТеста = ""; СерийныйНомерККМ = "0"; //мНДС = Новый Массив(); //мНДС.Добавить(20.00); //мНДС.Добавить(0.00); //мНДС.Добавить(0.00); //мНДС.Добавить(0.00); //МассивЗначений = Новый Массив; //МассивЗначений.Добавить(Параметры.Порт); //МассивЗначений.Добавить(Параметры.Скорость); //МассивЗначений.Добавить(Параметры.ПарольПользователя); //МассивЗначений.Добавить(Параметры.ПарольАдминистратора); //МассивЗначений.Добавить(Параметры.Таймаут); //МассивЗначений.Добавить(СерийныйНомерККМ); //МассивЗначений.Добавить(мНДС[0]); //МассивЗначений.Добавить(мНДС[1]); //МассивЗначений.Добавить(мНДС[2]); //МассивЗначений.Добавить(мНДС[3]); //МассивЗначений.Добавить(Ложь); //МассивЗначений.Добавить(Параметры.ЖурналОперацийДрайвера); //МассивЗначений.Добавить(Параметры.НаименованиеОплаты1); //МассивЗначений.Добавить(Параметры.НаименованиеОплаты2); //Результат = ОбъектДрайвера.ТестУстройства(МассивЗначений, РезультатТеста); // Master 15.12.2011 14:03:11 // { Master 15.12.2011 14:03:16 Если НЕ ОбъектДрайвера.FPInit(Параметры.Порт,Параметры.Скорость,Параметры.Таймаут,Параметры.Таймаут) тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(""); ВыходныеПараметры[1]=ОбъектДрайвера.GetTextErrorMessage; попытка ОбъектДрайвера.FPClose(); // попробуем закрыть сессию Исключение КонецПопытки; Иначе Результат = ОбъектДрайвера.FPLineFeed(); ОбъектДрайвера.FPSendCustomer(True,"Work with 1C"); ОбъектДрайвера.FPPrintVersion(); ОбъектДрайвера.FPClose(); КонецЕсли; // } ВыходныеПараметры.Добавить(?(Результат, 0, 999)); ВыходныеПараметры.Добавить(РезультатТеста); Возврат Результат; КонецФункции // Master 16.12.2011 9:06:51 // Функция возвращает версию установленного драйвера // Функция ПолучитьВерсиюДрайвера(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; ВыходныеПараметры.Добавить(НСтр("ru='Установлен'")); ВыходныеПараметры.Добавить(НСтр("ru='Не определена'")); // { Master 15.12.2011 13:42:25 //Так как в драйвере ИКС нет значение драйвера, возвращем неопределена // } Попытка Если ОбъектДрайвера.FPInit(Параметры.Порт,Параметры.Скорость,Параметры.Таймаут,Параметры.Таймаут) тогда ВыходныеПараметры[1] = ОбъектДрайвера.GetHardwareVersion; ОбъектДрайвера.FPClose(); КонецЕсли; // ВыходныеПараметры[1] = ОбъектДрайвера.ПолучитьНомерВерсии(); Исключение КонецПопытки; Возврат Результат; КонецФункции
Wednesday, December 21, 2011
Доработка по работе с ФР ИКС протоколом ЕП02 в Управление торговлей, редакция 11.0 (11.0.7.13)
1. Добавляем новое перечисление в ОбработчикиДрайверовПодключаемогоОборудования ОбработчикИКСФискальныеРегистраторы
2. Далее добавляем новый модуль в "Общие модули" с названием "ПодключаемоеОборудованиеИКСМФискальныеРегистраторы". В принцыпе, я взял модуль Штрих-м и переписал его под ИКС
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment