Почему параметр программно сформированного отчета СКД отображается как Пустое значение и как это исправить

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

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

Разберем подробнее, почему возникают подобные симптомы и какими способами можно корректно передавать и отображать параметры СКД из кода.

Анализ причин проблемы

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


СКД = Документы.ПеремещениеТоваров.ПолучитьМакет("СКДНоменклатураДокументов");

ПараметрДокументы = СКД.НастройкиПоУмолчанию.ПараметрыДанных.Элементы[0];
ПараметрДокументы.Значение = МассивДокументов;
ПараметрДокументы.Использование = Истина;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, СКД.НастройкиПоУмолчанию);

В этом коде присутствуют две основные причины, приводящие к некорректному отображению:

  1. Передача объекта типа Массив напрямую в значение параметра. Движок запросов 1С умеет работать с массивами в условиях вида В (&Параметр), поэтому выборка данных отрабатывает правильно. Однако стандартный механизм формирования шапки отчета СКД рассчитывает получить представление объекта для вывода в табличный документ. У объекта Массив отсутствует встроенное текстовое представление, из-за чего компоновщик выводит строковый текст <Пустое значение>.
  2. Обращение к параметрам по индексу. Попытка получить параметр через Элементы[0] является ненадежной. Порядок параметров в схеме может измениться при редактировании макета в конфигураторе.

Способ 1. Использование объекта СписокЗначений вместо массива

Если параметр принимает список элементов (например, массив ссылок на документы или элементы справочника), наилучшим решением является использование объекта СписокЗначений. Платформа 1С умеет строить понятное текстовое представление для элементов списка значений в шапке отчета.

Рассмотрим, как преобразить массив в список значений и установить параметр:


// Создаем и заполняем список значений на основании массива
СписокДокументов = Новый СписокЗначений;
СписокДокументов.ЗагрузитьЗначения(МассивДокументов);

// Получаем настройки СКД
Настройки = СКД.НастройкиПоУмолчанию;

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

// Формируем макет компоновки с обновленными настройками
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки);

При таком подходе в схеме компоновки данных на вкладке "Параметры" у нужного параметра также рекомендуется проверить наличие флага "Доступен список значений".

Способ 2. Поиск параметра по имени через коллекцию Настройки

Если необходимо явно обратиться к элементу параметров данных в настройках компоновщика, используем метод УстановитьЗначениеПараметра() или функцию НайтиЗначениеПараметра():


ИмяПараметра = Новый ПараметрКомпоновкиДанных("Период");
ЗначениеПараметра = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ИмяПараметра);

Если ЗначениеПараметра <> Неопределено Тогда
    ЗначениеПараметра.Значение = КонецДня(ТекущаяДата());
    ЗначениеПараметра.Использование = Истина;
КонецЕсли;

Использование метода УстановитьЗначениеПараметра() предпочтительнее, так как оно автоматически включает флаг Использование = Истина и избавляет от поиска по индексам.

Способ 3. Отключение вывода служебных параметров

В случаях, когда параметр является техническим (например, передается служебная коллекция или массив структуры), и его вовсе не нужно выводить пользователю в шапку отчета, отображение параметров можно отключить:

  1. Откройте схему компоновки данных в конфигураторе.
  2. Перейдите на вкладку "Настройки", затем откройте оглавление "Другие настройки".
  3. Найдите пункт "Выводить параметры данных" и установите для него значение "Не выводить".

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

← На главную