Язык запросов 1С 8.3 для начинающих программистов: операторы МЕЖДУ и В
Автор уроков и преподаватель школы: Владимир Милькин
Логический оператор МЕЖДУ
Оператор МЕЖДУ позволяет проверить, входит ли значение выражения, указанного слева от него, в диапазон, указанный справа (вместе с границами диапазона, то есть включительно).
Таким образом, вместо
ВЫБРАТЬ Наименование, Калорийность ИЗ Справочник.Еда ГДЕ Калорийность >= 200 И Калорийность <= 300 |
можно написать более лаконичное
ВЫБРАТЬ Наименование, Калорийность ИЗ Справочник.Еда ГДЕ Калорийность МЕЖДУ 200 И 300 |
А результат будет один и тот же:
Если же необходимо наоборот выбрать всю еду, калорийность которой не входит в диапазон [200;300], то подойдёт следующая форма отрицания (появилась частица НЕ):
ВЫБРАТЬ Наименование, Калорийность ИЗ Справочник.Еда ГДЕ Калорийность НЕ МЕЖДУ 200 И 300 |
Оператор МЕЖДУ можно применять не только к числовым диапазонам. С датами он также хорошо работает:
ВЫБРАТЬ Номер, Дата ИЗ Документ.ЗаказКлиента ГДЕ Дата МЕЖДУ ДАТАВРЕМЯ(2014, 01, 01) И ДАТАВРЕМЯ(2014, 01, 31) |
Логический оператор В
Проверка совпадения с одним из перечисленных
Оператор В позволяет проверить, совпадает ли значение выражения, указанного слева от него, с одним из значений, описанных справа.
Таким образом, вместо
ВЫБРАТЬ Наименование, Цвет ИЗ Справочник.Еда ГДЕ Цвет.Наименование = "Зелёный" ИЛИ Цвет.Наименование = "Красный" ИЛИ Цвет.Наименование = "Белый" |
можно написать более лаконичное
ВЫБРАТЬ Наименование, Цвет ИЗ Справочник.Еда ГДЕ Цвет.Наименование В ("Зелёный", "Красный", "Белый") |
А результат будет один и тот же:
Если же необходимо наоборот выбрать всю еду, цвет которой не совпадает ни с одним значением из списка, то подойдёт следующая форма отрицания (появилась частица НЕ):
ВЫБРАТЬ Наименование, Цвет ИЗ Справочник.Еда ГДЕ Цвет.Наименование НЕ В ("Зелёный", "Красный", "Белый") |
Проверка совпадения значения с одним из результата запроса
Пусть нам требуется выбрать из базы только те цвета, которые присутствуют в описании еды. Таким образом, в отобранном списке не должен присутствовать, например, чёрный цвет, так как еды чёрного цвета в нашей базе нет. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Один из вариантов как это можно сделать - использовать логический оператор В, справа от которого будет находиться подзапрос, выбирающий названия цветов из всех записей справочника Еда:
ВЫБРАТЬ Наименование ИЗ Справочник.Цвета ГДЕ Наименование В ( ВЫБРАТЬ Цвет.Наименование ИЗ Справочник.Еда ) |
В качестве отступления упомяну, что из внутреннего запроса есть возможность обращаться к полям внешнего запроса.
Опять же, для этой формы оператора В, также доступно использование частицы НЕ перед ним.
Проверка принадлежности по иерархии для справочников
Для справочников проверка может осуществляться и на принадлежность по иерархии.
Для начала давайте рассмотрим пример иерархического справочника. Откройте справочник "Города" в нашей базе:
Обратите внимание, что его элементы отличаются от других справочников (Еда, Цвета, Вкусы) наличием жёлтых папок. Это группы справочника.
Группы отличаются от обычных элементов тем, что могут включать в себя другие группы и элементы. Подобно тому как папки включают в себя другие папки и файлы.
Чтобы просмотреть содержимое группы, сделайте на ней двойной щелчок мышкой:
Чтобы выйти на уровень выше, снова сделайте двойной щелчок по группе:
Таким образом иерархический справочник может содержать как обычные элементы (например, Рио-де-Жанейро, Салвадор), так и группы (например, Бразилия, Индия). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
У каждого элемента (будь то группа или обычный элемент) может быть родитель. Например, родителем элемента Рио-де-Жанейро является группа Бразилия:
И это верно, потому что Рио-де-Жанейро входит в состав группы Бразилия в иерархии справочника:
Теперь давайте напишем такой запрос, который будет запрашивать выбранную группу-страну и все элементы-города, входящие в неё.
ВЫБРАТЬ Наименование ИЗ Справочник.Города ГДЕ Ссылка В ИЕРАРХИИ (&ГруппаСтрана) |
Обратите внимание на то, что в тексте запроса перед именем ГруппаСтрана стоит амперсанд (&). Имена с амперсандом автоматически распознаются системой как параметры, значение которых должно быть задано перед выполнением запроса.
После того, как мы вставим этот запрос в консоль и нажмем кнопку "Выполнить" для обновления, у нас появится возможность задать этот параметр:
Выберите в качестве его значения группу "Россия" (кнопка Выбрать):
Если теперь мы нажмём кнопку "Выполнить", то результат запроса будет следующим:
В результат запроса попала сама группа (Россия) и все элементы, которые входят в её состав (Пермь, Красноярск и Воронеж).
Если вместо России, выбрать "Бразилия", то результат будет таким:
Таким образом результатом оператора В ИЕРАРХИИ будет ИСТИНА, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа (Бразилия) или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве (Сан-Паулу, Рио-де-Жанейро, Салвадор).
В качестве множества значений, на совпадение с которыми выполняется проверка, может фигурировать и результат запроса. В этом случае справа от оператора В необходимо указать описание запроса:
ВЫБРАТЬ Наименование ИЗ Справочник.Города ГДЕ Ссылка В ИЕРАРХИИ ( ВЫБРАТЬ Ссылка ИЗ Справочник.Города ГДЕ Наименование = "Россия" ) |
Для оператора В ИЕРАРХИИ также доступно использование частицы НЕ перед ним.