Простые запросы. Пакетные запросы для чайников Алгоритм грамотного создания пакетного запроса

Разберем, как изменялся (скорее дополнялся) синтаксис текстов запросов на простом примере: Проводится документ Расходная содержащая в табличной части Товары список продаваемых товаров и количество. При проведении такого документа необходимо обеспечить контроль отрицательных остатков хранящихся в регистре накопления остатков ОстаткиТоваров .

Структура конфигурации представлена на рисунке.

(16.22 килобайт) Кол-во скачиваний: 64

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

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Док.Номенклатура,
| СУММА(Док.Количество) КАК Док_Количество,
| МИНИМУМ(ЕСТЬNULL(Рег.КоличествоОстаток,0)) КАК Рег_Количество
|ИЗ
| Документ.Расходная.Товары КАК Док
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ОстаткиТоваров.Остатки() КАК Рег
| ПО
| Док.Номенклатура = Рег.Номенклатура
|ГДЕ
| Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО Док.Номенклатура";

//Проведение по регистру

КонецЦикла;

КонецПроцедуры

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

|ВЫБРАТЬ
| Док.Номенклатура,

|ИЗ
| (ВЫБРАТЬ

| ИЗ
| Документ.Расходная.Товары
| ГДЕ
| Ссылка = &Ссылка
| СГРУППИРОВАТЬ ПО Номенклатура) КАК Док
| ЛЕВОЕ СОЕДИНЕНИЕ
Номенклатура В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Номенклатура
| ИЗ
| Документ.Расходная.Товары
| ГДЕ
| Ссылка = &Ссылка)) КАК Рег
| ПО

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

Временные таблицы

Не помню уже с какого релиза в запросах стало можно использовать временные таблицы. Для этого используется объект «Менеджер временных таблиц». Фактически менеджер временных таблиц описывает пространство имен временных таблиц и отвечает за их создание и уничтожение в базе данных.

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

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

МВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Номенклатура, СУММА(Количество) КАК Количество
|ПОМЕСТИТЬ ДокТЧ
|ИЗ
| Документ.Расходная.Товары
|ГДЕ
| Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО Номенклатура";

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| Номенклатура
|ПОМЕСТИТЬ СписокТоваров
|ИЗ
| Документ.Расходная.Товары
|ГДЕ
| Ссылка = &Ссылка";

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.Текст = "
|ВЫБРАТЬ
| Док.Номенклатура,
| Док.Количество КАК Док_Количество,
| ЕСТЬNULL(Рег.КоличествоОстаток,0) КАК Рег_Количество
|ИЗ
| ДокТЧ КАК Док
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ОстаткиТоваров.Остатки(,
| Номенклатура
| ИЗ
| ПО
| Док.Номенклатура = Рег.Номенклатура";

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

//Проверка отрицательных остатков

//Проведение по регистру

КонецЦикла;

КонецПроцедуры

При использовании временных таблиц в тексте запроса применяют инструкцию Поместить для создания новой временной таблицы, в этом случае в результат запроса система передает не содержимое этой таблицы (см прим 1 и прим 2 в тексте выше), а количество записей помещенных во временную таблицу, по желанию можно не принимать это значение.

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

В основном нашем запросе я использовал названия временных таблиц как указание на источник получения данных (им обязательно надо назначать синоним, что мы и видим в тексте). Использовать временные таблицы как источник можно не единожды, что при умелом их применении позволит и сократить текст запроса (улучшиться читабельность сложных запросов) и увеличить скорость (при использовании данных временной таблицы в нескольких местах запроса).

Пакетные запросы

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

В пакетном запросе фактически можно описать несколько запросов, как связанных между собой использованием временных таблиц, так и не связанных (можно, но не понятно зачем?). В итоге можно выполнить последовательно все запросы и принять в результате либо массив с результатами исполнения каждого запроса, либо результат последнего. Для получения массива с результатами запроса применяют метод ВыполнитьПакет() объекта запрос, а для получения результата последнего запроса ВыполнитьЗапрос() .

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

Перепишем процедуру для использования пакетных запросов:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Номенклатура, СУММА(Количество) КАК Количество
|ПОМЕСТИТЬ ДокТЧ
|ИЗ
| Документ.Расходная.Товары
|ГДЕ
| Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО Номенклатура
|;
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Номенклатура
|ПОМЕСТИТЬ СписокТоваров
|ИЗ
| Документ.Расходная.Товары
|ГДЕ
| Ссылка = &Ссылка
|;
|ВЫБРАТЬ
| Док.Номенклатура,
| Док.Количество КАК Док_Количество,
| ЕСТЬNULL(Рег.КоличествоОстаток,0) КАК Рег_Количество
|ИЗ
| ДокТЧ КАК Док
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ОстаткиТоваров.Остатки(,
| Номенклатура В(ВЫБРАТЬ РАЗЛИЧНЫЕ
| Номенклатура
| ИЗ
| СписокТоваров КАК СписокТоваров)) КАК Рег
| ПО
| Док.Номенклатура = Рег.Номенклатура";

Пока Выборка.Следующий() Цикл

//Проверка отрицательных остатков

//Проведение по регистру

КонецЦикла;

КонецПроцедуры

Фактически я убрал определение объекта запрос и использование менеджера временных таблиц, объединил тексты запросов (обратите внимание на разделитель «;» между текстами). В результате текст запроса стал читабельнее (а при использовании конструктора запросов намного увеличивается удобство чтения запроса).

После выполнения запроса в переменную МассивРезультатов у нас попадет 3 элемента. Первые два будут содержать число характеризующее количество записей помещенных во временные таблицы ДокТЧ и СписокТоваров , а третий будет содержать выборку с полями Номенклатура , Док_Количество и Рег_Количество .

В переменную РезультатЗапроса попадет только выборка.

Ну вот и все что касается пакетных запросов. Очень удобный механизм и с точки зрения написания запросов и с точки зрения чтения сложных запросов.

Простые запросы

Рассмотриь, как изменялся (правильнее сказать, дополнялся) синтаксис запросов на следующем примере: Проводится документ Расходная, которая содержит в табличной части Товары список реализуемой продукции и ее количество. Для проведения этого документа необходимо контролировать отрицательные остатки, записанные в регистр накопления остатков ОстаткиТоваров.

На рисунке показана структура конфигурации.

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

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


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

Временные таблицы

С некоторого времени в запросах появилась возможность использования временных таблицх, для чего служит объект «Менеджер временных таблиц». По сути дела, менеджер временных таблиц содержит описание пространства имен временных таблиц и обеспечивает их создание и удаление из базы данных.

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

Изменим запрос с учетом использования временных таблиц. Временные таблицы будут содержать табличную часть документа в сгруппированном виде и список продукции для фильтрации виртуальных таблиц:

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

Кроме того можно использовать инструкцию Уничтожить - при этом временная таблица удаляется, иначе временные таблицы будут уничтожен объект менеджер временных таблиц вместе с таблицами.

В основном запросе названия временных таблиц использовалось в качестве указания на источник данных (им должен быть назначен синоним). Использовать временные таблицы в качестве источника можно неоднакратно, что при правильном их применении позволяет сократить текст запроса и повысить скорость (при использовании временной таблицы в различных местах запроса).

Пакетные запросы

Пакетные запросы значительно расширяют функционал временных таблиц и предоставляют новые возможности при работе с запросами.

Факимчески, в пакетном запросе может быть описано несколько запросов, как взаимосвязанных между собой посредством временных таблиц, так и независимых. В результате появляется последовательно выполнять все запросы и получить в итоге массив результатов выполнения каждого запроса или результат только последнего. Получение массива результатов запроса производится с помощью метода ВыполнитьПакет() объекта запрос, а чтобы получить результат только последнего запроса служит метод ВыполнитьЗапрос().

Пакетные запросы в тексте запроса должны быть разделены символом «;». Пространство имен виртуальных таблиц у отдельного пакетного запроса одно. В использовании менеджера временных таблиц нет необходимости, но возможно если вам нужно передать временные таблицы в другой пакетный запрос.

Изменим процедуру с учетом пакетных запросов:

Фактически было удалено определение объекта запрос и не был использован менеджер временных таблиц, объединились тексты запросов. В итоге, текст запроса приобрел более читабельный вид.

После исполнения запроса, переменная МассивРезультатов будет содержать 3 элемента. Два первых - это количество помещенных во временные таблицы записей ДокТЧ и СписокТоваров, в третьем будет находиться выборка с полями Док_Количество, Номенклатура и Рег_Количество.

Переменная РезультатЗапроса содержит только выборку.

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

Платформа «1С Предприятие» позволяет выполнить последовательно несколько запросов за один раз. В 1С это называется пакетом запросов. В рамках одного пакета каждый запрос разделяется «точкой с запятой».

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

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

Еще одна важная деталь в пользу пакетных запросов в 1С – это то, что в отличие от мы можем получить отдельно результат каждого запроса в пакете.

Пример создания пакета запросов на языке 1С

Чтобы посмотреть на примере, как создать пакет запросов, будем использовать конструктор запросов, который вызовем для наглядности из консоли запросов. Таким образом, сможем сразу посмотреть результат выполнения пакета.

Создадим простенький пакетный запрос. Предлагаю сразу вставить текст запроса в , а потом открыть и посмотреть, как формируется пакет запросов. Добавьте в консоль новый запрос и вставьте следующий текст:

Получите 267 видеоуроков по 1С бесплатно:

Хозрасчетный.Ссылка,
Хозрасчетный.Родитель,
Хозрасчетный.Код,
Хозрасчетный.КодБыстрогоВыбора,
Хозрасчетный.Наименование,
Хозрасчетный.Вид,
Хозрасчетный.Забалансовый,
Хозрасчетный.Количественный,
ИЗ
ПланСчетов.Хозрасчетный КАК Хозрасчетный
ГДЕ
Хозрасчетный.Ссылка = &Счет
;
////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
ХозрасчетныйВидыСубконто.НомерСтроки КАК НомерСтроки,
ХозрасчетныйВидыСубконто.ВидСубконто КАК ВидСубконто,
ХозрасчетныйВидыСубконто.ВидСубконто.Наименование КАК Наименование,
ХозрасчетныйВидыСубконто.ВидСубконто.ТипЗначения КАК ТипЗначения,
ХозрасчетныйВидыСубконто.ТолькоОбороты КАК ТолькоОбороты,
ХозрасчетныйВидыСубконто.Суммовой КАК Суммовой
ИЗ
ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
ГДЕ
ХозрасчетныйВидыСубконто.Ссылка = &Счет
УПОРЯДОЧИТЬ ПО
ХозрасчетныйВидыСубконто.НомерСтроки

У меня это выглядит так:

Теперь перейдем в конструктор запросов. Здесь нас будет интересовать закладка «Пакет запросов»:

Как видим, у нас появился пакет из двух запросов. Кликнув два раза на любом из них, можно перейти к его редактированию:

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

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

Методы Выполнить() и ВыполнитьПакет()

Думаю все вы согласитесь с тем, что тема запросов в системе 1С:Предприятие 8 сегодня может похвастаться своей актуальностью. Именно поэтому нашу сегодняшнюю статью мы решили посвятить теме, связанной с объединением запросов, получении последних по дате документов в 1С запросе и соединением запросов. Давайте все таки начнем.

Итак, для того, чтобы создать в системе 1С:Предприятие пакетный запрос следует использовать предложение ПОМЕСТИТЬ. Пакетный запрос подразумевают под собой сразу же несколько запросов, описанных как один большой запрос. Все они выполняются последовательно один за другим. В результате использования любого из этих запросов, их можно поместить во внутрь временной таблицы и потом обратится к ней используя для этого уже какой то другой запрос. Наверное большинство из вас спросят: в чем же плюсы этого метода?

У нас есть ответ на этот вопрос. Лично я считаю, что самым большим преимуществом этого метода является возможность помещать его результаты во внутрь так называемой временной таблицы. В ней они могут использоваться несколько раз. Более того, вам при всем этом не нужно будет несколько раз подряд выполнять один и тот же вложенный запрос, все что вам будет нужно это просто напросто выбирать данные из уже готовой таблицы. Некоторые из вас спросят: есть ли в этой методике какие то минусы. Безусловно, как и во всем в нашем мире в этой методике есть некоторые, определенные недостатки.

К самым существенным можно отнести то, что во время использования временных таблиц в пакетных запросах система может формировать в базе данных вполне реальные таблицы. Возможно некоторые спросят: так в что же здесь такого плохого? С одной стороны это хорошо. Но, с другой вы будете тратить значительную часть своего времени для того, чтобы создавать запросы, а после того, как вы их используете, вам придется уделить некоторое время еще и для того, чтобы удалить их.

Вот, например:
ВЫБРАТЬ
Номенклатура,

Сумма(Сумма) КАК Сумма,
ПОМЕСТИТЬ ДокПриход
ИЗ


В результате, после того, как вы выполните этот запрос выведется только то количество записей, которое было помещено в таблицу. Результаты при этом будут находится в той же самой таблице. Давайте сделаем подобный запрос для расходного документа. Для этого нам потребуется разделить эти два запроса с помощью символа ";". Именно он способен рассказать пользователю о том, что закончился один пакетный запрос и начинается другой.

ВЫБРАТЬ
Номенклатура,
Сумма(Количество) КАК Количество,
Сумма(Сумма) КАК Сумма,
ПОМЕСТИТЬ ДокПриход
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары
СГРУППИРОВАТЬ ПО Номенклатура
;

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

;
ВЫБРАТЬ
*
ИЗ
ДокПриход КАК ДокПриход
ПОЛНОЕ СОЕДИНЕНИЕ
ДокРасход КАК ДокРасход
ПО

Из этого можно увидеть, что третий запрос соединяет данные из этих двух запросов.

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

ВЫБРАТЬ
ДокПриход.Номенклатура,
ДокРасход.Номенклатура,




ИЗ
ДокПриход КАК ДокПриход
ПОЛНОЕ СОЕДИНЕНИЕ
ДокРасход КАК ДокРасход
ПО
ДокПриход.Номенклатура = ДокРасход.Номенклатура

В результате мы получим данные по приходу и расходу. Но, у нас все же осталась проблема, связанная с тем, каким образом можно было бы объединить два столбца, «Номенклатура» и «Номенклатура1»? В том случае, если брать значение из столбца «Номенклатура», то мы в итоге так и не получим значение из последней строки, ну а если же брать значение из столбца «Номенклатура1», то не получим в итоге значение из третьей строки. Для этого следует воспользоватся функцией «ЕСТЬNULL».
В итоге запрос будет иметь такой вид:

ВЫБРАТЬ
КАК Номенклатура,
ДокПриход.Количество КАК КолПриход,
ДокПриход.Сумма КАК СумПриход,
ДокРасход.Количество КАК КолРасход,
ДокРасход.Сумма КАК СумРасход
ИЗ
ДокПриход КАК ДокПриход
ПОЛНОЕ СОЕДИНЕНИЕ
ДокРасход КАК ДокРасход
ПО
ДокПриход.Номенклатура = ДокРасход.Номенклатура

При этом может возникнуть еще одна проблема, связанная с тем, каким образом можно было бы заменить значения на числовое ноль? Для этого вам опять придется воспользоватся функцией «ЕСТЬNULL» и написать запрос:

ВЫБРАТЬ
ЕСТЬNULL(ДокПриход.Номенклатура,ДокРасход.Номенклатура)
КАК Номенклатура,
ЕСТЬNULL(ДокПриход.Количество,0) КАК КолПриход,
ЕСТЬNULL(ДокПриход.Сумма,0) КАК СумПриход,
ЕСТЬNULL(ДокРасход.Количество,0) КАК КолРасход,
ЕСТЬNULL(ДокРасход.Сумма,0) КАК СумРасход
ИЗ
ДокПриход КАК ДокПриход
ПОЛНОЕ СОЕДИНЕНИЕ
ДокРасход КАК ДокРасход
ПО
ДокПриход.Номенклатура = ДокРасход.Номенклатура

Блог компании 1С GOODWILL

Платформа «1С Предприятие» позволяет выполнить последовательно несколько запросов за один раз. В 1С это называется пакетом запросов. В рамках одного пакета каждый запрос разделяется «точкой с запятой».

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

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

Еще одна важная деталь в пользу пакетных запросов в 1С – это то, что в отличие от вложенных запросов, мы можем получить отдельно результат каждого запроса в пакете.

Пример создания пакета запросов на языке 1С

Что бы посмотреть на примере, как создать пакет запросов, будем использовать конструктор запросов, который вызовем, для наглядности, из консоли запросов. Таким образом, сможем сразу посмотреть результат выполнения пакета.

Создадим простенький пакетный запрос. Предлагаю сразу вставить текст запроса в консоль, а потом открыть конструктор и посмотреть, как формируется пакет запросов. Добавьте в консоль новый запрос и вставьте следующий текст:

Хозрасчетный.Родитель,

Хозрасчетный.Код,

Хозрасчетный.КодБыстрогоВыбора,

Хозрасчетный.Наименование,

Хозрасчетный.Вид,

Хозрасчетный.Забалансовый,

Хозрасчетный.Количественный,

ПланСчетов.Хозрасчетный КАК Хозрасчетный

////////////////////////////////////////////////////////////////////////////////

ХозрасчетныйВидыСубконто.НомерСтроки КАК НомерСтроки,

ХозрасчетныйВидыСубконто.ВидСубконто КАК ВидСубконто,

ХозрасчетныйВидыСубконто.ВидСубконто.Наименование КАК Наименование,

ХозрасчетныйВидыСубконто.ВидСубконто.ТипЗначения КАК ТипЗначения,

ХозрасчетныйВидыСубконто.ТолькоОбороты КАК ТолькоОбороты,

ХозрасчетныйВидыСубконто.Суммовой КАК Суммовой

ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто

УПОРЯДОЧИТЬ ПО

ХозрасчетныйВидыСубконто.НомерСтроки

У меня это выглядит так:

Теперь перейдем в конструктор запросов. Здесь нас будет интересовать закладка «Пакет запросов»:

Как видим, у нас появился пакет из двух запросов. Кликнув два раза на любом из них, можно перейти к его редактированию:

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

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

Методы Выполнить() и ВыполнитьПакет()

Помимо метода Выполнить(), который поочередно выполнит все запросы в пакете и вернет результат последнего запроса, в 1С существует метод ВыполнитьПакет(). Он возвращает массив выборок каждого запроса в пакете. В примере выше выполняется как раз этот метод.

МассивРезультатов = Запрос.ВыполнитьПакет();

Выборка1 = МассивРезультатов.Выбрать();

Если Выборка1.Следующий() Тогда

//Действия с выборкой 1

КонецЕсли;

ВыборкаВидыСубконто = МассивРезультатов.Выбрать();

Запись Работа с пакетными запросами в 1С 8.3 и 8.2 впервые появилась Блог компании 1С GOODWILL.