Где настраивается отбор в форме выбора плана счетов в 1С:КА 2 и ERP?

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

При доработке или анализе типовых конфигураций на управляемых формах (1С:Комплексная автоматизация 2, 1С:ERP Управление предприятием) разработчики часто сталкиваются с ситуацией, когда в форме выбора плана счетов Хозрасчетный уже при открытии установлен жесткий отбор. При этом модуль самой формы выбора может быть практически пуст, а в обработчике ПриСозданииНаСервере нет явного кода наложения фильтров. Выясним причину такого поведения платформы и разберем, где именно задаются эти условия.

Почему отбор появляется в форме выбора автоматически

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

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

Где искать код установки отборов в типовых конфигурациях

В конфигурациях 1С:КА 2 и 1С:ERP для управления отборами счетов используется типовой общий модуль БухгалтерскийУчетКлиентСервер. Рассмотрим ключевую процедуру, которая динамически настраивает состав счетов для полей ввода:


БухгалтерскийУчетКлиентСервер.ИзменитьПараметрыВыбораСчета(
    ЭлементФормыСчет, 
    МассивСчетов, 
    ОтборПоПризнакуВалютный, 
    ОтборПоПризнакуЗабалансовый, 
    ОтборПоПризнакуСчетГруппа
);

Посмотрим на типовой механизм работы этой процедуры. Она принимает ссылку на элемент формы (поле ввода счета) и программно заполняет свойство ПараметрыВыбора, формируя массив структур отбора, например: Отбор.Забалансовый(Ложь) или Отбор.ЗапретитьИспользоватьВПроводках(Ложь). Поиск таких вызовов следует выполнять в модуле документа или справочника, в котором расположено поле выбора счета, а не в модуле формы самого плана счетов.

Способы переопределения и снятия отбора

Разберем по шагам варианты корректировки отбора в зависимости от поставленной задачи.

Вариант 1. Изменение параметров выбора на вызывающей форме

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


// Очистка параметров выбора для отображения всех счетов без ограничений
Элементы.СчетУчета.ПараметрыВыбора = Новый ФиксированныйМассив(Новый Массив);

Либо можно переопределить стандартное открытие через обработчик НачалоВыбора поля ввода:


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

Вариант 2. Программное отключение отбора внутри формы выбора

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


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

Ограничения платформы при работе с отборами

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

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