Как реализовать поиск по дополнительному штрихкоду в 1С:Управление торговлей 11 через расширение

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

В типовых конфигурациях «1С:Управление торговлей» (версии 11.4 и 11.5) механизм работы со штрихкодами достаточно гибок, однако часто возникают задачи, требующие выделения особого типа штрихкода (например, внутреннего «Штрих К» или кода производителя), по которому необходимо осуществлять поиск в документах реализации наравне с основным. Рассмотрим подробно, как решить эту задачу с помощью механизма расширений, не снимая основную конфигурацию с поддержки.

Анализ архитектуры хранения штрихкодов

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

  1. Добавление нового реквизита в справочник Номенклатура.
  2. Добавление нового ресурса или реквизита в регистр сведений ШтрихкодыНоменклатуры.

Второй вариант является более правильным с точки зрения производительности и логики типового решения, так как вся поисковая механика «заточена» на работу именно с этим регистром. Разберем ситуацию, когда мы добавляем признак «Дополнительный» в существующий регистр или создаем новый реквизит для хранения альтернативного кода.

Шаг 1. Работа в расширении: Изменение структуры данных

Для начала создадим расширение и добавим в него регистр сведений ШтрихкодыНоменклатуры. Добавим в этот регистр новый реквизит, назовем его ТипШтрихкода (перечисление) или просто создадим отдельное поле на форме записи, если нам нужно визуально выделить «Штрих К».

Если же мы идем по пути упрощения и нам просто нужно, чтобы поиск находил номенклатуру по любому из введенных кодов, достаточно убедиться, что записи в регистре присутствуют. Но по условию задачи нам нужно реализовать поиск именно по «второму» штрихкоду, который может иметь свою логику заполнения. Рассмотрим пример добавления нового реквизита ДополнительныйШтрихкод в расширение к регистру.

Шаг 2. Поиск ключевой процедуры поиска

Проанализируем путь исполнения кода при нажатии кнопки поиска штрихкода в документе «Реализация товаров и услуг». В типовых решениях УТ 11 за это отвечает общий модуль ШтрихкодыНоменклатурыСервер. Нам необходимо найти функцию, которая принимает строку (штрихкод) и возвращает структуру с данными номенклатуры.

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

Шаг 3. Переопределение логики поиска в расширении

Используем аннотацию &Вместо для функции поиска в общем модуле. Нам нужно модифицировать запрос к базе данных так, чтобы он проверял совпадение как с основным полем, так и с нашим новым реквизитом. Рассмотрим пример кода, который можно внедрить в расширение:


&Вместо("НайтиПоШтрихкоду")
Функция Расш1_НайтиПоШтрихкоду(Штрихкод)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Штрихкоды.Номенклатура КАК Номенклатура,
        |	Штрихкоды.Характеристика КАК Характеристика,
        |	Штрихкоды.Упаковка КАК Упаковка,
        |	Штрихкоды.ЕдиницаИзмерения КАК ЕдиницаИзмерения
        |ИЗ
        |	РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
        |ГДЕ
        |	(Штрихкоды.Штрихкод = &Штрихкод
        |	ИЛИ Штрихкоды.ДополнительныйШтрихкод = &Штрихкод)";
    
    Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    // Далее следует логика обработки результата, аналогичная типовой
    // Если найдено несколько значений, система должна вернуть таблицу или вызвать диалог выбора
    ...
    
КонецФункции

Обратите внимание, что при использовании &Вместо вы полностью берете на себя ответственность за работу метода. Более безопасным вариантом является использование &ИзменениеИКонтроль, что позволит сохранить типовую логику при обновлениях конфигурации, лишь точечно изменив текст запроса ВЫБРАТЬ... ГДЕ....

Шаг 4. Обработка поиска в форме документа

Посмотрим на форму документа «Реализация товаров и услуг». Кнопка поиска вызывает команду, которая в итоге обращается к серверному методу. В расширении нам нужно убедиться, что вызывается именно наш модифицированный метод. Проанализируем ситуацию: если поиск вызывается через подключаемое оборудование (сканер), то задействуется механизм БПО (Библиотека подключаемого оборудования). Если же нажатием кнопки — проверяем процедуру Подключаемый_ВыполнитьКоманду в модуле формы документа.

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

Шаг 5. Риски и нюансы реализации

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

Итоги совместной работы

Мы выяснили, что для реализации поиска по двум штрихкодам в УТ 11 через расширение, оптимальным путем является модификация общего модуля ШтрихкодыНоменклатурыСервер. Мы добавили поле в регистр, изменили запрос в функции поиска и обеспечили возврат корректной структуры данных. Такой подход сохраняет типовую логику работы документов и позволяет легко поддерживать систему при обновлениях.

← На главную