В интернете, на тематических форумах (в том числе и на форуме 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(); Исключение Сообщить("Невозможно подключить внешнюю компоненту. | Проверьте, что внешняя компонента корректно установлена и имеет ту же версию, | что и требуемая обработкой обслуживания."); КонецПопытки; Подключить(Объект); Возврат Результат; КонецФункции