Где задаются параметры открытия формы подбора номенклатуры в 1С:УНФ 1.6

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

При работе в конфигурации 1С:Управление нашей фирмой (УНФ) версии 1.6 разработчики часто сталкиваются с ситуацией, когда стандартное поведение системы ограничивает выбор определенных типов номенклатуры в документах. Типичный пример — невозможность выбрать номенклатуру с типом «Набор» в документе «Приходная накладная». При нажатии на кнопку «Добавить» или «Показать все» открывается форма списка, в которой флаг ЭтоНабор жестко установлен в значение Ложь и недоступен для редактирования пользователем.

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

Архитектурная логика ограничения

Прежде чем переходить к коду, проанализируем, почему разработчики 1С заложили такое ограничение. В системе УНФ тип номенклатуры «Набор» рассматривается как виртуальная сущность, предназначенная для упрощения процесса продажи. Наборы не хранятся на складе как отдельные единицы; на остатках числятся только комплектующие. Поэтому с точки зрения управленческого учета «купить» набор у поставщика нельзя — можно купить только товары, из которых он состоит. Однако в специфических бизнес-процессах может возникнуть необходимость изменить это поведение, и именно здесь нам потребуется вмешательство в программный код.

Поиск обработчика кнопки «Добавить»

Когда мы нажимаем кнопку «Добавить» в табличной части Запасы, система может вести себя двояко: либо просто добавлять пустую строку, либо сразу открывать форму выбора. Если в свойствах поля Номенклатура в конфигураторе не заданы жесткие Параметры выбора, управление передается программным методам формы документа.

Рассмотрим по шагам, как найти место формирования отбора:

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

Анализ программного кода формы

Выясним причину установки жесткого отбора. В УНФ 1.6 параметры выбора номенклатуры в приходной накладной динамически переопределяются при изменении вида операции или при создании формы. Проанализируем цепочку вызовов в модуле формы документа:

Основная логика сосредоточена в процедуре УстановитьВидимостьИДоступность, которая вызывается из обработчика ОбработатьИзменениеВидаОперации. Рассмотрим фрагмент кода, который отвечает за установку параметров выбора для поля номенклатуры в табличной части Запасы:


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

КонецПроцедуры

В данном примере мы видим, что если вид операции документа не является возвратом, система принудительно добавляет в массив параметров структуру Отбор.ЭтоНабор = Ложь. Именно этот код делает флажок в форме выбора недоступным для изменения.

Как изменить параметры открытия через расширение

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

Разберем пример кода в расширении:


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

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

Дополнительные места поиска (Общие модули)

Если в модуле формы документа код не обнаружен, следует обратить внимание на общие модули, которые отвечают за подбор номенклатуры во всей конфигурации. Часто параметры формируются в специализированных функциях-конструкторах. Посмотрите в сторону следующих объектов:

Резюме

Мы выяснили, что параметры открытия формы подбора в УНФ 1.6 чаще всего задаются программно в модуле формы документа. Это сделано для гибкого управления фильтрами в зависимости от контекста (вида операции, статуса организации и т.д.). Для решения задачи по изменению отбора ЭтоНабор нам потребовалось:

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

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

← На главную