Как запретить сохранение пользовательских настроек СКД при закрытии отчета в 1С?

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

При работе с отчетами на базе системы компоновки данных (СКД) пользователям часто требуется изменяемость состава полей, группировок или отборов во время сеанса. Однако на практике возникает необходимость, чтобы при повторном открытии отчета все внесенные изменения сбрасывались до первоначальных (стандартных) настроек. Рассмотрим, как реализовать подобное поведение платформы 1С:Предприятие различными способами.

Причина сохранения настроек платформой

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

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

Способ 1. Управление флагами модифицированности в управляемой форме

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

В управляемой форме отчета предусмотрены специальные свойства: ВариантМодифицирован и ПользовательскиеНастройкиМодифицированы. Если перед закрытием формы установить их в значение Ложь, платформа посчитает, что настройки не изменялись, и пропускает этап их записи.

Посмотрим на пример кода в модуле управляемой формы отчета:


&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    ВариантМодифицирован = Ложь;
    ПользовательскиеНастройкиМодифицированы = Ложь;
КонецПроцедуры

При выполнении этого кода форма закрывается без записи изменений в хранилище настроек.

Способ 2. Использование пользовательского хранилища настроек (без создания формы отчета)

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

Выполним следующие шаги:

  1. Создадим в дереве конфигурации объект типа Хранилище настроек.
  2. В свойствах отчета СКД в поле Хранилище настроек укажем созданный объект.
  3. В модуле объекта Хранилища настроек объявим стандартные экспортные процедуры и функции: Сохранить, Загрузить, ПолучитьСписок, Удалить.

Рассмотрим код модуля объекта пользовательского хранилища настроек:


Процедура Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя) Экспорт
    // Оставляем тело процедуры пустым, чтобы запись не производилась
КонецПроцедуры

Функция Загрузить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт
    // Возвращаем Неопределено, чтобы платформа загружала настройки по умолчанию из СКД
    Возврат Неопределено;
КонецФункции

Функция ПолучитьСписок(КлючОбъекта, ИмяПользователя) Экспорт
    Возврат Новый СписокЗначений;
КонецФункции

Процедура Удалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт
    // Пустая процедура
КонецПроцедуры

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

Способ 3. Перехват событий сохранения и загрузки на сервере

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

Вариант с очисткой при сохранении:

Используем событие формы ПриСохраненииПользовательскихНастроекНаСервере. Очистим состав сохраненных элементов:


&НаСервере
Процедура ПриСохраненииПользовательскихНастроекНаСервере(Настройки)
    Настройки.Элементы.Очистить();
КонецПроцедуры

Вариант с подменой при загрузке:

Используем событие формы ПриЗагрузкеПользовательскихНастроекНаСервере. При каждом открытии отчета будем принудительно устанавливать стандартные настройки схемы СКД:


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

Таким образом, мы проанализировали основные подходы к отключению сохранения пользовательских настроек в отчетах СКД. Выбор конкретного метода зависит от архитектуры отчета и необходимости создания собственной управляемой формы.

← На главную