В процессе автоматизации розничной торговли часто возникает необходимость дополнить стандартный фискальный чек нефискальной информацией. Это может быть рекламный текст, информация о накопленных бонусах, пожелание хорошего дня или технические данные. Однако разработчики часто сталкиваются с ситуацией, когда в сформированном XML-пакете текст присутствует, но физически на чековой ленте он не печатается. Разберем детально, как решить эту проблему при работе с 1С:Библиотекой подключаемого оборудования (БПО) и драйверами АТОЛ 10-й версии.
Первое, на что нам необходимо обратить внимание — это корректность формирования XML-структуры, которую 1С передает драйверу. Драйверы АТОЛ крайне чувствительны к регистру символов и иерархии тегов. Рассмотрим стандартный механизм вывода текста. Для печати произвольной строки используется элемент TextString с атрибутом Text. Проанализируем типичную ошибку: использование кириллицы в названиях атрибутов или неверный регистр.
Правильный фрагмент кода для формирования XML выглядит следующим образом:
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", XMLСтрока(ВашПроизвольныйТекст));
ЗаписьXML.ЗаписатьКонецЭлемента();
Важно помнить, что атрибут должен называться именно Text (с большой буквы), а не text или Текст. Если вы используете стандартные механизмы БПО, убедитесь, что при заполнении структуры чека ваши данные попадают в соответствующие узлы.
Ситуация, когда текст виден в XML, но отсутствует на чеке, часто связана с тем, что элемент TextString помещен внутрь узла, который драйвер интерпретирует исключительно как фискальный. Например, если вставить текстовую строку внутрь элемента FiscalString (описывающего товарную позицию), драйвер может проигнорировать её, так как он ожидает там только атрибуты Name, Quantity, Price и так далее.
Рассмотрим правильные варианты размещения текста:
TextString между позициями товаров. Это удобно для вывода уточнений к конкретному товару.Посмотрим на пример структуры блока Footer:
<Footer>
<TextString Text="Спасибо за покупку!"/>
<TextString Text="Ваш бонусный баланс: 500 руб."/>
</Footer>
Если программный код написан верно, а текст все равно не выводится, нам следует проверить настройки самого кассового аппарата через «Тест драйвера ККТ». Существует вероятность, что в конфигурации оборудования запрещена печать нефискальных строк в фискальном документе.
Выполним следующие шаги для проверки:
TextString внутри открытого чека.Также проанализируем версию используемого драйвера. Версии ниже 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 (Ошибка в параметрах).
При выводе текста важно учитывать физические параметры кассовой ленты. Выясним причину возможной «обрезки» текста:
CloseReceipt и последующая автоматическая отрезка происходят раньше, чем принтер физически успевает прогнать ленту с напечатанным текстом. В итоге текст остается «внутри» принтера и становится виден только при печати следующего чека. Чтобы этого избежать, можно добавить пустые строки в Footer.Подводя итог, можно сказать, что решение проблемы кроется в строгом соблюдении синтаксиса XML TextString Text="...", правильном позиционировании этих узлов вне фискальных описаний товаров и проверке актуальности драйвера АТОЛ. Совместное использование этих методов гарантирует стабильную печать любой необходимой информации в чеке.