В работе с конфигурациями на базе 1С:ERP, Комплексная автоматизация 2.4 или Управление торговлей 11 пользователи и разработчики часто сталкиваются с ситуацией, когда у номенклатуры штрихкоды заданы, но при заполнении обработки «Печать этикеток и ценников» колонка со штрихкодом остается пустой. В этой статье мы подробно разберем, почему это происходит, как работает внутренняя логика системы и каким образом исправить ситуацию, особенно если штрихкоды были созданы программно.
Ситуация выглядит следующим образом: в карточке номенклатуры штрихкод присутствует, поиск по штрихкоду в самой обработке работает исправно, но при обычном заполнении табличной части (например, по остаткам или через подбор) поле Штрихкод не заполняется автоматически. Выясним причину такого поведения системы. Основная сложность заключается в том, как 1С сопоставляет данные в регистре сведений ШтрихкодыНоменклатуры и данные в табличной части обработки печати.
В современных версиях 1С:КА 2.4 информация о штрихкодах хранится в регистре сведений ШтрихкодыНоменклатуры. Записи в этом регистре имеют несколько ключевых измерений:
УпаковкиЕдиницыИзмерения.Проанализируем критически важный момент: поле Упаковка может быть пустым. Если оно пустое, система считает, что штрихкод относится к самой номенклатуре (базовой единице хранения). Если же там указана конкретная единица измерения или упаковка, то данный штрихкод жестко привязан именно к этой упаковке.
Рассмотрим ситуацию, описанную в практике многих разработчиков. При программном создании штрихкодов (например, при переносе данных из другой системы или массовой генерации) часто допускается ошибка: в поле Упаковка записывается ссылка на единицу измерения «шт» (штуки). С точки зрения пользователя это логично — товар ведь в штуках. Однако с точки зрения программной логики 1С:
Упаковка также является пустым.Упаковка = ЗначениеПустое не выполняется, и система «не видит» штрихкод.Для начала нам необходимо убедиться, что проблема именно в этом. Перейдем в функции для технического специалиста и откроем регистр сведений ШтрихкодыНоменклатуры. Посмотрим на записи для проблемных позиций. Если мы видим, что в колонке Упаковка стоит значение (даже если это базовая единица), это и есть причина проблемы.
Чтобы штрихкод начал подтягиваться в обработку печати автоматически, нам нужно привести данные в соответствие с ожиданиями системы. Рассмотрим два варианта решения:
Вариант А: Очистка упаковки в регистре (рекомендуется для базовых единиц)
Если штрихкод должен выводиться всегда, независимо от того, выбрана упаковка или нет, поле Упаковка в регистре должно быть пустым. Мы можем отредактировать запись вручную или воспользоваться обработкой группового изменения реквизитов. После того как мы уберем «единицу измерения» из регистра, штрихкод начнет заполняться в обработке печати при подборе номенклатуры.
Вариант Б: Корректное заполнение обработки печати
Если штрихкод действительно привязан к упаковке, то в самой обработке «Печать этикеток и ценников» в табличной части товаров обязательно должна быть выбрана та же самая упаковка. Только при полном совпадении пары «Номенклатура + Упаковка» типовой запрос 1С подтянет штрихкод в строку.
Посмотрим на пример кода, который часто приводит к подобной ошибке, и проанализируем, как его исправить. Рассмотрим фрагмент записи в регистр:
// Ошибочный подход:
НоваяЗапись = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
НоваяЗапись.Номенклатура = СсылкаНаТовар;
НоваяЗапись.Штрихкод = "2000000000015";
// Если мы заполняем упаковку ссылкой на единицу измерения "шт"
НоваяЗапись.Упаковка = СсылкаНаТовар.ЕдиницаИзмерения;
НоваяЗапись.Записать();
Чтобы избежать проблем с печатью этикеток, при создании штрихкода для основного товара следует оставлять поле Упаковка пустым:
// Правильный подход для основного штрихкода:
НоваяЗапись = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
НоваяЗапись.Номенклатура = СсылкаНаТовар;
НоваяЗапись.Штрихкод = "2000000000015";
// Упаковку не заполняем, она должна быть равна Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка()
НоваяЗапись.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
НоваяЗапись.Записать();
Также стоит обратить внимание на настройки самой обработки. Нажмем кнопку «Настроить» в форме печати этикеток. В некоторых релизах КА 2.4 существует возможность управлять выбором штрихкода. Если у товара несколько штрихкодов, система может игнорировать их до тех пор, пока не будет указано, какой из них является основным.
Проанализируем ситуацию с функциональной опцией «Упаковки номенклатуры». Если в настройках НСИ и администрирования эта опция была выключена уже после того, как в базу попали штрихкоды с заполненными упаковками, поле «Упаковка» станет невидимым в интерфейсе карточки номенклатуры, но данные в регистре никуда не исчезнут. Запрос в обработке печати продолжит учитывать эти скрытые данные, создавая иллюзию «беспричинного» отсутствия штрихкода.
Таким образом, мы выяснили, что основная причина отсутствия штрихкодов в обработке печати этикеток в 1С:КА 2.4 — это избыточное заполнение поля Упаковка в регистре сведений ШтрихкодыНоменклатуры. Для исправления ситуации достаточно очистить это поле для тех штрихкодов, которые относятся к базовой единице хранения товара. Это обеспечит корректную работу типовых запросов системы и автоматическое заполнение всех необходимых данных для печати ценников и этикеток.