Как настроить нумерацию строк и вывести список номенклатуры через запятую в кросс-таблице СКД?

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

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

Рассмотрим подробнее решение двух практических задач в СКД: вывод порядковых номеров строк и формирование списка номенклатуры с определенным признаком (например, «Возврат») через запятую в отдельной колонке.

Задача 1. Нумерация строк в структуре «Таблица»

Выясним причину, почему системные поля СистемныеПоля.НомерПоПорядку или СистемныеПоля.НомерПоПорядкуВГруппировке не выводятся или работают некорректно. Частая ошибка заключается в том, что в настройки группировки строк добавляют подряд сразу целую цепочку реквизитов (например, ЛистОбследования, Контрагент, Пациент, Профессия и т. д.). Из-за создания иерархии вложенных группировок контекст нумерации сбивается, и номер строки перестает выводиться на верхнем уровне.

Для решения этой проблемы разберем по шагам правильную настройку группировки строк:

  1. Перейдем в настройки отчета СКД к структуре Таблица.
  2. В настройках строк откроем иерархию и найдем нужную группировку строк.
  3. В окне Поля группировки оставим только один ключевой объект — например, ЛистОбследования или Регистратор.
  4. Перейдем на закладку Выбранные поля именно этой конкретной группировки (а не всего отчета на верхнем уровне).
  5. Добавим сюда все сопутствующие реквизиты объекта (Контрагент, Пациент, Профессия), которые должны выводиться в той же строке.
  6. Добавим в Выбранные поля этой группировки системное поле СистемныеПоля.НомерПоПорядкуВГруппировке.

Благодаря такому подходу отчет сохраняет строчный вид без лишних вложенных подгрупп, а системная нумерация начинает корректно вычисляться для каждой строки кросс-таблицы.

Также проанализируем альтернативный вариант вывода автономера через вычисляемые поля. В выражении поля или ресурса можно задействовать специализированную функцию языка выражений СКД:

ВычислитьВыражение("Автономер()", , "Группировка")

Задача 2. Вывод наименований номенклатуры через запятую по условию

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

Рассмотрим подробный алгоритм реализации:

  1. На закладке Вычисляемые поля добавим новое поле, например НоменклатураВозврат.
  2. В поле Выражение пропишем условие проверки признака возврата:

ВЫБОР КОГДА ЭтоВозврат = ИСТИНА ТОГДА Номенклатура.Наименование КОНЕЦ

  1. Перейдем на закладку Ресурсы и добавим вычисляемое поле НоменклатураВозврат в список ресурсов.
  2. В поле Выражение зададим агрегатную функцию для сбора уникальных наименований в одну строку:

СоединитьСтроки(Массив(Различные НоменклатураВозврат), ", ")

Важный нюанс настройки: В кросс-таблицах ресурсы по умолчанию рассчитываются на пересечении строк и колонок. Чтобы сформированный список товаров выводился в итоговой колонке всей строки, в настройках ресурса в поле Рассчитывать по... следует явно указывать группировку строк (например, ЛистОбследования), исключая расчет по колонкам и отдельным позициям номенклатуры.

← На главную