При автоматизации кассовых узлов в конфигурации «1С:Розница 2.2» нередко возникает задача печати штрихкода непосредственно на чековой ленте. Это может быть штрихкод самого фискального документа для быстрого поиска возврата, код карты лояльности или купона на скидку. Разберем основные способы реализации этой задачи, выясним причины типичных ошибок и проанализируем тонкости работы с современными онлайн-кассами (ККТ с передачей данных) и устаревшими моделями фискальных регистраторов.
В зависимости от версии конфигурации и используемой версии Библиотеки подключаемого оборудования (БПО) печать чека может выполняться либо через современный универсальный формат передачи данных XML CheckPackage, либо через прямой построчный вызов низкоуровневых методов драйвера ККТ.
В типовой конфигурации «1С:Розница» печать штрихкодов чаще всего не требует доработки программного кода. Решим задачу с помощью стандартных средств конфигурации:
EAN13, Code128 или QR) и реквизит-источник данных (номер чека, дисконтную карту и т. д.).При пробитии чека подсистема БПО автоматически сформирует правильную структуру пакета и передаст ее сертифицированному драйверу ККТ для печати графических полос штрихкода.
Если чек формируется программно при доработке конфигурации, правильным и современным подходом является передача структуры фискального и нефискального документа в виде XML-пакета стандартизированного формата БПО. Рассмотрим пример XML-структуры, в которую включен узел печати штрихкода:
<CheckPackage>
<Parameters PaymentType="1" TaxVariant="0"/>
<Positions>
<FiscalString Name="Товар 1" Quantity="1" PriceWithDiscount="100.00" Amount="100.00" Department="1" Tax="20"/>
</Positions>
<Payments Cash="100.00" ElectronicPayment="0.00"/>
<NonFiscal>
<Barcode Value="4601234567890" BarcodeType="EAN13" Height="100" Width="2" PrintText="true" Alignment="1"/>
</NonFiscal>
</CheckPackage>
Разберем основные атрибуты тега Barcode:
Value — строковое значение штрихкода. Обратите внимание: для типа EAN13 строка обязана содержать ровно 13 цифр с корректным контрольным разрядом.BarcodeType — тип штрихкода (EAN13, CODE39, CODE128, QR, PDF417).Height — высота штрихкода в точках термоголовки.Width — толщина штрихов (коэффициент масштабирования).PrintText — признак необходимости печати читаемого текста под полосами штрихкода (true или false).Alignment — выравнивание штрихкода по ширине ленты (0 — по левому краю, 1 — по центру, 2 — по правому краю).Подготовленный XML-пакет передается в метод драйвера СформироватьЧек (или ProcessCheck), после чего драйвер ККТ самостоятельно выполняет отрисовку штрихкода.
Если мы работаем со старыми релизами конфигурации или узкоспециализированным оборудованием, где не поддерживается работа через XML-пакеты, можно обратиться к низкоуровневым методам объекта драйвера. Посмотрим на пример вызова функции экспорта:
Функция ПечатьШтрихкода(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипШтрихКода, ШтрихКод, ВыходныеПараметры) Экспорт
Результат = Истина;
Попытка
Ответ = ОбъектДрайвера.НапечататьШтрихКод(ПараметрыПодключения.ИДУстройства, ТипШтрихКода, ШтрихКод);
Если НЕ Ответ Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьШтрихКод>.'") + Символы.ПС + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции
Если вместо графического штрихкода касса печатает обычный текст или возвращает ошибку, проанализируем наиболее частые причины:
EAN13 передать 12 цифр вместо 13 (или ошибиться в расчете контрольной суммы), прошивка ККТ отклонит команду генерации штрихкода или напечатает переданные цифры обычной строкой."EAN13". Передача строкового значения в метод PrintBarCode приводит к возврату значения Неопределено или ошибке вызова.Code128 с большим числом символов) могут физически не помещаться по ширине узкой ленты 57 мм. В таком случае рекомендуется использовать двумерные коды (QR), которые обладают высокой плотностью и гарантированно считываются 2D-сканерами.