В процессе автоматизации розничной торговли часто возникает необходимость вывода штрихкода непосредственно на кассовый чек. Это может потребоваться для реализации механики «отложенных чеков», когда покупатель получает пречек в одном отделе и оплачивает его на общей кассе, или для быстрой идентификации чека при возврате товара. В данной статье мы детально разберем, как реализовать печать штрихкода (или, как говорят, «полосочек») на устройствах серии «Штрих-М» (например, Штрих-Light-100 или АСПД), используя механизмы платформы 1С:Предприятие.
Самый наглядный способ, который подходит для конфигураций, использующих макеты для формирования чека. Рассмотрим алгоритм действий:
Штрих-код.Штрихкод вместе с установленными свойствами.Важный нюанс: этот метод работает корректно только в том случае, если принтер чеков настроен на печать в графическом режиме. Проанализируем ситуацию: если ККМ работает в фискальном режиме и использует стандартные протоколы обмена, она может игнорировать графику из 1С, печатая только текстовые строки, передаваемые драйвером.
Если графический объект не пропечатывается или замедляет работу кассы, воспользуемся методом подмены шрифта. Разберем этот вариант подробнее:
Существуют специальные шрифты (например, EAN13.ttf или Code128.ttf), которые отображают цифры и буквы в виде соответствующих штрихов. Мы можем добавить в макет чека текстовое поле, назначить ему такой шрифт и передать туда сформированную строку штрихкода. Однако помните, что для корректного считывания сканером, строка должна быть сформирована по правилам конкретного типа штрихкода (с контрольными символами и стартовыми/стоповыми знаками).
Этот способ является наиболее профессиональным и надежным, так как он задействует аппаратные мощности самого принтера. Устройства Штрих-М обладают встроенными алгоритмами генерации штрихкодов. Рассмотрим, как это реализовать в коде 1С.
Вместо того чтобы посылать картинку, мы вызываем метод драйвера PrintBarcode(). Выясним, как выглядит примерный код для взаимодействия с драйвером через объект ДрайверККМ:
// Предположим, ОбъектДрайвера уже инициализирован
ОбъектДрайвера.Barcode = "2000000012345"; // Значение штрихкода
ОбъектДрайвера.LineNumber = 1; // Тип штрихкода (например, EAN13)
ОбъектДрайвера.BarWidth = 2; // Ширина линий
ОбъектДрайвера.BarHeight = 50; // Высота штрихкода
ОбъектДрайвера.PrintBarcode(); // Команда на печать
При таком подходе принтер сам рассчитает геометрию «полосочек», что гарантирует высокую четкость печати даже на бюджетных моделях типа Light-100. Это критично для узких лент (57 мм), где малейшее размытие графики делает штрихкод нечитаемым для сканера.
Проанализируем технические ограничения бюджетных принтеров. При печати на узкой ленте 57 мм линейный штрихкод (например, EAN-13) может занимать почти всю ширину. Если сканер не может считать код, проверьте следующие параметры:
BarWidth).Code128, так как он более компактен, чем старый Interleaved 2 of 5.В современных конфигурациях на управляемых формах печать чеков реализована через Шаблоны чеков ККМ. Разберем, как добавить штрихкод в этом случае:
Штрихкод в нижнюю часть чека.Встроенный, чтобы использовать аппаратные возможности принтера, описанные в «Способе 3».Рассмотрим практический кейс, упомянутый в обсуждении. В магазинах с отделами часто практикуется схема пречеков. Продавец в отделе формирует заказ, нажимает «Отложить чек» и печатает на нефискальном принтере слип со штрихкодом. Покупатель идет на кассу, кассир сканирует этот код, 1С мгновенно находит отложенный чек и превращает его в фискальный документ продажи. Это существенно ускоряет обслуживание и исключает ошибки ручного ввода суммы кассиром.
Подведем итог: для реализации печати штрихкода на чеке в 1С:Розница лучше всего использовать аппаратные методы драйвера через настройку шаблона чека. Это обеспечит максимальную скорость печати и гарантированное считывание сканером. Если же ваша ККМ крайне старая и не поддерживает метод PrintBarcode, используйте печать через специализированные шрифты, предварительно установив их на компьютер кассира.