СКД. Вывод информации табличной части в одну ячейку.

Использование нескольких схем компоновки данных в одном отчете
Выгрузка отчета в таблицу/дерево значений

1) Использование функции СКД - СоединитьСтроки().


У данного способа, как мне кажется, есть минус, но он работает, но минус большой. Рассмотрим на примере: имеется в конфигурации документ "Поступление товара" с табличной частью "Товары", необходимо вывести в отчет документы и наименования поступившего товара для каждого документа.

Создадим отчет, добавим основную схему компоновки данных, в СКД добавим набор данных типа "запрос" и сформируем простенький запрос (см. рисунок 1).
Рисунок 1. Запрос набора данных
На вкладке "Вычисляемые поля" добавим вычисляемое поле под названием ТабличнаяЧасть и в колонке Выражение укажем пустую строку (см. рисунок 2).
Рисунок 2. Вычисляемое поле "Табличная часть"
Наше вычисляемое поле будет использоваться как ресурс, поэтому на вкладке "Ресурсы" задаем выражение группировки: СоединитьСтроки(Массив(Товары.Номенклатура),,""). А так же указываем, что рассчитывать данный ресурс нужно по полю Ссылка (см. рисунок 3).
Рисунок 3. Выражение ресурса
Перейдем на вкладку "Настройки" и создадим настройку по выводу данных - это будет группировка по реквизитам Ссылка, Контрагент, Организация (см. рисунок 4).
Рисунок 4. Настройка вывода в отчет
Результат работы отчета:
Рисунок 5. Результат работы отчета
О минусе - это использование группировки, в нашем случае выполняется группировка по реквизиту Ссылка, иначе работать не будет. Наличие группировки накладывает некоторые ограничения по настройке вывода данных (см. рисунок 4).

Скачать пример отчета

2) Вызов собственной функции из общего модуля.


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

Создадим отчет, добавим основную схему компоновки данных, в СКД добавим набор данных типа "запрос" и сформируем простенький запрос (см. рисунок 6).
Рисунок 6. Запрос набора данных
Создадим общий модуль _ДемоРаботаСОтчетами и напишем экспортную функцию ПолучитьПереченьТоваровДляОтчета(). Программный код функции смотри ниже.
На вкладке "Вычисляемые поля" добавим вычисляемое поле под названием ТабличнаяЧасть и в колонке Выражение укажем вызов функции из общего модуля (см. рисунок 2):
_ДемоРаботаСОтчетами.ПолучитьПереченьТоваровДляОтчета(Ссылка)

Рисунок 7. Вызов функции в СКД из общего модуля
Перейдем на вкладку "Настройки" и создадим настройку по выводу данных - это будет детальная запись (см. рисунок 8).
Рисунок 8. Настройка детальной записи
Результат работы отчета:
Рисунок 9. Результат работы отчета

Скачать пример отчета

Что нужно знать при использовании данного способа:
1) Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Например:
СокращенноеНаименование(Ссылка, Дата, Номер)
2) При программном формировании отчета использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных (4-ый параметр):
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

3) Функции общих модулей не могут быть использованы в выражениях пользовательских полей.
4) Если при формировании отчета вызывается исключение с указанием на функцию общего модуля, проверьте контекст выполнения модуля (см. рисунок 9).
Рисунок 9. Контекст выполнения общего модуля

Описание использованных функций


СоединитьСтроки (Значение, РазделительЭлементов, РазделителиКолонок) - предназначена для объединения строк в одну строку.
  • Значение - выражения, которые нужно объединить в одну строку. Если является Массивом, то в строку будут объединяться элементы массива. Если является ТаблицаЗначений, то в строку будут объединяться все колонки и строки таблицы;
  • РазделительЭлементов - строка, содержащая текст, который нужно использовать в качестве разделителя между элементами массива и строками таблицы значений. По умолчанию – символ перевода строк;
  • РазделителиКолонок -строка, содержащая текст, который нужно использовать в качестве разделителя между колонками таблицы значений. По умолчанию "; ".

Массив([Различные] Выражение) - в качестве параметра можно использовать таблицу значений. При этом результатом работы функции будет массив, содержащий значения первой колонки таблицы значений, переданной в качестве параметра. Если выражение содержит функцию Массив, то считается, что данное выражение является агрегатным. Если указано ключевое слово Различные, то получаемый массив не будет содержать дублирующихся значений.

ПолучитьПереченьТоваровДляОтчета(ДокументСсылка) - функция формирует строку с перечнем поступившего товара.
// Параметры:
//  ДокументСсылка  - ДокументСсылка.ПоступлениеТовара - Документ "Поступление товара".
//
// Возвращаемое значение:
//   Строка   - строка с перечнем товаров.
//
Функция ПолучитьПереченьТоваровДляОтчета(ДокументСсылка) Экспорт

ПереченьТоваров = "";

Для Каждого СтрокаТЧ Из ДокументСсылка.Товары Цикл
ПереченьТоваров = ПереченьТоваров + СтрокаТЧ.Номенклатура;
ПереченьТоваров = ПереченьТоваров + Символы.ПС;
КонецЦикла;

Возврат ПереченьТоваров;

КонецФункции // ПолучитьПереченьТоваровДляОтчета()


Комментарии

Отправить комментарий