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 не будет опубликован. Обязательные поля помечены *