Как программно установить параметры во вложенную схему СКД?

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

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

Понимание структуры вложенных схем

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

Рассмотрим ситуацию: у нас есть основной отчет, и в его структуру (на вкладке «Настройки») добавлен «Вложенный отчет». У этого вложенного отчета есть свои параметры, которые мы хотим заполнить из кода перед формированием результата. Просто вызвать УстановитьЗначениеПараметра у основного компоновщика не получится — система выдаст ошибку, что параметр с таким именем не найден. Это логично, так как область видимости параметров основной схемы не включает в себя параметры вложенных схем по умолчанию.

Способ 1. Визуальная связь параметров (рекомендуемый)

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

  1. Откроем основную схему компоновки данных и перейдем на вкладку Настройки.
  2. В дереве структуры отчета выберем наш Вложенный отчет.
  3. В нижней части экрана (там, где мы обычно настраиваем выбранные поля и отборы) перейдем на вкладку Параметры. Обратите внимание: это параметры именно вложенного отчета!
  4. Найдем нужный параметр вложенной схемы. В колонке Значение мы можем выбрать не конкретную дату или число, а нажать на кнопку выбора типа и указать Поле компоновки данных.
  5. Здесь мы можем выбрать параметр из основной схемы.

Таким образом, мы «пробрасываем» значение: когда программно устанавливается параметр в основной схеме, СКД автоматически передает его во вложенную. Это исключает необходимость программного поиска вложенных объектов в структуре.

Способ 2. Программная установка через структуру настроек

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

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

Проанализируем пример кода для установки параметра:


// Предположим, что вложенный отчет — это первый элемент в структуре настроек
ИндексЭлемента = 0;
ЭлементСтруктуры = КомпоновщикНастроек.Настройки.Структура[ИндексЭлемента];

Если ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
    // Получаем доступ к параметрам конкретно этого вложенного отчета
    ПараметрыВложеннойСхемы = ЭлементСтруктуры.Настройки.ПараметрыДанных;
    
    // Устанавливаем значение
    ЗначениеПараметра = ПараметрыВложеннойСхемы.Найти("ДатаНачала");
    Если ЗначениеПараметра <> Неопределено Тогда
        ЗначениеПараметра.Значение = Объект.ДатаНачала;
        ЗначениеПараметра.Использование = Истина;
    КонецЕсли;
КонецЕсли;

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

Решение проблемы «Использование циклических параметров запрещено»

Часто при попытке связать параметры или установить их программно возникает критическая ошибка: «Использование циклических параметров запрещено». Давайте разберем, почему это происходит и как это исправить.

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

Для решения этой проблемы выполним следующие шаги:

  1. Переименование: Во вложенной схеме (на вкладке «Параметры») дадим параметру уникальное имя, например, Вл_КонецПериода.
  2. Проверка выражений: Убедимся, что в колонке «Выражение» параметров вложенной схемы нет ссылок на самих себя.
  3. Фигурные скобки: Используем расширение языка запросов. Если мы поместим использование параметра в запросе вложенной схемы в фигурные скобки, это даст СКД больше свободы в управлении ими.

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


ВЫБРАТЬ
    Продажи.Номенклатура,
    Продажи.СуммаОборот
ИЗ
    РегистрНакопления.Продажи.Обороты({&НачалоПериода}, {&КонецПериода}, , ) КАК Продажи

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

Работа с «потерянными» полями

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

Чтобы гарантировать видимость полей, выполним следующее:

  1. В настройках вложенного отчета (внутри основной схемы) явно проверим вкладку Выбранные поля.
  2. Если поля не отображаются, воспользуемся конструкцией ВЫБРАТЬ {Поле1, Поле2} в тексте запроса вложенной схемы. Фигурные скобки в секции ВЫБРАТЬ заставляют СКД всегда видеть эти поля как доступные для выбора в основной схеме, даже если они не включены в результат по умолчанию во вложенном запросе.

Использование «ОбъектНастройкиВладелец»

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

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

← На главную