Что такое пакетный запрос 1с

Работа с пакетными запросами в 1С 8.3

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

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

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

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

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

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

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

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

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

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

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

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

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

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

Далее работаем с результатом как с массивом:

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

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

1С 8.2 УП : Пакетные запросы

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

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

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

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

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

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

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

Источник

Запросы в 1С

Запросы в 1С предназначены для получения данных из базы данных. Рассмотрим на что способен данный механизм.

Что такое запрос и язык запросов

Запросы предназначены для извлечения и обработки информации из базы данных для предоставления пользователю в требуемом виде. Под обработкой здесь подразумевается группировка полей, сортировка строк, расчет итогов и т.д. Изменять данные с помощью запросов в 1С нельзя!

Запрос выполняется в соответствии с заданными инструкциями — текстом запроса. Текст запроса составляется в соответствии с синтаксисом и правилами языка запросов. Язык запросов 1С:Предприятие 8 основан на базе стандартного SQL, но имеет некоторые отличия и расширения.

Схема работы с запросом

Общая схема работы с запросом состоит из нескольких последовательных этапов:

1. Объект Запрос имеет свойство Текст, которому необходимо присвоить текст запроса.

// Вариант 2
Запрос = Новый Запрос ( «ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта» );

4. Обойти выборку результата запроса можно с помощью цикла:

Полный пример работы с запросом может выглядеть так:

Состав текста запроса

Текст запроса состоит из нескольких секций:

Обязательной является только первая секция.

Временные таблицы и пакетные запросы

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

Часто можно столкнуться с ситуацией, когда в качестве источника запроса нужно использовать не таблицы базы данных, а результат выполнения другого запроса. Эту задачу можно решить с помощью вложенных запросов или временных таблиц. Применение временных таблиц позволяет упростить текст сложного запроса, разделив его на составные части, а также, в некоторых случаях, ускорить выполнение запроса и уменьшить количество блокировок. Для работы с временными таблицами используется объект МенеджерВременныхТаблиц. Создание временной таблицы производится при помощи ключевого слова ПОМЕСТИТЬ, за которым следует наименование временной таблицы.

Для использования временной таблицы ВТВалюты в других запросах необходимо этим запросам присвоить общий менеджер временных таблиц — МенеджерВТ.

Пакетный запрос — это запрос, в котором содержится несколько запросов, разделенных символом «;». При выполнении пакетного запроса все входящие в него запросы выполняются последовательно, причем результаты всех временных таблиц доступны всем последующим запросам. Явное присвоение менеджера временных таблиц пакетным запросам не обязательно. Если менеджер временных таблиц не присвоен, то все временные таблицы удалятся сразу после выполнения запроса.

ТЗВалюты = РезультатПакета [ 0 ]. Выгрузить ();
ТЗНоменклатура = РезультатПакета [ 1 ]. Выгрузить ();

Виртуальные таблицы

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

Существуют следующие виртуальные таблицы (в скобках указаны возможные параметры):

При работе с виртуальными таблицами следует накладывать отборы в параметрах виртуальных таблиц, а не в условии ГДЕ. От этого сильно зависит время выполнения запроса.

Конструктор запроса

Для ускорения ввода текстов запросов платформа имеет специальные инструменты: Конструктор запроса и Конструктор запроса с обработкой результата. Для вызова конструкторов необходимо щелкнуть правой кнопкой мыши и выбрать требуемый пункт:

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Также конструкторы можно вызвать из главного меню Текст.

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

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Объект СхемаЗапроса

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

Рассмотрим пример работы с объектом СхемаЗапроса. Для программного формирования текста запроса

ВЫБРАТЬ
Валюты.Ссылка КАК Валюта,
Валюты.Код
ИЗ
Справочник.Валюты КАК Валюты
ГДЕ
НЕ Валюты.ПометкаУдаления

УПОРЯДОЧИТЬ ПО
Валюты.Код

Код на встроенном языке может выглядеть так:

Остались вопросы?
Спросите в комментариях к статье.

Источник

Обучение программированию на 1С

Пакетные запросы в 1С: для чего и как это работает?

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Кстати, пакетные варианты запросов стали доступны только в решении 8.1.11.67.4 – так что вы, возможно, ещё не знаете, как это работает на практике. Если рассказать примитивно, то достаточно создать ряд запросов и соединить их через символ «;». Например:

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Почему нельзя обойтись без пакетных запросов?

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

Анонс пакетных запросов от разработчиков 1С

Новое в версии 8.1.11 направлено на достижение следующих целей:

Каковы же функциональные возможности запросов в 8.1.11?

Именно запросы существенно улучшают работу с временными таблицами. Функционал пакетных запросов подразумевает, что любая таблица, сформированная для конкретного запроса из пакета, работает пока пакетный запрос полностью не закончил своё действие или до достижения команды на его уничтожение. Сейчас можно получать как результат самого последнего запроса – это будет команда Выполнить(), так и целый массив результатов по методу ВыполнитьПакет().

Алгоритм грамотного создания пакетного запроса

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

Минусы метода

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

В результате имеем таблицу:

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

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

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Обратите внимание, 3-ий запрос объединил результаты работы первых двух, смотрим, что получилось:

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Теперь постараемся добавить красоты и немного изменим текст для 3-его запроса, вот так:

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Теперь у нас вот что получилось:

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Осталось объединить столбцы с Номенклатурой, и проставить нули в пустых клетках.

Источник

Что такое пакетный запрос 1с

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: пакетные запросы и временные таблицы

Автор уроков и преподаватель школы: Владимир Милькин

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

Пусть у нас есть запрос, выбирающий наименования цветов:

И запрос, выбирающий наименования вкусов:

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

Вот бы иметь возможность выполнить оба этих запроса последовательно, но в один присест. Так сказать в одном пакете. У платформы есть такая возможность и она называется пакетный запрос.

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

Таким образом наш пакетный запрос для двух вышеперечисленных запросов будет таким:

В результате пакетный запрос вернёт нам сразу две таблицы:

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

Разумеется в пакетный запрос может входить и 3 и 4 и сколько угодно запросов. Главное отделять их друг от друга точкой с запятой.

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

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

К примеру, давайте поставим себе цель написать пакетный запрос, который первым запросом выбирает все цвета и помещает их во временную таблицу с именем ТАБЛИЦА_ЦВЕТОВ, вторым запросом выбирает все вкусы и помещает их во временную таблицу с именем ТАБЛИЦА_ВКУСОВ, а третьим запросом делает объединение полученных ранее результатов в одну таблицу:

Что такое пакетный запрос 1с. Смотреть фото Что такое пакетный запрос 1с. Смотреть картинку Что такое пакетный запрос 1с. Картинка про Что такое пакетный запрос 1с. Фото Что такое пакетный запрос 1с

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

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

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

Источник

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

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