Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ruslan-hut/47683f350706695a87e0d7ae2ff363c0 to your computer and use it in GitHub Desktop.
Save ruslan-hut/47683f350706695a87e0d7ae2ff363c0 to your computer and use it in GitHub Desktop.
Обработчик драйвера фискального регистратора МИНИ-ФП
// общая функция через которую выполняется вызов методов
//
функция ВыполнитьМетодБиблиотеки(объектДрайвера, ИмяМетода, Параметры = неопределено)
Результат = Истина;
ОписаниеОшибки = "";
СтрокаВызова=СокрЛП(имяМетода)+";";
Если ИмяМетода = "open_port" Тогда
СтрокаВызова = СтрокаВызова + строка(Параметры.Порт) + ";115200;";
ИначеЕсли ИмяМетода = "cashier_registration" Тогда
СтрокаВызова = СтрокаВызова + "1;0;";
ИначеЕсли ИмяМетода = "execute_Z_report" ИЛИ ИмяМетода = "execute_X_report" Тогда
СтрокаВызова = СтрокаВызова + "12321;";
Иначе
Если Параметры = Неопределено тогда
Параметры = новый Структура;
конецЕсли;
Для Каждого ЭлементПараметра из Параметры цикл
СтрокаВызова = СтрокаВызова + строка(ЭлементПараметра.Значение)+";";
КонецЦикла;
КонецЕсли;
//--- Вызов метода библиотеки ---
Если имяМетода = "open_port" тогда
объектДрайвера.T400me("set_error_log;0");
объектДрайвера.T400me(СтрокаВызова);
Если НЕ Число(объектДрайвера.get_last_error) = 0 тогда // --- 2 попытка
объектДрайвера.T400me(СтрокаВызова);
get_last_error = Число(объектДрайвера.get_last_error);
Если НЕ get_last_error = 0 тогда
Результат = Ложь;
СообщитьПредставлениеОшибки(ИмяМетода, get_last_error);
КонецЕсли;
КонецЕсли;
иначе //--- собственно сам вызов метода ---
объектДрайвера.T400me(СтрокаВызова);
get_last_error = Число(объектДрайвера.get_last_error);
Если НЕ get_last_error = 0 тогда // --- 2 раз
Результат = Ложь;
СообщитьПредставлениеОшибки(ИмяМетода, get_last_error);
КонецЕсли;
КонецЕсли;
Возврат Результат;
Конецфункции
Процедура СообщитьПредставлениеОшибки(ИмяМетода, Значение)
//--- по номеру ошибки выводим ее описание ---
Если Значение = 0 Тогда ТекстОшибки = "Нет ошибок";
ИначеЕсли Значение = 1 Тогда ТекстОшибки = "Ошибки канала связи РРО №1 нет возможности запустить команду";
ИначеЕсли Значение = 2 Тогда ТекстОшибки = "Ошибки канала связи РРО №2 'невозможно обработать команду '";
ИначеЕсли Значение = 3 Тогда ТекстОшибки = "Ошибки канала связи РРО №3 'код команды отсутствует '";
ИначеЕсли Значение = 4 Тогда ТекстОшибки = "Ошибки канала связи РРО №4 'много данных в команде '";
ИначеЕсли Значение = 5 Тогда ТекстОшибки = "Ошибки канала связи РРО №5 'недостаточно данных в команде '";
ИначеЕсли Значение = 6 Тогда ТекстОшибки = "Ошибки канала связи РРО №6 'ошибка при приеме данных '";
ИначеЕсли Значение = 7 Тогда ТекстОшибки = "Ошибки канала связи РРО №7 'недопустимый идентификатор команды '";
ИначеЕсли Значение = 8 Тогда ТекстОшибки = "Ошибки канала связи РРО №8 'невозможно выполнить команду '";
ИначеЕсли Значение = 10 Тогда ТекстОшибки = "Ошибки канала связи РРО №10 'Ошибка ввода '";
ИначеЕсли Значение = 11 Тогда ТекстОшибки = "Ошибки обработки команды РРО №11 'необходимо снять z1 отчет '";
ИначеЕсли Значение = 12 Тогда ТекстОшибки = "Ошибки обработки команды РРО №12 'скидки/наценки запрещены '";
ИначеЕсли Значение = 13 Тогда ТекстОшибки = "Ошибки обработки команды РРО №13 'переполнение по чеку '";
ИначеЕсли Значение = 14 Тогда ТекстОшибки = "Ошибки обработки команды РРО №14 'команда запрещена '";
ИначеЕсли Значение = 15 Тогда ТекстОшибки = "Ошибки обработки команды РРО №15 'кассир не зарегистрирован '";
ИначеЕсли Значение = 16 Тогда ТекстОшибки = "Ошибки обработки команды РРО №16 'отрицательная сумма '";
ИначеЕсли Значение = 17 Тогда ТекстОшибки = "Ошибки обработки команды РРО №17 'количество товара отрицательное '";
ИначеЕсли Значение = 18 Тогда ТекстОшибки = "Ошибки обработки команды РРО №18 'время смены исчерпано '";
ИначеЕсли Значение = 19 Тогда ТекстОшибки = "Ошибки обработки команды РРО №19 'неверный тип оплаты '";
ИначеЕсли Значение = 20 Тогда ТекстОшибки = "Ошибки обработки команды РРО №20 'неправильная или отсутствующая цена '";
ИначеЕсли Значение = 21 Тогда ТекстОшибки = "Ошибки обработки команды РРО №21 'неверный параметр на входе команды '";
ИначеЕсли Значение = 22 Тогда ТекстОшибки = "Ошибки обработки команды РРО №22 'товар находится в открытом чеке, нельзя редактировать '";
ИначеЕсли Значение = 23 Тогда ТекстОшибки = "Ошибки обработки команды РРО №23 'некорректно запрограммированный товар '";
ИначеЕсли Значение = 24 Тогда ТекстОшибки = "Ошибки обработки команды РРО №24 'неверный или отсутствующий штрих-код товара '";
ИначеЕсли Значение = 27 Тогда ТекстОшибки = "Ошибки обработки команды РРО №27 'неверный или отсутствующий код товара '";
ИначеЕсли Значение = 28 Тогда ТекстОшибки = "Ошибки обработки команды РРО №28 'товар не весовой(штучный) '";
ИначеЕсли Значение = 29 Тогда ТекстОшибки = "Ошибки обработки команды РРО №29 'ФП почти заполнена '";
ИначеЕсли Значение = 30 Тогда ТекстОшибки = "Ошибки обработки команды РРО №30 'ФП заполнена '";
ИначеЕсли Значение = 31 Тогда ТекстОшибки = "Ошибки обработки команды РРО №31 'память инициализаций заполнена '";
ИначеЕсли Значение = 32 Тогда ТекстОшибки = "Ошибки обработки команды РРО №32 'есть отложенная операция, оплата запрещена '";
ИначеЕсли Значение = 33 Тогда ТекстОшибки = "Ошибки обработки команды РРО №33 'карточка клиента не принята '";
ИначеЕсли Значение = 34 Тогда ТекстОшибки = "Ошибки обработки команды РРО №34 'не хватает денег на сдачу '";
ИначеЕсли Значение = 35 Тогда ТекстОшибки = "Ошибки обработки команды РРО №35 'запрещена комбинированная оплата '";
ИначеЕсли Значение = 36 Тогда ТекстОшибки = "Ошибки обработки команды РРО №36 'неправильный номер кассира '";
ИначеЕсли Значение = 37 Тогда ТекстОшибки = "Ошибки обработки команды РРО №37 'места недостаточно '";
ИначеЕсли Значение = 38 Тогда ТекстОшибки = "Ошибки обработки команды РРО №38 'нет места в Журнале '";
ИначеЕсли Значение = 39 Тогда ТекстОшибки = "Ошибки обработки команды РРО №39 'нет места в базе товаров '";
ИначеЕсли Значение = 40 Тогда ТекстОшибки = "Ошибки обработки команды РРО №40 'нет места в Архиве '";
ИначеЕсли Значение = 41 Тогда ТекстОшибки = "Ошибки обработки команды РРО №41 'запрещено, товар является комплексом '";
ИначеЕсли Значение = 42 Тогда ТекстОшибки = "Ошибки обработки команды РРО №42 'код не принадлежит комплексу '";
ИначеЕсли Значение = 43 Тогда ТекстОшибки = "Ошибки обработки команды РРО №43 'ЭККА занят и не может выполнить команду '";
ИначеЕсли Значение = 44 Тогда ТекстОшибки = "Ошибки обработки команды РРО №44 'необходимо снять 501 отчет '";
ИначеЕсли Значение = 45 Тогда ТекстОшибки = "Ошибки обработки команды РРО №45 'неправильный пароль кассира '";
ИначеЕсли Значение = 46 Тогда ТекстОшибки = "Ошибки обработки команды РРО №46 'комплекс невозможно продать '";
ИначеЕсли Значение = 47 Тогда ТекстОшибки = "Ошибки обработки команды РРО №47 'цена товара определена '";
ИначеЕсли Значение = 48 Тогда ТекстОшибки = "Ошибки обработки команды РРО №48 'отмена запрещена '";
ИначеЕсли Значение = 49 Тогда ТекстОшибки = "Ошибки обработки команды РРО №49 'продажа товара запрещена '";
ИначеЕсли Значение = 50 Тогда ТекстОшибки = "Ошибки обработки команды РРО №50 'ошибка чтения ФП '";
ИначеЕсли Значение = 51 Тогда ТекстОшибки = "Ошибки обработки команды РРО №51 'номер производителя неверен '";
ИначеЕсли Значение = 52 Тогда ТекстОшибки = "Ошибки обработки команды РРО №52 'ошибка записи во флеш '";
ИначеЕсли Значение = 54 Тогда ТекстОшибки = "Ошибки обработки команды РРО №54 'удаление товара запрещено '";
ИначеЕсли Значение = 55 Тогда ТекстОшибки = "Ошибки обработки команды РРО №55 'нет данных в фискальной памяти '";
ИначеЕсли Значение = 56 Тогда ТекстОшибки = "Ошибки обработки команды РРО №56 'неправильный пароль налогового инспектора '";
ИначеЕсли Значение = 57 Тогда ТекстОшибки = "Ошибки обработки команды РРО №57 'не готов выполнить команду '";
ИначеЕсли Значение = 58 Тогда ТекстОшибки = "Ошибки обработки команды РРО №58 'неправильный пароль администратора '";
ИначеЕсли Значение = 60 Тогда ТекстОшибки = "Ошибки обработки команды РРО №60 'РРО заблокирован (72 часа не было передачи данных) '";
ИначеЕсли Значение = 61 Тогда ТекстОшибки = "Ошибки обработки команды РРО №61 'РРО не персонализован '";
ИначеЕсли Значение = 70 Тогда ТекстОшибки = "Ошибки обработки команды РРО №70 'отсутсвует вал термоголовки '";
ИначеЕсли Значение = 79 Тогда ТекстОшибки = "Ошибки обработки команды РРО №79 'дата сервисного обслуживания превышена '";
ИначеЕсли Значение = 80 Тогда ТекстОшибки = "Ошибки обработки команды РРО №80 'ошибка записи в ФП '";
ИначеЕсли Значение = 81 Тогда ТекстОшибки = "Ошибки обработки команды РРО №81 'ошибка часов '";
ИначеЕсли Значение = 82 Тогда ТекстОшибки = "Ошибки обработки команды РРО №82 'ошибка данных в интерфейсе '";
ИначеЕсли Значение = 86 Тогда ТекстОшибки = "Ошибки обработки команды РРО №82 'отсутствует индикатор клиента '";
ИначеЕсли Значение = 97 Тогда ТекстОшибки = "Ошибки обработки команды РРО №97 'отсутствует бумага '";
ИначеЕсли Значение = 300 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №300 'неверная команда '";
ИначеЕсли Значение = 301 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №301 'ошибка порта '";
ИначеЕсли Значение = 302 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №302 'неверные параметры '";
ИначеЕсли Значение = 303 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №303 'неверное количество параметров '";
ИначеЕсли Значение = 304 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №304 'ошибка данных '";
ИначеЕсли Значение = 305 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №305 'порт закрыт '";
ИначеЕсли Значение = 306 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №306 'нет данных '";
ИначеЕсли Значение = 307 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №307 'не поддерживается '";
ИначеЕсли Значение = 308 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №308 'касса не доступна '";
ИначеЕсли Значение = 309 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №309 'неизвестный код ошибки '";
ИначеЕсли Значение = 310 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №310 'запись запрещена '";
ИначеЕсли Значение = 311 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №311 'ошибка чтения '";
ИначеЕсли Значение = 312 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №312 'ошибка записи '";
ИначеЕсли Значение = 313 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №313 'неправильная запись НДС '";
ИначеЕсли Значение = 314 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №314 'операция отменена '";
ИначеЕсли Значение = 315 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №315 'неправильная модель кассового аппарата '";
ИначеЕсли Значение = 316 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №316 'данные не существуют '";
ИначеЕсли Значение = 317 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №317 'кассовый аппарат отключен '";
ИначеЕсли Значение = 318 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №318 'файл не найден '";
ИначеЕсли Значение = 319 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №319 'присутствует ошибка '";
ИначеЕсли Значение = 320 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №320 'неверные данные '";
ИначеЕсли Значение = 321 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №321 'команда отключена '";
ИначеЕсли Значение = 322 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №322 'будет доступно в следующих версиях '";
ИначеЕсли Значение = 323 Тогда ТекстОшибки = "Ошибки DLL-библиотеки №323 'принтер не готов '";
Иначе ТекстОшибки = "код " + строка(Значение);
КонецЕсли;
ТекстОшибки = "Ошибка выполнения команды '" + ИмяМетода + "': " + ТекстОшибки;
Сообщить(ТекстОшибки, СтатусСообщения.Важное);
КонецПроцедуры
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ";") Экспорт
МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции
Функция ОставитьТолькоЦифры(стр_)
Стр = "0";
Для а = 1 По СтрДлина(стр_) Цикл
КодСимвола = КодСимвола(Сред(стр_, а, 1));
Цифра = Сред(стр_, а, 1);
Если (КодСимвола >= 48 И КодСимвола <= 57) Тогда
Стр = Стр + Цифра;
КонецЕсли;
КонецЦикла;
Возврат Формат(Число(Стр),"ЧГ=");;
КонецФункции
Функция РазностьВремени(Время1, Время2);
Разность = Время1 - Время2;
Если Разность > 0 Тогда
Часов = Цел(Разность / 3600);
Минут = Цел((Разность - Часов * 3600) / 60);
Возврат Дата(1, 1, 1, Часов, Минут, 0);
Иначе
Возврат Дата(1,1,1,0,0,0);
КонецЕсли;
КонецФункции
функция РегистрацияКассира(объектДрайвера, Параметры)
Результат = ВыполнитьМетодБиблиотеки(объектДрайвера,"open_port",Параметры);
Если Результат Тогда
Результат = ВыполнитьМетодБиблиотеки(объектДрайвера,"cashier_registration",Параметры);
Если НЕ Результат Тогда
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cancel_receipt");
Если Результат Тогда
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cut_paper");
КонецЕсли;
КонецЕсли;
КонецЕсли;
//-- порт открывается только в момент вызова методов
ВыполнитьМетодБиблиотеки(объектДрайвера,"close_port");
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
// Функция возвращает возможность работы модуля в асинхронном режиме.
// Стандартные команды модуля:
// - ПодключитьУстройство
// - ОтключитьУстройство
// - ВыполнитьКоманду
// Команды модуля для работы асинхронном режиме (должны быть определены):
// - НачатьПодключениеУстройства
// - НачатьОтключениеУстройства
// - НачатьВыполнениеКоманды
//
Функция ПоддержкаАсинхронногоРежима() Экспорт
Возврат Ложь;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
// Функция осуществляет подключение устройства.
//
// Параметры:
// ОбъектДрайвера - <*>
// - ОбъектДрайвера драйвера торгового оборудования.
//
// Возвращаемое значение:
// <Булево> - Результат работы функции.
//
Функция ПодключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт
ВыходныеПараметры = Новый Массив();
ПараметрыПодключения.Вставить("ИДУстройства", Неопределено);
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если НЕ Результат Тогда
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
КонецЕсли;
Возврат Результат;
КонецФункции
// Функция осуществляет отключение устройства.
//
// Параметры:
// ОбъектДрайвера - <*>
// - ОбъектДрайвера драйвера торгового оборудования.
//
// Возвращаемое значение:
// <Булево> - Результат работы функции.
//
Функция ОтключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт
Результат = Истина;
ВыходныеПараметры = Новый Массив();
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Возврат Результат;
КонецФункции
// Функция получает, обрабатывает и перенаправляет на исполнение команду к драйверу
//
Функция ВыполнитьКоманду(Команда, ВходныеПараметры = Неопределено, ВыходныеПараметры = Неопределено,
ОбъектДрайвера, Параметры, ПараметрыПодключения) Экспорт
Перем ТипШтрихКода;
Результат = Истина;
ВыходныеПараметры = Новый Массив();
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩИЕ ДЛЯ ВСЕХ ТИПОВ ДРАЙВЕРОВ
// Тестирование устройства
Если Команда = "ТестУстройства" ИЛИ Команда = "CheckHealth" Тогда
Результат = ТестУстройства(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Получение версии драйвера
ИначеЕсли Команда = "ПолучитьВерсиюДрайвера" ИЛИ Команда = "GetVersion" Тогда
Результат = ПолучитьВерсиюДрайвера(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Получение описание драйвера
ИначеЕсли Команда = "ПолучитьОписаниеДрайвера" ИЛИ Команда = "GetDescription" Тогда
Результат = ПолучитьОписаниеДрайвера(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩИЕ ДЛЯ РАБОТЫ С ФИСКАЛЬНЫМИ РЕГИСТРАТОРАМИ
// Открыть смену
ИначеЕсли Команда = "OpenShift" ИЛИ Команда = "OpenDay" ИЛИ Команда = "ОткрытьСмену" Тогда
Результат = ОткрытьСмену(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
ИначеЕсли Команда = "CloseShift" ИЛИ Команда = "ЗакрытьСмену" Тогда
Результат = НапечататьОтчетСГашением(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Печать отчета без гашения
ИначеЕсли Команда = "PrintXReport" ИЛИ Команда = "НапечататьОтчетБезГашения" Тогда
Результат = НапечататьОтчетБезГашения(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Печать отчета с гашением
ИначеЕсли Команда = "PrintZReport" ИЛИ Команда = "НапечататьОтчетСГашением" Тогда
Результат = НапечататьОтчетСГашением(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Печать чека
ИначеЕсли Команда = "PrintReceipt" ИЛИ Команда = "ПечатьЧека" Тогда
Результат = ПечатьЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры);
// Печать слип чека
ИначеЕсли Команда = "PrintText" ИЛИ Команда = "ПечатьТекста" Тогда
СтрокаТекста = ВходныеПараметры[0];
Результат = ПечатьТекста(ОбъектДрайвера, Параметры, ПараметрыПодключения,
СтрокаТекста, ВыходныеПараметры);
// Отменить открытый чек
ИначеЕсли Команда = "OpenCheck" ИЛИ Команда = "ОткрытьЧек" Тогда
ЧекВозврата = ВходныеПараметры[0];
ФискальныйЧек = ВходныеПараметры[1];
Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ЧекВозврата, ФискальныйЧек, ВыходныеПараметры);
// Отменить открытый чек
ИначеЕсли Команда = "CancelCheck" ИЛИ Команда = "ОтменитьЧек" Тогда
Результат = ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Печать чека внесения/выемки
ИначеЕсли Команда = "Encash" ИЛИ Команда = "Инкассация" Тогда
ТипИнкассации = ?(ВходныеПараметры.Свойство("ТипИнкассации"), ВходныеПараметры.ТипИнкассации, 0);
Сумма = ?(ВходныеПараметры.Свойство("Сумма"), ВходныеПараметры.Сумма, 0);
Результат = Инкассация(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипИнкассации, Сумма, ВыходныеПараметры);
ИначеЕсли Команда = "PrintBarCode" ИЛИ Команда = "ПечатьШтрихкода" Тогда
ТипШтрихКода = ВходныеПараметры[0];
ШтрихКод = ВходныеПараметры[1];
Результат = ПечатьШтрихкода(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипШтрихКода, ШтрихКод, ВыходныеПараметры);
// Открытие денежного ящика
ИначеЕсли Команда = "OpenCashDrawer" ИЛИ Команда = "ОткрытьДенежныйЯщик" Тогда
Результат = ОткрытьДенежныйЯщик(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Получение ширины строки в символах
ИначеЕсли Команда = "GetLineLength" ИЛИ Команда = "ПолучитьШиринуСтроки" Тогда
Результат = ПолучитьШиринуСтроки(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Печать переодического отчета по датам
ИначеЕсли Команда = "PrintPReportDate" ИЛИ Команда = "НапечататьПериодическийОтчетПоДатам" Тогда
Результат = НапечататьПериодическийОтчетПоДатам(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры);
// Печать периодического отчета по номерам
ИначеЕсли Команда = "PrintPReportNumber" ИЛИ Команда = "НапечататьПериодическийОтчетПоНомерам" Тогда
Результат = НапечататьПериодическийОтчетПоНомерам(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры);
// Печать нулевого чека
ИначеЕсли Команда = "PrintNullReceipt" ИЛИ Команда = "НапечататьНулевойЧек" Тогда
Результат = НапечататьНулевойЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Печать отчета о проданных товарах
ИначеЕсли Команда = "PrintSoldReport" ИЛИ Команда = "НапечататьОтчетОПроданныхТоварах" Тогда
Результат = НапечататьОтчетОПроданныхТоварах(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Вывод информации на дисплей
ИначеЕсли Команда = "DisplayText" ИЛИ Команда = "ВывестиИнформациюНаДисплейПокупателя" Тогда
Результат = ВывестиИнформациюНаДисплейПокупателя(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры);
// Очистка дисплея
ИначеЕсли Команда = "ClearText" ИЛИ Команда = "ОчиститьДисплейПокупателя" Тогда
Результат = ОчиститьДисплейПокупателя(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// Указанная команда не поддерживается данным драйвером
Иначе
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Команда ""%Команда%"" не поддерживается данным драйвером.';uk='Команда ""%Команда%"" не підтримується цим драйвером.'"));
ВыходныеПараметры[1] = СтрЗаменить(ВыходныеПараметры[1], "%Команда%", Команда);
Результат = Ложь;
//>
КонецЕсли;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// Процедуры и функции общие для работы с фискальными регистраторами
// Функция осуществляет открытие смены
//
Функция ОткрытьСмену(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
ВыходныеПараметры.Очистить();
ОписаниеОшибки = "";
Результат = РегистрацияКассира(объектДрайвера, Параметры);
Если НЕ Результат Тогда
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
Иначе
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Возврат Результат;
КонецФункции
// Осуществляет печать фискального чека
//
Функция ПечатьЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры)
//Возврат МенеджерОборудованияКлиентПереопределяемый.ПечатьЧека(UnisystemФискальныйРегистратор,
// ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры);
ОбщиеПараметры = ВходныеПараметры[2];
ТаблицаНоменклатуры = ВходныеПараметры[0];
ТаблицаОплат = ВходныеПараметры[1];
ТаблицаДопРеквизитов = Новый Массив;
ТаблицаДопРеквизитов.Добавить(Новый Массив);
//ТипРасчета = МенеджерОборудованияКлиентСервер.КодРасчетаДенежнымиСредствами(ВходныеПараметры.ТипРасчета);
ТипЧека = ОбщиеПараметры[0] = 1;
Результат = Истина;
// Открываем чек
Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения,
ТипЧека, Истина, ВыходныеПараметры);
// Печатаем строки чека
Если Результат Тогда
ОшибкаПриПечатиСтроки = Ложь;
// Печатаем строки чека
Для ИндексМассива = 0 По ТаблицаНоменклатуры.Количество() - 1 Цикл
Наименование = ТаблицаНоменклатуры[ИндексМассива][0].Значение;
Количество = ТаблицаНоменклатуры[ИндексМассива][5].Значение;
Цена = ТаблицаНоменклатуры[ИндексМассива][4].Значение;
ПроцентСкидки = ТаблицаНоменклатуры[ИндексМассива][8].Значение;
Сумма = ТаблицаНоменклатуры[ИндексМассива][9].Значение;
НомерСекции = ТаблицаНоменклатуры[ИндексМассива][3].Значение;
СтавкаНДС = ТаблицаНоменклатуры[ИндексМассива][12].Значение;
ТаблицаДопРеквизитов[0].Очистить();
ТаблицаДопРеквизитов[0].Добавить(ТаблицаНоменклатуры[ИндексМассива][17].Значение);
ТаблицаДопРеквизитов[0].Добавить(ТаблицаНоменклатуры[ИндексМассива][18].Значение);
ДопРеквизиты = МенеджерОборудованияВызовСервера.СформироватьТаблицуДопРеквизитов(ТаблицаДопРеквизитов);
Если НЕ НапечататьФискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения,
Наименование, Количество, Цена, ПроцентСкидки, Сумма,
НомерСекции, СтавкаНДС, ДопРеквизиты, ВыходныеПараметры) Тогда
ОшибкаПриПечатиСтроки = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ ОшибкаПриПечатиСтроки Тогда
// Закрываем чек
Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры, Истина);
Иначе
Результат = Ложь;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// Осуществляет печать текста
//
Функция ПечатьТекста(ОбъектДрайвера, Параметры, ПараметрыПодключения,
СтрокаТекста, ВыходныеПараметры)
Результат = Истина;
//
//// Открываем чек
//Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, Ложь, Ложь, ВыходныеПараметры);
//
//// Печатаем строки чека
//Если Результат Тогда
// Для НомерСтроки = 1 По СтрЧислоСтрок(СтрокаТекста) Цикл
// ВыделеннаяСтрока = СтрПолучитьСтроку(СтрокаТекста, НомерСтроки);
//
// Если (Найти(ВыделеннаяСтрока, "[отрезка]") > 0)
// Или (Найти(ВыделеннаяСтрока, "[cut]") > 0) Тогда
// ТаблицаОплат = Новый Массив();
// Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры, Ложь);
// Результат = ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, Ложь, Ложь, ВыходныеПараметры);
// Иначе
// Если НЕ НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения,
// ВыделеннаяСтрока, ВыходныеПараметры, Ложь) Тогда
// Прервать;
// КонецЕсли;
// КонецЕсли;
//
// КонецЦикла;
//КонецЕсли;
//
//// Закрываем чек
//Если Результат Тогда
// ТаблицаОплат = Новый Массив();
// Результат = ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры, Ложь);
//КонецЕсли;
Возврат Результат;
КонецФункции
// Функция осуществляет открытие нового чека
//
Функция ОткрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ЧекВозврата, ФискальныйЧек, ВыходныеПараметры) Экспорт
Результат = Истина;
НомерСмены = 0;
НомерЧека = 0;
Результат = РегистрацияКассира(объектДрайвера, Параметры);
Попытка
//--- порт закроется только после закрытия чека
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
стрПараметров = новый структура("открытьЧекПродажиВозврата", ?(ЧекВозврата, 1, 0));
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_receipt", стрПараметров);
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
Иначе
// Заполнение выходных параметров
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(НомерСмены);
ВыходныеПараметры.Добавить(НомерЧека);
ВыходныеПараметры.Добавить(0); // Номер документа
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.ОткрытьЧек>:';uk='Помилка виклику методу <ОбъектДрайвера.ОткрытьЧек>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет закрытие ранее открытого чека
//
Функция ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры, ФискальныйЧек = Истина) Экспорт
Результат = Истина;
СуммаНаличнойОплаты = 0;
СуммаБезналичнойОплаты = 0;
Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда
СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 1 Тогда
СуммаБезналичнойОплаты = СуммаБезналичнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 2 Тогда
СуммаБезналичнойОплаты = СуммаБезналичнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
Иначе
СуммаБезналичнойОплаты = СуммаБезналичнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
КонецЕсли;
КонецЦикла;
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port", Параметры);
Если СуммаНаличнойОплаты <> 0 И Результат Тогда
стрПараметров = новый структура("ТипОплаты,СуммаОплаты",0,СокрЛП(Формат(число(СуммаНаличнойОплаты),"ЧГ=0;ЧН=0")));
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"pay", стрПараметров);
КонецЕсли;
Если СуммаБезналичнойОплаты <> 0 И Результат Тогда
стрПараметров = новый структура("ТипОплаты,СуммаОплаты",2,СокрЛП(Формат(число(СуммаБезналичнойОплаты),"ЧГ=0;ЧН=0")));
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"pay", стрПараметров);
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
КонецЕсли
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.ЗакрытьЧек>:';uk='Помилка виклику методу <ОбъектДрайвера.ЗакрытьЧек>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет отмену ранее открытого чека.
//
Функция ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт
Результат = Истина;
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cancel_receipt");
Если Результат Тогда
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cut_paper");
КонецЕсли;
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.ОтменитьЧек>:';uk='Помилка виклику методу <ОбъектДрайвера.ОтменитьЧек>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет снятие отчета без гашения
//
Функция НапечататьОтчетБезГашения(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
РегистрацияКассира(объектДрайвера, Параметры);
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"execute_X_report");
//Если Результат Тогда
// //---- для того чтоб увидеть когда передавался в налоговую отчет
// стрПараметров = новый структура("айди,Двойка","id",2);
// Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"execute_report",стрПараметров);
// //--- команда распечатать после Х отчета данны об отправке в ДПС ---
// стрПараметров = новый структура("ТипОперации",3);
// ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"dps",стрПараметров);
// ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cut_paper");
//КонецЕсли;
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьОтчетБезГашения>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьОтчетБезГашения>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет снятие отчета с гашением
//
Функция НапечататьОтчетСГашением(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
РегистрацияКассира(объектДрайвера, Параметры);
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"execute_Z_report");
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьОтчетСГашением>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьОтчетСГашением>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет печать фискальной строки
//
Функция НапечататьФискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения,
Наименование, Количество, Цена, ПроцентСкидки, Сумма,
НомерСекции, СтавкаНДС, ДопРеквизиты, ВыходныеПараметры) Экспорт
Результат = Истина;
ТаблицаСоответствий = Новый Массив;
Отдел = "1";
КодТовара = ТекущаяДата()-НачалоДня(ТекущаяДата());
Если Параметры.Свойство("КодТовара") ТОгда
КодТовара = Параметры.КодТовара + 1;
КонецЕсли;
Параметры.Вставить("КодТовара",КодТовара);
//КодТовара = UnisystemФискальныйРегистраторВызовСервера.ПолучитьКодНоменклатурыПоНаименованию(Наименование) ;
Наименование = СтрЗаменить(Наименование,";"," ");
СуммоваяСкидка = Окр(Количество*Цена - Сумма, 2);
// вычисление значений Налоговой группы для продажи товара
НалоговаяГруппа = 0;
ДопРеквизиты = МенеджерОборудованияВызовСервера.ПолучитьТаблицуДопРеквизитов(ДопРеквизиты);
Параметры.Свойство("ТаблицаСоответствийНалоговыхГрупп", ТаблицаСоответствий);
Для каждого Строка из ТаблицаСоответствий Цикл
Если Строка[1] = ДопРеквизиты[0] И Строка[2] = ДопРеквизиты[1] Тогда
НалоговаяГруппа = Строка[0];
Прервать;
КонецЕсли;
КонецЦикла;
ПОПЫТКА
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
//---- продажа товара
стрПараметров = новый структура("КодТовара,НалСтав,ШтучВес,РазрЗапрПрод,РазрЗапрПодсчет,ОдинПродЗапрет,Отдел,Цена,Штрихкод,Наименование,КоличествоОстаток",
Формат(КодТовара,"ЧГ=0;"), НалоговаяГруппа,0,0,1,0,Отдел,0,0,Наименование,0);
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"add_plu",стрПараметров);
Если Результат Тогда
стрПараметров = новый структура("ДобавОтмена,ПродКодШтрихкод,ПродПоОткрытЦене,Количество,кодТовара,ЦенаТовара",
0,0,1,СокрЛП(Формат(число(Количество),"ЧГ=0;ЧН=0")),Формат(КодТовара,"ЧГ=0;"),СокрЛП(Формат(число(Цена),"ЧГ=0;ЧН=0")));
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"sale_plu",стрПараметров);
Если Результат И СуммоваяСкидка>0 Тогда
стрПараметров = новый структура("ТипОперации,ВидОперации,ЗнакОперации,ЗначениеСкидки",0,0,1,Формат(СуммоваяСкидка,"ЧГ=0;ЧН=0"));
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"discount_surcharge",стрПараметров);
КонецЕсли;
Если НЕ Результат Тогда
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cancel_receipt");
КонецЕсли;
КонецЕсли;
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ПолучитьОшибку(ОбъектДрайвера, ВыходныеПараметры[1]);
ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьФискСтроку>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьФискСтроку>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет печать нефискальной строки
//
Функция НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаТекста, ВыходныеПараметры, ФискальныйЧек = Ложь) Экспорт
Результат = Истина;
//Попытка
// Ответ = ПодключаемоеОборудованиеАртСофтФискальныйРегистраторИнтерфейсВК.НапечататьНефискСтроку(ОбъектДрайвера, СтрокаТекста, ФискальныйЧек);
// Если НЕ Ответ Тогда
// Результат = Ложь;
// ВыходныеПараметры.Очистить();
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ПодключаемоеОборудованиеАртСофтФискальныйРегистраторИнтерфейсВК.ПолучитьОшибку(ОбъектДрайвера, ВыходныеПараметры[1]);
// ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
// КонецЕсли;
//Исключение
// Результат = Ложь;
// ВыходныеПараметры.Очистить();
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьНефискСтроку>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьНефискСтроку>:'") + ОписаниеОшибки());
//КонецПопытки;
//
Возврат Результат;
КонецФункции
// Функция осуществляет внесение или выемку суммы
//
Функция Инкассация(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипИнкассации, Сумма, ВыходныеПараметры)
Результат = Истина;
РегистрацияКассира(объектДрайвера, Параметры);
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
стрПараметров = новый структура("ТипОплаты,ФлагЗаменыТекстаСообщения,ФлагКомментария,СлужебныйвносВынос,Сумма, Комментарий,СтрокаОписания",0,0,0,ТипИнкассации,СокрЛП(Формат(число(Сумма),"ЧГ=0;ЧН=0")),"");
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"in_out",стрПараметров);
Если Результат Тогда
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cut_paper");
КонецЕсли;
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьЧекВнесенияВыемки>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьЧекВнесенияВыемки>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет печать штрихкода
//
Функция ПечатьШтрихкода(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипШтрихКода, ШтрихКод, ВыходныеПараметры)
Результат = Истина;
//Попытка
// Ответ = ПодключаемоеОборудованиеАртСофтФискальныйРегистраторИнтерфейсВК.НапечататьШтрихКод(ОбъектДрайвера, ТипШтрихКода, ШтрихКод);
// Если НЕ Ответ Тогда
// Результат = Ложь;
// ВыходныеПараметры.Очистить();
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить("");
// ПодключаемоеОборудованиеАртСофтФискальныйРегистраторИнтерфейсВК.ПолучитьОшибку(ОбъектДрайвера, ВыходныеПараметры[1]);
// КонецЕсли;
//Исключение
// Результат = Ложь;
// ВыходныеПараметры.Очистить();
// ВыходныеПараметры.Добавить(999);
// ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьШтрихКод>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьШтрихКод>:'") + ОписаниеОшибки());
//КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет открытие денежного ящика
//
Функция ОткрытьДенежныйЯщик(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"Результат");
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.ОткрытьДенежныйЯщик>:';uk='Помилка виклику методу <ОбъектДрайвера.ОткрытьДенежныйЯщик>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция получает ширину строки в символах
//
Функция ПолучитьШиринуСтроки(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
ШиринаСтроки = 34;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(ШиринаСтроки);
Возврат Результат;
КонецФункции
// Функция осуществляет печать периодического отчёта по датам.
//
Функция НапечататьПериодическийОтчетПоДатам(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры)
Результат = Истина;
РегистрацияКассира(объектДрайвера, Параметры);
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
стрПараметров = новый структура("КодОтчета,ПарольСтКассира, ДатаНачала, ДатаОкончания",
"702","36963",
Формат(ВходныеПараметры[0], "ДФ=dd/MM/yyyy"),
Формат(ВходныеПараметры[1], "ДФ=dd/MM/yyyy"));
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"execute_report",стрПараметров);
Если Результат Тогда
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cut_paper");
КонецЕсли;
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьОтчетСГашением>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьОтчетСГашением>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет печать периодического отчёта по номерам дневных отчетов.
//
Функция НапечататьПериодическийОтчетПоНомерам(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры)
Результат = Истина;
РегистрацияКассира(объектДрайвера, Параметры);
Попытка
//Ответ = ПодключаемоеОборудованиеАртСофтФискальныйРегистраторИнтерфейсВК.НапечататьПериодическийОтчетПоНомерам(ОбъектДрайвера, ВходныеПараметры[0], ВходныеПараметры[1], Ложь);
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
стрПараметров = новый структура("КодОтчета,ПарольСтКассира, НачНомер, КонНомер",
"704","36963",
Формат(ВходныеПараметры[0], "ЧН=0; ЧГ=0"),
Формат(ВходныеПараметры[1], "ЧН=0; ЧГ=0"));
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"execute_report",стрПараметров);
Если Результат Тогда
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cut_paper");
КонецЕсли;
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ПолучитьОшибку(ОбъектДрайвера, ВыходныеПараметры[1]);
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьОтчетСГашением>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьОтчетСГашением>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет печать нулевого чека.
//
Функция НапечататьНулевойЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
РегистрацияКассира(объектДрайвера, Параметры);
Попытка
//Ответ = ПодключаемоеОборудованиеАртСофтФискальныйРегистраторИнтерфейсВК.НапечататьНулевойЧек(ОбъектДрайвера);
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"print_empty_receipt");
Если Результат Тогда
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cut_paper");
КонецЕсли;
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьОтчетСГашением>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьОтчетСГашением>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет печать отчёта о проданных товарах.
//
Функция НапечататьОтчетОПроданныхТоварах(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
РегистрацияКассира(объектДрайвера, Параметры);
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
стрПараметров = новый структура("КодОтчета,ПарольСтКассира,НачКод,КонКод",
"Z3","36963","1", "999999");
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"execute_report",стрПараметров);
Если Результат Тогда
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"cut_paper");
КонецЕсли;
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьОтчетСГашением>:';uk='Помилка виклику методу <ОбъектДрайвера.НапечататьОтчетСГашением>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет вывод информации на дисплей покупателя.
//
Функция ВывестиИнформациюНаДисплейПокупателя(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры)
Результат = Истина;
ДлинаПоля = ?(Параметры.Модель="501",16,20); // 16 для модели МІНІ-ФП54.01
СтрокаТекста = ВходныеПараметры[0];
//СтрокаСуммы = ?(ВходныеПараметры.Количество() >= 2, ВходныеПараметры[1], "0");
МассивСтрок = Новый Массив();
МассивСтрок.Добавить(МенеджерОборудованияКлиентСервер.ПостроитьПоле(СтрПолучитьСтроку(СтрокаТекста, 1), ДлинаПоля));
МассивСтрок.Добавить(МенеджерОборудованияКлиентСервер.ПостроитьПоле(СтрПолучитьСтроку(СтрокаТекста, 2), ДлинаПоля));
Попытка
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
стрПараметров = новый структура("Строка1,Строка2",МассивСтрок[0], МассивСтрок[1]);
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"indicate",стрПараметров);
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если НЕ Результат Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ПолучитьОшибку(ОбъектДрайвера, ВыходныеПараметры[1]);
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.ВывестиСтрокуНаДисплейПокупателя>:';uk='Помилка виклику методу <ОбъектДрайвера.ВывестиСтрокуНаДисплейПокупателя>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция осуществляет очистку дисплея покупателя.
//
Функция ОчиститьДисплейПокупателя(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"open_port",Параметры);
Если Результат Тогда
стрПараметров = новый структура("Строка1,Строка2","", "");
Результат = ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"indicate",стрПараметров);
КонецЕсли;
ВыполнитьМетодБиблиотеки(ОбъектДрайвера,"close_port");
Если Не Результат Тогда
Результат = Ложь;
ОбъектДрайвера.ПолучитьОшибку(ОбъектДрайвера.ОписаниеОшибки);
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(ОбъектДрайвера.ОписаниеОшибки);
КонецЕсли;
Возврат Результат;
КонецФункции
//////////////////////////////////////////////////////////////////////////////
// Процедуры и функции общие для всех типов драйверов
// Функция осуществляет тестирование устройства.
//
Функция ТестУстройства(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
РезультатТеста = "";
АктивированДемоРежим = "";
Попытка
Результат = ПодключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
Если Результат Тогда
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
Иначе
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
КонецЕсли;
ВыходныеПараметры.Добавить(РезультатТеста);
ВыходныеПараметры.Добавить(АктивированДемоРежим);
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.ТестУстройства>:';uk='Помилка виклику методу <ОбъектДрайвера.ТестУстройства>:'") + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция возвращает версию установленного драйвера
//
Функция ПолучитьВерсиюДрайвера(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
ВыходныеПараметры.Добавить(НСтр("ru='Установлен';uk='Встановлений'"));
ВыходныеПараметры.Добавить(НСтр("ru='Не определена';uk='Не визначена'"));
Попытка
ВыходныеПараметры[1] = "0.1";
Исключение
Результат = Ложь;
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция возвращает описание установленного драйвера
//
Функция ПолучитьОписаниеДрайвера(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
Результат = Истина;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(НСтр("ru='Установлен';uk='Встановлений'"));
ВыходныеПараметры.Добавить(НСтр("ru='Не определена';uk='Не визначена'"));
ВыходныеПараметры.Добавить(НСтр("ru='Не определено';uk='Не визначено'"));
ВыходныеПараметры.Добавить(НСтр("ru='Не определено';uk='Не визначено'"));
ВыходныеПараметры.Добавить(НСтр("ru='Не определено';uk='Не визначено'"));
ВыходныеПараметры.Добавить(Неопределено);
ВыходныеПараметры.Добавить(Неопределено);
ВыходныеПараметры.Добавить(Неопределено);
ВыходныеПараметры.Добавить(Неопределено);
ВыходныеПараметры.Добавить(Неопределено);
ВыходныеПараметры.Добавить(Неопределено);
НаименованиеДрайвера = "";
ОписаниеДрайвера = "";
ТипОборудования = "";
ИнтеграционнаяБиблиотека = "";
ОсновнойДрайверУстановлен = "";
РевизияИнтерфейса = "";
URLЗагрузкиДрайвера = "";
ПараметрыДрайвера = "";
ДополнительныеДействия = "";
Попытка
// Получаем версию драйвера
ВерсияДрайвера = "0.1";
ВыходныеПараметры[1] = ВерсияДрайвера;
// Получаем описание драйвера
ПолучитьОписание(ОбъектДрайвера,
НаименованиеДрайвера,
ОписаниеДрайвера,
ТипОборудования,
РевизияИнтерфейса,
ИнтеграционнаяБиблиотека,
ОсновнойДрайверУстановлен,
URLЗагрузкиДрайвера);
ВыходныеПараметры[2] = НаименованиеДрайвера;
ВыходныеПараметры[3] = ОписаниеДрайвера;
ВыходныеПараметры[4] = ТипОборудования;
ВыходныеПараметры[5] = РевизияИнтерфейса;
ВыходныеПараметры[6] = ИнтеграционнаяБиблиотека;
ВыходныеПараметры[7] = ОсновнойДрайверУстановлен;
ВыходныеПараметры[8] = URLЗагрузкиДрайвера;
// Получаем описание драйвера
ВыходныеПараметры[9] = "";
// Получаем дополнительные действия
ВыходныеПараметры[10] = "";
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Ошибка получения описания драйвера';uk='Помилка отримання опису драйвера'"));
КонецПопытки;
Возврат Результат;
КонецФункции
Функция ПолучитьОписание(ОбъектДрайвера, Наименование, Описание, ТипОборудования, РевизияИнтерфейса, ИнтеграционнаяБиблиотека, ОсновнойДрайверУстановлен, ПолучитьURLCкачивания) Экспорт
Наименование = "Unisystem: Универсальный драйвер фискальных регистраторов";
Описание = "OLE-сервер Unisystem Универсальный драйвер РРО – предназначена для работы прикладных программ с украинскими фискальными регистраторами в операционных системах MS Windows";
ТипОборудования = "ФискальныйРегистратор";
ИнтеграционнаяБиблиотека = "ecrT400.dll";
РевизияИнтерфейса = "1.0";
ОсновнойДрайверУстановлен = Истина;
ПолучитьURLCкачивания = "http://unisystem.ua/wp-content/uploads/2016/11/OLE_ecrT400_dll_v1_3_24_720.zip";
КонецФункции
Функция ПолучитьОшибку(ОбъектДрайвера, ОписаниеОшибки)
ОписаниеОшибки = "";
Возврат ОбъектДрайвера.get_last_error;
КонецФункции
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment