Как использовать функцию ВычислитьВыражениеСГруппировкойТаблицаЗначений в СКД?

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

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

Рассмотрим подробно варианты применения этой функции, особенности работы с объектом ТаблицаЗначений в языке выражений СКД, а также альтернативные способы решения подобных задач.

Практический сценарий использования

Основное назначение функции ВычислитьВыражениеСГруппировкойТаблицаЗначений — скомпоновать данные в виде таблицы в контексте указанной группировки для их последующего объединения или форматированного вывода.

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

С помощью рассматриваемой функции формируется таблица значений со списком товаров, после чего к ней применяется функция слияния строк СоединитьСтроки:


СоединитьСтроки(Массив(ВычислитьВыражениеСГруппировкойТаблицаЗначений("Номенклатура КАК Товар", "Номенклатура"), "Товар"), ", ")

Ограничения языка выражений СКД и методы обработки ТЗ

Проанализируем специфику работы с коллекцией ТаблицаЗначений внутри формул СКД. В языке выражений СКД нет прямого синтаксиса для обращения к элементам по индексу (нельзя написать ТЗ[0].Колонка или вызвать метод ТЗ.Получить()). Также в формуле невозможно сделать обход строк циклом.

Для обработки полученной таблицы значений платформа 1С предоставляет ряд встроенных функций:

  1. СоединитьСтроки(ТЗ, РазделительСтрок, РазделительКолонок) — объединяет строки и колонки таблицы значений в единую текстовую строку.
  2. Массив(ТЗ, "ИмяКолонки") — извлекает все значения указанной колонки из таблицы значений в виде обычного массива.
  3. Упорядочить(ТЗ, "ИмяКолонки Возр") — сортирует строки таблицы значений по заданной колонке.
  4. Свернуть(ТЗ, "КолонкиГруппировки", "КолонкиСуммирования") — сворачивает дубли по группировочным колонкам с суммированием числовых полей.
  5. ПолучитьЧасть(Коллекция, Индекс, Количество) — извлекает срез элементов из массива или таблицы значений.

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

Если из таблицы значений требуется извлечь конкретное поле для первой или N-й строки, примените комбинацию функций Массив и ПолучитьЧасть.

Посмотрим на пример извлечения первой строки из массива значений колонки:


ПолучитьЧасть(Массив(ВычислитьВыражениеСГруппировкойТаблицаЗначений("Номенклатура КАК Товар", "Номенклатура"), "Товар"), 0, 1)

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


МойОбщийМодуль.ОбработатьТаблицуЗначений(ВычислитьВыражениеСГруппировкойТаблицаЗначений("Номенклатура КАК Товар, Количество КАК КолВо", "Номенклатура"))

Внутри серверного модуля будет доступен полный объектный API работы с таблицей значений, включая метод НайтиСтроки() и циклы Для Каждого.

Альтернатива: Агрегатная функция ТаблицаЗначений()

Выясним, когда уместно использовать более простую альтернативу. Если вычисление в контексте сторонних группировок не требуется, а необходимо собрать текущие детальные записи группировки прямо в ресурсе, используйте агрегатную функцию ТаблицаЗначений().

Пример формулы для поля ресурса в СКД:

ТаблицаЗначений(РАЗЛИЧНЫЕ Номенклатура КАК Товар, Количество КАК КолВо)

Важные рекомендации и частые ошибки

При работе с функциями, возвращающими таблицу значений в СКД, следует учитывать следующие особенности:

  1. Указывайте псевдонимы колонок. В выражении создания ТЗ всегда задавайте псевдонимы через КАК (например, "Поле1 КАК Колонка1"). Если этого не сделать, к колонкам в функциях Массив или Свернуть нельзя будет обратиться по имени — только по их порядковым номерам в виде строк ("1", "2").
  2. Проверяйте настройки группировок. При вычислении ресурсов на основе таблицы значений следите за тем, чтобы в настройках отчета выводились соответствующие группировки с измерениями, иначе ресурс на детальных записях может вернуть значение Неопределено.
← На главную