Как вывести артикул номенклатуры в чек ККМ в 1С:Управление торговлей 11

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

Обновление конфигурации «1С:Управление торговлей» — это важный шаг для поддержания системы в актуальном состоянии, однако оно часто преподносит сюрпризы технического характера. Одним из таких неприятных моментов при переходе с версии 11.3.3 на 11.3.4 (а также на более современные релизы линеек 11.4 и 11.5) является внезапное исчезновение артикула номенклатуры из печатных фискальных чеков ККМ. В этой статье мы подробно разберем, почему это происходит, проанализируем стандартные возможности системы и реализуем надежное решение с помощью расширения конфигурации.

Выясняем причину: почему пропадает артикул при обновлении?

Для того чтобы решить проблему, нам необходимо понять физику процесса. Начиная с версии 11.3.4, разработчики фирмы «1С» кардинально переработали механизмы взаимодействия с торговым оборудованием. Была внедрена новая версия БПО (Библиотеки подключаемого оборудования). Все кассовые чеки начали формироваться в строгом соответствии с требованиями ФЗ-54.

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

Анализ стандартных настроек системы

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

Если мы перейдем по пути: НСИ и администрирование -> Настройка НСИ и разделов -> Продажи -> Печать документов, то увидим там пункт «Дополнительная колонка печатных форм». В ней можно выбрать один из вариантов:

  1. Не выводить
  2. Артикул
  3. Код

Важно понимать: эта настройка распространяется исключительно на печатные формы документов, формируемые на офисном принтере формата А4 (например, товарный чек, расходная накладная, счет на оплату). На формирование фискального чека, пробиваемого через онлайн-кассу (ККТ), эта галочка не оказывает абсолютно никакого влияния.

Альтернативный вариант: Шаблоны чеков ККМ

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

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

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

Поскольку типовой код конфигурации снимать с поддержки крайне не рекомендуется (это усложнит все последующие обновления системы), мы воспользуемся механизмом расширений конфигурации. Это современный и безопасный стандарт разработки в среде «1С:Предприятие 8.3».

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

Где именно вносить изменения программисту?

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

Наиболее универсальной точкой интеграции является перехват процедуры формирования XML-данных непосредственно в общем модуле БПО, отвечающем за интеграцию с ККТ. Мы рассмотрим пример перехвата данных в модуле менеджера оборудования.

Давайте проанализируем пример кода расширения, который подключается к общему модулю МенеджерОборудованияВызовСервера (или аналогичному в вашей версии БПО) и модифицирует структуру чека перед отправкой.


&Вместо("ПодготовитьДанныеДляПечатиЧека")
Функция Расш_ПодготовитьДанныеДляПечатиЧека(ПараметрыПодключения, ОбщиеПараметры, ДанныеЧека, Источник)
    
    // Вызываем оригинальный алгоритм для формирования структуры данных чека
    Результат = ПродолжитьВызов(ПараметрыПодключения, ОбщиеПараметры, ДанныеЧека, Источник);
    
    // Проверим, есть ли в структуре чека таблица с позициями номенклатуры
    Если ДанныеЧека.Свойство("ТаблицаТоваров") Тогда
        
        Для Каждого СтрокаТовара Из ДанныеЧека.ТаблицаТоваров Цикл
            
            // Проверяем заполненность номенклатуры
            Если ЗначениеЗаполнено(СтрокаТовара.Номенклатура) Тогда
                
                // Получаем артикул номенклатуры
                Артикул = СтрокаТовара.Номенклатура.Артикул;
                
                Если ЗначениеЗаполнено(Артикул) Тогда
                    // Склеиваем наименование с артикулом в нужном формате
                    СтрокаТовара.Наименование = "Арт. " + СокрЛП(Артикул) + " " + СтрокаТовара.Наименование;
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЕсли;
    
    Возврат Результат;

КонецФункции

Разбор программного кода и важные нюансы

Рассмотрим подробнее логику написанного алгоритма:

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

Важное предупреждение: При модификации наименования для фискального чека помните о длине реквизита в ККТ. Большинство современных кассовых аппаратов и драйверов накладывают ограничение на длину строки наименования предмета расчета (обычно это 128 символов). Если артикул очень длинный, а наименование подробное, строка может обрезаться на конце. По этой причине рекомендуется выводить артикул в самом начале наименования, чтобы он гарантированно попал на печать.

Таким образом, использование механизма расширений позволяет решить проблему вывода артикула раз и навсегда. При последующих плановых обновлениях вашей базы данных «1С:Управление торговлей» на новые релизы (включая переход на линейки 11.4 и 11.5) этот программный код останется нетронутым, и вам не придется тратить время на повторный поиск затертого кода в конфигураторе.

← На главную