[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

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

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

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

16

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

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

Начать тест

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

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

17

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

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

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

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

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

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

18 

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