При доработке или анализе типовых конфигураций на управляемых формах (1С:Комплексная автоматизация 2, 1С:ERP Управление предприятием) разработчики часто сталкиваются с ситуацией, когда в форме выбора плана счетов Хозрасчетный уже при открытии установлен жесткий отбор. При этом модуль самой формы выбора может быть практически пуст, а в обработчике ПриСозданииНаСервере нет явного кода наложения фильтров. Выясним причину такого поведения платформы и разберем, где именно задаются эти условия.
В управляемом интерфейсе 1С платформа берет на себя значительную часть работы по передаче контекста выбора. Проанализируем основные причины, почему в событии ПриОткрытии динамический список Список уже содержит отборы:
ПараметрыВыбора у элемента формы или реквизита объекта и накладывает эти условия на основной динамический список. В результате к моменту отработки клиентского события ПриОткрытии отбор уже сформирован платформой.ПриСозданииНаСервере вызывающего объекта с помощью вызова процедур общих модулей.Список в конфигураторе могут быть определены ФиксированныеНастройки, которые применяются всегда и не отображаются в обычном пользовательском отборе.ОбработкаПолученияДанныхВыбора и ОбработкаПолученияФормы.В конфигурациях 1С:КА 2 и 1С:ERP для управления отборами счетов используется типовой общий модуль БухгалтерскийУчетКлиентСервер. Рассмотрим ключевую процедуру, которая динамически настраивает состав счетов для полей ввода:
БухгалтерскийУчетКлиентСервер.ИзменитьПараметрыВыбораСчета(
ЭлементФормыСчет,
МассивСчетов,
ОтборПоПризнакуВалютный,
ОтборПоПризнакуЗабалансовый,
ОтборПоПризнакуСчетГруппа
);
Посмотрим на типовой механизм работы этой процедуры. Она принимает ссылку на элемент формы (поле ввода счета) и программно заполняет свойство ПараметрыВыбора, формируя массив структур отбора, например: Отбор.Забалансовый(Ложь) или Отбор.ЗапретитьИспользоватьВПроводках(Ложь). Поиск таких вызовов следует выполнять в модуле документа или справочника, в котором расположено поле выбора счета, а не в модуле формы самого плана счетов.
Разберем по шагам варианты корректировки отбора в зависимости от поставленной задачи.
Вариант 1. Изменение параметров выбора на вызывающей форме
Если необходимо изменить список доступных счетов для конкретного поля ввода в документе, правильнее всего скорректировать коллекцию ПараметрыВыбора на стороне вызывающей формы:
// Очистка параметров выбора для отображения всех счетов без ограничений
Элементы.СчетУчета.ПараметрыВыбора = Новый ФиксированныйМассив(Новый Массив);
Либо можно переопределить стандартное открытие через обработчик НачалоВыбора поля ввода:
&НаКлиенте
Процедура СчетУчетаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
// Открываем форму выбора без навязанных отборов
ОткрытьФорму("ПланСчетов.Хозрасчетный.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
Вариант 2. Программное отключение отбора внутри формы выбора
Если требуется снять ограничения непосредственно при открытии формы выбора (например, при доработке через расширение), можно отключить элементы отбора динамического списка в процедуре ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Отключение переданных платформой элементов отбора
Для Каждого ЭлементОтбора Из Список.Отбор.Элементы Цикл
ЭлементОтбора.Использование = Ложь;
КонецЦикла;
// При необходимости очистка фиксированных настроек
Список.ФиксированныеНастройки.Отбор.Элементы.Очистить();
КонецПроцедуры
При настройке динамических списков важно помнить о следующих платформенных особенностях:
ФиксированныеНастройки, не могут быть изменены пользователем через форму «Настроить список» в режиме «1С:Предприятие» — управлять ими можно исключительно программно.ГДЕ), отключить его через свойство Список.Отбор невозможно. В таком случае требуется менять текст запроса либо передавать новые значения в коллекцию Список.Параметры.