584 документа
← К списку

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

страница

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

В этом разделе вы узнаете, как с помощью конструктора запроса создать временную таблицу и затем использовать ее в пакетном запросе. Например, вам нужно вывести все элементы номенклатуры в порядке иерархии и показать, какие из них были получены в приходной накладной № 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""

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

|    Номенклатура.Наименование,

|    НакладнаяМатериалы.Дата,

|    НакладнаяМатериалы.Номер

|ИЗ

|    Справочник.Номенклатура КАК Номенклатура

|         ЛЕВОЕ СОЕДИНЕНИЕ НакладнаяМатериалы КАК НакладнаяМатериалы

|         ПО НакладнаяМатериалы.Материал = Номенклатура.Ссылка

|

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

|    Номенклатура.Ссылка ИЕРАРХИЯ

|АВТОУПОРЯДОЧИВАНИЕ";