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

06.07.15

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

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

Скачать файлы

Наименование Файл Версия Размер
Внешний отчет-пример использования функции СКД "Соединить Строки"
.erf 6,24Kb
237
.erf 28.01.15.1 6,24Kb 237 Скачать
Конфигурация для теста отчета УТ 11 (ERP 2.0). Рассмотрим на примере документа "Реализация товаров и услуг".  Выведем ссылку, организацию, контрагента и номенклатуру, в итоге отчет должен принять вид показанный на рисунке ниже.
 
Примерный вид отчета
Рис. 1 Примерный вид отчета

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

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

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

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

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

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

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

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

См. также

SALE! 20%

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

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121616    670    389    

711

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    4033    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8155    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    4651    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5804    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    6693    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

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

01.09.2023    4517    KVIKS    15    

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

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

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

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

p.s. В шаге 4 исправьте орфографическую ошибочку в слове ОрАГнизация.
7. Kaval88 172 13.03.15 11:36 Сейчас в теме
2 набора данных не оптимально.
8. echo77 1868 13.03.15 21:38 Сейчас в теме
(7) Kaval88, согласен, но иногда позволяют красивее и проще решить некоторые задачи соединения "мух" с "котлетами" (остатков, с оборотами и т.д.) без всяческих наворотов и сильной просадки производительности.
pbahushevich; +1 Ответить
9. ivanov660 4330 14.03.15 13:42 Сейчас в теме
(7) Kaval88, приведен пример о возможностях СКД. В некоторых случаях 2 набора данных оптимальнее, Вы же знаете, что алгоритм СКД изменяет запрос в зависимости от настроек, и если в вывод отчета не попадает ни одного поля из набора 2, то данные отбираться не будут из базы.
10. maguga 19 19.11.15 16:40 Сейчас в теме
уважаемые, а на какую справку вы ссылаетесь? я вот в синтаксис помошнике нинашел ничего подобного. и если есть ссылка поделитесь пожалуйста.
11. echo77 1868 19.11.15 19:10 Сейчас в теме
(10) maguga, Справка->Содержание справки
Прикрепленные файлы:
15. пользователь 27.12.17 11:13
Сообщение было скрыто модератором.
...
12. konyavka 36 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 4330 18.02.18 21:29 Сейчас в теме
18. Spacer 355 16.03.18 19:53 Сейчас в теме
(17) Как сработает? У вас же там ресурс вычисляется. А как он будет вычисляться без группировки?
19. Stas84 15.04.18 22:18 Сейчас в теме
Спасибо. То что нужно!
20. pvlunegov 157 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 25 29.04.19 19:01 Сейчас в теме
Желательно "Номенклатура" КАК КолонкаНоменклатуры получать в первом наборе потому, что если второй набор будет пустой, то в отчете пропадут ресурсы из первого набора.
24. 7OH 69 22.01.20 18:02 Сейчас в теме
А можно совет спросить ?
Как в вашем примере убрать ССЫЛКУ из группировки и сделать одним полем ресурса такое:
Группировка - "Ассоль ООО"
Значение ресурса - "Реализация 10 (1,2,3); Реализация 1 (1,2,3,4)"
То есть соединить дважды.
Сама СКД ругается, что вложенные нельзя делать.
25. 7OH 69 23.01.20 12:09 Сейчас в теме
(24) может, кому пригодится - выражение для группировки "Контрагент"
СоединитьСтроки(
    ВычислитьВыражениеСГруппировкойТаблицаЗначений(
            "Ссылка
                , "" (""
                , СоединитьСтроки(
                    ТаблицаЗначений(Номенклатура)
                    , "",""
                    ,"""")
                , "")""
            "
            ,"Ссылка"
    )
,
,"")
Показать
reneyr; eeeio; elga2012; sergiyboy; +4 Ответить
26. sergiyboy 9 12.11.20 13:29 Сейчас в теме
(25)
СоединитьСтроки(
ВычислитьВыражениеСГруппировкойТаблицаЗначений(
"Ссылка
, "" (""
, СоединитьСтроки(
ТаблицаЗначений(Номенклатура)
, "",""
,"""")
, "")""
"
,"Ссылка"
)


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

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


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

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

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

(40)
ALT+0160

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


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