Как вывести данные справочников Номенклатура и Номенклатура контрагентов в едином окне 1С:УТ 11

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

В процессе работы менеджеров по продажам, особенно в таких отраслях, как торговля автозапчастями, возникает острая необходимость оперативно получать информацию о наличии товара не только на собственных складах, но и в прайс-листах поставщиков. Стандартный функционал 1С:Управление торговлей (УТ 11) разделяет эти данные: собственная номенклатура находится в одном справочнике, а номенклатура поставщиков — в другом. Это заставляет сотрудников переключаться между окнами, что значительно замедляет обработку входящих заявок.

В данной статье мы разберем, как объединить эти данные в одном окне, настроить сквозной поиск по артикулу и создать удобное рабочее место (АРМ) для менеджера.

Зачем объединять два справочника

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

  1. Есть ли товар в нашей Номенклатуре.
  2. Наличие и цены в справочнике Номенклатура контрагентов.
  3. Остатки на собственных складах и остатки у поставщиков (если они загружены в систему).

Вариант 1. Использование двух динамических списков с единым управлением

Этот способ предполагает добавление на форму (например, новую форму списка или отдельную обработку) двух независимых таблиц. Разберем по шагам, как настроить синхронный поиск для обеих таблиц.

Проблема штатного поиска в том, что он привязан к конкретному элементу управления. Чтобы реализовать поиск «одной строкой», проанализируем следующий алгоритм:

  1. Создадим на форме реквизит с типом Строка, назовем его СтрокаПоиска.
  2. Вынесем этот реквизит на форму.
  3. Для обоих динамических списков (назовем их СписокНашаНоменклатура и СписокНоменклатураПоставщиков) настроим программную фильтрацию в событии ПриИзменении поля поиска.

Пример программной установки отбора для поиска по артикулу:


&НаСервере
Процедура УстановитьПоискНаСервере(ЗначениеПоиска)
    
    // Очищаем старые фиксированные настройки
    ЭлементОтбора = СписокНашаНоменклатура.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Артикул");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
    ЭлементОтбора.ПравоеЗначение = ЗначениеПоиска;
    ЭлементОтбора.Использование = Значит(ЗначениеПоиска <> "");

    // Аналогично для списка номенклатуры контрагентов
    ЭлементОтбораК = СписокНоменклатураПоставщиков.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбораК.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Артикул");
    ЭлементОтбораК.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
    ЭлементОтбораК.ПравоеЗначение = ЗначениеПоиска;
    
КонецПроцедуры

Вариант 2. Объединение данных через произвольный запрос в динамическом списке

Если мы хотим видеть данные в единой таблице, проанализируем возможность использования оператора ОБЪЕДИНИТЬ ВСЕ в запросе динамического списка. Это позволит вывести «смешанный» список, где будут присутствовать и наши позиции, и позиции поставщиков, которые еще не сопоставлены.

Рассмотрим структуру такого запроса:

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

Важно помнить, что при использовании объединения в динамическом списке система должна иметь основную таблицу для корректной работы стандартных функций (открытие формы, пометка на удаление). В случае «смешанного» списка основную таблицу лучше не указывать, а открытие форм прописывать программно в событии Выбор.


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Объект,
    Номенклатура.Наименование КАК Наименование,
    Номенклатура.Артикул КАК Артикул,
    "Собственный" КАК ТипПозиции
ИЗ
    Справочник.Номенклатура КАК Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    НоменклатураКонтрагентов.Ссылка,
    НоменклатураКонтрагентов.Наименование,
    НоменклатураКонтрагентов.Артикул,
    "Поставщик: " + НоменклатураКонтрагентов.Владелец.Наименование
ИЗ
    Справочник.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
ГДЕ
    НоменклатураКонтрагентов.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)

Вариант 3. Создание внешнего АРМ (Автоматизированного рабочего места)

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

Разберем преимущества создания выделенного рабочего места:

Особенности поиска в автозапчастях (нормализация)

Проанализируем ситуацию: в справочнике Номенклатура артикул записан как 123-456, а в справочнике поставщика — 123456. Обычный поиск их не свяжет. Для решения этой проблемы в 1С рекомендуется:

  1. Добавить в оба справочника дополнительный реквизит АртикулПоиск (индексированный).
  2. При записи элемента заполнять этот реквизит только цифрами и буквами в верхнем регистре.
  3. Поиск в АРМ выполнять именно по этому полю.

Посмотрим на пример функции нормализации:


Функция НормализоватьАртикул(Знач Стр) Экспорт
    Результат = "";
    Для Индекс = 1 По СтрДлина(Стр) Цикл
        Символ = Сред(Стр, Индекс, 1);
        Если (Символ >= "0" И Символ <= "9") ИЛИ (ВРег(Символ) >= "A" И ВРег(Символ) <= "Z") Тогда
            Результат = Результат + ВРег(Символ);
        КонецЕсли;
    КонецЦикла;
    Возврат Результат;
КонецФункции

Резюме

Мы рассмотрели несколько подходов к выводу двух справочников в одном окне. Наиболее стабильным и удобным для поддержки является создание внешней обработки (АРМ менеджера) с использованием динамического списка на основе произвольного запроса. Это позволяет объединить данные, настроить быстрый поиск по очищенным артикулам и предоставить менеджеру всю необходимую информацию для продажи (цены, остатки, аналоги) в режиме «одного окна».

Выбор конкретного метода зависит от объема вашей базы данных. Если позиций номенклатуры контрагентов миллионы, лучше использовать прямые запросы к базе или специализированные индексированные таблицы, чтобы интерфейс оставался отзывчивым.

← На главную