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