Как напечатать произвольную строку в чеке ККМ в 1С:Розница?

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

В процессе автоматизации розничной торговли часто возникает необходимость вывести на кассовый чек дополнительную информацию, которая не предусмотрена стандартными настройками. Это может быть рекламное сообщение, информация о бонусном балансе покупателя, наименование склада или любая другая переменная строка. В зависимости от версии конфигурации и используемого оборудования (старый фискальный регистратор или современная онлайн-касса), методы решения этой задачи будут различаться.

В данной статье мы подробно разберем три основных способа реализации этой задачи: использование штатных шаблонов чеков с редактированием схемы компоновки данных (СКД), программное вмешательство в модули печати и особенности работы с современными ККТ по 54-ФЗ.

Способ 1: Использование штатных шаблонов чеков (рекомендуемый)

Начиная с версии «1С:Розница 2.2», разработчики внедрили мощный механизм управления внешним видом чека через справочник Шаблоны чеков ККМ. Этот метод является наиболее правильным, так как он не требует изменения программного кода и сохраняет конфигурацию на поддержке.

Рассмотрим по шагам, как добавить в чек произвольное поле, например, информацию о складе или текст из дополнительного реквизита:

  1. Откроем программу в режиме Толстого клиента (управляемое приложение). Это критически важно, так как редактор схемы компоновки данных (СКД) доступен именно в этом режиме.
  2. Перейдем в раздел Продажи — Шаблоны чеков ККМ. Выберем или создадим новый шаблон.
  3. В форме шаблона нажмем кнопку Редактировать макет.
  4. В открывшемся окне найдем кнопку Редактировать схему компоновки данных (или аналогичную по смыслу, связанную с настройкой полей).
  5. В окне конструктора схемы добавим нужные поля в запрос. Например, если нам нужно вывести наименование склада, мы добавим соответствующую связь с полем Склад документа ЧекККМ.
  6. После сохранения схемы новое поле появится в списке доступных полей в левой части редактора шаблона.
  7. Теперь нам остается просто перетащить это поле в нужную секцию чека (Шапка, Строка или Подвал).

Этот способ позволяет выводить динамические данные, которые подтягиваются непосредственно из документа продажи в момент пробития чека. Если же вам нужно просто напечатать статичную строку (например, «Спасибо за покупку!»), в редакторе шаблона достаточно добавить элемент Текст и прописать нужное значение.

Способ 2: Программное добавление нефискальной строки (для старых ФР)

Если вы работаете с оборудованием старого образца (например, Fprint-03к) и используете драйверы АТОЛ, можно прибегнуть к программному вызову печати нефискальной строки. Проанализируем, в какой общий модуль необходимо внести изменения.

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


// В общем модуле МенеджерОборудованияПереопределяемый
// Находим цикл печати подвала чека
Для Каждого СтрокаШапки Из МассивПодвалЧека Цикл
    Если НЕ ОбщийМодульОборудования.НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаШапки, ВыходныеПараметры) Тогда
        Прервать;
    КонецЕсли;
КонецЦикла;

// Добавляем нашу произвольную строку после стандартного подвала
ВашаПроизвольнаяСтрока = "Ваш текст или переменная";
ОбщийМодульОборудования.НапечататьНефискальнуюСтроку(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВашаПроизвольнаяСтрока, ВыходныеПараметры);

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

Способ 3: Особенности печати в условиях онлайн-касс (54-ФЗ)

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

Разберем, как правильно действовать в случае использования Библиотеки подключаемого оборудования (БПО) для ККТ с передачей данных:

1. Использование ТаблицыТекстовыхСтрок. Вместо того чтобы посылать команду на печать отдельной строки, мы должны включить наш текст в структуру данных, передаваемую в метод PrintReceipt. Рассмотрим, как это реализовано в модуле менеджера документа ЧекККМ.

Найдем процедуру ПодготовитьДанныеДляПробитияЧека и проанализируем формирование массива позиций. Мы можем добавить структуру с типом ТекстоваяСтрока в массив строк чека:


НоваяСтрока = Новый Структура;
НоваяСтрока.Вставить("Текст", "Дополнительная информация для клиента");
НоваяСтрока.Вставить("Тип", "ТекстоваяСтрока");
// Добавляем в общий массив данных чека
ДанныеЧека.Строки.Добавить(НоваяСтрока);

2. Передача данных через Тег 1192. Если информация должна быть официально зафиксирована, можно использовать дополнительный реквизит чека (тег 1192). Многие современные драйверы (например, АТОЛ 10-й версии) автоматически печатают содержимое этого тега в самом конце фискального документа.

Типичные ошибки и пути их решения

Проанализируем ситуацию, когда при попытке печати текста касса выдает ошибку «Чек аннулирован». Это часто происходит по следующим причинам:

Подводя итог, отметим, что для современных версий «1С:Розница» оптимальным является первый способ через шаблоны чеков. Он предоставляет гибкость настройки и не требует глубоких знаний программирования. К программным методам стоит прибегать только в исключительных случаях, когда логика вывода текста слишком сложна для реализации через механизмы СКД.

← На главную