Как напечатать дополнительную информацию (внутренний код или текст) на фискальном чеке в 1С через БПО

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

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

Использование тега TextString в XML-пакете фискализации

Основной механизм взаимодействия 1С с кассой в актуальных версиях БПО строится на передаче XML-структуры (так называемого "пакета"), описывающего состав чека. Многие ошибочно полагают, что блок Positions (позиции чека) может содержать только фискальные данные о товарах. Однако это не так. Разберем структуру пакета, которая позволяет выводить произвольные строки.

Для добавления текста в состав чека используется тег TextString. Он предназначен именно для нефискальной текстовой информации. Важно понимать, что такие строки не влияют на итоговую сумму чека и не воспринимаются кассой как товарные позиции, требующие расчета налогов.

Посмотрим на пример правильно сформированного XML-блока:


<Positions>
    <FiscalString Name="Макароны" Quantity="1" Price="16.75" Amount="16.75" Tax="10"/>
    <FiscalString Name="Томатный сок" Quantity="1" Price="200" Amount="200" Tax="18"/>
    <TextString Text="Дисконтная карта: 00002345"/>
    <TextString Text="Внутренний код: AX-778"/>
    <Barcode BarcodeType="EAN13" Barcode="2000021262157"/>
</Positions>

Проанализируем эту ситуацию: тег TextString можно вставлять как между позициями, так и после них. Это позволяет гибко управлять внешним видом чека. Если вам нужно вывести информацию в подвале чека, просто добавьте необходимые теги в самом конце блока Positions.

Печать штрихкодов и QR-кодов

Помимо обычного текста, БПО поддерживает вывод графической информации, такой как штрихкоды. Это часто требуется для печати кодов подтверждения или ссылок на маркетинговые акции. Для этого используется тег Barcode. Рассмотрим пример вывода QR-кода, который может содержать ссылку или сложный идентификатор:

<Barcode BarcodeType="QR" Barcode="https://mysite.ru/check/verification-code"/>

Использование типа QR позволяет передать гораздо больше текстовой информации, чем обычный линейный штрихкод, и это штатно поддерживается большинством современных моделей ККТ (Атол, Штрих-М и др.) через интерфейс БПО.

Фискальные реквизиты (Тег 1192)

Если ваша задача состоит в том, чтобы дополнительная информация не только печаталась на бумаге, но и передавалась в ОФД (Оператору фискальных данных) и сохранялась в электронной версии чека, следует использовать механизм дополнительных реквизитов. В форматах фискальных данных (ФФД) для этого зарезервирован тег 1192 (Дополнительный реквизит чека).

В отличие от TextString, который предназначен только для визуального отображения на ленте, данные из тега 1192 являются частью фискального документа. В БПО это значение обычно передается в блоке дополнительных параметров документа. Это идеальный способ для передачи ID транзакции из банковского терминала или уникального номера заказа в интернет-магазине.

Шаблоны чеков в типовых конфигурациях

Если вы работаете в актуальных решениях, таких как 1С:Розница 3.0, 1С:УНФ или 1С:ERP, программировать формирование XML вручную часто не требуется. Выясним причину: в этих конфигурациях реализован мощный механизм шаблонов чеков ККМ.

  1. Откройте справочник "Шаблоны этикеток, ценников и чеков ККМ".
  2. Выберите нужный шаблон чека.
  3. В редакторе шаблона можно использовать Систему компоновки данных (СКД).
  4. Вы можете добавить в запрос СКД любые дополнительные реквизиты документа (например, "Дополнительные сведения"), и они будут автоматически подтянуты при печати.

Этот способ является наиболее "чистым" с точки зрения архитектуры 1С, так как он не требует внесения изменений в программный код формирования пакета и позволяет администратору системы менять состав чека в пользовательском режиме.

Важные технические нюансы

При программном формировании строк через TextString необходимо учитывать несколько критических факторов:

1. Ширина ленты. Кассовые аппараты имеют фиксированную ширину печати (обычно 32, 42 или 48 символов). БПО не всегда корректно выполняет автоматический перенос текста внутри одного тега TextString. Если ваша строка окажется длиннее ширины ленты, она может быть либо обрезана драйвером, либо вызвать ошибку печати. Рекомендуется выполнять программное разбиение длинного текста на несколько строк в коде 1С.

2. Метод PrintText (ПечатьТекста). Существует отдельный метод драйвера для печати нефискального текста. Однако его использование после открытия фискального чека, но до его закрытия, может привести к конфликтам в некоторых моделях драйверов. Использование TextString внутри общего пакета фискализации является более надежным и современным подходом.

3. Электронные чеки. Помните, что текст, добавленный через TextString или Barcode, отображается только на бумажной ленте. В электронном чеке, который покупатель получает по SMS или e-mail от ОФД, эта информация, скорее всего, будет отсутствовать. Для обеспечения сохранности данных в электронном виде используйте фискальный тег 1192.

Таким образом, мы разобрали, что для печати дополнительных данных в 1С достаточно грамотно сформировать XML-пакет, передаваемый в БПО, или настроить типовой шаблон чека, что позволяет решать бизнес-задачи без прямого и сложного взаимодействия с драйверами торгового оборудования.

← На главную