какие данные будут содержаться в наборе при использовании пакетных запросов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

«Использование пакетных запросов» – бесплатные материалы из курса «Разработка и оптимизация запросов в 1С:Предприятие 8.2 и 8.3»

О чем эта статья

В статье рассказывается о механизме пакетных запросов, реализованных в платформе «1С:Предприятие». Прочитав статью, вы узнаете:

Применимость

Материал актуален для текущих версий платформы «1С:Предприятие» редакции 8.3

Назначение пакета запросов

Платформа позволяет работать с пакетами запросов. Получаем возможность выполнить несколько запросов «за раз». В пакетном запросе тексты запросов разделяются символом «;» (точка с запятой).

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

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

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

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

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

Создание пакета запросов при помощи конструктора

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

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

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

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

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

Выполнение запросов пакета

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

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

Кроме метода Выполнить(), последовательно выполняющего все запросы пакета и возвращающего результат последнего запроса в пакете, в платформе существует еще один метод – ВыполнитьПакет().

Этот метод последовательно выполняет все запросы и возвращает массив результатов для каждого запроса из пакета в последовательности расположения запросов в тексте пакета.

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

PDF-версия статьи для участников группы ВКонтакте

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

Источник

Комплект вопросов сертификационного экзамена на знание основных механизмов платформы «1С: Предприятие 8» (стр. 32 )

какие данные будут содержаться в наборе при использовании пакетных запросов. Смотреть фото какие данные будут содержаться в наборе при использовании пакетных запросов. Смотреть картинку какие данные будут содержаться в наборе при использовании пакетных запросов. Картинка про какие данные будут содержаться в наборе при использовании пакетных запросов. Фото какие данные будут содержаться в наборе при использовании пакетных запросовИз за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

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

1. Для создания схемы компоновки данных

2. Для редактирования настроек системы компоновки данных

3. Для вывода результата компоновки в виде отчета

4. Для исполнения компоновки данных

11.22 Для чего используется компоновщик настроек компоновки данных?

1. Для создания схемы компоновки данных

2. Для редактирования настроек системы компоновки данных

3. Для вывода результата компоновки в виде отчета

4. Для исполнения компоновки данных

11.23 Для чего используется процессор компоновки данных?

1. Для создания схемы компоновки данных

2. Для редактирования настроек системы компоновки данных

3. Для вывода результата компоновки в виде отчета

4. Для исполнения компоновки данных

11.24 Для чего используется процессор вывода компоновки данных?

1. Для создания схемы компоновки данных

2. Для редактирования настроек системы компоновки данных

3. Для вывода результата компоновки в табличный документ

4. Для исполнения компоновки данных

11.25 Каким объектом представлен конструктор схемы компоновки данных

1. Объектом встроенного языка

2. Объектом конфигурации

3. Объектом информационной базы

11.26 В каком виде можно получить результат компоновки данных?

1. В табличном документе

2. В виде таблицы значений

3. В виде диаграммы

4. В сводной таблице

5. Верны варианты I и 3

6. Верны все варианты

11.27 Каким образом представлена в системе 1С:Предприятие 8 схема компоновки данных

1. Объектом встроенного языка

2. Объектом конфигурации

3. Объектом информационной базы

11.28 Каким образом представлена структура схемы компоновки данных

11.29 Что произойдет, если в схеме компоновки данных использовать пакетные запросы?

1. Результирующим запросом будет пакетный запрос

2. Будет выдана ошибка

3. Использование пакетных запросов не доступно

11.30 Какие данные будут содержаться в наборе при использовании пакетных запросов?

