gifts2017

1C 8.x СКД. Вывод значений полей табличной части документа в одну ячейку

Опубликовал Алёна Казимирская (nika12398) в раздел Программирование - Инструментарий

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

Моя конфигурация - 1С Университет ПРОФ, редакция 1.1 (1.1.7.1), хотя в данном вопросе суть не в этом.

Создание отчета выполняется через систему компоновки данных.

Моя задача была вот в чем:

Имеется документ "Информационная технология", там имеется табличная часть, содержащая авторов. 
На основе данного документа создается еще один - "Регистрация ИТ в ФИПС". 
Задача состоит в том, чтобы на выходе получить отчет, в котором есть 4 поля из документа "Регистрация ИТ в ФИПС", плюс поле из документа "Информационная технология", плюс данные об авторах из табличной части документа "Инф.технология". 

Отчет создается через Систему компоновки данных.

Сначала создаем первый набор данных - запрос, где выбираем необходимые поля (+ поле Ссылка) из первого документа ( у меня "Регистрация ИТ в ФИПС"), затем создаем второй набор данных - запрос, где выбираем поля второго документа ("Информационная технология") вместе с табличной частью (Авторы) (+ поле Ссылка 2го документа).

На вкладке "Связи" настраиваем связь между этими наборами данных.

Источник связи - НаборДанных1, приемник связи - НаборДанных2, Выражение источник - Ссылка из НаборДанных1, Выражение приемник - Ссылка из НаборДанных2.

Для того, чтобы в поле табличной части (Авторы.Автор) вывести всех авторов через запятую, переходим на вкладку Ресурсы. 

Выбираем поле Авторы.Автор и в части "Выражение" пишем:

СоединитьСтроки(Массив(Авторы.Автор)," ,  ")

то есть мы указываем, что объединяем массив данных и размещаем записи через ", ".

В настройках отчета создаем группировку, я поле не выбирала, т.е. добавила ДетальныеЗаписи.

Ну, и как обычно выбираем поля, которые отчет должен отражать, и добавляем отборы.


Для первоначального изучения исследованы следующие источники: http://infostart.ru/public/267055/

http://www.cyberforum.ru/1c-custom/thread1237018.html


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

Наименование Файл Версия Размер
Внешний отчет с выводом ТЧ в одну ячейку через запятую 8
.erf 6,22Kb
25.05.15
8
.erf 6,22Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Галюк (dj_serega) 26.05.15 07:55
2. Иван Петров (dgolovanov) 26.05.15 08:28
Эх, стыдоба, я внешнюю функцию сделал в общем модулея для этого :)) Спасибо!
3. Залия Кузнецова (zala) 26.05.15 08:55
Ээээ... Это ж типовая тема - ничего нового и хитрого...В мануалах все описано
dj_serega; zqzq; ekaruk; cj512; +4 Ответить
4. Armando Armando (Armando) 26.05.15 09:57
Удивляет, что появлении незнакомой задачи люди пытаются перерыть множество сайтов, но не документацию.
5. Евгения Карук (ekaruk) 26.05.15 11:41
Выложить разработкой простейшее использование базовых возможностей СКД это круто.

Но раз люди плюсуют, значит, кому-то действительно полезно.
Redokov; rimma_n; +2 Ответить
6. Сергей Ожерельев (Поручик) 26.05.15 13:36
Где-то на сайте уже было описано года два назад. Я помню, потому что мы тогда делали серию похожих отчетов с выводом данных из ТЧ.
SaperVodichka; +1 Ответить
7. Андрей Логинов (Poplar) 27.05.15 08:59
Жаль, что раньше этой статьи не было. Сэкономил бы много времени. Действительно полезная функция. Спасибо автору.
8. ффф ыыы (zqzq) 27.05.15 09:26
1. Адский баян.
2. Достаточно просто использовать Массив, без СоединитьСтроки, тогда ещё и расшифровка будет работать. (Если не нужны экзотические разделители.)

(6) Я бы сказал, это описано в документации по СКД (F1) N лет назад.
SaperVodichka; +1 Ответить 1
9. Дмитрий Б (bdimaw) 27.05.15 09:55
Статья полезная, но зачем использовать 2 источника данных?
10. Артем Артеменко (dock) 27.05.15 15:43
(8) zqzq, ссылку на теорию или пример можно ?
11. Евгения Карук (ekaruk) 27.05.15 17:05
(10) dock, F1 в конфигураторе

"1С:Предприятие 8" - "Система компоновки данных" - "Язык выражений системы компоновки данных"

СоединитьСтроки (JoinStrings)
Предназначена для объединения строк в одну строку.
Синтаксис:
СоединитьСтроки (Значение, РазделительЭлементов, РазделителиКолонок)
Параметры:
Значение - выражения, которые нужно объединить в одну строку. Если является Массивом, то в строку будут объединяться элементы массива. Если является ТаблицаЗначений, то в строку будут объединяться все колонки и строки таблицы;
РазделительЭлементов - строка, содержащая текст, который нужно использовать в качестве разделителя между элементами массива и строками таблицы значений. По умолчанию – символ перевода строк;
РазделителиКолонок -строка, содержащая текст, который нужно использовать в качестве разделителя между колонками таблицы значений. По умолчанию "; ".
Пример:
СоединитьСтроки(ТаблицаЗначений(НомерТелефона, Адрес));


Массив (Array)
Функция формирует массив, содержащий для каждой детальной записи значение параметра.
Синтаксис:
Массив([Различные] Выражение)
В качестве параметра можно использовать таблицу значений. При этом результатом работы функции будет массив, содержащий значения первой колонки таблицы значений, переданной в качестве параметра.
Если выражение содержит функцию Массив, то считается, что данное выражение является агрегатным.
Если указано ключевое слово Различные, то получаемый массив не будет содержать дублирующихся значений.
Пример:
Массив(Контрагент)
dock; Бубузяка; +2 Ответить
12. Петр Лунегов (pvlunegov) 09.06.15 10:45
Ставлю плюс за то что автор девушка