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

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

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

Разбор ошибки при создании ОписаниеТипов

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

Чтобы корректно определить тип для колонки, необходимо использовать механизм Массив типов. Рассмотрим пошаговый алгоритм правильной инициализации:

  1. Создаем пустой массив, в который будем добавлять разрешенные типы данных.
  2. Используем функцию Тип(), передавая ей строковое представление метаданных.
  3. Создаем объект ОписаниеТипов на основе сформированного массива.
  4. Применяем полученное описание при добавлении колонки в коллекцию Колонки дерева значений.

Пример правильного кода для создания колонки

Давайте посмотрим, как это выглядит на практике. Использование Массив типов позволяет платформе корректно распознать ссылку на нужный объект конфигурации:


// 1. Создаем массив типов
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг"));

// 2. Создаем описание типов на основе массива
ОписаниеТиповДляКолонки = Новый ОписаниеТипов(МассивТипов);

// 3. Добавляем колонку в дерево значений
КопияДерева.Колонки.Добавить("Реализация", ОписаниеТиповДляКолонки);

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

Проблема кэширования внешних отчетов

Еще один важный вопрос, который часто возникает при разработке: почему после сохранения правок во внешнем отчете (файл .erf или .epf) исполняется старый код? Это классическая проблема кэширования 1С.

Рассмотрим основные причины и способы решения:

Особенности отображения в СКД

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

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

  1. Колонка доступна в источнике данных.
  2. В настройках отчета (в дизайнере СКД) поле добавлено в выбранные поля или структуру группировок.
  3. Если используется передача дерева как параметра, проверьте корректность заполнения этого параметра данными перед вызовом СкомпоноватьРезультат.

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

← На главную