При работе с Системой Компоновки Данных (СКД) в 1С часто возникает ситуация, когда мы ищем определенные элементы или "участки схемы" в конструкторе отчета, но не можем их обнаружить. Это может быть связано с тем, что некоторые свойства и механизмы СКД предназначены для программного управления, а не для прямого визуального редактирования в конструкторе. В этой статье мы подробно разберем, что именно искали участники форума под термином "блок-схемы", и как работать с такими программно управляемыми элементами, в частности, со свойством ДополнительныеСвойства объекта НастройкиКомпоновкиДанных.
Прежде всего, давайте проясним терминологию. Термин "блок-схемы" не является стандартным для описания элементов в конструкторе СКД. Вероятнее всего, автор вопроса имел в виду некоторую визуальную структуру или логику, которую он ожидал увидеть и редактировать в графическом виде. Однако, Система Компоновки Данных представляет собой декларативный механизм: мы описываем, какой результат хотим получить (наборы данных, поля, группировки, ресурсы, параметры), а система сама определяет алгоритм его формирования. Конструктор СКД предлагает структурированный интерфейс с вкладками (такими как "Наборы данных", "Вычисляемые поля", "Ресурсы", "Параметры", "Макеты"), а не графический редактор блок-схем в традиционном понимании.
Иногда, для лучшего понимания архитектуры СКД, мы можем встретить концептуальные схемы, иллюстрирующие взаимосвязь ее основных элементов. Но это лишь объяснительные диаграммы, а не то, что можно редактировать в конструкторе.
Одной из причин, по которой мы не видим определенный "участок схемы" в конструкторе, является то, что он может представлять собой программно устанавливаемые данные, а не визуальный элемент. В данном случае, речь идет о свойстве НастройкиКомпоновкиДанных.ДополнительныеСвойства.
Рассмотрим подробнее это свойство:
НастройкиКомпоновкиДанных (DataCompositionSettings). Это объект, который хранит все настройки компоновки данных, такие как группировки, отборы, порядок, условное оформление и т.д.ДополнительныеСвойства (AdditionalProperties).Структура и предназначено для хранения произвольных значений, которые мы хотим связать с текущими настройками компоновки данных.НастройкиКомпоновкиДанных и не редактируется напрямую в конструкторе СКД. Мы можем программно устанавливать значения в эту структуру.Таким образом, когда мы ищем что-то, что выглядит как часть схемы, но не находится в конструкторе, есть вероятность, что это именно такие программно управляемые данные.
Предположим, нам необходимо передать в отчет некий служебный идентификатор или флаг, который будет использоваться в обработчиках событий СКД или в модуле объекта отчета. Мы можем установить его следующим образом:
// Получаем объект компоновщика настроек или настроек компоновки данных.
// Например, из формы отчета:
// КомпоновщикНастроек = ОтчетОбъект.КомпоновщикНастроек;
// Настройки = КомпоновщикНастроек.Настройки;
// Или если у вас есть схема компоновки данных и вы формируете настройки программно:
СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
// ДополнительныеСвойства всегда возвращает Структуру, возможно пустую.
// Мы можем добавлять в нее элементы.
Если Настройки.ДополнительныеСвойства <> Неопределено Тогда
Настройки.ДополнительныеСвойства.Вставить("ИдентификаторЗадания", "UUID_ABC123");
Настройки.ДополнительныеСвойства.Вставить("ТребуетсяДетализация", Истина);
Настройки.ДополнительныеСвойства.Вставить("ДатаФормирования", ТекущаяДата());
Сообщить("Дополнительные свойства успешно установлены.");
Иначе
Сообщить("Ошибка: Свойство ДополнительныеСвойства недоступно или неопределено.");
КонецЕсли;
// После установки свойств, эти настройки передаются в компоновщик
// и далее в процесс формирования отчета.
// КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
После того как мы установили дополнительные свойства, мы можем получить их в других частях программы, например, в обработчиках событий СКД (таких как ПриКомпоновкеРезультата) или в модуле отчета:
// В модуле объекта отчета или в расширении СКД,
// где доступен объект НастройкиКомпоновкиДанных.
// Например, в обработчике события ПриКомпоновкеРезультата для отчета:
// Параметры = Объект.КомпоновщикНастроек.Настройки.ДополнительныеСвойства;
// Или если мы работаем с полученными настройками из внешнего источника:
НастройкиОтчета = ПолучитьНастройкиИзХранилища(); // Пример функции получения настроек
Если НастройкиОтчета.ДополнительныеСвойства <> Неопределено Тогда
// Проверяем наличие конкретного свойства
Если НастройкиОтчета.ДополнительныеСвойства.Свойство("ИдентификаторЗадания") Тогда
Идентификатор = НастройкиОтчета.ДополнительныеСвойства.ИдентификаторЗадания;
Сообщить("Получен идентификатор задания: " + Идентификатор);
КонецЕсли;
Если НастройкиОтчета.ДополнительныеСвойства.Свойство("ТребуетсяДетализация") Тогда
Детализация = НастройкиОтчета.ДополнительныеСвойства.ТребуетсяДетализация;
Если Детализация Тогда
Сообщить("Для отчета требуется детализация.");
КонецЕсли;
КонецЕсли;
Иначе
Сообщить("Дополнительные свойства в настройках не найдены.");
КонецЕсли;
Таким образом, свойство ДополнительныеСвойства предоставляет мощный механизм для расширения функциональности отчетов СКД без необходимости изменения их базовой структуры или добавления новых параметров в схему.
Один из участников форума упомянул, что "конструктор не удаляет из схемы старые варианты". Это замечание касается управления пользовательскими вариантами отчетов. Давайте разберем этот аспект:
ХранилищеВариантовОтчетов) и манипулировать ими.ОграничениеИспользования: Для отдельных полей, параметров или ресурсов в схеме СКД существует свойство ОграничениеИспользования. Оно позволяет ограничить их видимость или использование в настройках компоновки, но это не приводит к физическому удалению из схемы. Это полезно для контроля над тем, что пользователь может изменять или видеть в отчете.Важно помнить, что СКД позволяет нам не только использовать конструктор, но и полностью программно создавать, изменять и управлять схемой компоновки данных и ее настройками. Это дает возможность динамически добавлять наборы данных, поля, группировки, устанавливать параметры и отборы, что бывает необходимо для сложных отчетов или для адаптации типовых решений под специфические требования.
Помимо свойства ДополнительныеСвойства для настроек СКД, в 1С существует более общий механизм "дополнительных характеристик" или "дополнительных реквизитов". Этот механизм позволяет пользователям в режиме "1С:Предприятие" без изменения конфигурации создавать новые свойства для объектов информационной базы (например, для элементов справочников "Номенклатура", "Контрагенты" или "ФизическиеЛица").
Когда мы работаем с отчетами СКД, эти дополнительные характеристики могут быть использованы в качестве обычных полей:
В конструкторе СКД эти дополнительные характеристики обычно отображаются как "вложенные поля" объектов, например, "Номенклатура.ДополнительныеРеквизиты.Цвет" или "Контрагент.ДополнительныеРеквизиты.Категория". Этот механизм может быть связан с исходным вопросом, если пользователь пытался прикрепить дополнительные данные к сущностям отчета, а не к его общим настройкам.
При отладке отчетов со сложными схемами СКД, особенно когда много параметров и настроек устанавливаются программно, обычные методы отладки могут быть недостаточными. В таких случаях мы рекомендуем использовать консоль СКД. Этот инструмент позволяет:
Использование консоли СКД значительно упрощает анализ сложных схем и позволяет нам точно видеть, какие данные и настройки передаются в компоновщик, что помогает выявить ошибки и оптимизировать работу отчетов.
Таким образом, "блок-схемы" в конструкторе СКД — это, скорее всего, недопонимание. Мы работаем с декларативным описанием, а не с графическим алгоритмом. Если мы ищем способ передать дополнительные данные или управлять поведением отчета вне стандартных параметров, свойство ДополнительныеСвойства объекта НастройкиКомпоновкиДанных является ключевым инструментом для программного решения таких задач, а консоль СКД — незаменимым помощником при отладке.