Как вывести произвольный текст в кассовом чеке при использовании драйвера АТОЛ 10?

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

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

Анализ структуры XML-пакета для ККТ

Первое, на что нам необходимо обратить внимание — это корректность формирования XML-структуры, которую 1С передает драйверу. Драйверы АТОЛ крайне чувствительны к регистру символов и иерархии тегов. Рассмотрим стандартный механизм вывода текста. Для печати произвольной строки используется элемент TextString с атрибутом Text. Проанализируем типичную ошибку: использование кириллицы в названиях атрибутов или неверный регистр.

Правильный фрагмент кода для формирования XML выглядит следующим образом:


ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВашПроизвольныйТекст));
ЗаписьXML.ЗаписатьКонецЭлемента();

Важно помнить, что атрибут должен называться именно Text (с большой буквы), а не text или Текст. Если вы используете стандартные механизмы БПО, убедитесь, что при заполнении структуры чека ваши данные попадают в соответствующие узлы.

Расположение текста в структуре документа

Ситуация, когда текст виден в XML, но отсутствует на чеке, часто связана с тем, что элемент TextString помещен внутрь узла, который драйвер интерпретирует исключительно как фискальный. Например, если вставить текстовую строку внутрь элемента FiscalString (описывающего товарную позицию), драйвер может проигнорировать её, так как он ожидает там только атрибуты Name, Quantity, Price и так далее.

Рассмотрим правильные варианты размещения текста:

  1. Секция Positions: Текст может идти отдельным элементом TextString между позициями товаров. Это удобно для вывода уточнений к конкретному товару.
  2. Секция Header: Используется для печати информации в верхней части чека, до списка товаров.
  3. Секция Footer: Самое подходящее место для рекламной информации и данных о бонусах. Текст в подвале чека печатается после всех итогов, но до фискального признака или сразу после него (зависит от настроек шаблона в самой ККТ).

Посмотрим на пример структуры блока Footer:


<Footer>
    <TextString Text="Спасибо за покупку!"/>
    <TextString Text="Ваш бонусный баланс: 500 руб."/>
</Footer>

Настройка параметров драйвера АТОЛ 10

Если программный код написан верно, а текст все равно не выводится, нам следует проверить настройки самого кассового аппарата через «Тест драйвера ККТ». Существует вероятность, что в конфигурации оборудования запрещена печать нефискальных строк в фискальном документе.

Выполним следующие шаги для проверки:

  1. Запустим «Тест драйвера ККТ» (версии 10.x).
  2. Перейдем в раздел «Свойства» и нажмем «Параметры ККТ».
  3. Найдем раздел, отвечающий за работу с чеком или шаблоном печати.
  4. Проверим параметр «Печать нефискальных строк». В некоторых моделях АТОЛ этот параметр может называться иначе, но его суть сводится к разрешению обработки тегов TextString внутри открытого чека.
  5. Убедимся, что яркость печати и настройки шрифта позволяют отображать мелкий текст, если вы используете специфические шрифты.

Также проанализируем версию используемого драйвера. Версии ниже 10.4 имели ряд ограничений и багов при работе с XML-пакетами через COM-объект или Native-компоненту 1С. Если вы используете версию 10.0.1, настоятельно рекомендуется обновить драйвер до актуального (например, 10.9.x и выше), так как в ранних версиях механизмы парсинга XML были нестабильны.

Особенности работы с БПО

В современных конфигурациях 1С (УТ 11, Розница 2.3/3.0, БП 3.0) формирование чека происходит через общие модули интеграции. Рассмотрим, как программно добавить текст, не нарушая логику БПО. Обычно для этого используется модификация структуры ДанныеЧека.

Перед вызовом метода СформироватьЧек, проанализируем структуру и добавим массив дополнительных строк:


// Пример добавления текста в подвал чека через структуру БПО
МассивСтрок = Новый Массив;
СтруктураСтроки = Новый Структура("Текст", "Акция: 1+1=3 до конца месяца!");
МассивСтрок.Добавить(СтруктураСтроки);

ПараметрыЧека.Вставить("ДополнительныйТекстПодвала", МассивСтрок);

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

Технические ограничения и нюансы

При выводе текста важно учитывать физические параметры кассовой ленты. Выясним причину возможной «обрезки» текста:

Подводя итог, можно сказать, что решение проблемы кроется в строгом соблюдении синтаксиса XML TextString Text="...", правильном позиционировании этих узлов вне фискальных описаний товаров и проверке актуальности драйвера АТОЛ. Совместное использование этих методов гарантирует стабильную печать любой необходимой информации в чеке.

← На главную