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