Добавил:
sora.alai.102@gmail.com Делаю работы на заказ. Какие именно? Пишите. Или регайтесь на бирже, где я работаю: https://vsesdal.com/promo?ref=748568 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013)

.pdf
Скачиваний:
2185
Добавлен:
25.11.2018
Размер:
31.3 Mб
Скачать

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

Нажмем ОК и вернемся в модуль формы. Запрос, сформированный с помощью конструктора запроса, будет выглядеть следующим образом (листинг 2.6).

Листинг 2.6. Запрос, созданный конструктором

Таким образом, при описании связи таблиц к тексту запроса конструктор добавляет ключевые слова ВНУТРЕННЕЕ / ЛЕВОЕ / ПРАВОЕ / ПОЛНОЕ СОЕДИНЕНИЕ… ПО. В

результате мы получили текст запроса, аналогичный тому, который мы писали вручную (см. листинг 2.5).

Объединение запросов

Теперь попробуем выполнить с помощью конструктора запроса более сложную задачу – создадим запрос, объединяющий информацию из двух запросов, в котором записи каждого запроса сгруппированы, а также рассчитаны итоговые данные для результата объединения запросов. Этот пример мы рассматривали в разделе «Как получить данные из разных таблиц, не связывая, а дополняя их» (листинг 2.7).

Листинг 2.7. Объединение данных о заказах товаров клиентами и данных о продажах товаров этим клиентам

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

Итак, сформируем первый запрос. На закладке Таблицы и поля перенесем табличную часть Состав документа ЗаказТовара в список источников запроса и выберем из этой таблицы поля: Товар и Количество. Для того чтобы выбрать поле основной таблицы документа Клиент, раскроем поле Ссылка табличной части Состав, выберем поле Клиент и получим обращение через точку от ссылки – ЗаказТовараСостав.Ссылка.Клиент. Затем в списке выбранных полей запроса нажмем кнопку Добавить и укажем произвольное выражение – «0» (рис. 2.12).

Рис. 2.12. Окно конструктора запроса

ПРИМЕЧАНИЕ

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

соответствовать рисунку 2.12.

Затем перейдем на закладку Объединения/Псевдонимы и зададим псевдонимы полей Количество и произвольного выражения как Заказано и Продано соответственно (рис. 2.13).

Рис. 2.13. Окно конструктора запроса

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

Клиент и Товар, а в окно Суммируемое поле перенесем поля Количество и 0.

Агрегатная функция, применяемая по умолчанию к суммируемым полям – СУММА, но можно выбрать и другие агрегатные функции (рис. 2.14).

Рис. 2.14. Окно конструктора запроса

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

значение полей Количество и 0.

Нажмем кнопку Запрос и посмотрим, как изменился текст запроса (рис. 2.15).

Рис. 2.15. Текст запроса, созданный конструктором

Итак, мы полностью сформировали описание первого запроса, входящего в объединение запросов.

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

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

РасходнаяНакладнаяСостав.Ссылка.Покупатель. Также в списке выбранных полей запроса нажмем кнопку Добавить и укажем произвольное выражение – «0» (рис. 2.16).

Рис. 2.16. Окно конструктора запроса

ПРИМЕЧАНИЕ

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

На закладке Группировка, на соответствующей вкладке, зададим порядок группировки записей исходной таблицы второго запроса. В окно Групповое поле перенесем поля выборки запроса Покупатель и Товар, а в окно Суммируемое поле перенесем поля Количество и 0. Тем самым мы указали, что записи исходной таблицы запроса

РасходнаяНакладнаяСостав нужно сгруппировать по полям Покупатель и Товар, а в результате группировки вывести суммарное значение полей Количество и 0 (рис. 2.17).

Рис. 2.17. Окно конструктора запроса

Теперь перейдем на закладку Объединения/Псевдонимы и сопоставим поля второго запроса полям первого запроса, в частности поле Клиент первого запроса и поле Покупатель второго запроса (рис. 2.18).

Рис. 2.18. Окно конструктора запроса

Затем перейдем на закладку Итоги и укажем, какие итоги нужно рассчитать для результата объединения запросов. В окно Группировочное поле перенесем поле выборки запроса Клиент, а окно Итоговое поле можно оставить пустым, так как список итоговых полей будет автоматически формироваться из агрегатных полей списка выборки (с псевдонимами Заказано и Продано). А также установим флажок Общие итоги (рис. 2.19).

Рис. 2.19. Окно конструктора запроса

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

Нажмем кнопку Запрос и посмотрим, как изменился текст запроса (рис. 2.20).

Рис. 2.20. Текст запроса, созданный конструктором

Итак, в результате наших действий на закладках Объединения/Псевдонимы, Группировка и Итоги конструктор запроса добавил к тексту запроса предложения

ОБЪЕДИНИТЬ ВСЕ, СГРУППИРОВАТЬ ПО и ИТОГИ ПО. В итоге мы получили текст запроса, аналогичный тому, который мы писали вручную (см. листинг 2.7).

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

В этом разделе мы покажем, как с помощью конструктора запроса создать временную таблицу и затем использовать ее в пакетном запросе. Этот пример мы рассматривали в разделе «Временные таблицы и пакетные запросы» (листинг 2.8).

Листинг 2.8. Вывод всех товаров в порядке иерархии справочника «Товары» с данными об их поступлении за ноябрь

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

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

ПриходнаяНакладнаяСостав.Поставщик (рис. 2.21).

Рис. 2.21. Окно конструктора запроса

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

Рис. 2.22. Окно конструктора запроса

На закладке Дополнительно включим опцию Создание временной таблицы и укажем,

что результат запроса нужно поместить во временную таблицу с именем

ПоступлениеТоваров (рис. 2.23).

Рис. 2.23. Окно конструктора запроса

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

Кроме того, на закладке Дополнительно можно задать дополнительные критерии отбора записей в результат запроса (флажки Первые, Без повторяющихся, Разрешенные) и

задать необходимость блокировки таблиц – источников запроса.

Нажмем кнопку Запрос и посмотрим, как изменился текст запроса (рис. 2.24).

Рис. 2.24. Текст запроса, созданный конструктором

Мы видим, что в тексте запроса появилась конструкция ПОМЕСТИТЬ, с помощью которой данные помещаются во временную таблицу. Итак, мы сформировали первый запрос из пакетного запроса (см. листинг 2.8).

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

Дополнительно, Объединения/Псевдонимы станут доступны отдельные вкладки для каждого запроса из пакета (рис. 2.25).

Рис. 2.25. Окно конструктора запроса

На закладке Таблицы и поля нажмем кнопку Создать описание временной таблицы и

зададим имя временной таблицы и поля, указанные в первом запросе (рис. 2.26).