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

06.07.15

Разработка - СКД

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Внешний отчет-пример использования функции СКД "Соединить Строки"
.erf 6,24Kb ver:28.01.15.1
264 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой
Конфигурация для теста отчета УТ 11 (ERP 2.0). Рассмотрим на примере документа "Реализация товаров и услуг".  Выведем ссылку, организацию, контрагента и номенклатуру, в итоге отчет должен принять вид показанный на рисунке ниже.
 
Примерный вид отчета
Рис. 1 Примерный вид отчета

Шаг 1. Для этого создадим новый отчет и сформируем основную схему компоновки данных. И добавим два набора данных.
Набор данных1:

ВЫБРАТЬ
	РеализацияТоваровУслуг.Ссылка,
	РеализацияТоваровУслуг.Дата,
	РеализацияТоваровУслуг.Контрагент,
	РеализацияТоваровУслуг.Организация
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
	РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериод И &КонецПериода

Набор данных2:

ВЫБРАТЬ
	"Номенклатура" КАК КолонкаНоменклатуры,
	РеализацияТоваровУслугТовары.Ссылка,
	РеализацияТоваровУслугТовары.НомерСтроки,
	РеализацияТоваровУслугТовары.Номенклатура,
	РеализацияТоваровУслугТовары.Количество
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
	РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачалоПериод И &КонецПериода

Шаг 2. Объединим эти наборы во вкладке "Связи наборов данных" со следующими параметрами:
Источник - НаборДанных1; Приемник связи - НаборДанных2; Выражение источника - Ссылка; Выражение приемника - Ссылка.
 
Шаг 3. Создадим ресурс, который будет группировать строки необходимым нам образом (вкладка "Ресурсы"):
Поле: 
                          Номенклатура (или любое другое). 
Выражение: 
                          СоединитьСтроки(ТаблицаЗначений(НомерСтроки,") ",Номенклатура," - количество (",Количество,");"),,"")
 
Функция СоединитьСтроки  - соединяет между собой "массив" данных (см. справку). 
Функция ТаблицаЗначений - формирует таблицу значений из входных параметров (см. справку). В нашем случае "массив" будет состоять из следующих элементов:[Поле:Номер строки][строка:")"][Поле:Номенклатура][строка:" - количество ("][Поле:количество][строка:");"]
 
Так же в поле группировки укажим поле "Ссылка", для того чтобы агрегирование проводилась только для него (иначе в группировках мы получим наростающую "сумму" всех строк, а это уже перебор).
 
Шаг 4. Создадим настройку варианта отчета. Он должен выглядеть как показано на рисунке ниже
В выбранные поля должны входить: Организация, Контрагент, Ссылка, Номенклатура (ресурс), КолонкаНоменклатуры. При необходимости можно отключить вывод итогов по горизонтали/вертикали.

Настройка варианта
Рис. 2 Пример варианта настройки

Шаг 5. Сохраняем и запускаем. Задача решена

Вступайте в нашу телеграмм-группу Инфостарт

СКД СоединитьСтроки

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    244797    1341    419    

1122

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    4737    263    shapa_pro    25    

65

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    15284    ovetgana    112    

105

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    8973    krasnoshchekovpavel    5    

66

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8190    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15391    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    13005    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9416    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. echo77 1937 28.01.15 23:24 Сейчас в теме
В языке выражений платформы 8.2 нет функций СоединитьСтроки() и Таблица(), но есть другие.

Я уже писал об этом в статье: http://infostart.ru/public/267055/
Согласен, что ваш пример более красивый для случая с табличной частью
olololeg; RustIG; +2 Ответить
2. ivanov660 4959 29.01.15 07:35 Сейчас в теме
Мы рассматривали конкретную задачу.
Привели конкретный пример для ее практического решения.
Описали быстрый старт - на основе этого примера легко начать работать с данным функционалом.
У Вас же в статье описан перечень функций и краткие советы по их использованию.

