При доработке рабочего места кассира (РМК) в конфигурации «1С:Розница» часто возникает задача вывода на печать дополнительной информации по строкам чека — например, артикула, размера, серийного номера или произвольного строкового реквизита. Выясним причину, почему стандартные запросы печатных форм не влияют на фискальный чек, и разберем по шагам, где именно подготавливаются данные для передачи в Библиотеку подключаемого оборудования (БПО) и контрольно-кассовую технику (ККТ).
В устаревших конфигурациях 1С печать чека выполнялась отправкой сформированных текстовых строк через метод ТекстПечатиЧекаНаФР. С переходом на требования 54-ФЗ и работу с онлайн-кассами механизм кардинально изменился. Онлайн-касса не принимает произвольный готовый макет чека для фискальных операций — драйверу передается строго структурированный пакет данных (в формате XML или JSON).
Рассмотрим путь формирования фискального чека:
ЧекККМ из рабочего места кассира.Основным местом, где собираются и преобразуются данные для фискализации в документе ЧекККМ, является процедура ПодготовитьДанныеДляФискализацииЧека (или ПодготовитьДанныеДляФискализации в зависимости от релиза конфигурации).
Проанализируем ситуацию: внутри этой процедуры выполняется выборка строк табличной части Товары и заполняется массив структур ПозицииЧека. Поле Наименование в этой структуре как раз отвечает за текст, который будет отправлен в ОФД и напечатан на чековой ленте.
Чтобы не снимать конфигурацию с поддержки, модификацию логики формирования наименования позиции рекомендуется выполнять с помощью механизма расширений.
Разберем по шагам, как перехватить и модифицировать наименование строки:
ЧекККМ и аннотируем вызов процедуры в модуле менеджера с помощью аннотации &ИзменениеИКонтроль или &Вместо.ПозицииЧека модифицируем формирование поля Наименование, добавив значение строкового реквизита.Посмотрим на пример программной модификации строки товара:
// В цикле обхода строк табличной части документа ЧекККМ
Для Каждого СтрокаТовары Из ТаблицаТовары Цикл
СтруктураПозиции = Новый Структура;
// Получаем базовое наименование и дополнительный реквизит
ИмяПозиции = Строка(СтрокаТовары.Номенклатура);
Если ЗначениеЗаполнено(СтрокаТовары.ДополнительныйРеквизитСтр) Тогда
ИмяПозиции = ИмяПозиции + " (" + СокрЛП(СтрокаТовары.ДополнительныйРеквизитСтр) + ")";
КонецЕсли;
// ВАЖНО: контроль ограничения длины реквизита по ФФД (тег 1030)
СтруктураПозиции.Вставить("Наименование", Лев(ИмяПозиции, 128));
СтруктураПозиции.Вставить("Количество", СтрокаТовары.Количество);
СтруктураПозиции.Вставить("Цена", СтрокаТовары.Цена);
СтруктураПозиции.Вставить("Сумма", СтрокаТовары.Сумма);
// Заполнение остальных обязательных фискальных реквизитов (НДС, признак предмета расчета)
// ...
МассивПозиций.Добавить(СтруктураПозиции);
КонецЦикла;
Важное ограничение формата фискальных документов (ФФД): в соответствии с требованиями к реквизиту 1030 («Наименование предмета расчета»), максимальная длина поля наименования позиции ограничена 128 символами. При конкатенации стандартного наименования и дополнительного текста обязательно используйте функцию Лев(), иначе драйвер кассы вернет ошибку или строка будет некорректно обрезана прошивкой ККТ.
Если дополнительный реквизит не является частью наименования номенклатуры (например, это служебное примечание для клиента, номер заказа или рекламный текст), не следует перегружать тег 1030, чтобы не искажать данные в ОФД.
Рассмотрим подробнее альтернативный вариант: БПО поддерживает вывод произвольных текстовых нефискальных строк между позициями или в подвале чека. Для этого в массив строк чека добавляется отдельный элемент с типом ТекстоваяСтрока:
СтруктураТекста = Новый Структура;
СтруктураТекста.Вставить("ТекстоваяСтрока", "Комментарий: " + СокрЛП(СтрокаТовары.ДополнительныйРеквизитСтр));
МассивПозиций.Добавить(СтруктураТекста);
Если задача заключается только в изменении внешнего вида бумажного чека (без изменения данных, уходящих в ОФД), проверим настройки типового функционала «1С:Розница»:
ЧекККМ, его можно вывести в строку таблицы чека непосредственно через редактор шаблона без изменения программного кода формирования фискального пакета.