Как вывести все значения табличной части справочника в одну ячейку СКД?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Настройка запроса данных

Для начала нам необходимо правильно подготовить данные. Рассмотрим ситуацию, где мы хотим получить список всех основных покупателей для каждой номенклатурной позиции. Вместо полного соединения, которое может привести к дублям или избыточности, воспользуемся ЛЕВОЕ СОЕДИНЕНИЕ. Это позволит нам сохранить всю номенклатуру, даже если у нее еще нет назначенных покупателей.

Проанализируем структуру запроса:


ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Номенклатура,
    ЕСТЬNULL(НоменклатураОсновныеПокупатели.ОсновнойПокупатель, "") КАК ОсновнойПокупатель
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ОсновныеПокупатели КАК НоменклатураОсновныеПокупатели
        ПО СпрНоменклатура.Ссылка = НоменклатураОсновныеПокупатели.Ссылка

Важный момент: обращайте внимание на написание имен полей. Опечатки, например, пропуск буквы в слове ОсновнойПокупатель, часто становятся причиной ошибки «Поле не найдено» на этапе исполнения отчета.

Использование ресурсов СКД для объединения строк

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

  1. Откройте вкладку Ресурсы в настройках схемы компоновки данных.
  2. В поле Поле выберите наш реквизит ОсновнойПокупатель.
  3. В колонке Выражение пропишите формулу: СоединитьСтроки(Массив(ОсновнойПокупатель)).
  4. Убедитесь, что для группировки по номенклатуре выбран этот ресурс.

Эта конструкция автоматически соберет все значения ОсновнойПокупатель в массив для каждой группы номенклатуры и объединит их в единую строку. Обратите внимание, что имена полей в формуле записываются без кавычек.

Устранение ошибок при работе с пользовательскими макетами

Иногда при переходе от стандартного оформления к пользовательскому макету возникает ошибка исполнения «Поле не найдено». Если запрос написан верно и стандартный отчет работает без нареканий, значит, проблема кроется в связке макета с данными.

Рассмотрим, как правильно привязать ресурс к ячейке:

Работа с расшифровками

Часто задают вопрос: как влиять на расшифровку ячейки? Помните, что Условное оформление влияет только на визуальное представление (цвет, шрифт), но не на логику расшифровки. Если вам нужно изменить поведение расшифровки, используйте событие ПриКомпоновкеРезультата в модуле отчета или настройте параметры расшифровки на вкладке «Настройки» СКД.

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

Заключение

Мы выяснили, что для решения задачи вывода табличной части в одну строку не требуется написание сложного кода. Достаточно правильного ЛЕВОГО СОЕДИНЕНИЯ в запросе и использования функции СоединитьСтроки в ресурсах. При возникновении ошибок с макетами всегда проверяйте соответствие имен параметров в ячейках и правильность привязки областей к группировкам.

← На главную