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