UPD. Функции СКД СоединитьСтроки и ТаблицаЗначений появились с версии 8.2.14. К тому же при необходимости можно использовать собственные функции, необходимо чтобы они были доступны в глобальном контексте или описаны в модуле менеджера отчета. В свое время для выполнения отчета создавали набор математических функций типа квадратного корня.
EvgeniyOlxovskiy; Hogyoku; maxunov95; sulfur17; +4 Ответить
3. Светлый ум 501 05.02.15 06:24 Сейчас в теме
Будем использовать +1
4. zqzq 25 16.02.15 08:48 Сейчас в теме
СоединитьСтроки не обязательно использовать, платформа сама строковое представление сделает. И при щелчке на таблицу откроет её как расшифровку... в толстом клиенте. В тонком клиенте ТаблицаЗначений недоступна на клиенте и платформа 8.2 вылетает с ошибкой при расшифровке :) С массивом нормально отрабатывает в обоих случаях. Так что с учетом бага пока действительно лучше к строке приводить.

P.S. Часто более полезной оказывается функция ВычислитьВыражениеСГруппировкойТаблицаЗначений (см. справку).
6. echo77 1937 22.02.15 17:10 Сейчас в теме
(4) zqzq, У функции СоединитьСтроки() вся фишка в параметрах номер 2 и 3
5. SirYozha 226 19.02.15 08:43 Сейчас в теме
Спасибо! Интересное решение, возьмем на карандаш :).
+1

p.s. В шаге 4 исправьте орфографическую ошибочку в слове ОрАГнизация.
7. Kaval88 181 13.03.15 11:36 Сейчас в теме
2 набора данных не оптимально.
8. echo77 1937 13.03.15 21:38 Сейчас в теме
(7) Kaval88, согласен, но иногда позволяют красивее и проще решить некоторые задачи соединения "мух" с "котлетами" (остатков, с оборотами и т.д.) без всяческих наворотов и сильной просадки производительности.
pbahushevich; +1 Ответить
9. ivanov660 4959 14.03.15 13:42 Сейчас в теме
(7) Kaval88, приведен пример о возможностях СКД. В некоторых случаях 2 набора данных оптимальнее, Вы же знаете, что алгоритм СКД изменяет запрос в зависимости от настроек, и если в вывод отчета не попадает ни одного поля из набора 2, то данные отбираться не будут из базы.
10. maguga 19 19.11.15 16:40 Сейчас в теме
уважаемые, а на какую справку вы ссылаетесь? я вот в синтаксис помошнике нинашел ничего подобного. и если есть ссылка поделитесь пожалуйста.
11. echo77 1937 19.11.15 19:10 Сейчас в теме
(10) maguga, Справка->Содержание справки
Прикрепленные файлы:
15. пользователь 27.12.17 11:13
Сообщение было скрыто модератором.
...
12. konyavka 39 18.01.16 16:20 Сейчас в теме
Статья очень помогла. Спасибо.
13. Hikari123 09.01.17 14:19 Сейчас в теме
Отличная статья. Спасибо
14. denchik86 11 07.05.17 17:44 Сейчас в теме
Спасибо. То, что доктор прописал.
16. VickWood 18.02.18 15:54 Сейчас в теме
А если в отчете вообще нет группировок, функция не сработает?
17. ivanov660 4959 18.02.18 21:29 Сейчас в теме
18. Spacer 364 16.03.18 19:53 Сейчас в теме
(17) Как сработает? У вас же там ресурс вычисляется. А как он будет вычисляться без группировки?
19. Stas84 15.04.18 22:18 Сейчас в теме
Спасибо. То что нужно!
20. pvlunegov 160 06.07.18 08:39 Сейчас в теме
Огромное спасибо за вашу публикацию.
Смог сделать конкатенацию строк в таблице по одинаковым наборам колонок.
Например у меня была таблица

НомерСтроки Контрагент Собственник
1 Азов ООО Багбадулин А.В.
2 Азов ООО Вышин С.Е.
3 Бюро ООО Жулин С.В.
4 Жизнь АО Сергеенко С.К.
5 Жизнь АО Зюлейха М.С.

