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

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

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

Объектная модель настроек СКД

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

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

⚠️ Внимание: Прямое изменение свойств объекта настроек без использования специальных методов может привести к нарушению целостности структуры и ошибкам при последующей компоновке данных. Всегда используйте методы добавления и изменения, предоставляемые платформой.

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

Структура объекта НастройкиКомпоновкиДанных

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

Получение настроек из формы отчета

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

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

Рассмотрим пример получения настроек перед формированием отчета. Часто это делается в обработчике события ПриКоманде или перед вызовом метода СкомпоноватьРезультат. Вы можете скопировать объект настроек, чтобы работать с его копией, не затрагивая оригинал до момента подтверждения действий пользователем.

Процедура ПолучитьНастройкиИзФормы()

// Получаем текущие настройки из реквизита формы

ТекущиеНастройки = Объект.Настройки;

// Создаем копию для безопасной работы

КопияНастроек = ТекущиеНастройки.ПолучитьНастройки();

// Теперь можно анализировать КопияНастроек

КоличествоОтборов = КопияНастроек.Отборы.Количество();

КонецПроцедуры

Если форма использует механизм динамических списков или встроенную панель настроек, убедитесь, что данные синхронизированы. Иногда интерфейс позволяет пользователю изменить настройки визуально, но эти изменения не применяются к объекту данных до нажатия кнопки "ОК" или "Сформировать".

📊 Где вы чаще всего работаете с настройками СКД?
В форме отчета
Во внешнем обработчике
В консольной обработке
В веб-клиенте
В мобильном приложении

Работа с пользовательскими вариантами настроек

Платформа 1С позволяет пользователям сохранять свои варианты настроек для быстрого доступа в будущем. Программно эти варианты представлены коллекцией ВариантыНастроек. Каждый вариант имеет уникальное имя и содержит полный набор конфигурации отчета.

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

  • 📂 Имя варианта: строковое значение, уникальное в пределах отчета, используемое для идентификации.
  • ⚙️ Структура настроек: полный объект НастройкиКомпоновкиДанных, связанный с данным вариантом.
  • 👤 Владелец: возможность ограничения видимости варианта для конкретного пользователя или роли.
  • 💾 Хранилище: варианты могут храниться в информационной базе или в файле настроек пользователя.

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

⚠️ Внимание: При удалении или переименовании вариантов настроек программно убедитесь, что в данный момент ни один пользователь не использует этот вариант в активной сессии, чтобы избежать конфликтов блокировок.

Извлечение параметров и отборов

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

Каждый элемент коллекции параметров содержит имя параметра (соответствующее имени в схеме) и его значение. Попытка привести значение к неверному типу вызовет исключение runtime.

Элемент настройки Свойство объекта Тип данных значения Особенности доступа
Параметр даты Параметры.Найти("Период") Структура (Начало, Конец) Требует расшифровки структуры
Отбор по организации Отборы.Найти("Организация") Ссылка на объект Может быть списком значений
Флаг группировки ВыборПолей Булево Проверяется свойство Использование
Сортировка Сортировки Направление (Возр/Убыв) Имеет приоритет выполнения

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

💡

Используйте метод Найти() по имени параметра вместо перебора цикла, это ускорит работу кода и сделает его более читаемым. Убедитесь, что имя параметра совпадает с именем в схеме макета.

Сохранение и восстановление настроек

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

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

Процедура СохранитьВариантНастроек(ИмяВарианта)

Настройки = Объект.Настройки;

// Проверяем наличие варианта с таким именем

Вариант = Настройки.ВариантыНастроек.Найти(ИмяВарианта);

Если Вариант = Неопределено Тогда

Вариант = Настройки.ВариантыНастроек.Добавить();

Вариант.Наименование = ИмяВарианта;

КонецЕсли;

// Копируем текущие настройки в вариант

Вариант.Настройки = Настройки.ПолучитьНастройки();

// Сохраняем в базу

Настройки.ЗаписатьВариантыНастроек();

КонецПроцедуры

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

☑️ Алгоритм сохранения настроек

Выполнено: 0 / 5

Обработка ошибок и исключительных ситуаций

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

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

⚠️ Внимание: Версия схемы компоновки данных может измениться после обновления конфигурации. Всегда проверяйте совместимость сохраненных пользовательских вариантов после релиза новых версий отчетов.

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

💡

Всегда валидируйте объект настроек перед использованием: проверяйте наличие обязательных параметров и соответствие типов данных, чтобы избежать падения отчета в runtime.

Часто задаваемые вопросы (FAQ)

Как получить настройки СКД из внешнего обработчика?

Во внешний обработчик объект настроек передается как параметр команды или может быть считан из формы, если обработчик внедрен в форму. Используйте свойство Отчет.НастройкиКомпоновкиДанных, если у вас есть ссылка на объект отчета.

Можно ли программно изменить текст заголовка поля в настройках?

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

Почему настройки не сохраняются после закрытия формы?

Скорее всего, не вызван метод записи вариантов настроек или текущие настройки не были привязаны к конкретному сохраненному варианту. Убедитесь, что используется метод ЗаписатьВариантыНастроек() и у варианта есть имя.

Как очистить все пользовательские настройки программно?

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