Создание пакетного запроса, использующего временную таблицу
страницаСоздание пакетного запроса, использующего временную таблицу
В этом разделе вы узнаете, как с помощью конструктора запроса создать временную таблицу и затем использовать ее в пакетном запросе. Например, вам нужно вывести все элементы номенклатуры в порядке иерархии и показать, какие из них были получены в приходной накладной № 1 (листинг 11.42). Этот пример вы рассматривали в разделе «Временные таблицы и пакетные запросы».
Листинг 11.42. Вывод номенклатуры в порядке иерархии справочника «Номенклатура» с данными об их поступлении в приходной накладной № 1
ВЫБРАТЬ
ПриходнаяНакладнаяМатериалы.Материал КАК Материал,
ПриходнаяНакладнаяМатериалы.Ссылка.Дата КАК Дата,
ПриходнаяНакладнаяМатериалы.Ссылка.Номер КАК Номер
ПОМЕСТИТЬ НакладнаяМатериалы
ИЗ
Документ.ПриходнаяНакладная.Материалы КАК ПриходнаяНакладнаяМатериалы
ГДЕ
ПриходнаяНакладнаяМатериалы.Ссылка.Номер = "000000001"
;
ВЫБРАТЬ
Номенклатура.Наименование КАК Наименование,
НакладнаяМатериалы.Дата КАК Дата,
НакладнаяМатериалы.Номер КАК Номер
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ НакладнаяМатериалы КАК НакладнаяМатериалы
ПО Номенклатура.Ссылка = НакладнаяМатериалы.Материал
УПОРЯДОЧИТЬ ПО
Номенклатура.Ссылка ИЕРАРХИЯ
АВТОУПОРЯДОЧИВАНИЕ
Чтобы получить такой запрос с помощью конструктора, нужно:
- Сформировать первый запрос для заполнения данными временной таблицы.
- На закладке
Пакет запросовдобавить в пакет запросов запрос, который будет использовать данные этой таблицы. - На закладке
Таблицы и полясоздать описание этой временной таблицы и использовать ее как источник второго запроса.
Если у вас остался запрос от предыдущего примера – удалите его текст из модуля и откройте конструктор, чтобы создать новый запрос.
Итак, сначала создайте запрос для получения временной таблицы, содержащей информацию о поступлении товаров из приходной накладной № 1.
Для этого на закладке Таблицы и поля перенесите табличную часть Материалы документа ПриходнаяНакладная в список источников запроса и выберите из этой таблицы поля (рис. 11.54):
Материал,Ссылка.Дата,Ссылка.Номер.

Рис. 11.54. Окно конструктора запроса
На закладке Условия задайте произвольное условие отбора записей из приходных накладных так, чтобы во временную таблицу попадали только данные из накладной № 1 (рис. 11.55):
ПриходнаяНакладнаяМатериалы.Ссылка.Номер = "000000001"

Рис. 11.55. Окно конструктора запроса
На закладке Дополнительно включите опцию Создание временной таблицы и укажите, что результат запроса нужно поместить во временную таблицу с именем НакладнаяМатериалы (рис. 11.56).

Рис. 11.56. Окно конструктора запроса
Примечание
Обратите внимание, что при создании временной таблицы в конструкторе запроса исчезают закладки Порядок и Итоги и появляется закладка Индекс, на которой можно задать поля, по которым временная таблица будет проиндексирована.
Кроме того, на закладке Дополнительно можно задать дополнительные критерии отбора записей в результат запроса (флажки Первые, Без повторяющихся, Разрешенные) и задать необходимость блокировки таблиц – источников запроса.
Нажмите Запрос и посмотрите, как изменился текст запроса (рис. 11.57).

Рис. 11.57. Текст запроса, созданный конструктором
Вы видите, что в тексте запроса появилась конструкция ПОМЕСТИТЬ, с помощью которой данные помещаются во временную таблицу.
Итак, вы сформировали первый запрос из пакетного запроса (см. листинг 11.42).
Теперь закройте окно редактора запроса и перейдите на закладку Пакет запросов.
Вы видите, что в пакете запросов уже присутствует один запрос НакладнаяМатериалы для получения данных временной таблицы. Нажмите Добавить и добавьте в пакет запросов еще один запрос (рис. 11.58).

Рис. 11.58. Окно конструктора запроса
Конструктор запроса добавит новый запрос и сразу же переключится на его редактирование. О том, что в конструкторе запроса содержится два запроса, вы можете узнать из поля Редактируемый запрос. Оно содержит список запросов и показывает тот запрос, который редактируется в данный момент (рис. 11.59).

Рис. 11.59. Окно конструктора запроса
Теперь создайте второй запрос из пакета.
На закладке Таблицы и поля нажмите значок Создать описание временной таблицы, задайте имя временной таблицы и опишите поля, указанные в первом запросе. Обратите внимание, что нужно указать также тип значения полей временной таблицы (рис. 11.60).

Рис. 11.60. Окно конструктора запроса
После описания временной таблицы она попадает в список источников второго запроса и вы можете выбирать из нее поля, как из любой другой таблицы базы данных.
Сформируйте исходные данные для второго запроса. Перенесите справочник Номенклатура в список источников запроса и выберите из этой таблицы поле Наименование. Из временной таблицы НакладнаяМатериалывыберите поля Дата и Номер (рис. 11.61).

Рис. 11.61. Окно конструктора запроса
Поскольку в списке источников запроса содержатся две таблицы, свяжите левым соединением таблицу Номенклатура с временной таблицей НакладнаяМатериалы (рис. 11.62).

Рис. 11.62. Окно конструктора запроса
В заключение на закладке Порядок задайте упорядочивание записей результата запроса по наименованиям товаров в порядке иерархии (рис. 11.63).

Рис. 11.63. Окно конструктора запроса
Нажмите ОК и вернитесь в модуль формы. Запрос, сформированный с помощью конструктора запроса, будет выглядеть следующим образом (листинг 11.43).
Листинг 11.43. Запрос, созданный конструктором
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПриходнаяНакладнаяМатериалы.Материал,
| ПриходнаяНакладнаяМатериалы.Ссылка.Дата,
| ПриходнаяНакладнаяМатериалы.Ссылка.Номер
|ПОМЕСТИТЬ НакладнаяМатериалы
|ИЗ
| Документ.ПриходнаяНакладная.Материалы КАК ПриходнаяНакладнаяМатериалы
|ГДЕ
| ПриходнаяНакладнаяМатериалы.Ссылка.Номер = ""000000001""
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Номенклатура.Наименование,
| НакладнаяМатериалы.Дата,
| НакладнаяМатериалы.Номер
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ НакладнаяМатериалы КАК НакладнаяМатериалы
| ПО НакладнаяМатериалы.Материал = Номенклатура.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура.Ссылка ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ";