Как добавить артикул в чек ККМ в конфигурации Управление торговлей 10.3?

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

При работе с конфигурацией «Управление торговлей», редакция 10.3, пользователи часто сталкиваются с необходимостью вывода артикула товара непосредственно в фискальный чек. Это может быть продиктовано как требованиями внутреннего учета, так и пожеланиями покупателей. Рассмотрим подробно, как реализовать эту задачу, проанализируем различные подходы — от внесения правок в код конфигурации до массового изменения данных в справочнике.

Способ 1: Модификация подсистемы торгового оборудования

В современных релизах УТ 10.3 (адаптированных под требования ФЗ-54) логика передачи данных на кассовый аппарат сосредоточена в общих модулях. Разберем по шагам, как добавить артикул через программный код. Нам потребуется внести изменения в два общих модуля.

Во-первых, проанализируем общий модуль ТорговоеОборудованиеУТВызовСервера. В нем нас интересует функция ПараметрыОперацииФискализацииЧекаЧекККМ. Внутри этой функции находится запрос, который собирает данные из табличной части документа. Нам необходимо добавить выборку поля Артикул. Найдем текст запроса и добавим в секцию выбора Товары следующую строку:

| ЕСТЬNULL(ТабличнаяЧасть.Номенклатура.Артикул, """") КАК Артикул

Не забудьте также добавить это поле во второй запрос (выборка из временной таблицы Товары), чтобы данные попали в итоговую таблицу значений. После этого переходим ко второму этапу. Откроем общий модуль ПодключаемоеОборудованиеУТВызовСервера и найдем функцию ПараметрыФискализацииЧека. Здесь происходит формирование структуры, которая будет отправлена в драйвер ККТ.

Найдем фрагмент кода, где заполняется поле Наименование, и изменим его так, чтобы артикул склеивался с наименованием. Рассмотрим пример изменения:


// Общие данные строки чека
СтрокаПозицииЧека.ПризнакСпособаРасчета = ПризнакСпособаРасчета;
СтрокаПозицииЧека.ПризнакПредметаРасчета = РозничныеПродажиКлиентСервер.ПризнакПредметаРасчетаФискальнойОперации(СтрокаТЧ.ТипНоменклатуры, СтрокаТЧ.ПодакцизныйТовар);

// Добавляем Артикул в начало наименования
СтрокаПозицииЧека.Наименование = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
    СтрокаТЧ.Артикул + " " + СтрокаТЧ.НоменклатураНаименование, 
    СтрокаТЧ.ХарактеристикаНаименование, 
    СтрокаТЧ.УпаковкаНаименование
);

Способ 2: Правка модуля объекта документа ЧекККМ

В некоторых редакциях конфигурации логика подготовки данных может находиться непосредственно в модуле документа. Проанализируем процедуру ПодготовитьДанныеДляФискализацииЧека в модуле объекта Документ.ЧекККМ. Если ваша конфигурация использует этот механизм, вам нужно найти место обхода табличной части Товары и аналогичным образом модифицировать формирование строки наименования.

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

Способ 3: Массовое обновление полных наименований номенклатуры

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

Рассмотрим код для внешней обработки, который выполнит это действие для всей номенклатуры:


Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Не Выборка.ЭтоГруппа Тогда
        ОбъектНоменклатуры = Выборка.ПолучитьОбъект();
        Артикул = СокрЛП(ОбъектНоменклатуры.Артикул);
        
        Если Артикул <> "" Тогда
            // Проверяем, не добавлен ли артикул уже ранее
            Если Найти(ОбъектНоменклатуры.НаименованиеПолное, Артикул) = 0 Тогда
                ОбъектНоменклатуры.НаименованиеПолное = Артикул + " " + ОбъектНоменклатуры.НаименованиеПолное;
                Попытка
                    ОбъектНоменклатуры.Записать();
                Исключение
                    Сообщить("Не удалось записать: " + ОбъектНоменклатуры.Наименование);
                КонецПопытки;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

Внимание: помните, что полное наименование используется не только в чеках, но и в печатных формах накладных ТОРГ-12, счетов-фактур и актов. Такое изменение затронет всю первичную документацию компании.

Особенности вывода символов и кодировки

Иногда при выводе артикула или наименования на кассу возникает проблема подмены символов (например, русская «К» заменяется на латинскую «K»). Выясним причину этой ситуации. Чаще всего это связано с настройками шрифтов в самом кассовом аппарате или кодовой таблицей драйвера.

Для исправления рекомендуется:

  1. Проверить параметры оборудования через Тест драйвера ККТ.
  2. Убедиться, что в настройках 1С и драйвера используется кодировка Windows-1251 или UTF-8 (в зависимости от модели ККТ).
  3. Если проблема сохраняется только для определенных символов, проверьте корректность заполнения данных в самой базе 1С — иногда символы случайно вводятся в латинской раскладке.

Использование внешних печатных форм и шаблонов

В некоторых случаях (если используется оборудование с поддержкой шаблонов чеков) артикул можно вывести без изменения основного кода 1С. Для этого необходимо отредактировать Шаблон чека в настройках подключаемого оборудования. Однако в УТ 10.3 эта возможность ограничена и чаще всего требует передачи артикула в структуру СтрокаПозицииЧека, что всё равно возвращает нас к необходимости программной доработки, описанной в первом способе.

Подведем итог: наиболее корректным методом является внедрение артикула через расширение (если база запущена на платформе 8.3) или через правку общего модуля торгового оборудования. Это обеспечит чистоту данных в справочнике и позволит управлять выводом артикула только там, где это действительно необходимо — в чеке ККМ.

← На главную