Часто у начинающих разработчиков при работе с конфигурацией УПП или другими типовыми решениями возникает закономерный вопрос: почему я не могу найти настройки отбора, обращаясь к реквизитам справочника? Давайте разберем эту ситуацию по шагам и выясним, где на самом деле «живут» эти данные.
Первое, что необходимо осознать — это разница между данными в базе и объектами управления на форме. Когда вы открываете форму и видите в свойствах элемента управления параметр Данные: ПостроительОтчета.Отбор, это вовсе не означает, что у справочника в базе данных есть некое поле «Отбор».
ПостроительОтчета — это программный объект, который создается «на лету» в оперативной памяти сервера или клиента при открытии формы. Он служит инструментом для динамической настройки запросов. Следовательно, искать его внутри элемента справочника — логическая ошибка, так как сам справочник хранит только ссылки на объекты, а не состояние экранной формы.
Поскольку ПостроительОтчета является переменной модуля формы, доступ к его свойствам возможен только в контексте выполнения кода внутри этой самой формы. Если вы находитесь в другом модуле (например, в модуле объекта или модуле менеджера), напрямую обратиться к ПостроительОтчета.Отбор не получится, так как этого объекта в том контексте попросту не существует.
Разберем, как именно происходит обращение к элементам отбора внутри модуля формы. Объект ПостроительОтчета содержит коллекцию Отбор. Чтобы получить конкретное значение, нам необходимо перебрать эту коллекцию и проверить ПутьКДанным каждого элемента.
Рассмотрим пример кода, который позволяет считать значения из отбора:
// Предположим, мы находимся в модуле формы
// Перебираем коллекцию отбора
Для Каждого ЭлементОтбора Из ПостроительОтчета.Отбор Цикл
// Ищем нужный нам реквизит по пути к данным
Если ЭлементОтбора.ПутьКДанным = "СтатьяОборотов" Тогда
// Проверяем, включен ли отбор
Если ЭлементОтбора.Использование Тогда
Сообщить("Значение отбора: " + ЭлементОтбора.Значение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Важно помнить следующие ключевые моменты:
СохранениеНастроекПользователя или регистры сведений.ПостроительОтчета инициализируется в процедуре ПриОткрытии или при создании формы. До этого момента любые обращения к нему вернут значение Неопределено.Если ваша цель — получить данные, которые пользователь выбрал в отборе на форме, выполните следующие действия:
ПостроительОтчета.Для Каждого для обхода коллекции ПостроительОтчета.Отбор.ПутьКДанным с именем поля, которое вас интересует.Значение для получения данных, установленных пользователем.Таким образом, мы видим, что работа с отборами — это работа с объектной моделью формы, а не с метаданными справочника. Понимание того, что ПостроительОтчета существует только в оперативной памяти во время работы формы, снимает большинство вопросов, связанных с невозможностью «найти» отбор внутри элементов справочника.