При работе в конфигурации «1С:Управление торговлей 11» (УТ 11) пользователи часто сталкиваются с необходимостью быстро проанализировать справочник номенклатуры на предмет заполненности штрихкодов. Отсутствие штрихкода у товара блокирует продажи на кассе и усложняет складской учет. Однако в стандартном списке номенклатуры колонки со штрихкодом нет.
В этой статье мы подробно разберем, почему разработчики 1С не вывели это поле по умолчанию, и рассмотрим несколько эффективных способов решения этой задачи: от простых пользовательских методов без программирования до профессиональной доработки динамического списка через механизм расширений.
Прежде чем переходить к решениям, проанализируем архитектуру базы данных 1С. В конфигурации УТ 11 штрихкод не является реквизитом справочника Справочники.Номенклатура. Данные хранятся в отдельном независимом регистре сведений РегистрСведений.ШтрихкодыНоменклатуры.
Связь между справочником и регистром относится к типу «один-ко-многим». Это означает, что для одной позиции номенклатуры в базе данных может быть создано несколько различных штрихкодов. Например:
Если бы система попыталась просто вывести поле штрихкода в стандартную таблицу номенклатуры, возникла бы неопределенность: какой именно из десяти штрихкодов показывать в строке? Прямое соединение таблиц в запросе привело бы к тому, что одна и та же номенклатурная позиция продублировалась бы в списке столько раз, сколько штрихкодов для нее зарегистрировано. Чтобы избежать этой путаницы, разработчики типового решения скрыли эту информацию из общего списка.
Тем не менее, решить задачу быстрого поиска товаров без штрихкодов можно несколькими способами. Рассмотрим их подробнее.
Если вам не требуется постоянное наличие колонки в справочнике, а нужно лишь быстро выявить товары без штрихкодов и сразу заполнить их, воспользуемся штатным механизмом системы. Для вызова функции прямо из формы списка можно использовать обработку для печати ценников и этикеток из списка номенклатуры.
Разберем этот процесс по шагам:
Этот метод хорош тем, что он абсолютно безопасен, не требует доработки конфигурации и доступен любому пользователю с правами на печать ценников. При необходимости загрузить список позиций в эту обработку из файла пригодится расширение для заполнения списка товаров из Excel.
Если перед нами стоит задача сделать так, чтобы признак наличия штрихкода или сам основной штрихкод отображался непосредственно в форме списка справочника Номенклатура на постоянной основе, лучшим решением будет использование расширения конфигурации (файл формата .cfe). Это современный подход, который позволяет изменять интерфейс и логику программы без снятия конфигурации с поддержки.
Чтобы штрихкод выводился корректно и строки номенклатуры не дублировались, в запросе динамического списка необходимо использовать виртуальную таблицу с группировкой по номенклатуре. Нам нужно получить только один (например, минимальный или максимальный) штрихкод для базовой единицы измерения.
Рассмотрим пример запроса, который должен быть интегрирован в динамический список формы списка номенклатуры через расширение:
ВЫБРАТЬ
ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
МИНИМУМ(ШтрихкодыНоменклатуры.Штрихкод) КАК Штрихкод
ПОМЕСТИТЬ ВТ_ШтрихкодыМинимум
ИЗ
РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
ГДЕ
ШтрихкодыНоменклатуры.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
И ШтрихкодыНоменклатуры.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
ШтрихкодыНоменклатуры.Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Ссылка,
СправочникНоменклатура.Код КАК Код,
СправочникНоменклатура.Наименование КАК Наименование,
ЕСТЬNULL(ВТ_ШтрихкодыМинимум.Штрихкод, "") КАК Штрихкод,
ВЫБОР
КОГДА ВТ_ШтрихкодыМинимум.Штрихкод ЕСТЬ NULL ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ КАК ЕстьШтрихкод
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ШтрихкодыМинимум КАК ВТ_ШтрихкодыМинимум
ПО СправочникНоменклатура.Ссылка = ВТ_ШтрихкодыМинимум.Номенклатура
Проанализируем этот запрос по шагам:
ВТ_ШтрихкодыМинимум мы выбираем штрихкоды из регистра. Чтобы избежать дублирования из-за характеристик и упаковок, мы накладываем условия на пустые ссылки по этим разрезам.МИНИМУМ(Штрихкод). Даже если у товара осталось несколько штрихкодов без упаковок, функция свернет их в одну строку, выбрав минимальный по алфавитно-цифровому порядку.Номенклатура мы связываем через ЛЕВОЕ СОЕДИНЕНИЕ с нашей временной таблицей.ЕСТЬNULL мы заменяем пустые значения на пустую строку. Поле ЕстьШтрихкод вернет нам булево значение (Истина/Ложь), которое очень удобно использовать для условного оформления.После добавления этого запроса в динамический список формы номенклатуры в расширении, мы можем вынести новые поля на форму. Например, поле ЕстьШтрихкод можно не выводить текстом, а настроить условное оформление списка: если ЕстьШтрихкод равно Ложь, окрашивать строку товара или его наименование в светло-красный или серый цвет. Это позволит менеджеру визуально за долю секунды определять проблемные позиции при прокрутке списка.
Если программировать расширение динамического списка пока сложно, но необходимо быстро получать актуальные списки «номенклатуры без кодов», мы можем разработать простой внешний отчет на базе Системы компоновки данных (СКД). Этот способ также не требует изменения конфигурации и легко подключается через механизм дополнительных отчетов и обработок.
Разберем алгоритм настройки схемы компоновки данных:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
Номенклатура.Артикул КАК Артикул,
Номенклатура.Родитель КАК ПапкаНоменклатуры,
Штрихкоды.Штрихкод КАК Штрихкод
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
ПО Номенклатура.Ссылка = Штрихкоды.Номенклатура
ГДЕ
Номенклатура.ЭтоГруппа = ЛОЖЬ
Товар. В выбранные поля добавим Товар, Артикул и Штрихкод.Штрихкод, вид сравнения укажем как «Не заполнено» (или ЕСТЬ NULL в параметрах запроса).Существует еще один простой административный способ быстро навести порядок в базе данных, зайдя «с обратной стороны» — напрямую через записи регистра.
Рассмотрим этот метод:
Номенклатура.В результате система перестроит список, сгруппировав штрихкоды по конкретным товарам. Такой вид очень удобен для быстрого анализа дублей. Вы сразу увидите, у каких позиций привязано необоснованно много кодов или где допущены ошибки ручного ввода.
Мы подробно проанализировали проблему отсутствия поля штрихкода в списке номенклатуры УТ 11 и разобрали четыре практических метода ее решения:
Выбирайте наиболее подходящий для вашей компании способ работы и наводите порядок в товарном каталоге быстро и профессионально!