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