[Alimir_BootModal_Login]

Язык запросов 1С 8.3 для начинающих программистов: операторы МЕЖДУ и В

Автор уроков и преподаватель школы: Владимир Милькин

Логический оператор МЕЖДУ

Оператор МЕЖДУ позволяет проверить, входит ли значение выражения, указанного слева от него, в диапазон, указанный справа (вместе с границами диапазона, то есть включительно).

Таким образом, вместо

ВЫБРАТЬ
    Наименование,
    Калорийность
ИЗ
    Справочник.Еда
ГДЕ
    Калорийность >= 200 И Калорийность <= 300

можно написать более лаконичное

ВЫБРАТЬ
    Наименование,
    Калорийность
ИЗ
    Справочник.Еда
ГДЕ
    Калорийность МЕЖДУ 200 И 300

А результат будет один и тот же:

01

Если же необходимо наоборот выбрать всю еду, калорийность которой не входит в диапазон [200;300], то подойдёт следующая форма отрицания (появилась частица НЕ):

ВЫБРАТЬ
    Наименование,
    Калорийность
ИЗ
    Справочник.Еда
ГДЕ
    Калорийность НЕ МЕЖДУ 200 И 300

02

Оператор МЕЖДУ можно применять не только к числовым диапазонам. С датами он также хорошо работает:

ВЫБРАТЬ
    Номер,
    Дата
ИЗ
    Документ.ЗаказКлиента
ГДЕ
    Дата МЕЖДУ ДАТАВРЕМЯ(2014, 01, 01) И ДАТАВРЕМЯ(2014, 01, 31)

19

Логический оператор В

Проверка совпадения с одним из перечисленных

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

Таким образом, вместо

ВЫБРАТЬ
    Наименование,
    Цвет
ИЗ
    Справочник.Еда
ГДЕ
    Цвет.Наименование = "Зелёный" ИЛИ
    Цвет.Наименование = "Красный" ИЛИ
    Цвет.Наименование = "Белый"

можно написать более лаконичное

ВЫБРАТЬ
    Наименование,
    Цвет
ИЗ
    Справочник.Еда
ГДЕ
    Цвет.Наименование В ("Зелёный", "Красный", "Белый")

А результат будет один и тот же:

03

Если же необходимо наоборот выбрать всю еду, цвет которой не совпадает ни с одним значением из списка, то подойдёт следующая форма отрицания (появилась частица НЕ):

ВЫБРАТЬ
    Наименование,
    Цвет
ИЗ
    Справочник.Еда
ГДЕ
    Цвет.Наименование НЕ В ("Зелёный", "Красный", "Белый")

04

Проверка совпадения значения с одним из результата запроса

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

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

ВЫБРАТЬ
    Наименование
ИЗ
    Справочник.Цвета
ГДЕ
    Наименование В
        (
            ВЫБРАТЬ
                Цвет.Наименование
            ИЗ
                Справочник.Еда
        )

05

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

Опять же, для этой формы оператора В, также доступно использование частицы НЕ перед ним.

Проверка принадлежности по иерархии для справочников

Для справочников проверка может осуществляться и на принадлежность по иерархии.

Для начала давайте рассмотрим пример иерархического справочника. Откройте справочник "Города" в нашей базе:

06

07

Обратите внимание, что его элементы отличаются от других справочников (Еда, Цвета, Вкусы) наличием жёлтых папок. Это группы справочника.

Группы отличаются от обычных элементов тем, что могут включать в себя другие группы и элементы. Подобно тому как папки включают в себя другие папки и файлы.

Чтобы просмотреть содержимое группы, сделайте на ней двойной щелчок мышкой:

08

Чтобы выйти на уровень выше, снова сделайте двойной щелчок по группе:

09

Таким образом иерархический справочник может содержать как обычные элементы (например, Рио-де-Жанейро, Салвадор), так и группы (например, Бразилия, Индия). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

У каждого элемента (будь то группа или обычный элемент) может быть родитель. Например, родителем элемента Рио-де-Жанейро является группа Бразилия:

10

И это верно, потому что Рио-де-Жанейро входит в состав группы Бразилия в иерархии справочника:

11

Теперь давайте напишем такой запрос, который будет запрашивать выбранную группу-страну и все элементы-города, входящие в неё.

ВЫБРАТЬ
    Наименование
ИЗ
    Справочник.Города
ГДЕ
    Ссылка В ИЕРАРХИИ (&ГруппаСтрана)

Обратите внимание на то, что в тексте запроса перед именем ГруппаСтрана стоит амперсанд (&). Имена с амперсандом автоматически распознаются системой как параметры, значение которых должно быть задано перед выполнением запроса.

После того, как мы вставим этот запрос в консоль и нажмем кнопку "Выполнить" для обновления, у нас появится возможность задать этот параметр:

12

Выберите в качестве его значения группу "Россия" (кнопка Выбрать):

13

Если теперь мы нажмём кнопку "Выполнить", то результат запроса будет следующим:

14

В результат запроса попала сама группа (Россия) и все элементы, которые входят в её состав (Пермь, Красноярск и Воронеж).

Если вместо России, выбрать "Бразилия", то результат будет таким:

15

Таким образом результатом оператора В ИЕРАРХИИ  будет ИСТИНА, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа (Бразилия) или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве (Сан-Паулу, Рио-де-Жанейро, Салвадор).

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

ВЫБРАТЬ
    Наименование
ИЗ
    Справочник.Города
ГДЕ
    Ссылка В ИЕРАРХИИ 
        (
            ВЫБРАТЬ
                Ссылка
            ИЗ
                Справочник.Города
            ГДЕ
                Наименование = "Россия"
        )

Для оператора В ИЕРАРХИИ также доступно использование частицы НЕ перед ним.

Пройдите тест

Начать тест

Домашнее задание

а) Напишите запрос, который выбирает все строчки из заказов клиентов, в которых количество входит в диапазон [5;15]:

17

Указания и подсказки:

Используйте оператор МЕЖДУ в секции ГДЕ.

В качестве источника записей используйте таблицу Документ.ЗаказКлиента.Продукты ("Продукты" - это название табличной части из которой мы выбираем строчки).

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

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

б) Напишите запрос, который при помощи логического оператора В из справочника клиентов выбирает только Андрея и Наташу:

18 

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

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

20

Подсказка:

  1. Используйте выборку с ключевым словом РАЗЛИЧНЫЕ из таблицы Документ.ЗаказКлиента, наложив соответствующее условие по полю Дата.
  2. Сгруппируйте результат выборки из таблицы Документ.ЗаказКлиента, наложив соответствующее условие по полю Дата, по полю Клиент.
  3. Используйте выборку из таблицы Справочник.Клиенты, на которую наложите условие при помощи логического оператора В и подзапроса из таблицы Документ.ЗаказКлиента.

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся