Откуда берутся параметры выбора договора в документе Реализация (товары, услуги, комиссия) в 1С:Бухгалтерия 3.0

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

При разработке или кастомизации типовых конфигураций «1С», таких как «Бухгалтерия предприятия 3.0», разработчики часто сталкиваются с ситуацией, когда поведение элементов формы не соответствует их настройкам в конфигураторе. Типичный пример — документ Реализация (товары, услуги, комиссия). Мы открываем форму, видим реквизит ДоговорКонтрагента, проверяем его свойства «Параметры выбора» и «Связи параметров выбора», но находим их пустыми. Тем не менее при выборе договора в режиме «1С:Предприятие» список фильтруется по определенным видам договоров, например, «С покупателем» или «С комиссионером».

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

Анализ механизмов платформы: где искать фильтры

Когда стандартные визуальные настройки в конфигураторе не дают ответа, необходимо проанализировать три уровня реализации логики:

  1. Свойства реквизита в метаданных. Настройки могут быть заданы не в самой форме, а непосредственно у реквизита объекта Документ.РеализацияТоваровУслуг.Реквизиты.ДоговорКонтрагента. Платформа автоматически наследует эти параметры в любую форму, где используется данный реквизит.
  2. Модуль менеджера документа. В современных конфигурациях на базе БСП (Библиотеки стандартных подсистем) активно используется механизм переопределения параметров выбора на уровне менеджера.
  3. Программная установка в модуле формы. Фильтры могут устанавливаться динамически в процедурах ПриСозданииНаСервере или специальных обработчиках событий элемента формы.

Рассмотрим каждый из этих уровней подробнее применительно к документу реализации.

Уровень 1: Модуль менеджера и событие ОбработкаЗаполненияПараметровВыбора

Проанализируем работу платформы при обращении к справочнику из поля ввода. В 1С 8.3 существует специализированное событие ОбработкаЗаполненияПараметровВыбора, которое располагается в модуле менеджера объекта (в нашем случае — документа). Это системный механизм, позволяющий централизованно управлять отборами для всех форм документа сразу.

Как это работает? Когда пользователь нажимает кнопку выбора в поле ДоговорКонтрагента, платформа обращается к менеджеру документа. Если в нем прописана логика для конкретного реквизита, она формирует структуру отбора, которая затем передается в форму выбора справочника ДоговорыКонтрагентов.

Выясним, как найти этот код. Вам необходимо открыть модуль менеджера документа РеализацияТоваровУслуг и найти процедуру ОбработкаЗаполненияПараметровВыбора. В типовой «Бухгалтерии предприятия» там часто вызываются общие модули, которые на основании ВидаОперации документа жестко ограничивают массив доступных договоров.

Уровень 2: Программная установка в модуле формы

Если в модуле менеджера пусто, переходим к анализу формы. В документе Реализация для вида «Товары, услуги, комиссия» часто используется ФормаДокументаОбщая. Посмотрим на обработчик события ОбработкаВыбора для элемента ДоговорКонтрагента. Хотя это событие срабатывает после выбора, в нем часто заложена логика инициализации параметров для следующего открытия.

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


&НаКлиенте
Процедура ДоговорКонтрагентаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    
    ПараметрыДоговора = Новый Структура;
    ПараметрыДоговора.Вставить("Организация", Объект.Организация);
    ПараметрыДоговора.Вставить("Владелец", Объект.Контрагент);
    
    // Установка фиксированного вида договора программно
    ПараметрыДоговора.Вставить("ВидДоговора", ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СПокупателем"));
    
    // Вызов стандартного модуля БП для обработки логики
    РаботаСДоговорамиКонтрагентовБПКлиент.ДоговорОбработкаВыбора(Элемент, ВыбранноеЗначение, ПараметрыДоговора, СтандартнаяОбработка);
    
КонецПроцедуры

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

Уровень 3: Работа с общими модулями «РаботаСДоговорамиКонтрагентовБП»

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

При нажатии «Показать все» вызывается стандартное действие выбора. Если в форме документа программно (например, в ПриОткрытии или при изменении контрагента) была выполнена установка свойства Элементы.ДоговорКонтрагента.ПараметрыВыбора, то платформа автоматически передает эти данные в параметры открытия формы справочника.

Посмотрим, как обычно выглядит такая установка в общем модуле:


// Пример логики, которая может находиться в общем модуле
МассивВидовДоговоров = Новый Массив;
МассивВидовДоговоров.Добавить(Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
МассивВидовДоговоров.Добавить(Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером);

НовыйОтбор = Новый ПараметрыВыбора(Новый Структура("Отбор.ВидДоговора", МассивВидовДоговоров));
Элементы.ДоговорКонтрагента.ПараметрыВыбора = НовыйОтбор;

Как разрешить выбор любого договора?

Если ваша задача — убрать жесткое ограничение и позволить пользователю выбирать любой договор (например, «Прочее» или «С поставщиком» в реализации), вам необходимо выполнить следующие шаги:

  1. Проверить модуль менеджера. Найдите процедуру ОбработкаЗаполненияПараметровВыбора и убедитесь, что там нет жесткой вставки структуры Отбор для реквизита ДоговорКонтрагента. Если есть — используйте расширение, чтобы переопределить это поведение.
  2. Очистить программные фильтры в форме. В процедуре ПриСозданииНаСервере формы документа добавьте код, который очищает параметры выбора для элемента формы.
  3. Найти «Связи параметров выбора». Убедитесь, что отбор по контрагенту (владельцу) сохраняется, но отбор по ВидуДоговора удален.

Пример кода для очистки программных отборов в расширении формы:


&НаСервере
Процедура Изм_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Очищаем параметры выбора, установленные типовым кодом
    Элементы.ДоговорКонтрагента.ПараметрыВыбора = Новый ФиксированныйМассив(Новый Массив);
КонецПроцедуры

Подведем итоги

Мы выяснили, что «невидимые» отборы в 1С:Бухгалтерии 3.0 — это результат сложной работы механизмов платформы и БСП. Основными точками влияния являются Модуль менеджера и программное заполнение свойства ПараметрыВыбора через общие модули.

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

← На главную