К статье
Практический материал

Отчеты и Аналитика · 10 мин

Как объединить поля в отчете 1С

Как объединить несколько полей в одну колонку отчета 1С: выражения в СКД, функции СтрСоединить и СОКРЛ, объединение ресурсов, типичные ошибки и проверка результата.

Объединить поля в отчете 1С чаще всего требуется в трех ситуациях: собрать ФИО из отдельных полей «Фамилия», «Имя», «Отчество», склеить адрес из региона, города и улицы или вывести в одной колонке несколько характеристик товара. В зависимости от того, как построен отчет, задача решается либо через выражение в схеме компоновки данных (СКД), либо объединением ресурсов, либо доработкой запроса.

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

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

Определите, где именно нужно объединять поля

Перед изменением отчета важно понять, на каком уровне стоит задача. От этого зависит инструмент:

  • Объединение колонок в одной строке — например, Фамилия + Имя + Отчество в одну ячейку. Решается вычисляемым полем или конкатенацией в запросе.
  • Объединение значений из разных строк группировки — например, список всех товаров документа одной строкой через запятую. Решается ресурсом СКД с агрегатной функцией или программной обработкой.
  • Объединение наборов данных — когда нужно вывести данные из двух разных источников в одном отчете. Это уже не конкатенация, а объединение наборов (ОБЪЕДИНИТЬ в запросе или объединение наборов данных в СКД).

Чаще всего под фразой «объединить поля» имеется в виду первый сценарий — склейка нескольких реквизитов в одну строковую колонку. Именно он разобран ниже наиболее подробно.

Маршрут решения

Как выбрать способ

Нужно склеить реквизиты одной строки (ФИО, адрес)Используйте вычисляемое поле в СКД или конкатенацию в запросе
Нужно собрать значения из нескольких строк в одну ячейкуИспользуйте ресурс СКД с агрегатной функцией или обработку результата
Данные лежат в разных таблицах или наборахИспользуйте ОБЪЕДИНИТЬ в запросе или объединение наборов данных СКД
Отчет типовой и закрыт от измененийСделайте внешний отчет-копию или расширение конфигурации

Способ 1. Вычисляемое поле в схеме компоновки данных

Это самый безопасный способ: запрос не меняется, объединение выполняется средствами СКД. Порядок действий в конфигураторе:

  1. Откройте отчет, перейдите на закладку «Основная схема компоновки данных» и откройте конструктор СКД.
  2. Перейдите на вкладку «Вычисляемые поля» и добавьте новое поле.
  3. В колонке «Путь к данным» укажите имя нового поля, например ФИОПолное.
  4. В колонке «Выражение» напишите конкатенацию: Фамилия + " " + Имя + " " + Отчество.
  5. На вкладке «Настройки» добавьте новое поле в выбранные поля отчета вместо исходных трех.

Выражение пишется на языке выражений СКД, который поддерживает операцию «+» для строк, функции работы со строками и конструкцию ВЫБОР КОГДА ... КОНЕЦ для условий. Это удобно, если, например, отчество может быть пустым и лишний пробел нужно убрать:

ВЫБОР

КОГДА Отчество = ""

ТОГДА Фамилия + " " + Имя

ИНАЧЕ Фамилия + " " + Имя + " " + Отчество

КОНЕЦ

Тип у вычисляемого поля можно указать явно (Строка с достаточной длиной). Если длину не задать, при выводе длинных значений возможно обрезание — задавайте длину с запасом.

Порядок действий для вычисляемого поля
  1. 1
    Откройте СКД отчета и вкладку «Вычисляемые поля»
  2. 2
    Добавьте поле, задайте имя и выражение конкатенации
  3. 3
    Проверьте и при необходимости задайте тип и длину строки
  4. 4
    Добавьте поле в настройки отчета вместо исходных колонок
  5. 5
    Сформируйте отчет и проверьте результат на данных с пустыми значениями

Способ 2. Конкатенация прямо в запросе

Если отчет построен на запросе, объединить поля можно на уровне текста запроса. Это снижает нагрузку на СКД и позволяет сразу использовать результат в группировках и отборах.

В языке запросов 1С конкатенация выполняется оператором «+»:

ВЫБРАТЬ

Сотрудники.Фамилия + " " + Сотрудники.Имя + " " + Сотрудники.Отчество КАК ФИО,

Сотрудники.Должность

ИЗ

Справочник.Сотрудники КАК Сотрудники

