Как вывести код и наименование иерархически в отчете СКД и настроить параметры?

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

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

Почему не выводится код у групп при иерархическом выводе в СКД

Выясним причину такого поведения платформы. Когда в настройках структуры отчета для группировки устанавливается тип Иерархия или Только иерархия, система компоновки данных самостоятельно достраивает недостающие родительские узлы дерева, которых физически нет в детальных записях результата запроса. Для таких виртуальных узлов СКД получает только саму ссылку и её стандартное представление. Поля, выбранные через точку (например, СтатьяРасходов.Код), для промежуточных групп не заполняются и остаются пустыми (NULL).

Рассмотрим способы решения этой задачи:

  1. Использование выражения представления в СКД (рекомендуемый способ): перейдем на вкладку Наборы данных и в таблице полей для поля ссылки (например, СтатьяРасходов) укажем в колонке Выражение представления: Строка(СтатьяРасходов.Код) + " " + Строка(СтатьяРасходов.Наименование) В этом случае СКД автоматически вычислит строковое представление как для конечных элементов, так и для всех вышестоящих групп иерархии без изменения запроса.
  2. Склеивание полей в тексте запроса: если требуется вывести код и наименование одной строкой в рамках детальных записей, можно объединить их прямо в запросе:
    
    ВЫБРАТЬ
        РасходыПоСобственникам.СтатьяРасходов.Код + ", " + РасходыПоСобственникам.СтатьяРасходов.Наименование КАК СтатьяПредставление,
        РасходыПоСобственникам.Сумма КАК Сумма
    ИЗ
        РегистрНакопления.АР_РасходыПоСобственникам КАК РасходыПоСобственникам
    

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

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

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

Почему отчет СКД формирует пустой результат при наличии данных

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

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

Настройка собственного представления регистратора и расшифровки

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


"Списание р/с " + Регистратор.Номер + " от " + Формат(Регистратор.Дата, "ДФ=dd.MM.yyyy")

Для программной передачи параметров в отчет-расшифровку при клике по ячейке отчета проанализируем обработчик РезультатОбработкаРасшифровки в модуле формы отчета:


&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    // Получаем контекст кликнутой ячейки на сервере
    ПараметрыОтчета = ПолучитьПараметрыРасшифровкиНаСервере(Расшифровка);
    
    // Открываем форму отчета-расшифровки с переданными отборами
    ОткрытьФорму("Отчет.АР_РасходыПоСобственникам.Форма", Новый Структура("Отбор, СформироватьПриОткрытии", ПараметрыОтчета, Истина), ЭтотОбъект);
КонецПроцедуры

&НаСервере
Функция ПолучитьПараметрыРасшифровкиНаСервере(Знач ИдентификаторРасшифровки)
    СтруктураОтбора = Новый Структура;
    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    
    Если Данные <> Неопределено И ИдентификаторРасшифровки <> Неопределено Тогда
        Элемент = Данные.Элементы[ИдентификаторРасшифровки];
        МассивРодителей = Элемент.ПолучитьРодителей();
        Для Каждого Родитель Из МассивРодителей Цикл
            Для Каждого Поле Из Родитель.ПолучитьПоля() Цикл
                СтруктураОтбора.Вставить(Строка(Поле.Поле), Поле.Значение);
            КонецЦикла;
        КонецЦикла;
    КонецЕсли;
    
    Возврат СтруктураОтбора;
КонецФункции

Обязательным условием работы расшифровки является сохранение адреса объекта ДанныеРасшифровкиКомпоновкиДанных во временном хранилище при вызове метода СкомпоноватьРезультат(Элементы.Результат, ДанныеРасшифровки).

← На главную