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