В интернете, на тематических форумах (в том числе и на форуме Infostart) эта проблема обсуждалась, и программисты приводят свои наработки.
К приведенным кодам (по крайней мере, касающихся драйвера Атола) у меня одно нарекание : выложенного ЦЕЛИКОМ я не увидел не одного. В общем, алгоритм верный приведен, но дьявол кроется в деталях.
Итак, имеем:
- последние драйвера Атола (в моем случае это были DTO_8_09_00_00_Full);
- фискальный регистратор FPrint 11 ПТК (скорее всего, подойдет и к другим моделям, лишь бы умели печатать QR-код);
- необходимость печатать QR на чеке с алкогольной продукцией;
- УТ 10.3.36 (37).
Начать лучше с тестовой обработки, которую мы запустим в УТ 10.3 (не в интерфейсе кассира, чтобы устройство FPrint не было занято).
Обработка на "обычных" формах, с кнопкой Выполнить, весь код на форме (ничего в модуле объекта нет).
Перем Драйвер,мОшибкаЗагрузкиДрайвера;
Процедура ИнициализацияФР()
Попытка
ПрогИД = "AddIn.FPrnM8";
//ПрогИД = "AddIn.FPrnM6";
ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый (ПрогИД);
сообщить(прогид+ " компонента создана");
Исключение
Сообщить("Невозможно подключить внешнюю компоненту.
| Проверьте, что внешняя компонента корректно установлена и имеет ту же версию,
| что и требуемая обработкой обслуживания.");
КонецПопытки;
КонецПроцедуры
Процедура ПриОткрытии()
ИнициализацияФР();
Отрезать = 1;
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка)
Драйвер.AddDevice();
Драйвер.PortNumber = 3;//Объект.Параметры.Порт;
Драйвер.BaudRate = 3;//Объект.Параметры.Скорость;
// параметры выше (порт, скорость) можно вычитать в файле логов
// FprnM1C.log или FprnM1C82.log, в папке C:\Users\user\AppData\Roaming\ATOL\DRIVERS
// например - сначала сделав тест устройства из 1С (появятся записи в логах, вы увидите все значения полей
// в последних строках файла логов )
Драйвер.DeviceEnabled = 1;
Драйвер.Password = 30;//Объект.Параметры.ПарольПользователя;
Драйвер.Mode = 1;
Драйвер.SetMode();
Драйвер.BeginDocument();
Стр = "http://check.egais.ru/?id=f0f6aea9-9cb6-4767-84f5-9a8a93fb8600&dt=0505160000&cn=020000190447";
Драйвер.currentdeviceindex=0;
Драйвер.Barcode = стр;
Драйвер.BarcodeType = 84;
Драйвер.Height = 50;
Драйвер.AutoSize = "True";
Драйвер.Alignment = 1;
Драйвер.Scale = 300;
//глФР.BarcodeControlCode = "True";
Драйвер.BarcodeControlCode = "False";
Драйвер.PrintBarcodeText = "False";
Драйвер.PrintPurpose = 1;
Драйвер.PrintBarcode();
Драйвер.EndDocument();
Драйвер.DeviceEnabled = 0; //на последние строки драйвер атола ругался на
Драйвер.DeleteDevice(); //последовательность команд (но только в логах, юзер этого не видит)
сообщить(стр + " с ошибкой нигде не выпало, конец печати");
КонецПроцедуры
Если картинка у нас получилась - можно внести ряд изменений в конфигурацию, чтобы печать QR происходила в каждом закрытом чеке с алкоголем.
!!! ВАЖНО
Если печати не произошло - возможно, ваша модель ФР печатает QR только "как картинку", для этого используется команда
Объект.PrintBitmapFromFile();
Кроме того,можете попробовать обновить драйвера АТОЛ до самых новых: они обещали "научить" драйвер распознавать, как передать QR на печать (то есть преобразовывать в bitmap самостоятельно)
В Общем модуле "ИнтеграцияЕГАИСКлиент" (в 10.3.36 он назывался "ИнтеграцияЕГАИСКлиентПереопределяемый") правим фунцию Функция ПечатьСлипЧека
Результат.РезультатПечатиЧека = ПолучитьСерверТО().ПечатьТекста(ИдентификаторУстройства, МассивСтрокСлипЧека, ШиринаСтроки); // после этой строки
АдресЧекаДляПечати=СокрЛП(ПараметрыЧекаЕГАИС.Адрес);//добавляем эту
//!!! начиная с 10.3.37.5 используется не "ПараметрыЧекаЕГАИС.Адрес", а "ПараметрыЧекаЕГАИС.АдресЧека"
Результат.РезультатПечатиЧека = ПолучитьСерверТО().ПечатьКубика(ИдентификаторУстройства, АдресЧекаДляПечати, ШиринаСтроки);//и эту
В обработке ТОСервер добавляем:
Функция ПечатьКубика(Идентификатор, АдресЧекаДляПечати, ШиринаЧека) Экспорт
Обработка = Неопределено;
Объект = Неопределено;
Результат = ПолучитьОбъектДрайвера(Идентификатор, Обработка, Объект);
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Результат = Обработка.НапечататьКубик(Объект, АдресЧекаДляПечати, ШиринаЧека);
мОписаниеОшибки = Объект.ОписаниеОшибки;
Иначе
мОписаниеОшибки = ПолучитьТекстОшибкиПодключенияТО("ФР");
КонецЕсли;
Возврат Результат;
КонецФункции
Во внешней обработке ATOLFiscalPrinters_v2.epf добавляем
Функция НапечататьКубик(Объект, АдресЧека, Ширина) Экспорт
Отключить(Объект);
Результат = мНетОшибки;
НомерЧека = 0;
НомерСмены = 0;
Попытка
ПрогИД = "AddIn.FPrnM8";//ПрогИД = "AddIn.FPrnM6";
ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый (ПрогИД);
//сообщить(прогид+ " компонента создана");
Драйвер.AddDevice();
Драйвер.PortNumber = Объект.Параметры.Порт;
Драйвер.BaudRate = Объект.Параметры.Скорость;
Драйвер.DeviceEnabled = 1;
Драйвер.Password = 30;//Объект.Параметры.ПарольПользователя;
Драйвер.Mode = 1;
Драйвер.SetMode();
Драйвер.BeginDocument();
Драйвер.Barcode = АдресЧека;
Драйвер.BarcodeType = 84;
Драйвер.Height = 50;
Драйвер.AutoSize = "True";
Драйвер.Alignment = 1;
Драйвер.Scale = 300;
Драйвер.BarcodeControlCode = "False";
Драйвер.PrintBarcodeText = "False";
Драйвер.PrintPurpose = 1;
Драйвер.PrintBarcode();
Драйвер.EndDocument();
Драйвер.DeviceEnabled = 0;
Драйвер.DeleteDevice();
Исключение
Сообщить("Невозможно подключить внешнюю компоненту.
| Проверьте, что внешняя компонента корректно установлена и имеет ту же версию,
| что и требуемая обработкой обслуживания.");
КонецПопытки;
Подключить(Объект);
Возврат Результат;
КонецФункции
Вступайте в нашу телеграмм-группу Инфостарт