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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


17 Comments

  1. dj_serega

    Полезная функция.

    Reply
  2. dgolovanov

    Эх, стыдоба, я внешнюю функцию сделал в общем модулея для этого :)) Спасибо!

    Reply
  3. zala

    Ээээ… Это ж типовая тема — ничего нового и хитрого…В мануалах все описано

    Reply
  4. Armando

    Удивляет, что появлении незнакомой задачи люди пытаются перерыть множество сайтов, но не документацию.

    Reply
  5. ekaruk

    Выложить разработкой простейшее использование базовых возможностей СКД это круто.

    Но раз люди плюсуют, значит, кому-то действительно полезно.

    Reply
  6. Поручик

    Где-то на сайте уже было описано года два назад. Я помню, потому что мы тогда делали серию похожих отчетов с выводом данных из ТЧ.

    Reply
  7. Poplar

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

    Reply
  8. zqzq

    1. Адский баян.

    2. Достаточно просто использовать Массив, без СоединитьСтроки, тогда ещё и расшифровка будет работать. (Если не нужны экзотические разделители.)

    (6) Я бы сказал, это описано в документации по СКД (F1) N лет назад.

    Reply
  9. bdimaw

    Статья полезная, но зачем использовать 2 источника данных?

    Reply
  10. dock

    (8) zqzq, ссылку на теорию или пример можно ?

    Reply
  11. ekaruk

    (10) dock, F1 в конфигураторе

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

    СоединитьСтроки (JoinStrings)

    Предназначена для объединения строк в одну строку.

    Синтаксис:

    СоединитьСтроки (Значение, РазделительЭлементов, РазделителиКолонок)

    Параметры:

    Значение — выражения, которые нужно объединить в одну строку. Если является Массивом, то в строку будут объединяться элементы массива. Если является ТаблицаЗначений, то в строку будут объединяться все колонки и строки таблицы;

    РазделительЭлементов — строка, содержащая текст, который нужно использовать в качестве разделителя между элементами массива и строками таблицы значений. По умолчанию – символ перевода строк;

    РазделителиКолонок -строка, содержащая текст, который нужно использовать в качестве разделителя между колонками таблицы значений. По умолчанию «; «.

    Пример:

    СоединитьСтроки(ТаблицаЗначений(НомерТелефона, Адрес));

    Массив (Array)

    Функция формирует массив, содержащий для каждой детальной записи значение параметра.

    Синтаксис:

    Массив([Различные] Выражение)

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

    Если выражение содержит функцию Массив, то считается, что данное выражение является агрегатным.

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

    Пример:

    Массив(Контрагент)

    Reply
  12. pvlunegov

    Ставлю плюс за то что автор девушка

    Reply
  13. bad_wag

    А можно так же сделать, для поля — НЕ ресурса?

    Reply
  14. HiGHT

    (13)

    Поддержу вопрос)

    Reply
  15. bad_wag

    (14) Я через вычисляемые поля сделал

    Reply
  16. HiGHT

    (15)

    Например есть таблица с 2 колонками.

    В первой договоры контрагента, во второй документы реализации.

    По каждому договору может быть несколько документов.

    Как вывести Документы одной ячейкой для каждого договора не используя ресурсы?

    Reply
  17. bad_wag

    (16) Прошу извинить, забыл, что так не получится, а чем ресурс не устраивает?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *