gifts2017

Печать QR из УТ 10.3 Fprint ЕГАИС

Опубликовал Erutan Revol (erutan) в раздел Оборудование - Фискальный регистратор

На чековой ленте теперь необходимо печатать QR со ссылкой на чек в системе ЕГАИС. Стандартная обработка работы с фискальными регистраторами АТОЛ в УТ 10.3 этого делать не умеет.
Не умеет - научим, не захочет - заставим.
В статье приведен весь исходный код.

 

В интернете, на тематических форумах (в том числе и на форуме Infostart) эта проблема обсуждалась, и программисты приводят свои наработки.

К приведенным кодам (по крайней мере, касающихся драйвера Атола) у меня одно нарекание : выложенного ЦЕЛИКОМ я не увидел не одного. В общем, алгоритм верный приведен, но дьявол кроется в деталях.

Итак, имеем:

  1. последние драйвера Атола (в моем случае это были DTO_8_09_00_00_Full);
  2. фискальный регистратор FPrint 11 ПТК (скорее всего, подойдет и к другим моделям, лишь бы умели печатать QR-код);
  3. необходимость печатать QR на чеке с алкогольной продукцией;
  4. УТ 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 он назывался "ИнтеграцияЕГАИСКлиентПереопределяемый") правим фунцию Функция ПечатьСлипЧека

        Результат.РезультатПечатиЧека = ПолучитьСерверТО().ПечатьТекста(ИдентификаторУстройства, МассивСтрокСлипЧека, ШиринаСтроки); // после этой строки
        АдресЧекаДляПечати=СокрЛП(ПараметрыЧекаЕГАИС.Адрес);//добавляем эту
        Результат.РезультатПечатиЧека = ПолучитьСерверТО().ПечатьКубика(ИдентификаторУстройства, АдресЧекаДляПечати, ШиринаСтроки);//и эту

В обработке ТОСервер добавляем:

  Функция ПечатьКубика(Идентификатор, АдресЧекаДляПечати, ШиринаЧека) Экспорт
                Обработка = Неопределено;
                Объект    = Неопределено;
                Результат = ПолучитьОбъектДрайвера(Идентификатор, Обработка, Объект);
                Если НЕ ЗначениеЗаполнено(Результат) Тогда
                               Результат = Обработка.НапечататьКубик(Объект, АдресЧекаДляПечати, ШиринаЧека);
                               мОписаниеОшибки = Объект.ОписаниеОшибки;
                Иначе
                               мОписаниеОшибки = ПолучитьТекстОшибкиПодключенияТО("ФР");
                КонецЕсли;
                Возврат Результат;
КонецФункции
 

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Тест печати QR (внешняя обработка)
.epf 7,53Kb
19.06.16
12
.epf 1 7,53Kb 12 Скачать
Доработанная ATOLFiscalPrinters_v2
.epf 26,17Kb
19.06.16
29
.epf 2 26,17Kb 29 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Добрицкий (doba1) 28.06.16 16:16
По поводу скорости обмена.
Логи не нашел, зато вот это нашел:

1 – 1200 бод;
2 – 2400 бод;
3 – 4800 бод;
4 – 9600 бод;
5 – 14400 бод;
6 – 38400 бод;
7 – 57600 бод;
8 – 115200 бод;
9 – 19200 бод
2. Алексей Добрицкий (doba1) 01.07.16 11:55
Не подскажите, почему после запуска тестовой обработки, не освобождается COM-порт?
Приходится перезапускать платформу.
3. Erutan Revol (erutan) 02.07.16 08:21
(2) doba1,
могу лишь предположить.
В тестовой обработке объект отключается как-то так
Драйвер.DeviceEnabled = 0; //на последние строки драйвер атола ругался на
Драйвер.DeleteDevice(); //последовательность команд (но только в логах, юзер этого не видит)

(хотя, вообще-то, в "боевой" тоже).
Что-то Атолу не нравится, он об этом кричит в логи.
Честно - я его не понял (и не стал углубляться, так как тестовая пригодится ну 1 раз на 1 ПК).

Если вчитаться в логи - наверное, можно понять, что именно не так.
4. Борис Попов (bgp) 05.07.16 10:12
Картинка тусклая получается и вылезает медленно очень
Что с этим можно сделать?
5. Erutan Revol (erutan) 05.07.16 14:04
(4) bgp, версия драйвера, модель фр?
Единственное, ято мы можем поменять - скорость обмена с фр, вплоть до 115200
Хотя вроде скорость печати тоже где-то настраивалась; возможно, из теста драйвера.

