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

06.07.15

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

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

Скачать исходный код

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

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

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

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

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

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

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

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

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

См. также.

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

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

10000 руб.

02.09.2020    135120    743    391    

776

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    4481    implecs_team    6    

40

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

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

3 стартмани

05.02.2024    5152    39    obmailok    20    

75

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

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

1 стартмани

31.01.2024    2431    2    Yashazz    0    

33

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

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

2 стартмани

11.12.2023    9126    21    John_d    25    

124

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

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

05.12.2023    5803    PROSTO-1C    13    

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

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

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

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

p.s. В шаге 4 исправьте орфографическую ошибочку в слове ОрАГнизация.
7. Kaval88 173 13.03.15 11:36 Сейчас в теме
2 набора данных не оптимально.
8. echo77 1909 13.03.15 21:38 Сейчас в теме
(7) Kaval88, согласен, но иногда позволяют красивее и проще решить некоторые задачи соединения "мух" с "котлетами" (остатков, с оборотами и т.д.) без всяческих наворотов и сильной просадки производительности.
pbahushevich; +1 Ответить
9. ivanov660 4437 14.03.15 13:42 Сейчас в теме
(7) Kaval88, приведен пример о возможностях СКД. В некоторых случаях 2 набора данных оптимальнее, Вы же знаете, что алгоритм СКД изменяет запрос в зависимости от настроек, и если в вывод отчета не попадает ни одного поля из набора 2, то данные отбираться не будут из базы.
10. maguga 19 19.11.15 16:40 Сейчас в теме
уважаемые, а на какую справку вы ссылаетесь? я вот в синтаксис помошнике нинашел ничего подобного. и если есть ссылка поделитесь пожалуйста.
11. echo77 1909 19.11.15 19:10 Сейчас в теме
(10) maguga, Справка->Содержание справки
Прикрепленные файлы:
15. пользователь 27.12.17 11:13
Сообщение было скрыто модератором.
...
12. konyavka 37 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 4437 18.02.18 21:29 Сейчас в теме
18. Spacer 359 16.03.18 19:53 Сейчас в теме
(17) Как сработает? У вас же там ресурс вычисляется. А как он будет вычисляться без группировки?
19. Stas84 15.04.18 22:18 Сейчас в теме
Спасибо. То что нужно!
20. pvlunegov 158 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 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 33 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 4437 22.03.21 10:28 Сейчас в теме
(27) Здорово что - этот пример оказался довольно актуальным. Делал в качестве пособия коллегам в нашем отделе разработки, а заодно и сообществу пригодилось.
Тут в комментариях материала набралось похоже еще на одну публикацию)
30. tolyan_ekb 105 05.04.21 13:59 Сейчас в теме
(29) Подскажите, а расшифровка по колонке номенклатура работает?
31. ivanov660 4437 05.04.21 14:43 Сейчас в теме
(30) Расшифровка работает, но если хотите открытие справочника номенклатура (или еще что внутри), то придется обрабатывать вручную.
32. tugushev98 14.09.22 01:40 Сейчас в теме
А как можно без конкатенации строк вот подобным образом, да и с разделение подстрок вложенной в строку таблицы сделать?
Прикрепленные файлы:
33. ivanov660 4437 14.09.22 11:26 Сейчас в теме
(32)Для этого вам необходимо уже работать с макетом отчета - группировать ячейки для поля ссылка. Вполне возможно сделать программно в процедуре "ПриКомпоновкеРезультата", обработав ДокументРезультат. Возможно получится и в редакторе макетов СКД.
34. tugushev98 23.09.22 14:30 Сейчас в теме
(33) если группировать, то получится так что поле "Ссылка" будет на уровень выше, а поля справа будут группировкой ниже, и будут уже сворачиваемость как в иерархии, а нужно чтобы записи были как бы на одном уровне в макете, таким образом чтобы в одну строку помещать таб часть
35. ivanov660 4437 23.09.22 14:58 Сейчас в теме
(34)Это как раз можно программно обработать. Да, придется ручками поправить выходную таблицу.
36. tugushev98 23.09.22 15:09 Сейчас в теме
(35)Пока не умею с отчетами программно работать, когда смотрю на эти процедуры работы с отчетом, мозг чуть не взрывается)
37. ivanov660 4437 23.09.22 16:15 Сейчас в теме
(36) Книжку Хрусталевой могу порекомендовать по СКД или тут на площадке поищите были примеры.
39. user886140 05.11.22 15:00 Сейчас в теме
Добрый день! А можно вывести в выражении "СоединитьСтроки" первые 10 записей?
вот тут например: СоединитьСтроки(ТаблицаЗначений(Номенклатура, Продажи), ";", ",")
43. Serg2000mr 412 12.03.24 19:20 Сейчас в теме
(0) А можно было и без дополнительного набора записей. Добавить в запрос обращение к табличной части, и создать ресурс с выражением СоединитьСтроки
Оставьте свое сообщение