Благодаря кокнатенации строк по колонке Собственник получаем на выходе отчета с СКД таблицу:

НомерСтроки Контрагент Собственник
1 Азов ООО Багбадулин А.В.
Вышин С.Е.
2 Бюро ООО Жулин С.В.
3 Жизнь АО Сергеенко С.К.
Зюлейха М.С.

В колонке Собственник у нас строка с переносами строк, выглядит как строка в виде таблицы с ФИО собственников.


Отлично!
21. Yoda77_2 06.07.18 11:55 Сейчас в теме
+ оказывется, можно, использовать ФОРМАТ:
СоединитьСтроки (ТаблицаЗначений (СтатьяЗатрат, ФОРМАТ(СуммаБезНДС,"ЧДЦ=2")),," - ")
Может пригодится
reneyr; user592949_annafromdnepr; +2 Ответить
22. acanta 06.11.18 18:02 Сейчас в теме
+ Можно, и даже с датами работает.

Выбор КОГДА ЗначениеЗаполнено(Сумма) Тогда СоединитьСтроки(Формат(Месяц,"ДФ='MMММ yyyy'"),," ")Конец
23. wolfalan 26 29.04.19 19:01 Сейчас в теме
Желательно "Номенклатура" КАК КолонкаНоменклатуры получать в первом наборе потому, что если второй набор будет пустой, то в отчете пропадут ресурсы из первого набора.
24. 7OH 70 22.01.20 18:02 Сейчас в теме
А можно совет спросить ?
Как в вашем примере убрать ССЫЛКУ из группировки и сделать одним полем ресурса такое:
Группировка - "Ассоль ООО"
Значение ресурса - "Реализация 10 (1,2,3); Реализация 1 (1,2,3,4)"
То есть соединить дважды.
Сама СКД ругается, что вложенные нельзя делать.
25. 7OH 70 23.01.20 12:09 Сейчас в теме
(24) может, кому пригодится - выражение для группировки "Контрагент"
СоединитьСтроки(
    ВычислитьВыражениеСГруппировкойТаблицаЗначений(
            "Ссылка
                , "" (""
                , СоединитьСтроки(
                    ТаблицаЗначений(Номенклатура)
                    , "",""
                    ,"""")
                , "")""
            "
            ,"Ссылка"
    )
,
,"")
Показать
reneyr; eeeio; elga2012; sergiyboy; +4 Ответить
26. sergiyboy 10 12.11.20 13:29 Сейчас в теме
(25)
СоединитьСтроки(
ВычислитьВыражениеСГруппировкойТаблицаЗначений(
"Ссылка
, "" (""
, СоединитьСтроки(
ТаблицаЗначений(Номенклатура)
, "",""
,"""")
, "")""
"
,"Ссылка"
)


Огромное спасибо за идею.
Я пошел дальше и добавил еще перенос строки и убрал лишние точки с запятой.

СоединитьСтроки(
    ВычислитьВыражениеСГруппировкойТаблицаЗначений(
           " ВидОбъектаДоступа
                , ""  (""
                , СоединитьСтроки(
                    Свернуть(ТаблицаЗначений(ОбъектДоступа))
                    , ""; ""
                    ,"""")
                , "")""
            "
            ,"ВидОбъектаДоступа"
    ),&СимволПереносаСтроки,"") 
Показать


Долго искал решение как сделать перенос строки в результате оказалось достаточно было добавить параметр и установить в него символ ALT+0160

Результат:
Прикрепленные файлы:
dammit666; SagittariusA; reneyr; mihap; zoytsa; ivanov660; +6 Ответить
28. zoytsa 22.03.21 09:56 Сейчас в теме
(26) круто Вы разобрали!
38. SagittariusA 06.10.22 20:19 Сейчас в теме
(26)
Так и не понял, как в параметр каретку добавить.
40. ILNIK 38 22.12.22 16:52 Сейчас в теме
(26)
ALT+0160

Как вы сделали, чтобы переносы удалились?
Нашел этот символ в интернете скопировал в параметр, все равно не работает
41. shoy 19 17.01.23 14:01 Сейчас в теме

(40)
ALT+0160

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


$)
Курсор установите в нужном месте. Удерживая ALT на цифровой клавиатуре наберите 0160.
dammit666; +1 Ответить
42. OLDMVN 28.03.23 17:51 Сейчас в теме
(26) тоже искал решение по переносу строки, если во втором параметре ничего не указывать, то по умолчанию как раз будет использоваться перенос строки. А если в третьем ничего не указать, то колонки будут разделяться точкой с запятой ";"
44. ШМН 18.12.25 18:28 Сейчас в теме
(26) Еще можно в глобальном модуле прописать функцию

Функция СимволПС()  Экспорт
  	 Возврат Символы.ПС;
КонецФункции 

и затем в выражениях СКД использовать ее, например выражение вычисляемого поля задать так:
Строка(Проект.ПроектНаПечать) +"/"+ СимволПС() +Строка(ПланГрафик.Наименование)
27. zoytsa 22.03.21 09:54 Сейчас в теме
спасибо! статья помогла! пробовал без статьи - после каждой колонки выходило ";" и в одну строку толком не собиралось
лишние эти ";" - видимо убирает использование 2 и 3 параметров в методе СоединитьСтроки()
29. ivanov660 4959 22.03.21 10:28 Сейчас в теме
(27) Здорово что - этот пример оказался довольно актуальным. Делал в качестве пособия коллегам в нашем отделе разработки, а заодно и сообществу пригодилось.
Тут в комментариях материала набралось похоже еще на одну публикацию)
30. tolyan_ekb 80 05.04.21 13:59 Сейчас в теме
(29) Подскажите, а расшифровка по колонке номенклатура работает?
31. ivanov660 4959 05.04.21 14:43 Сейчас в теме
(30) Расшифровка работает, но если хотите открытие справочника номенклатура (или еще что внутри), то придется обрабатывать вручную.
32. tugushev98 14.09.22 01:40 Сейчас в теме
А как можно без конкатенации строк вот подобным образом, да и с разделение подстрок вложенной в строку таблицы сделать?
Прикрепленные файлы:
33. ivanov660 4959 14.09.22 11:26 Сейчас в теме
(32)Для этого вам необходимо уже работать с макетом отчета - группировать ячейки для поля ссылка. Вполне возможно сделать программно в процедуре "ПриКомпоновкеРезультата", обработав ДокументРезультат. Возможно получится и в редакторе макетов СКД.
34. tugushev98 23.09.22 14:30 Сейчас в теме
(33) если группировать, то получится так что поле "Ссылка" будет на уровень выше, а поля справа будут группировкой ниже, и будут уже сворачиваемость как в иерархии, а нужно чтобы записи были как бы на одном уровне в макете, таким образом чтобы в одну строку помещать таб часть
35. ivanov660 4959 23.09.22 14:58 Сейчас в теме
(34)Это как раз можно программно обработать. Да, придется ручками поправить выходную таблицу.
36. tugushev98 23.09.22 15:09 Сейчас в теме
(35)Пока не умею с отчетами программно работать, когда смотрю на эти процедуры работы с отчетом, мозг чуть не взрывается)
37. ivanov660 4959 23.09.22 16:15 Сейчас в теме
(36) Книжку Хрусталевой могу порекомендовать по СКД или тут на площадке поищите были примеры.
39. user886140 05.11.22 15:00 Сейчас в теме
Добрый день! А можно вывести в выражении "СоединитьСтроки" первые 10 записей?
вот тут например: СоединитьСтроки(ТаблицаЗначений(Номенклатура, Продажи), ";", ",")
43. SergMuravev 877 12.03.24 19:20 Сейчас в теме
(0) А можно было и без дополнительного набора записей. Добавить в запрос обращение к табличной части, и создать ресурс с выражением СоединитьСтроки
Для отправки сообщения требуется регистрация/авторизация