Вложенные таблицы в языке запросов 1С.

В этой статье мы разберем такую тему, как вложенные таблицы в языке запросов 1С.

В полях выборки запроса можно использовать вложенную таблицу источника запроса. Например, у документа «Оказание услуг», есть табличная часть Услуги, так вот, эту табличную часть тоже можно вывести в поле выборки. Сейчас Вы увидите, как это можно реализовать.

В своей учебной базе я запущу консоль запросов, открою конструктор запросов и выберу таблицу «Оказание Услуг».

Раскроем эту таблицу

И в ней мы видим табличную часть «Услуги».

Вот всю эту табличную часть и выберем.

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

Обращаю Ваше внимание, что табличная часть, по сути, идет как отдельное поле, которое называется «Услуги» и тип которого будет «РезультатЗапроса».  Научимся использовать вложенную таблицу в запросе.

Оставим три поля вложенной таблицы и добавим некоторые поля из шапки документа.

Нажмем кнопку ОК в конструкторе, и посмотрим как будет выглядеть наш запрос.

Как видите, в запросе после поля «Услуги» идет точка, а за ней в скобках перечислены выбранные поля.

Выполним запрос.

На рисунке мы видим, что все выбранные поля табличной части документа перечислена через запятую в поле «Услуги». Не во всех консолях запросов бывает такое отображение как на рисунке выше, иногда может просто идти надпись «ТаблицаЗначений«.

Ещё интересный момент, у вложенной таблицы можно вместо полей поставить звездочку, тогда выйдут все поля табличной части. Это нельзя сделать в конструкторе, только вручную в запросе. Запрос приобретет следующий вид:

Посмотрим, как выполнится такой запрос.

Единственно, что эта звездочка у нас не сохранится, если открыть  конструктор запроса.

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

В действительности не так сложно обратится при обработке запроса к вложенной таблице. Вы просто обращаетесь к выборке по названию вашей таблицы, и получаете переменную с типом «РезультатЗапроса». А потом обрабатываете ее как обычный результат запроса: хотите, получайте выборку, хотите, делайте выгрузку.

Ниже приведу небольшой пример кода, в котором осуществляется работа с вложенной таблицей:


&НаСервере
Процедура ЗаполнитьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
|    ПродажаТовара.Ссылка,
|    ПродажаТовара.Товары.(
|        Товар,
|        Количество
|    )
|ИЗ
|    Документ.ПродажаТовара КАК ПродажаТовара»
;
Выборка = Запрос.Выполнить().Выбрать();
Пока
Выборка.Следующий() Цикл
ВерхняяСтрокаДерева = ПродажаТоваров.ПолучитьЭлементы();
НоваяСтрока = ВерхняяСтрокаДерева.Добавить();
НоваяСтрока.Ссылка = Выборка.Ссылка;
ТаблТовары = Выборка.Товары;
ВыборкаТоваров = ТаблТовары.Выбрать();
Пока
ВыборкаТоваров.Следующий() Цикл
ДочерняяСтрокаДерева = НоваяСтрока.ПолучитьЭлементы();
СтрокаТоваров = ДочерняяСтрокаДерева.Добавить();
СтрокаТоваров.Ссылка = ВыборкаТоваров.Товар;
СтрокаТоваров.Количество = ВыборкаТоваров.Количество;
КонецЦикла;
КонецЦикла;
КонецПроцедуры

Разъясню вышеприведенный код.

Первым делом мы получили линейную выборку, и обходим эту выборку в цикле, в котором создаем верхнюю строку дерева значений (оно на форме), и в неё записываем ссылку на наш документ.

А дальше самое интересное, можете даже посмотреть это потом в отладчике самостоятельно, мы обращаемся к полю выборки Товары, и записываем для удобства это поле в отдельную переменную ТаблТовары. Данная переменная имеет тип «РезультатЗапроса». И можно спокойно получить выборку этого результата. Что мы и делаем. Осталось обойти эту выборку с помощью функции следующий и цикла пока.

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

Вот какой результат будет возвращать этот код

 

Остались вопросы?

Вы ответите на них сами, когда изучите мой курс «Запросы в 1С для начинающих». Где эти и многие другие вопросы рассматриваются более подробно. Вся информация дается в простой и доступной форме и понятна даже тем, кто особо не знаком с программированием в 1С.

Промо-код на скидку в 20%: hrW0rl9Nnx

 

Поддержите мой проект перечислив любую сумму

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Добавить комментарий

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