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