1. Содержимым набора данных будет считаться результат последнего [табора

2. Для каждого запроса из пакетного запроса будет сформирован свой па-бор данных

3. Набор данных будет определяться запросом, не связанным с определением и удалением временной таблицы

11.31 Какой вариант отчета в схеме компоновки данных будет считаться по умолчанию?

1. Тот. который стоит в списке вариантов первым

2. Тот, у которого установлено свойство вариант по умолчанию

3. Тот, который определялся первым в процессе создания вариантов

11.32 Допустимо ли использование нескольких наборов данных?

3. Только при использовании наборов данных объект

11.33 Как выделяются синтаксические конструкции языка запросов для системы компоновки данных?

1. фигурными скобками

2. квадратными скобками

3. угловыми скобками

4. нет особых отличий

11.34 Как добавить настройку в список пользовательских настроек?

1. в форме настройки пользовательского элемента можно указать признак того, что элемент является пользовательским

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

3. добавление осуществляется установкой флажка в свойстве использовать

11.35 Каким образом может быть создана схема компоновки данных?

1. Визуально, при помощи конструктора схемы компоновки данных

2. Программно, при помощи объектов встроенного языка системы 1С:Предприятие 8

3. Визуально, при помощи любого редактора, позволяющего редактировать текст XML

4. Верны варианты 1 и 2

5. Верны варианты 1 и 3

6. Верны все варианты

11.36 Что представляет собой макет компоновки данных?

1. Табличный документ 1С:Предприятия 8 на закладке Макеты в конструкторе схемы компоновки данных

2. Настройки компоновки

3. Схема компоновки с настройками компоновки

4. Макет оформления схемы компоновки данных

11.37 При помощи чего создается макет компоновки данных?

1. При помощи объекта встроенного языка КомпоновщикМакетаКомпо-новкиДанных и его свойств СхемаКомпоновки и НастройкиКомпоновки

2. При помощи объекта встроенного языка КомпоновщикМакетаКомпо-новкиДанных и его метода Выполнить возвращающего готовый макет на основании параметров, определяющих СхемуКомпоновки и Настройки-Компоновки

3. При помощи конструктора схемы компоновки данных

4. При помощи конструктора настроек компоновки данных

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

2. Средствами встроенного языка через компоновщик макета

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

12.1 Какие объекты предназначены для хранения показателей оперативного учета?

2. Регистры сведений

3. Регистры накопления

12.2 Какими объектами являются регистры накопления?

1. Объектами конфигурации

2. Объектами встроенного языка

3. Объектами информационной базы

12.3 Какие типы регистров накопления возможны в системе 1С:Предприятие 8?

1. Регистры остатков

2. Регистры оборотов

3. Регистры состояний

4. Верны ответы 1, 2 и 3

5. Верны ответы 1 и 2

12.4 Что представляет собой набор записей регистра накопления?

1. Коллекцию записей регистра накопления в памяти

2. Коллекцию записей регистра накопления в информационной базе

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

12.5 Для чего может использоваться набор записей регистра накопления?

1. Для изменения записей регистра накопления по определенному регистратору

2. Для добавления записей регистра накопления по определенному регистратору

3. Для удаления записей регистра накопления по определенному регистратору

4. Для считывания набора записей по определенному регистратору

5. Верны варианты 1 и 4

6. Верны все варианты

12.6 Чем определяется набор записей регистра накопления?

1. Свойством «основной отбор»

2. Набором измерений, указанных в структуре регистра накопления

5. Верпы ответы 3 и 4

6. Верны все ответы

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

1. Данные считываются автоматически при создании набора

2. Данные считываются при установке отбора

3. Данные считываются с помощью метода «Прочитать»

12.8 Что будет содержаться в наборе записей регистра накопления, если считать данные методом «Прочитать» без установки отбора по регистратору?

1. В набор записей попадут вес записи из регистра накопления

2. Будет выдана ошибка

3. Набор останется пустым

12.9 Что произойдет, если прочитать данные в набор записей регистра накопления с установкой отбора по регистратору и измерению?

1. В набор записей попадут записи с указанным отбором

2. Будет выдана ошибка при попытке установить отбор по измерению

3. Набор останется пустым

12.10 Что происходит с записями регистра накопления в информационной базе при сохранении набора записей?

1. Все старые записи в рамках регистратора всегда удаляются

2. К старым записям в рамках регистратора добавляются новые

3. Сохранение и удаление старых записей зависит параметра «Замещать» в методе Записать

12.11 Какое ограничение на размер набора записей существует в регистре накопления?

1. Количество записей в наборе записей не ограничено

2. Количество записей в наборе записей ограничено только возможностями СУБД в клиент-серверном варианте

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

4. Набор записей ограничен 999 999 999 записями

12.12 В какой момент времени могут формироваться записи в регистре накопления?

1. При проведении документа

2. При записи документа

3. При заполнении документа

12.13 Выберите обязательное условие по отношению к Регистратору при записи данных в регистр накопления

1. Документ-регистратор должен быть проведен

2. Документ-регистратор должен быть записан

3. Документ-регистратор не должен быть помечен на удаление

4. Верны все варианты

12.14 Выберите верное утверждение по отношению к полю Регистратор

1. Поле Регистратор может содержать пустую ссылку на любой документ

2. Поле Регистратор может содержать пустую ссылку только на документ регистратор

3. Поле Регистратор может содержать ссылку на любой документ

4. Поле Регистратор может содержать не пустую ссылку только на документ регистратор

12.15 Как определить тип данных поля Регистратор?

1. Тип определяется на закладке «Регистраторы» в окне редактирования объекта конфигурации

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Конструктор запросов в 1С 8.3 и 8.2 — мощнейший инструмент разработки. Он позволяет составить текст запроса при помощи специальной визуальной среды. Таким образом, чтобы создать запрос 1с не обязательно знать встроенный язык запросов, достаточно ориентироваться в не сложном и интуитивно понятном интерфейсе конструктора.

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

Описание конструктора запросов на официальном сайте 1С 8: v8.1c.ru

Таблицы и поля; ; ; ; ; ; Вложенные запросы (в разработке).

Для того чтобы вызвать конструктор запросов 1с 8 в программном коде необходимо:

Рассмотрим на небольших примерах с возрастающей сложностью все основные вкладки конструктора запросов. Такой подход позволит начинающему программисту 1с более эффективно изучить конструктор и все его возможности. Для примеров будем использовать конфигурацию Бухгалтерия 3.0.

Урок №1. Конструктор запросов — простейший пример использования.

Задача: написать запрос к справочнику номенклатура, выбрать всю номенклатуру справочника.

Новые вкладки: Таблицы и поля.

Новые механизмы: просмотр и редактирование текста запроса при помощи кнопки «Запрос».

Для начала создания запроса создадим новый запрос и вызовем конструктор (как это делается написано несколькими абзацами выше). После этого откроется окно конструктора на вкладке Таблицы и поля.

Теоретическая часть урока №1

Вкладка Таблицы и поля состоит из трех разделов:

Над разделом Таблицы присутствует ряд кнопок. Про большинство из них будет подробнее рассказано в следующих уроках. А пока дам только краткие пояснения.

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

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

Практическая часть урока №1

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

Приступим к созданию запроса по номенклатуре:

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

В статье рассказывается о механизме пакетных запросов, реализованных в платформе «1С:Предприятие». Прочитав статью, вы узнаете:

Применимость

Материал актуален для текущих версий платформы «1С:Предприятие» редакции 8.3

Назначение пакета запросов

Платформа позволяет работать с пакетами запросов. Получаем возможность выполнить несколько запросов «за раз». В пакетном запросе тексты запросов разделяются символом «;» (точка с запятой).

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

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

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

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

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

Создание пакета запросов при помощи конструктора

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

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

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

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

Выполнение запросов пакета

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

Этот метод последовательно выполняет все запросы и возвращает массив результатов для каждого запроса из пакета в последовательности расположения запросов в тексте пакета.

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

Но столкнулся с фактом, что ничего о них не знаю. Оказалось, все очень просто. Через 5 минут вы будете уметь пользоваться пакетными запросами. Начинайте читать.

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

Пакетные запросы появились только в версии 8.1.11.67.4.

ВЫБРАТЬ Т1.Зн ПОМЕСТИТЬ ВТБуквы ИЗ (ВЫБРАТЬ «А» КАК Зн ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ «Б») КАК Т1;

ВЫБРАТЬ Т1.Зн ПОМЕСТИТЬ ВТЦифры ИЗ (ВЫБРАТЬ «1» КАК Зн ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ «2») КАК Т1;

ВЫБРАТЬ ТБ.Зн, ТЦ.Зн, ТБ.Зн+ТЦ.Зн ИЗ ВТБуквы КАК ТБ, ВТЦифры КАК ТЦ

Пакетные запросы поддерживаются в любой обычной консоли запросов.

На рисунке представлен образец выполнения запроса:

А теперь немного из опыта. Зачем нужны пакетные запросы.

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

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

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

Кроме того, если используется система компоновки данных (СКД), она грамотно отбирает нужные поля и минимизирует весь пакет запросов.

Анонс пакетных запросов на сайте 1с находится здесь: http://v8.1c.ru/overview/release_8_1_11/#Functional

История из жизни

Объясню, что меня подвигло на пакетные запросы.

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

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

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

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

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

Я просто еще раз соединил все строки с ошибками со всеми строками, для которых были найдены ошибки, и добавил все-таки вид ошибки «Прочие ошибки».

они очень повышают читабельность, что уменьшает вероятность ошибок => мне уже одного этого достаточно.

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

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

Источник

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

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