Далее. Есть ряд моделей, как раз ПТК - у них скорость печати кубика занимает 1-2 секунды.
Если модель печатает как графику - это уже 6-10 секунд.
6. Erutan Revol (erutan) 05.07.16 14:05
(4) bgp, в общем, покрутить настройки можно "напрячь" цто, но если у вас не птк - все равно будет медленней, чем птк
7. Борис Попов (bgp) 05.07.16 21:11
Модель FPrint 11 ПТК, подключен по ip, средствами драйвера 8.10. Чтобы обработка заработала по ip добавил параметр Драйвер.MachineName = "ip:port"
через тест драйвера печатает QR код быстро и ярко, через тестовую обработку соответственно медленно и тускло.
Ставил параметр Драйвер.BaudRate = 18, вроде в логах это соответствует скорости 115200, но не помогает.
Завтра буду пробовать на модели Fprint 5200K.
8. Erutan Revol (erutan) 05.07.16 22:46
(7) bgp, воу! По ip не подключал - втыкал напрямую.
Узнаете что-то - напишите.

Скорость надо менять не в самой обработке, а на фискальнике. В обработке мы по идее просто выбираем то, на какой устройство работает (читай - на какой скорости обнаружилось в тесте драйвера).
Из теста драйвера ккм надо лезть в свойства, полагаю.

Еще можно глянуть документацию на fprint11 - на сайте атола есть
9. Борис Попов (bgp) 06.07.16 09:24
обработка на модели 5200К не выводит QR совсем, хотя отрабатывает без ошибок.
через тест драйвера QR на данной модели печатается около 3 сек.
10. Борис Попов (bgp) 06.07.16 12:16
Печатает 5200К, в первой попытке неверно порт в параметрах указал. Скорость печати из обработки через подключение по ip совпадает со скоростью печати через драйвер, т.е. 3,5 сек. И картинка нормальная.
Что делать с fprint11 неясно..
Драйвер АТОЛ версии 8.10.
11. Erutan Revol (erutan) 06.07.16 22:45
(10) bgp, можете попробовать задать вопрос в Атол.
делается через партнеров, поставляющих вам торговое оборудование. В принципе и через фирму-франчайзи 1с, но не каждую.
Еще можно на атоловском форуме зарегистрироваться и попробовать выяснить там. Это может быть просто "косяком" ip-версии драйвера, или есть какая-то тонкость.
12. Erutan Revol (erutan) 06.07.16 22:51
(7) bgp, кстати, еще можно попробовать вчитаться в атоловские логи теста драйера и сравнить их с тем, что появится после попытки печатать из 1с.
В чем-то будет разница
13. Борис Попов (bgp) 07.07.16 12:44
Заработал у меня fprint11. В обработку обслуживания добавил Ваш код, с некоторыми изменениями, т.к. у меня обработка обслуживания ТО изначально работает с модулем AddIn.FPrnM8, то мне не нужно заново создавать объект драйвера, использую уже созданный.
В итоге QR код добавляется в текущий чек без проблем, и быстро выходит и ярко печатается.
Функция НапечататьКубик(Объект, АдресЧека, Ширина) Экспорт
               
                Результат = мНетОшибки;
                НомерЧека = 0;
                НомерСмены = 0;
                Попытка
		               Объект.Драйвер.Barcode = АдресЧека;
                               Объект.Драйвер.BarcodeType = 84;
                               Объект.Драйвер.Height = 50;   
                               Объект.Драйвер.AutoSize = "True";
                               Объект.Драйвер.Alignment = 1;
                               Объект.Драйвер.Scale = 300;                              
                               Объект.Драйвер.BarcodeControlCode = "False";
                               Объект.Драйвер.PrintBarcodeText = "False";
                               Объект.Драйвер.PrintPurpose = 1;
                               Объект.Драйвер.PrintBarcode();
              Исключение
							   //Сообщить("Невозможно подключить внешнюю компоненту.
							   //| Проверьте, что внешняя компонента корректно установлена и имеет ту же версию,
							   //| что и требуемая обработкой обслуживания.");
                КонецПопытки;
                Возврат Результат;
КонецФункции
...Показать Скрыть


