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

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.03.2019

Просмотров: 50372

Скачиваний: 8599

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

получить только записи с неповторяющимися значениями этого поля.

Например, в списке документов ЗаказТовара повторяются значения поля Клиент (см.
ниже рис. 1.23), то есть существуют несколько заказов для одного и того же клиента, а
нас интересует, какими клиентами были сделаны заказы вообще. Для этого следует
использовать конструкцию ВЫБРАТЬ РАЗЛИЧНЫЕ (листинг 1.26).

Листинг 1.26. Вывод различных клиентов из документов «ЗаказТовара»

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

Рис. 1.23. Вывод различных клиентов из документов «ЗаказТовара»

Если в списке выборки указано несколько полей, то при использовании конструкции
ВЫБРАТЬ РАЗЛИЧНЫЕ в результат запроса отбираются записи, содержащие
неповторяющиеся комбинации значений сразу по нескольким полям (листинг 1.27).

Листинг 1.27. Вывод различных клиентов за различные даты из документов «ЗаказТовара»

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


background image

Рис. 1.24. Вывод различных клиентов за различные даты из документов «ЗаказТовара»

На рис. 1.24 в нижней таблице мы видим 6 записей, а всего в списке заказов клиентов
содержится 7 документов. Так произошло потому, что в верхней таблице у одного из
клиентов сделано два заказа за одну дату.

Необходимо помнить, что если в запросе указано ключевое слово РАЗЛИЧНЫЕ и в
предложении УПОРЯДОЧИТЬ ПО указано поле, отсутствующее в списке выборки, то при
выполнении такого запроса будет выдана ошибка. Например, следующий запрос вызовет
ошибку (листинг 1.28).

Листинг 1.28. Ошибочный запрос

Как получить общее количество записей в таблице и количество записей с различным
значением некоторого поля
Этот пример является продолжением предыдущего примера, но в данном случае нам
нужно получить не сами записи, а количество записей в результате запроса. Это
делается с помощью агрегатной функции КОЛИЧЕСТВО().

Агрегатные функции предназначены для обобщения значений параметра, переданного в
функцию. Функция КОЛИЧЕСТВО() подсчитывает количество значений поля, указанного в
параметре.


background image

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

Листинг 1.29. Вывод общего количества записей в таблице и количества различных записей по полю «Клиент»

В данном запросе во второй строке запроса подсчитывается общее количество записей в
результате запроса (КОЛИЧЕСТВО(*)). В следующей строке подсчитывается количество
различных значений, отличных от NULL, для поля Клиент.

В этом примере показывается, что в списке полей выборки, после ключевого слова
ВЫБРАТЬ, можно использовать не только поля таблиц запроса, но и различные
выражения с их использованием, то есть агрегатные функции, функции языка запросов и
т. п.

подробнее

Об использовании выражений в списке полей выборки будет рассказано в разделе
«

Примеры использования выражений в списке выборки

».

О том, что такое значение 

NULL

, будет рассказано в разделах " 

Как получить записи

иерархической таблицы и расположить их в порядке иерархии

" и " 

Левое внешнее

соединение

".

Результат выполнения запроса выводит соответственно количество записей при
выполнении запросов из предыдущего примера (рис. 1.25).

Рис. 1.25. Вывод общего количества записей в таблице и количества различных записей по полю «Клиент»


background image

Если требуется узнать количество всевозможных значений, отличных от NULL, для
некоторого поля в таблице, то можно просто написать – КОЛИЧЕСТВО(<Имя поля>).

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

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

Условие отбора данных из таблицы задается после ключевого слова ГДЕ. В результат
запроса будут включены только те записи, которые удовлетворяют условию отбора.

Для того чтобы отобрать документы за текущий месяц, в условии отбора сравним поле
документа Дата с литералом даты ДАТАВРЕМЯ(2012, 11, 01), листинг 1.30.

Листинг 1.30. Вывод документов «ПриходнаяНакладная» за текущий месяц

Литералы – это строковые константы, которые могут использоваться в тексте запроса.
Литералы могут быть различных примитивных типов – Булево (ИСТИНАЛОЖЬ), Число
(например, 222.77), Строка (например, «Мария»). Использование этих литералов мы
рассмотрим в следующих примерах.

В данном запросе в условии отбора мы используем литерал типа Дата, значения
которого задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках
последовательно указываются год, месяц, день, час, минута, секунда. Последние три
значения указывать необязательно.

В результате выполнения запроса на рис. 1.26 в нижней таблице мы видим список
накладных за текущий месяц, а в верхней таблице для сравнения приведен список всех
приходных накладных.


background image

Рис. 1.26. Отбор документов «ПриходнаяНакладная» по условию

В предложении ГДЕ можно использовать как имена полей, так и их псевдонимы. При этом
совершенно необязательно, чтобы поле, фигурирующее в предложении ГДЕ, входило в
список выборки (листинг 1.31).

Листинг 1.31. Вывод документов «ПриходнаяНакладная» за текущий месяц

Условие отбора может определяться и как простое логическое выражение, и как более
сложное, в котором простые логические выражения соединяются между собой
логическими операторами ИИЛИНЕ (листинг 1.32).

Листинг 1.32. Вывод документов «ПриходнаяНакладная» за прошлый месяц по сложному условию

В условиях сначала вычисляются простые логические выражения, затем операции НЕ,
затем операции И, в последнюю очередь – операции ИЛИ. Для того чтобы обеспечить
другой порядок вычислений, можно использовать круглые скобки.

Подробнее