Важные ограничения этого способа:

  • Складывать можно только строки. Числа и даты нужно предварительно приводить к строке — в запросе для этого нет универсальной функции преобразования, поэтому часто проще выносить такую склейку в вычисляемое поле СКД.
  • Если одно из полей имеет значение NULL (например, из левого соединения), результат конкатенации тоже станет NULL. Используйте ЕСТЬNULL(Поле, "") для каждого слагаемого.
  • Длина результата ограничена типом полей; при склейке длинных строк проверяйте, что итог не обрезается.

Способ 3. Объединение значений из нескольких строк в одну ячейку

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

Варианты решения:

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

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

Как объединить поля в типовом отчете без изменения конфигурации

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

  • Пользовательские поля в настройках отчета. Во многих типовых отчетах в режиме «Еще — Изменить вариант» доступно добавление пользовательского поля-выражения. Там можно написать конкатенацию на языке выражений СКД без изменения конфигурации. Это самый быстрый способ для конечного пользователя.
  • Внешний отчет. Скопируйте схему типового отчета во внешний отчет, доработайте вычисляемые поля и подключите через «Дополнительные отчеты и обработки».
  • Расширение конфигурации. Позволяет переопределить СКД отчета, не снимая конфигурацию с поддержки.

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

Сравнение способов объединения

Пользовательское поле в настройках

Подходит конечному пользователю, не требует прав доступа разработчика. Ограничение: доступно не во всех отчетах, слабо работает в группировках.

Вычисляемое поле в СКД

Гибкий и поддерживаемый способ для разработчика. Требует изменения отчета или расширения.

Конкатенация в запросе

Быстро выполняется, результат доступен для отборов и группировок. Ограничение: только строки, нужна обработка NULL.

Программная обработка результата

Позволяет любую логику склейки, включая сбор строк из группировок. Минус: сложнее поддержка, теряется интерактивная настройка СКД.

Проверка результата и типичные ошибки

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

Также убедитесь, что группировки и итоги ведут себя корректно: если объединенное поле используется в группировке, строки с одинаковым склеенным значением должны собираться вместе.

Типичные ошибки
01
Не обработан NULL: вся объединенная строка пустая, хотя часть полей заполнена
02
Лишние пробелы при пустом отчестве или отсутствующем реквизите — нужна конструкция ВЫБОР
03
Слишком маленькая длина строки у вычисляемого поля — значения обрезаются в отчете
04
Попытка сложить строку с числом или датой без преобразования — ошибка формирования
05
Изменение типового отчета напрямую — доработка теряется при обновлении конфигурации
Контрольные точки

Как проверить результат

Строки с пустыми реквизитами
Норма

Объединенное поле заполнено, без двойных пробелов

Тревожный признак

Пустая ячейка или лишние пробелы/запятые

Строки из левого соединения
Норма

Поле содержит данные основной таблицы

Тревожный признак

Пустое значение из-за NULL в присоединенной таблице

Длинные значения
Норма

Текст выводится полностью

Тревожный признак

Конец строки обрезан

Группировка по объединенному полю
Норма

Одинаковые значения собраны в одну группу

Тревожный признак

Дубли групп из-за разных пробелов или регистра

FAQ

Можно ли объединить поля в отчете без конфигуратора?

Да, если отчет поддерживает пользовательские поля: откройте «Еще — Изменить вариант», добавьте пользовательское поле-выражение и напишите конкатенацию, например Фамилия + " " + Имя. Возможность доступна не во всех типовых отчетах.

Почему объединенное поле пустое, хотя исходные поля заполнены?

Наиболее вероятная причина — значение NULL в одном из полей, обычно из левого соединения таблиц. Оберните каждое необязательное поле в ЕСТЬNULL(Поле, "") в запросе или добавьте обработку в выражении СКД.

Как убрать лишние пробелы при пустом отчестве?

Используйте конструкцию ВЫБОР: если поле пустое, склеивайте без него, иначе — с ним. Альтернатива — собрать строку с пробелами и дополнительно обработать, но ВЫБОР надежнее и читаемее.

Можно ли объединить число и строку в одном поле?

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

Как собрать в одну ячейку значения из нескольких строк табличной части?

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

Что делать, чтобы доработка не слетела при обновлении конфигурации?

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

Итог

Что важно запомнить

Для склейки полей одной строки используйте вычисляемое поле СКД или конкатенацию в запросе с обработкой NULL. Для сбора значений из разных строк — ресурсы СКД или программную обработку. Типовые отчеты меняйте через пользовательские поля, внешние отчеты или расширения, а результат всегда проверяйте на пустых и длинных значениях.