А тестовая обработка по прежнему печатает QR тускло и медленно. Возможно все дело в команде
Объект.Драйвер.TestMode = Ложь;, но проверить пока нет возможности.
14. Эльчин Гасанов (Flok) 11.07.16 01:11
Большое спасибо . Все работает как в УТ 10.3 , так и в Розница 1.
Проверял на Fprint 5200.
Ставил драйвера ТО 8.10.
Обработку использовал 6.32 с users.v8.1c.ru.
QR печатает графикой - примерно 2-3 секунды.
четкость нормальная сканер читает.

15. lex lex (lexme) 17.08.16 08:01
в тестовой обработке ошибка значение Драйвер.AddDevice(); не является значением объектного типа
в релизе 10.3.37.2 Результат.РезультатПечатиЧека = МенеджерРаботыСОборудованием().ПечатьТекста(ИдентификаторУстройства, МассивСтрокСлипЧека, ШиринаСтроки); вместо ПОлучитьСерверТО
16. Erutan Revol (erutan) 17.08.16 12:26
(15) lexme,
1) про не является объектного типа - очень странно.может, драйвер установился некорректно, или устройство занято (например, тестом драйвера или самой 1с-кой в интерфейсе кассира?
2) вы говорите о том, что изменилась строка вызова то, и все? Ну то есть я ее не предлагаю править, я лишь написал, что мы после нее вставляем вызов печати qr
17. lex lex (lexme) 22.08.16 01:08
после доработки по вашей статье, ничего не происходит...то-есть qr не печатается релиз ут 10.3.37.2 фискальник fprint 22 ПТК.
18. Erutan Revol (erutan) 22.08.16 07:07
(17) lexme, 1)Печатается ли из тестовой обработки?
2) Версия драйвера, и что полезного в атоловских логах есть?
--
если что, сейчас на 37.2 и торгуем, только FPrint-11ПТК, а не 12
19. lex lex (lexme) 22.08.16 14:53
тестовая не запускается, ошибка значение Драйвер.AddDevice(); не является значением объектного типа ,в логах ничего полезного, драйвер 8.10.2
20. Erutan Revol (erutan) 22.08.16 22:51
(19) lexme,
Не стоит ли несколько версий драйвера, и нормально ли зарегистрировались все библиотеки? Что-то похожее у меня было, когда сначала работали на одной версии драйвера, потом обновили, но винда где-то хранила часть старых файлов dll И теста драйвера, удалял рукамм, ставил заново.
Часть библиотек атол копирует куда-то близко к 1с, в appdata что ли.

В общем, попробуйте перерегистровать руками и подложить 1с-ке, куда ей хочется.
Старые лучше начисто удалить.
--
Попробуйте выполнить тест драйвера из интерфейса пользователя(но не кассира) в ут - так мы заодно увидим параметры в логах, да и должны убедиться в работе нормальной драйвера(версию напишет?). Лучше это делать после перезагрузки, чтобы объект ккм был точно свободен (и рядом не должна быть "свернута" другая ут-шка с подключенным ккм, конечно).
--
Подключено по com / usb?
--

1)Еще я бы сделал следующее. Dll , в которос лежит addin нас интересующий - вскрыл (где-то на инфостарте была инструкция, как прицепить его к проекту vba (в лист эксель короче) и посмотреть содержимое) - не поменялось ли им объекта.
2)попробовать на другой машине развернуть файловую копию ут, может даже прошлого релиза, туда же прицепить фискальник и поставить, например, одну из предыдущих версий драйвера.
21. lex lex (lexme) 24.08.16 08:45
POSы новые, даже муха не сидела ещё, старые версии драйверов и не устанавливались собственно, библиотеки перерегистрировал, в обработке ТОСервер в конец модуля добавлять функцию? или не имеет значения куда?(20) erutan,
22. Erutan Revol (erutan) 25.08.16 07:32
>> в обработке ТОСервер в конец модуля добавлять функцию?
(21) lexme, не должно играть роли.

Но, в общем, очень странная ситуация.
----
Можете попробовать почитать описание драйвераККМ от Атола, где-то у них на сайте валяется.
Там, в конце файла pdf, есть пример подключения к 1С. Может быть, в последних версиях драйвера что-то изменилось, и нужна какая-то дополнительная команда?
----
Еще, если Вы вдруг ставили драйвер _только_ккм_ - попробуйте установить весь комплект, не снимая галочки. Для 1с-ки драйвера регистрируются какой-то отдельной "галочкой", насколько я помню.
23. Павел Цуленков (vcspektr) 04.09.16 14:39
Кто-нибудь может поделиться готовым cf-ником от розницы 1,0,9,16, я замучался уже, ничего не выходит....
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа