Основные объекты: Запросы. Часть 2. Работа с Конструктором запросов
Программа 1С включает в себя мощный инструмент для помощи программисту и пользователю в формировании запросов – Конструктор запросов. В данном разделе мы посмотрим, как работает этот инструмент, а также создадим и исследуем несколько несложных запросов.
Для изучения возможностей Конструктора запросов создадим новый объект типа Отчет (заодно сможем познакомиться с объектами Отчет, которые функционально аналогичны рассмотренным нами ранее объектам Обработка).
Создадим объект Отчет с именем “НашПервыйЗапрос”:
Далее перейдем на закладку “Формы” и создадим форму отчета:
Форма будет включать в себя две панели (страницы): “Основная” и “Параметры”.
Напомним, что для создания первой панели (страницы) можно использовать кнопку “Панель” () (эта кнопка находится на панели “Элементы управления” в нижней части экрана). Вторую страницу можно создать с помощью опции контекстного меню “Добавить страницу” (контекстное меню вызывается с помощью правой кнопки мыши):
В свойствах панели укажем новые имена и заголовки панелей: “Основная” и “Параметры”.
На первую вкладку “Основная” разместим поле текстового документа “ТекстЗапроса” и табличное поле
“РезультатЗапроса”. Вторая вкладка (“Параметры”) пока остается пустой.
Примечание: Поле текстового документа по умолчанию не отражается на панели “Элементы управления” в правой нижней части экрана. Его можно добавить на панель “Элементы управления” с помощью опции “Добавить или удалить кнопки”:
У поля текстового документа в свойстве “Расширение” установим значение “Язык запросов”:
Установка данного свойства позволит вызвать в пользовательском режиме 1С Конструктор запросов и выполнить запрос.
У табличного поля “РезультатЗапроса” необходимо определить тип значения “Таблица значений”:
Далее перейдем в пользовательский режим 1С и откроем созданный нами отчет “Наш первый запрос”. Чтобы открыть Конструктор запросов, нужно щелкнуть правой кнопкой мыши в области поля текстового документа и в открывшемся контекстном меню выбрать опцию Конструктор запросов:
На экране откроется Конструктор запросов:
Вначале выполним простой пример: нужно составить запрос, позволяющий выбрать коды и наименования номенклатуры из справочника “Номенклатура”.
Выбираем таблицу – источник данных. Нетрудно понять, что такой таблицей в нашем случае будет справочник “Номенклатура”. На закладке “Таблицы и поля” Конструктора запросов в колонке “База данных” раскроем строку “Справочники”, в раскрывшемся перечне выберем строку “Номенклатура” и двойным щелчком мыши или с помощью кнопки перенесем эту строку в колонку “Таблицы”:
Далее выполним аналогичные действия для задания полей запроса. В колонке “Таблицы” раскроем строку “Номенклатура”, в раскрывшемся перечне выберем строки “Код” и “Наименование” и двойным щелчком мыши или с помощью кнопки перенесем их в колонку “Поля”. Теперь в колонке “Поля” записаны два поля “Номенклатура.Код” и “Номенклатура.Наименование”:
Исходные данные для составления простого запроса введены. Нажав на кнопку “Запрос” мы получим текст запроса:
ВЫБРАТЬ
Нас пока удовлетворяет сформированный текст запроса. Выполним запрос и посмотрим полученный результат. Для этого в окне “Запрос” нажмем на кнопку “Выполнить запрос” . Мы получили список кодов и наименований товаров вместе с наименованиями групп в порядке возрастания кодов:
Интересно также будет посмотреть все данные таблицы Номенклатура. Это можно будет сделать с помощью следующего запроса:
ВЫБРАТЬ
На приведенном выше рисунке, в частности, можно увидеть, что значения параметров Номенклатура.Ссылка и Номенклатура.Представление соответствуют значению параметра Номенклатура.Наименование. В некоторых строках указываются наименования родительского элемента (в основном, это группы, для которых значение параметра Номенклатура.ЭтоГруппа равно “Истина”.
Теперь попробуем отсортировать наименования товаров по алфавиту. Для этого вернемся в Конструкторе запросов к первоначальному запросу и перейдем на закладку “Порядок”. Перенесем из левой в правую часть строку “Наименование” и установим режим сортировки “Возрастание”:
После нажатия на кнопку “Запрос” получим следующий текст запроса:
ВЫБРАТЬ
Результат выполнения запроса будет следующим:
Если добавить в раздел УПОРЯДОЧИТЬ ПО текста запроса слово ИЕРАРХИЯ, то мы получим следующий результат:
ВЫБРАТЬ
Товары оказались отсортированными по группам.
Теперь уберем из результата запроса названия групп. Это можно сделать на закладке “Условия” Конструктора запросов. Из левой части окна в правую перенесем в правую параметр ЭтоГруппа и установим условие отбора:
Номенклатура.ЭтоГруппа=Ложь
Обратим внимание, что установлен флажок Произвольное для того, чтобы можно было записать произвольное выражение условия. Если данный флажок снят, то условие будет восприниматься программой, как такое: Номенклатура.ЭтоГруппа = &Ложь (значение &Ложь будет воспринято как параметр).
После нажатия на кнопку “Запрос” мы получим следующее:
ВЫБРАТЬ
Результат выполнения запроса приведен на рисунке (можно видеть, что группы товаров в результирующей таблице больше не указываются):
Упражнение: 1. Поэкспериментируйте с другими закладками Конструктора запросов.
2. Составьте запрос, выводящий список всех сотрудников организации (поля отбора: Код, Наименование, Фамилия, Имя, Отчество).
3. Составьте запрос, выводящий перечень всех приходных накладных со следующими данными: Номер, Дата, Поставщик, КонтактноеЛицо, Сотрудник, СуммаДокумента.
Теперь перейдем к более сложной задаче: попробуем получить с помощью Конструктора запросов перечень всех проданных товаров с указанием суммы реализации. Введем в Конструктор запросов следующие данные:
Получим следующий результат:
ВЫБРАТЬ
Примечание. Обратите внимание, что в столбце “База данных” Конструктора запросов мы должны выбрать таблицу “Товары” документа “Расходная”, а не сам документ “Расходная”. Если мы выберем документ “Расходная” и поля Расходная.Товары.Номенклатура и Расходная.Товары.Сумма то мы получим следующий некорректный результат: Сам текст запроса в этом случае будет следующим:
ВЫБРАТЬ ИЗ Не спасает даже преобразование данного запроса в такую форму: ВЫБРАТЬ ИЗ поскольку система 1С, по-видимому, не позволяет использовать в разделе запроса ВЫБРАТЬ параметров с двумя и более точками (уровнями вложенности). |
Вернемся к корректному запросу и попытаемся подвести итоги по продажам товаров одинаковых наименований. В настоящее время это требование не соблюдается. Ведь в полученном нами списке дважды повторяются данные по продаже товара “Гарнитур Воробьяниновых”:
Для решения данной задачи может быть использована закладка “Группировка”:
Результат запроса корректен:
ВЫБРАТЬ
Наконец, выполним еще один пример – на этот раз с объединением нескольких таблиц. Сделаем выборку по покупкам и продажам товаров по всей номенклатуре. Для запроса будут использованы поля таблиц базы данных: справочника “Номенклатура” и документов “Приходная” и “Расходная”.
Для того, чтобы избежать дублирования наименований параметров, переименуем таблицу “Номенклатура” в “Номенклатура1” (Правая кнопка мыши – Переименовать таблицу...):
Выберем три указанные выше таблицы и соответствующие поля из этих таблиц:
После того, как было выбрано более одной таблицы в Конструкторе запросов появляется закладка “Связи”. Заполним ее следующим образом:
Обратим внимание на установленный флажок “Все” около столбца “Таблица 1” (это обеспечивает так называемое левое соединение таблиц, при котором в результат запроса будет включена вся номенклатура). Связь таблиц производится по параметру Номенклатура. Также нужно обратить внимание на то, что в качестве условия связи используется поле Номенклатура1.Ссылка, а не Номенклатура1.Наименование.
Следующая закладка “Группировка”. Группировка производится по полю Номенклатура1.Ссылка, а по полям ПриходнаяТовары.Сумма и РасходнаяТовары.Сумма осуществляется суммирование:
На закладке “Условия” указываем, что из запроса исключаются наименования групп (установлен флажок Произвольное для того, чтобы можно было записать произвольное выражение условия):
На закладке “Объединения/Псевдонимы” указываются названия колонок в результирующей таблице:
На закладке “Порядок” указывается, что сортировка результата запроса производится по полю Номенклатура1.Наименование:
Наконец, на закладке “Итоги” установлен флажок “Общие итоги”, также итоги будут подводиться по полям результирующей таблицы “Покупка” и “Продажа”:
При нажатии на кнопку “Запрос” после небольшого преобразования получится следующий текст:
ВЫБРАТЬ
Получаем следующий результат выполнения запроса:
Нажмем на кнопку OK, чтобы сохранить полученный текст запроса в поле текстового документа “ТекстЗапроса”. Закроем Конструктор запросов и снова откроем его. Убедимся, что в Конструкторе запросов все установленные нами ранее параметры восстановились корректно.