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

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

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

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

Понимаем жизненный цикл настроек СКД

Прежде чем погружаться в код, давайте рассмотрим, как работают настройки в СКД и в какой последовательности они загружаются. Это ключевой момент для понимания, почему наши настройки могут "сбрасываться".

  1. Настройки варианта отчета: Это базовые настройки, определенные в конфигураторе или в режиме предприятия при создании варианта отчета. Они являются основой.
  2. ПользовательскиеНастройки: Это настройки, которые конечный пользователь сохраняет для себя. Они применяются "поверх" настроек варианта отчета. Если пользователь изменил отбор или параметр и сохранил его, эти значения будут приоритетными.
  3. ФиксированныеНастройки: Это настройки, которые обычно задаются программно и не доступны для изменения пользователем. Важно, чтобы они не пересекались с пользовательскими, чтобы избежать путаницы.

Платформа 1С имеет определенную последовательность загрузки этих настроек, которая происходит на сервере:

  1. Сначала загружаются настройки варианта отчета.
  2. Затем вызываются серверные процедуры формы: ПередЗагрузкойВариантаНаСервере() и ПриЗагрузкеВариантаНаСервере().
  3. После этого платформа пытается загрузить пользовательские настройки, сохраненные пользователем при последнем формировании отчета. Эти настройки накладываются на уже загруженные настройки варианта.
  4. И только затем вызываются процедуры ПередЗагрузкойПользовательскихНастроекНаСервере() и ПриЗагрузкеПользовательскихНастроекНаСервере().

Главная причина "сброса" наших настроек: Если мы пытаемся установить программные значения в ПередЗагрузкойВариантаНаСервере(), а у пользователя есть сохраненные пользовательские настройки (например, он изменил тот же параметр), то его сохраненные настройки перезапишут наши. Именно поэтому мы видим, что "все встает на места как должно быть" при нажатии "Установить стандартные настройки" – ведь при этом пользовательские настройки игнорируются.

Ключевые механизмы и объекты СКД

Давайте подробнее рассмотрим объекты и свойства, которые нам понадобятся для эффективного управления настройками.

ИдентификаторПользовательскойНастройки

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

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


ЭлементОтбора.ИдентификаторПользовательскойНастройки = "МойУникальныйОтбор";

Серверные события формы отчета СКД

Мы уже упоминали их, но давайте проанализируем их роль подробнее:

"Автосохранение данных"

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

"Режим отображения = Быстрый выбор" (Быстрый доступ)

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


ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;

Решение проблемы: Корректное управление настройками

Теперь, когда мы понимаем механизмы, давайте разберем по шагам, как правильно управлять настройками.

1. Переопределение пользовательских настроек в ПередЗагрузкойПользовательскихНастроекНаСервере

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

Рассмотрим подробнее шаги:

  1. Получаем доступ к текущим настройкам: В этой процедуре мы работаем с объектом Настройки.
  2. Очищаем существующие пользовательские настройки (при необходимости): Если наша цель – полностью перезаписать то, что сохранил пользователь.
  3. 
    Настройки.Элементы.Очистить(); 
    
  4. Программно добавляем или изменяем параметры/отборы: Теперь мы можем добавлять свои элементы.

Посмотрим на пример программного добавления отбора:


// В процедуре ПередЗагрузкойПользовательскихНастроекНаСервере(Настройки)
// ...
НовыйОтбор = ТекущиеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовыйОтбор.ПравоеЗначение = Справочники.Организации.НайтиПоКоду("000000001"); 
НовыйОтбор.Использование = Истина;
НовыйОтбор.ИдентификаторПользовательскойНастройки = "ОтборПоОрганизацииПоУмолчанию";
НовыйОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
// ...

2. Инициализация настроек для первого открытия в ПередЗагрузкойВариантаНаСервере

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

Дополнительные полезные практики

  1. Очистка пользовательских настроек: Для полного сброса используйте метод КомпоновщикНастроек.ПользовательскиеНастройки.Очистить().
  2. Оптимизация сложных отчетов: В случаях, когда отчет строится на основе внешних данных, может потребоваться оптимизация отчетов с набором данных - объект, что часто влечет за собой использование нескольких схем компоновки.
  3. Работа с несколькими схемами: В сложных архитектурных решениях иногда оправдано использование двух разных схем в одном отчете СКД для разделения логики подготовки данных и их визуализации.
  4. Использование фиксированных настроек: Для отборов, которые пользователь не должен изменять, используйте КомпоновщикНастроек.ФиксированныеНастройки.

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

← На главную