В форме 1С не удаляются связи параметров выбора: почему сохраняется отбор и как это исправить?

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

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

Причина: наследование настроек из метаданных

Проанализируем механику работы платформы с параметрами выбора. Механизм фильтрации значений ссылочных типов может быть настроен на двух уровнях:

  1. На уровне объекта метаданных: в свойствах самого реквизита (справочника, документа, табличной части).
  2. На уровне элемента формы: в свойствах конкретного поля ввода формы.

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

Способ 1. Изменение связей параметров выбора в дереве метаданных

Разберем по шагам, как проверить и скорректировать настройки на уровне метаданных:

  1. Откроем дерево метаданных конфигурации.
  2. Найдем интересующий объект (например, документ РасходСоСчета) и перейдем к списку его реквизитов.
  3. Откроем палитру свойств целевого реквизита (например, СчетПолучателя или СчетКонтрагента).
  4. Перейдем на закладку Представление.
  5. Найдем свойство Связи параметров выбора. Если там указаны условия (например, отбор по валюте или владельцу), удалим или скорректируем ненужные строки.

Способ 2. Программное переопределение связей параметров выбора

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

Свойство элемента формы СвязиПараметровВыбора представляет собой ФиксированныйМассив, поэтому его нельзя модифицировать напрямую методами Добавить() или Очистить(). Для изменения необходимо сформировать новый массив объектов СвязьПараметраВыбора и присвоить его свойству элемента.

Посмотрим на пример полной очистки всех связей параметров выбора, унаследованных из метаданных:


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

Если требуется оставить только часть отборов (например, сохранить отбор по владельцу счета, но исключить отбор по валюте), сформируем новую коллекцию связей:


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

Способ 3. Переопределение выбора через событие «НачалоВыбора»

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


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

Важные нюансы при работе с параметрами выбора

  1. Влияние на ввод по строке и быстрый выбор: Свойство СвязиПараметровВыбора ограничивает не только список в форме выбора, но и результаты автоподбора при вводе текста в поле. Если фильтрация отключается в НачалоВыбора, ввод по строке продолжит использовать правила метаданных, если они не были переопределены на сервере или в модуле менеджера объекта.
  2. Типовые механизмы БСП и конфигураций: В типовых решениях (УНФ, ERP, КА, УТ) параметры выбора полей часто дополнительно настраиваются в служебных процедурах при изменении ключевых реквизитов (например, при смене вида операции документа). При доработке следует проверить, не перезаписываются ли параметры выбора в коде процедур формы ПриЧтенииНаСервере или обработчиках связанных полей.
← На главную