Почему в отчете на СКД при открытии автоматически заполняется период и как этим управлять?

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

Разработчики отчетов на базе системы компоновки данных (СКД) нередко сталкиваются с ситуацией: при открытии отчета в режиме «1С:Предприятие» параметры Начало периода и Конец периода уже содержат конкретные даты. При этом в конфигураторе схема компоновки чиста — в ней не заданы фиксированные значения, а в модулях отчета, объекта или менеджера нет программного кода, заполняющего эти поля.

Разберем подробно, почему платформа подставляет эти значения, как работает штатный механизм пользовательских настроек и какие существуют способы управления заполнением параметров.

Причина поведения: механизм сохранения пользовательских настроек

Проанализируем работу платформы 1С:Предприятие с отчетами СКД. Если параметр отчета вынесен в блок Пользовательские настройки (соответствующий флажок установлен на вкладке «Настройки» в СКД), платформа по умолчанию берет на себя управление сохранением его состояния:

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

Чтобы быстро проверить, вызвано ли заполнение периода автосохранением настроек, выполним команду Еще -> Установить стандартные настройки (или «Сбросить настройки»). Если после этого поля очистились или вернулись к исходным значениям схемы — дело именно в пользовательских настройках.

Варианты настройки и управления параметрами периода

Рассмотрим основные подходы, позволяющие настроить поведение отчета в соответствии с требованиями задачи.

1. Использование динамических выражений в СКД

Если требуется, чтобы при открытии отчета даты всегда соответствовали актуальному периоду (например, началу и концу текущего месяца), лучшей практикой является использование динамических выражений языка СКД, а не фиксированных дат.

Разберем по шагам настройку схемы:

  1. Откроем схему компоновки данных и перейдем на вкладку Параметры.
  2. Для параметра НачалоПериода в колонке Выражение укажем: НачалоПериода(ТекущаяДата(), "Месяц").
  3. Для параметра КонецПериода в колонке Выражение укажем: КонецПериода(ТекущаяДата(), "Месяц").
  4. Если для выбора периода используется единый составной параметр типа СтандартныйПериод, выберем для него относительное значение, например, «Этот месяц» или «Этот день». При сбросе настроек период всегда будет рассчитываться динамически относительно текущей системной даты.

2. Отключение автоматического сохранения в форме отчета

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

  1. В дереве конфигурации откроем форму отчета.
  2. В палитре свойств формы найдем свойство АвтоматическоеСохранениеПользовательскихНастроек (или АвтосохранениеДанныхВФормеНастройках) и установим его в значение Ложь / Не использовать.
  3. Если необходимо отключить сохранение только конкретного параметра, на вкладке «Настройки» СКД в нижней панели параметров снимем признак включения данного параметра в пользовательские настройки.

3. Программная инициализация и сброс настроек при открытии

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

Посмотрим на пример сброса настроек к значениям по умолчанию в обработчике ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Схема = Отчет.ПолучитьСхемуКомпоновкиДанных();
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
КонецПроцедуры

Также можно явно установить нужные границы периода программно через параметры компоновщика настроек:


&НаСервере
Процедура УстановитьПериодПоУмолчанию()
    ЗначениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
    Если ЗначениеПараметра <> Неопределено Тогда
        ЗначениеПараметра.Значение = Новый СтандартныйПериод(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
        ЗначениеПараметра.Использование = Истина;
    КонецЕсли;
КонецПроцедуры

Администрирование и сброс сохраненных настроек

Если сохраненные настройки зафиксировались у пользователей некорректно, администратор системы может выполнить их очистку в режиме предприятия:

  1. Перейти в раздел Администрирование -> Настройки пользователей и прав -> Очистка настроек.
  2. Выбрать пользователя (или всех пользователей), найти проблемный отчет и выполнить очистку сохраненных настроек.
  3. Для выборочной очистки программным способом можно воспользоваться методом ХранилищеСистемныхНастроек.Удалить(...).
← На главную