Отчеты и Аналитика · 10 мин
Как объединить поля в отчете 1С
Как объединить несколько полей в одну колонку отчета 1С: выражения в СКД, функции СтрСоединить и СОКРЛ, объединение ресурсов, типичные ошибки и проверка результата.
Объединить поля в отчете 1С чаще всего требуется в трех ситуациях: собрать ФИО из отдельных полей «Фамилия», «Имя», «Отчество», склеить адрес из региона, города и улицы или вывести в одной колонке несколько характеристик товара. В зависимости от того, как построен отчет, задача решается либо через выражение в схеме компоновки данных (СКД), либо объединением ресурсов, либо доработкой запроса.
Ключевой момент: объединение выполняется на этапе формирования данных, а не в готовой таблице результата. Поэтому правильный инструмент — это вычисляемое поле в СКД или конкатенация в тексте запроса. Попытки «склеить» значения после вывода отчета (например, макетом) усложняют поддержку и ломают группировки.
Ниже разобраны рабочие способы для типовых конфигураций и самописных отчетов, ограничения каждого подхода и способы проверить, что объединение не исказило данные.
Определите, где именно нужно объединять поля
Перед изменением отчета важно понять, на каком уровне стоит задача. От этого зависит инструмент:
- Объединение колонок в одной строке — например, Фамилия + Имя + Отчество в одну ячейку. Решается вычисляемым полем или конкатенацией в запросе.
- Объединение значений из разных строк группировки — например, список всех товаров документа одной строкой через запятую. Решается ресурсом СКД с агрегатной функцией или программной обработкой.
- Объединение наборов данных — когда нужно вывести данные из двух разных источников в одном отчете. Это уже не конкатенация, а объединение наборов (ОБЪЕДИНИТЬ в запросе или объединение наборов данных в СКД).
Чаще всего под фразой «объединить поля» имеется в виду первый сценарий — склейка нескольких реквизитов в одну строковую колонку. Именно он разобран ниже наиболее подробно.
Как выбрать способ
Способ 1. Вычисляемое поле в схеме компоновки данных
Это самый безопасный способ: запрос не меняется, объединение выполняется средствами СКД. Порядок действий в конфигураторе:
- Откройте отчет, перейдите на закладку «Основная схема компоновки данных» и откройте конструктор СКД.
- Перейдите на вкладку «Вычисляемые поля» и добавьте новое поле.
- В колонке «Путь к данным» укажите имя нового поля, например
ФИОПолное. - В колонке «Выражение» напишите конкатенацию:
Фамилия + " " + Имя + " " + Отчество. - На вкладке «Настройки» добавьте новое поле в выбранные поля отчета вместо исходных трех.
Выражение пишется на языке выражений СКД, который поддерживает операцию «+» для строк, функции работы со строками и конструкцию ВЫБОР КОГДА ... КОНЕЦ для условий. Это удобно, если, например, отчество может быть пустым и лишний пробел нужно убрать:
ВЫБОР
КОГДА Отчество = ""
ТОГДА Фамилия + " " + Имя
ИНАЧЕ Фамилия + " " + Имя + " " + Отчество
КОНЕЦ
Тип у вычисляемого поля можно указать явно (Строка с достаточной длиной). Если длину не задать, при выводе длинных значений возможно обрезание — задавайте длину с запасом.
- 1Откройте СКД отчета и вкладку «Вычисляемые поля»
- 2Добавьте поле, задайте имя и выражение конкатенации
- 3Проверьте и при необходимости задайте тип и длину строки
- 4Добавьте поле в настройки отчета вместо исходных колонок
- 5Сформируйте отчет и проверьте результат на данных с пустыми значениями
Способ 2. Конкатенация прямо в запросе
Если отчет построен на запросе, объединить поля можно на уровне текста запроса. Это снижает нагрузку на СКД и позволяет сразу использовать результат в группировках и отборах.
В языке запросов 1С конкатенация выполняется оператором «+»:
ВЫБРАТЬ
Сотрудники.Фамилия + " " + Сотрудники.Имя + " " + Сотрудники.Отчество КАК ФИО,
Сотрудники.Должность
ИЗ
Справочник.Сотрудники КАК Сотрудники
Важные ограничения этого способа:
- Складывать можно только строки. Числа и даты нужно предварительно приводить к строке — в запросе для этого нет универсальной функции преобразования, поэтому часто проще выносить такую склейку в вычисляемое поле СКД.
- Если одно из полей имеет значение NULL (например, из левого соединения), результат конкатенации тоже станет NULL. Используйте
ЕСТЬNULL(Поле, "")для каждого слагаемого. - Длина результата ограничена типом полей; при склейке длинных строк проверяйте, что итог не обрезается.
Способ 3. Объединение значений из нескольких строк в одну ячейку
Отдельная задача — собрать значения детальных записей в одну строку итога, например перечислить через запятую все номенклатурные позиции документа в шапке. Здесь простая конкатенация не поможет, потому что данные находятся в разных строках.
Варианты решения:
- Агрегатная функция в ресурсах СКД. В новых версиях платформы доступна функция объединения строк в выражениях ресурсов. Если ваша версия ее поддерживает, добавьте ресурс с выражением объединения по нужному полю и группировке.
- Программная обработка результата. Отчет формируется в таблицу значений, затем в модуле объекта строки обходятся и собираются в нужном виде, после чего выводятся через макет или табличный документ.
- Сворачивание в запросе через соединение с самим собой. Прием с нумерацией строк и последовательной склейкой работает, но сложен в поддержке и медленен на больших объемах.
Для типовых конфигураций без снятия с поддержки предпочтителен первый вариант, а при его недоступности — внешний отчет с программной обработкой.
Как объединить поля в типовом отчете без изменения конфигурации
Если отчет типовой и конфигурация находится на поддержке, прямое изменение СКД приведет к проблемам при обновлении. Безопасные альтернативы:
- Пользовательские поля в настройках отчета. Во многих типовых отчетах в режиме «Еще — Изменить вариант» доступно добавление пользовательского поля-выражения. Там можно написать конкатенацию на языке выражений СКД без изменения конфигурации. Это самый быстрый способ для конечного пользователя.
- Внешний отчет. Скопируйте схему типового отчета во внешний отчет, доработайте вычисляемые поля и подключите через «Дополнительные отчеты и обработки».
- Расширение конфигурации. Позволяет переопределить СКД отчета, не снимая конфигурацию с поддержки.
Пользовательское поле — наименее рискованный путь: изменения хранятся в настройках варианта отчета и не затрагивают метаданные. Однако такие поля не участвуют в группировках и итогах так же гибко, как поля схемы.
Сравнение способов объединения
Подходит конечному пользователю, не требует прав доступа разработчика. Ограничение: доступно не во всех отчетах, слабо работает в группировках.
Гибкий и поддерживаемый способ для разработчика. Требует изменения отчета или расширения.
Быстро выполняется, результат доступен для отборов и группировок. Ограничение: только строки, нужна обработка NULL.
Позволяет любую логику склейки, включая сбор строк из группировок. Минус: сложнее поддержка, теряется интерактивная настройка СКД.
Проверка результата и типичные ошибки
После настройки объединения сформируйте отчет на тестовых данных, где встречаются пограничные случаи: пустые значения, длинные строки, NULL из соединений, спецсимволы. Проверьте, что итоговая колонка заполнена для всех строк и не содержит двойных пробелов или обрезанных значений.
Также убедитесь, что группировки и итоги ведут себя корректно: если объединенное поле используется в группировке, строки с одинаковым склеенным значением должны собираться вместе.
Как проверить результат
Объединенное поле заполнено, без двойных пробелов
Пустая ячейка или лишние пробелы/запятые
Поле содержит данные основной таблицы
Пустое значение из-за NULL в присоединенной таблице
Текст выводится полностью
Конец строки обрезан
Одинаковые значения собраны в одну группу
Дубли групп из-за разных пробелов или регистра
FAQ
Можно ли объединить поля в отчете без конфигуратора?
Да, если отчет поддерживает пользовательские поля: откройте «Еще — Изменить вариант», добавьте пользовательское поле-выражение и напишите конкатенацию, например Фамилия + " " + Имя. Возможность доступна не во всех типовых отчетах.
Почему объединенное поле пустое, хотя исходные поля заполнены?
Наиболее вероятная причина — значение NULL в одном из полей, обычно из левого соединения таблиц. Оберните каждое необязательное поле в ЕСТЬNULL(Поле, "") в запросе или добавьте обработку в выражении СКД.
Как убрать лишние пробелы при пустом отчестве?
Используйте конструкцию ВЫБОР: если поле пустое, склеивайте без него, иначе — с ним. Альтернатива — собрать строку с пробелами и дополнительно обработать, но ВЫБОР надежнее и читаемее.
Можно ли объединить число и строку в одном поле?
В запросе напрямую нельзя — потребуется преобразование, которое в языке запросов ограничено. Практичнее выполнить такую склейку в вычисляемом поле СКД или программно в модуле отчета, где доступно преобразование значения к строке.
Как собрать в одну ячейку значения из нескольких строк табличной части?
Простой конкатенацией это не решается. Используйте агрегатную функцию объединения строк в ресурсах СКД, если она поддерживается вашей версией платформы, либо программную обработку результата запроса с выводом через макет.
Что делать, чтобы доработка не слетела при обновлении конфигурации?
Не изменяйте типовой отчет напрямую. Используйте пользовательские поля в настройках, внешний отчет с копией схемы или расширение конфигурации — все эти способы сохраняют поддержку типового решения.
Что важно запомнить
Для склейки полей одной строки используйте вычисляемое поле СКД или конкатенацию в запросе с обработкой NULL. Для сбора значений из разных строк — ресурсы СКД или программную обработку. Типовые отчеты меняйте через пользовательские поля, внешние отчеты или расширения, а результат всегда проверяйте на пустых и длинных значениях.