Как вывести штрихкод в чеке на фискальном регистраторе в 1С:Розница 2.2?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При автоматизации кассовых узлов в конфигурации «1С:Розница 2.2» нередко возникает задача печати штрихкода непосредственно на чековой ленте. Это может быть штрихкод самого фискального документа для быстрого поиска возврата, код карты лояльности или купона на скидку. Разберем основные способы реализации этой задачи, выясним причины типичных ошибок и проанализируем тонкости работы с современными онлайн-кассами (ККТ с передачей данных) и устаревшими моделями фискальных регистраторов.

В зависимости от версии конфигурации и используемой версии Библиотеки подключаемого оборудования (БПО) печать чека может выполняться либо через современный универсальный формат передачи данных XML CheckPackage, либо через прямой построчный вызов низкоуровневых методов драйвера ККТ.

Способ 1. Использование встроенного механизма шаблонов чеков ККМ

В типовой конфигурации «1С:Розница» печать штрихкодов чаще всего не требует доработки программного кода. Решим задачу с помощью стандартных средств конфигурации:

  1. Перейдем в раздел Продажи или Администрирование и откроем справочник Шаблоны этикеток, ценников и чеков ККМ.
  2. Создадим новый шаблон или отредактируем существующий с типом Чек ККТ.
  3. В визуальном редакторе макета чека выберем область (например, подвал чека или заголовок) и добавим элемент Штрихкод.
  4. В свойствах элемента укажем тип штрихкода (например, EAN13, Code128 или QR) и реквизит-источник данных (номер чека, дисконтную карту и т. д.).
  5. Привяжем настроенный шаблон к экземпляру подключаемого оборудования в настройках РМК.

При пробитии чека подсистема БПО автоматически сформирует правильную структуру пакета и передаст ее сертифицированному драйверу ККТ для печати графических полос штрихкода.

Способ 2. Формирование штрихкода через XML-пакет CheckPackage

Если чек формируется программно при доработке конфигурации, правильным и современным подходом является передача структуры фискального и нефискального документа в виде 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:

  1. Value — строковое значение штрихкода. Обратите внимание: для типа EAN13 строка обязана содержать ровно 13 цифр с корректным контрольным разрядом.
  2. BarcodeType — тип штрихкода (EAN13, CODE39, CODE128, QR, PDF417).
  3. Height — высота штрихкода в точках термоголовки.
  4. Width — толщина штрихов (коэффициент масштабирования).
  5. PrintText — признак необходимости печати читаемого текста под полосами штрихкода (true или false).
  6. Alignment — выравнивание штрихкода по ширине ленты (0 — по левому краю, 1 — по центру, 2 — по правому краю).

Подготовленный XML-пакет передается в метод драйвера СформироватьЧек (или ProcessCheck), после чего драйвер ККТ самостоятельно выполняет отрисовку штрихкода.

Способ 3. Прямой вызов метода печати штрихкода через драйвер ККТ

Если мы работаем со старыми релизами конфигурации или узкоспециализированным оборудованием, где не поддерживается работа через XML-пакеты, можно обратиться к низкоуровневым методам объекта драйвера. Посмотрим на пример вызова функции экспорта:


Функция ПечатьШтрихкода(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипШтрихКода, ШтрихКод, ВыходныеПараметры) Экспорт
    
    Результат = Истина;
    
    Попытка
        Ответ = ОбъектДрайвера.НапечататьШтрихКод(ПараметрыПодключения.ИДУстройства, ТипШтрихКода, ШтрихКод);
        Если НЕ Ответ Тогда
            Результат = Ложь;
            ВыходныеПараметры.Очистить();
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить("");
            ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
        КонецЕсли;
    Исключение
        Результат = Ложь;
        ВыходныеПараметры.Очистить();
        ВыходныеПараметры.Добавить(999);
        ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьШтрихКод>.'") + Символы.ПС + ОписаниеОшибки());
    КонецПопытки;
    
    Возврат Результат;
    
КонецФункции

Причины ошибок при печати штрихкода

Если вместо графического штрихкода касса печатает обычный текст или возвращает ошибку, проанализируем наиболее частые причины:

  1. Некорректный формат или контрольный разряд. Если для типа EAN13 передать 12 цифр вместо 13 (или ошибиться в расчете контрольной суммы), прошивка ККТ отклонит команду генерации штрихкода или напечатает переданные цифры обычной строкой.
  2. Несоответствие типов параметров. Низкоуровневые COM-драйверы производителей (АТОЛ, Штрих-М) часто требуют передавать тип штрихкода целым числом (числовым кодом из документации драйвера), а не строкой "EAN13". Передача строкового значения в метод PrintBarCode приводит к возврату значения Неопределено или ошибке вызова.
  3. Конфликт состояний ККТ. Печать произвольной графики и нефискальных штрихкодов внутри открытого фискального чека запрещена протоколом устройства. Нефискальные штрихкоды необходимо выводить либо до начала фискализации чека, либо в нефискальном подвале после закрытия документа.
  4. Настройки таблиц и прошивки ККТ. В параметрах самого фискального регистратора может быть отключена функция печати графики, либо в устаревшей микропрограмме устройства отсутствует аппаратный генератор требуемого типа штрихкода.
  5. Ширина чековой ленты. Длинные линейные штрихкоды (например, Code128 с большим числом символов) могут физически не помещаться по ширине узкой ленты 57 мм. В таком случае рекомендуется использовать двумерные коды (QR), которые обладают высокой плотностью и гарантированно считываются 2D-сканерами.
← На главную