При построении сложных отчетов на базе Системы компоновки данных (СКД) в 1С разработчики часто сталкиваются с особенностями работы структуры Таблица (кросс-таблица). В отличие от обычного детального списка или простой группировки, вывод автонумерации и агрегирование текстовых строк в кросс-таблицах требуют специальной настройки группировок и ресурсов.
Рассмотрим подробнее решение двух практических задач в СКД: вывод порядковых номеров строк и формирование списка номенклатуры с определенным признаком (например, «Возврат») через запятую в отдельной колонке.
Выясним причину, почему системные поля СистемныеПоля.НомерПоПорядку или СистемныеПоля.НомерПоПорядкуВГруппировке не выводятся или работают некорректно. Частая ошибка заключается в том, что в настройки группировки строк добавляют подряд сразу целую цепочку реквизитов (например, ЛистОбследования, Контрагент, Пациент, Профессия и т. д.). Из-за создания иерархии вложенных группировок контекст нумерации сбивается, и номер строки перестает выводиться на верхнем уровне.
Для решения этой проблемы разберем по шагам правильную настройку группировки строк:
ЛистОбследования или Регистратор.Контрагент, Пациент, Профессия), которые должны выводиться в той же строке.СистемныеПоля.НомерПоПорядкуВГруппировке.Благодаря такому подходу отчет сохраняет строчный вид без лишних вложенных подгрупп, а системная нумерация начинает корректно вычисляться для каждой строки кросс-таблицы.
Также проанализируем альтернативный вариант вывода автономера через вычисляемые поля. В выражении поля или ресурса можно задействовать специализированную функцию языка выражений СКД:
ВычислитьВыражение("Автономер()", , "Группировка")
Посмотрим на пример задачи, когда требуется вывести в итоговой колонке строки перечень всех товаров, по которым оформлена операция возврата. В СКД для агрегации текстовых данных применяется функция СоединитьСтроки() в сочетании с обработкой массивов.
Рассмотрим подробный алгоритм реализации:
НоменклатураВозврат.
ВЫБОР КОГДА ЭтоВозврат = ИСТИНА ТОГДА Номенклатура.Наименование КОНЕЦ
НоменклатураВозврат в список ресурсов.
СоединитьСтроки(Массив(Различные НоменклатураВозврат), ", ")
Важный нюанс настройки: В кросс-таблицах ресурсы по умолчанию рассчитываются на пересечении строк и колонок. Чтобы сформированный список товаров выводился в итоговой колонке всей строки, в настройках ресурса в поле Рассчитывать по... следует явно указывать группировку строк (например, ЛистОбследования), исключая расчет по колонкам и отдельным позициям номенклатуры.