При интеграции с системой ЕГАИС в конфигурациях «1С:Розница» (редакции 1.0 и 2.2) и «1С:Управление торговлей 10.3» часто возникает ситуация, когда вместо графического двухмерного штрихкода (QR-кода) на фискальном чеке или слип-чеке печатается обычная текстовая ссылка вида http://check.egais.ru.... Проанализируем причины такого поведения оборудования и подробно разберем все способы настройки печати двухмерных кодов для устройств Штрих-М и АТОЛ.
Выделим ключевые факторы, из-за которых QR-код не выводится на печать:
ShtrihMFiscalPrinters_v2.epf или ATOLFiscalPrinters_v2.epf) обращаются к устаревшим программным идентификаторам (ProgID AddIn.DrvFR1C или AddIn.ATOL_KKM_1C), которые не поддерживают функции передачи и генерации двумерных штрихкодов.Для конфигураций на обычных формах (Розница 1.0, УТ 10.3, КА 1.1) основным методом решения является адаптация типовой обработки обслуживания под обновленную библиотеку smDrvFR1CLib.dll.
Разберем изменения по шагам:
smDrvFR1CLib.dll в операционной системе.
Функция СоздатьОбъектДрайвера(Объект, Модель, Параметры) Экспорт
Результат = мНетОшибки;
Попытка
ПрогИД = "AddIn.SMDrvFR1C";
ПодключитьВнешнююКомпоненту(ПрогИД);
Объект.Драйвер = Новый (ПрогИД);
Исключение
Результат = мОшибкаЗагрузкиДрайвера;
ОписаниеОшибки = "Невозможно подключить внешнюю компоненту AddIn.SMDrvFR1C. "
+ "Проверьте корректность установки и регистрации библиотеки.";
Возврат Результат;
КонецПопытки;
Возврат Результат;
КонецФункции
Обратим внимание на передаваемые параметры подключения. В новой компоненте AddIn.SMDrvFR1C изменились наименования свойств:
Baudrate, а не Speed (передается числовой код скорости или явное значение, согласно спецификации).BarcodeHeight, BarcoceFirstLine). Без их инициализации команда генерации QR-кода может игнорироваться устройством.Посмотрим на пример правильной процедуры подключения:
Функция Подключить(Объект) Экспорт
Результат = мНетОшибки;
Объект.Драйвер.УстановитьПараметр("ConnectionType", 0);
Объект.Драйвер.УстановитьПараметр("ProtocolType", 0);
Объект.Драйвер.УстановитьПараметр("Port", Объект.Параметры.Порт);
Объект.Драйвер.УстановитьПараметр("Baudrate", 115200);
Объект.Драйвер.УстановитьПараметр("UserPassword", "1");
Объект.Драйвер.УстановитьПараметр("AdminPassword", "30");
Объект.Драйвер.УстановитьПараметр("TimeOut", 100);
Объект.Драйвер.УстановитьПараметр("BarcodeHeight", 3);
Объект.Драйвер.УстановитьПараметр("BarcoceFirstLine", 1);
Если Не Объект.Драйвер.Подключить(Объект.ИДУстройства) Тогда
КодОшибки = Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Результат = мОшибкаНеизвестно;
КонецЕсли;
Возврат Результат;
КонецФункции
Также проанализируем изменения в вызовах методов новой компоненты:
ПроверитьСостояниеПечати() и ПродолжитьПечать() удалены из спецификации SMDrvFR1C. Их вызовы в обработке необходимо исключить или заключить в безопасный блок.ЗакрытьЧек() получил дополнительный пятый параметр (тип оплаты/округление): Объект.Драйвер.ЗакрытьЧек(Объект.ИДУстройства, СуммаНал, СуммаБезнал, 0, 0).ОткрытьСмену() теперь принимает идентификатор устройства: Объект.Драйвер.ОткрытьСмену(Объект.ИДУстройства).Если нет возможности полностью переписывать обработку торгового оборудования, можно вызывать печать двухмерного кода напрямую через базовый COM-объект драйвера Штрих-М (AddIn.DrvFR) с использованием функции LoadAndPrint2DBarcode.
Рассмотрим пример кода:
Процедура НапечататьQRШтрихМ(СсылкаЕГАИС)
Попытка
ПрогИД = "AddIn.DrvFR";
ПодключитьВнешнююКомпоненту(ПрогИД);
ДрайверШтрих = Новый (ПрогИД);
Исключение
Сообщить("Ошибка загрузки AddIn.DrvFR: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
ДрайверШтрих.Password = 30; // Пароль системного администратора
ДрайверШтрих.BarCode = СокрЛП(СсылкаЕГАИС);
ДрайверШтрих.BarcodeType = 3; // Тип штрихкода: QR-код
// Аппаратная загрузка и печать 2D штрихкода
ДрайверШтрих.LoadAndPrint2DBarcode();
КонецПроцедуры
Для фискальных регистраторов АТОЛ (серии FPrint / ПТК) в конфигурациях на обычных формах встроенная компонента AddIn.ATOL_KKM_1C не умеет работать с двухмерными штрихкодами. Решением является прямое обращение к объекту AddIn.FPrnM8 (драйвер АТОЛ ККМ v.8.9+).
Разберем процедуру печати слип-чека с встроенным QR-кодом для устройств АТОЛ:
Функция НапечататьСтрокиFPrint(Объект, МассивСтрок) Экспорт
Результат = мНетОшибки;
Попытка
ПрогИДFPrnM8 = "AddIn.FPrnM8";
ПодключитьВнешнююКомпоненту(ПрогИДFPrnM8);
ДрайверFPrnM8 = Новый (ПрогИДFPrnM8);
Исключение
Результат = мОшибкаЗагрузкиДрайвера;
Возврат Результат;
КонецПопытки;
ДрайверFPrnM8.AddDevice();
ДрайверFPrnM8.PortNumber = Объект.Параметры.Порт;
ДрайверFPrnM8.BaudRate = Объект.Параметры.Скорость;
ДрайверFPrnM8.DeviceEnabled = 1;
ДрайверFPrnM8.Password = Объект.Параметры.ПарольПользователя;
ДрайверFPrnM8.Mode = 1;
ДрайверFPrnM8.SetMode();
ДрайверFPrnM8.SlipDocCharLineLength = 40;
ДрайверFPrnM8.SlipDocTopMargin = 2;
ДрайверFPrnM8.SlipDocLeftMargin = 1;
ДрайверFPrnM8.SlipDocOrientation = 0;
ДрайверFPrnM8.BeginDocument();
Для Каждого СтрокаТекста Из МассивСтрок Цикл
// Проверяем наличие URL-ссылки ЕГАИС для вывода QR-кода
Если Врег(Лев(СокрЛП(СтрокаТекста), 4)) = "HTTP" Тогда
ДрайверFPrnM8.Barcode = СтрокаТекста;
ДрайверFPrnM8.BarcodeType = 84; // QR-код
ДрайверFPrnM8.Height = 50;
ДрайверFPrnM8.AutoSize = "True";
ДрайверFPrnM8.Alignment = 1; // По центру
ДрайверFPrnM8.Scale = 300;
ДрайверFPrnM8.BarcodeControlCode = "False";
ДрайверFPrnM8.PrintBarcodeText = "False";
ДрайверFPrnM8.PrintPurpose = 1;
ДрайверFPrnM8.PrintBarcode();
КонецЕсли;
ДрайверFPrnM8.Caption = СтрокаТекста;
ДрайверFPrnM8.TextWrap = 2;
ДрайверFPrnM8.PrintString();
КонецЦикла;
ДрайверFPrnM8.EndDocument();
ДрайверFPrnM8.DeviceEnabled = 0;
ДрайверFPrnM8.DeleteDevice();
Возврат Результат;
КонецФункции
При совместной работе двух фискальных регистраторов на одном ПК (например, один ФР для алкогольной продукции на ООО, второй — для немаркированного товара на ИП) часто возникает ошибка направления всех чеков на один аппарат.
Разберем причины и способы устранения:
Отключить() / DeviceEnabled = 0) и заново передавать порт и скорость для целевого устройства.AddIn.DrvFR1C), а алкогольного фискального регистратора — через обновленную AddIn.SMDrvFR1C.