Почему не заполняются штрихкоды в обработке Печать этикеток и ценников в 1С:КА 2.4

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

В работе с конфигурациями на базе 1С:ERP, Комплексная автоматизация 2.4 или Управление торговлей 11 пользователи и разработчики часто сталкиваются с ситуацией, когда у номенклатуры штрихкоды заданы, но при заполнении обработки «Печать этикеток и ценников» колонка со штрихкодом остается пустой. В этой статье мы подробно разберем, почему это происходит, как работает внутренняя логика системы и каким образом исправить ситуацию, особенно если штрихкоды были созданы программно.

Разберем суть проблемы

Ситуация выглядит следующим образом: в карточке номенклатуры штрихкод присутствует, поиск по штрихкоду в самой обработке работает исправно, но при обычном заполнении табличной части (например, по остаткам или через подбор) поле Штрихкод не заполняется автоматически. Выясним причину такого поведения системы. Основная сложность заключается в том, как 1С сопоставляет данные в регистре сведений ШтрихкодыНоменклатуры и данные в табличной части обработки печати.

Анализ логики работы регистра «Штрихкоды номенклатуры»

В современных версиях 1С:КА 2.4 информация о штрихкодах хранится в регистре сведений ШтрихкодыНоменклатуры. Записи в этом регистре имеют несколько ключевых измерений:

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

Выясним причину конфликта данных

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

  1. Обработка «Печать этикеток и ценников» при заполнении ищет штрихкод, соответствующий выбранной в таблице номенклатуре и выбранной упаковке.
  2. Если в табличной части обработки колонка «Упаковка» пуста, запрос к базе данных ищет запись в регистре, где измерение Упаковка также является пустым.
  3. Поскольку мы программно записали туда «шт», условие Упаковка = ЗначениеПустое не выполняется, и система «не видит» штрихкод.

Шаг 1: Проверка данных в регистре штрихкодов

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

Шаг 2: Исправление записей регистра

Чтобы штрихкод начал подтягиваться в обработку печати автоматически, нам нужно привести данные в соответствие с ожиданиями системы. Рассмотрим два варианта решения:

Вариант А: Очистка упаковки в регистре (рекомендуется для базовых единиц)

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

Вариант Б: Корректное заполнение обработки печати

Если штрихкод действительно привязан к упаковке, то в самой обработке «Печать этикеток и ценников» в табличной части товаров обязательно должна быть выбрана та же самая упаковка. Только при полном совпадении пары «Номенклатура + Упаковка» типовой запрос 1С подтянет штрихкод в строку.

Разберем программный аспект создания штрихкодов

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


// Ошибочный подход:
НоваяЗапись = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
НоваяЗапись.Номенклатура = СсылкаНаТовар;
НоваяЗапись.Штрихкод = "2000000000015";
// Если мы заполняем упаковку ссылкой на единицу измерения "шт"
НоваяЗапись.Упаковка = СсылкаНаТовар.ЕдиницаИзмерения; 
НоваяЗапись.Записать();

Чтобы избежать проблем с печатью этикеток, при создании штрихкода для основного товара следует оставлять поле Упаковка пустым:


// Правильный подход для основного штрихкода:
НоваяЗапись = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
НоваяЗапись.Номенклатура = СсылкаНаТовар;
НоваяЗапись.Штрихкод = "2000000000015";
// Упаковку не заполняем, она должна быть равна Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка()
НоваяЗапись.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(); 
НоваяЗапись.Записать();

Дополнительные настройки обработки печати

Также стоит обратить внимание на настройки самой обработки. Нажмем кнопку «Настроить» в форме печати этикеток. В некоторых релизах КА 2.4 существует возможность управлять выбором штрихкода. Если у товара несколько штрихкодов, система может игнорировать их до тех пор, пока не будет указано, какой из них является основным.

Проанализируем ситуацию с функциональной опцией «Упаковки номенклатуры». Если в настройках НСИ и администрирования эта опция была выключена уже после того, как в базу попали штрихкоды с заполненными упаковками, поле «Упаковка» станет невидимым в интерфейсе карточки номенклатуры, но данные в регистре никуда не исчезнут. Запрос в обработке печати продолжит учитывать эти скрытые данные, создавая иллюзию «беспричинного» отсутствия штрихкода.

Заключение

Таким образом, мы выяснили, что основная причина отсутствия штрихкодов в обработке печати этикеток в 1С:КА 2.4 — это избыточное заполнение поля Упаковка в регистре сведений ШтрихкодыНоменклатуры. Для исправления ситуации достаточно очистить это поле для тех штрихкодов, которые относятся к базовой единице хранения товара. Это обеспечит корректную работу типовых запросов системы и автоматическое заполнение всех необходимых данных для печати ценников и этикеток.

← На главную