Где формируются данные для онлайн-кассы в «1С:Розница» и как изменить наименование товара в чеке?

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

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

Архитектура формирования фискальных чеков в современных версиях «1С:Розница»

В устаревших конфигурациях 1С печать чека выполнялась отправкой сформированных текстовых строк через метод ТекстПечатиЧекаНаФР. С переходом на требования 54-ФЗ и работу с онлайн-кассами механизм кардинально изменился. Онлайн-касса не принимает произвольный готовый макет чека для фискальных операций — драйверу передается строго структурированный пакет данных (в формате XML или JSON).

Рассмотрим путь формирования фискального чека:

  1. Кассир пробивает чек в документе ЧекККМ из рабочего места кассира.
  2. Документ вызывает процедуру подготовки фискального пакета в модуле менеджера документа.
  3. Формируется структура данных, содержащая массив позиций чека (теги 1030 «Наименование предмета расчета», 1079 «Цена за единицу», 1023 «Количество», ставки НДС и признаки способа расчета).
  4. Сформированный пакет передается через механизмы БПО на кассовый драйвер, который транслирует команды в фискальный накопитель и печатает чек.

Точка входа: процедура ПодготовитьДанныеДляФискализацииЧека

Основным местом, где собираются и преобразуются данные для фискализации в документе ЧекККМ, является процедура ПодготовитьДанныеДляФискализацииЧека (или ПодготовитьДанныеДляФискализации в зависимости от релиза конфигурации).

Проанализируем ситуацию: внутри этой процедуры выполняется выборка строк табличной части Товары и заполняется массив структур ПозицииЧека. Поле Наименование в этой структуре как раз отвечает за текст, который будет отправлен в ОФД и напечатан на чековой ленте.

Решение 1: Доработка через расширение конфигурации

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

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

  1. Подключим расширение конфигурации.
  2. В расширении заимствуем документ ЧекККМ и аннотируем вызов процедуры в модуле менеджера с помощью аннотации &ИзменениеИКонтроль или &Вместо.
  3. В цикле заполнения массива ПозицииЧека модифицируем формирование поля Наименование, добавив значение строкового реквизита.

Посмотрим на пример программной модификации строки товара:


// В цикле обхода строк табличной части документа ЧекККМ
Для Каждого СтрокаТовары Из ТаблицаТовары Цикл

    СтруктураПозиции = Новый Структура;
    
    // Получаем базовое наименование и дополнительный реквизит
    ИмяПозиции = Строка(СтрокаТовары.Номенклатура);
    Если ЗначениеЗаполнено(СтрокаТовары.ДополнительныйРеквизитСтр) Тогда
        ИмяПозиции = ИмяПозиции + " (" + СокрЛП(СтрокаТовары.ДополнительныйРеквизитСтр) + ")";
    КонецЕсли;

    // ВАЖНО: контроль ограничения длины реквизита по ФФД (тег 1030)
    СтруктураПозиции.Вставить("Наименование", Лев(ИмяПозиции, 128));
    СтруктураПозиции.Вставить("Количество", СтрокаТовары.Количество);
    СтруктураПозиции.Вставить("Цена", СтрокаТовары.Цена);
    СтруктураПозиции.Вставить("Сумма", СтрокаТовары.Сумма);
    
    // Заполнение остальных обязательных фискальных реквизитов (НДС, признак предмета расчета)
    // ...
    
    МассивПозиций.Добавить(СтруктураПозиции);

КонецЦикла;

Важное ограничение формата фискальных документов (ФФД): в соответствии с требованиями к реквизиту 1030 («Наименование предмета расчета»), максимальная длина поля наименования позиции ограничена 128 символами. При конкатенации стандартного наименования и дополнительного текста обязательно используйте функцию Лев(), иначе драйвер кассы вернет ошибку или строка будет некорректно обрезана прошивкой ККТ.

Решение 2: Вывод дополнительной информации отдельной нефискальной строкой

Если дополнительный реквизит не является частью наименования номенклатуры (например, это служебное примечание для клиента, номер заказа или рекламный текст), не следует перегружать тег 1030, чтобы не искажать данные в ОФД.

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


СтруктураТекста = Новый Структура;
СтруктураТекста.Вставить("ТекстоваяСтрока", "Комментарий: " + СокрЛП(СтрокаТовары.ДополнительныйРеквизитСтр));
МассивПозиций.Добавить(СтруктураТекста);

Решение 3: Использование штатных шаблонов чеков ККМ

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

  1. Перейдем в раздел Администрирование → Шаблоны этикеток, ценников и чеков ККМ.
  2. Откроем используемый шаблон чека ККМ.
  3. В схеме компоновки данных (СКД) проверим доступные поля. Если реквизит добавлен в табличную часть документа ЧекККМ, его можно вывести в строку таблицы чека непосредственно через редактор шаблона без изменения программного кода формирования фискального пакета.
← На главную