Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.03.2019
Просмотров: 51802
Скачиваний: 8725
получить только записи с неповторяющимися значениями этого поля.
Например, в списке документов ЗаказТовара повторяются значения поля Клиент (см.
ниже рис. 1.23), то есть существуют несколько заказов для одного и того же клиента, а
нас интересует, какими клиентами были сделаны заказы вообще. Для этого следует
использовать конструкцию ВЫБРАТЬ РАЗЛИЧНЫЕ (листинг 1.26).
Листинг 1.26. Вывод различных клиентов из документов «ЗаказТовара»
В результате выполнения запроса на рис. 1.23 справа мы видим трех различных
клиентов, сделавших заказ товара, а слева для сравнения приведен список всех заказов
клиентов.
Рис. 1.23. Вывод различных клиентов из документов «ЗаказТовара»
Если в списке выборки указано несколько полей, то при использовании конструкции
ВЫБРАТЬ РАЗЛИЧНЫЕ в результат запроса отбираются записи, содержащие
неповторяющиеся комбинации значений сразу по нескольким полям (листинг 1.27).
Листинг 1.27. Вывод различных клиентов за различные даты из документов «ЗаказТовара»
В результате выполнения запроса на рис. 1.24 в нижней таблице мы видим список
различных клиентов, сделавших заказ товара за различные даты, а в верхней таблице
для сравнения приведен список всех заказов клиентов.
Рис. 1.24. Вывод различных клиентов за различные даты из документов «ЗаказТовара»
На рис. 1.24 в нижней таблице мы видим 6 записей, а всего в списке заказов клиентов
содержится 7 документов. Так произошло потому, что в верхней таблице у одного из
клиентов сделано два заказа за одну дату.
Необходимо помнить, что если в запросе указано ключевое слово РАЗЛИЧНЫЕ и в
предложении УПОРЯДОЧИТЬ ПО указано поле, отсутствующее в списке выборки, то при
выполнении такого запроса будет выдана ошибка. Например, следующий запрос вызовет
ошибку (листинг 1.28).
Листинг 1.28. Ошибочный запрос
Как получить общее количество записей в таблице и количество записей с различным
значением некоторого поля
Этот пример является продолжением предыдущего примера, но в данном случае нам
нужно получить не сами записи, а количество записей в результате запроса. Это
делается с помощью агрегатной функции КОЛИЧЕСТВО().
Агрегатные функции предназначены для обобщения значений параметра, переданного в
функцию. Функция КОЛИЧЕСТВО() подсчитывает количество значений поля, указанного в
параметре.
При выполнении следующего запроса выводится общее количество записей в таблице
заказов товара клиентами и количество записей, содержащих различные значения в поле
Клиент (листинг 1.29).
Листинг 1.29. Вывод общего количества записей в таблице и количества различных записей по полю «Клиент»
В данном запросе во второй строке запроса подсчитывается общее количество записей в
результате запроса (КОЛИЧЕСТВО(*)). В следующей строке подсчитывается количество
различных значений, отличных от NULL, для поля Клиент.
В этом примере показывается, что в списке полей выборки, после ключевого слова
ВЫБРАТЬ, можно использовать не только поля таблиц запроса, но и различные
выражения с их использованием, то есть агрегатные функции, функции языка запросов и
т. п.
подробнее
Об использовании выражений в списке полей выборки будет рассказано в разделе
«
Примеры использования выражений в списке выборки
».
, будет рассказано в разделах "
иерархической таблицы и расположить их в порядке иерархии
Результат выполнения запроса выводит соответственно количество записей при
выполнении запросов из предыдущего примера (рис. 1.25).
Рис. 1.25. Вывод общего количества записей в таблице и количества различных записей по полю «Клиент»
Если требуется узнать количество всевозможных значений, отличных от NULL, для
некоторого поля в таблице, то можно просто написать – КОЛИЧЕСТВО(<Имя поля>).
Как получить записи из таблицы, отобранные по некоторому условию
Теперь рассмотрим распространенную задачу, когда из большой таблицы нужно получить
только некоторые записи, удовлетворяющие заданному условию.
В нашей демонстрационной конфигурации существует документ ПриходнаяНакладная.
Полностью список накладных представлен далее, на рис. 1.26, в верхней таблице.
Предположим, нам нужно отобрать из списка документов только накладные за текущий
месяц.
Условие отбора данных из таблицы задается после ключевого слова ГДЕ. В результат
запроса будут включены только те записи, которые удовлетворяют условию отбора.
Для того чтобы отобрать документы за текущий месяц, в условии отбора сравним поле
документа Дата с литералом даты ДАТАВРЕМЯ(2012, 11, 01), листинг 1.30.
Листинг 1.30. Вывод документов «ПриходнаяНакладная» за текущий месяц
Литералы – это строковые константы, которые могут использоваться в тексте запроса.
Литералы могут быть различных примитивных типов – Булево (ИСТИНА, ЛОЖЬ), Число
(например, 222.77), Строка (например, «Мария»). Использование этих литералов мы
рассмотрим в следующих примерах.
В данном запросе в условии отбора мы используем литерал типа Дата, значения
которого задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках
последовательно указываются год, месяц, день, час, минута, секунда. Последние три
значения указывать необязательно.
В результате выполнения запроса на рис. 1.26 в нижней таблице мы видим список
накладных за текущий месяц, а в верхней таблице для сравнения приведен список всех
приходных накладных.
Рис. 1.26. Отбор документов «ПриходнаяНакладная» по условию
В предложении ГДЕ можно использовать как имена полей, так и их псевдонимы. При этом
совершенно необязательно, чтобы поле, фигурирующее в предложении ГДЕ, входило в
список выборки (листинг 1.31).
Листинг 1.31. Вывод документов «ПриходнаяНакладная» за текущий месяц
Условие отбора может определяться и как простое логическое выражение, и как более
сложное, в котором простые логические выражения соединяются между собой
логическими операторами И, ИЛИ, НЕ (листинг 1.32).
Листинг 1.32. Вывод документов «ПриходнаяНакладная» за прошлый месяц по сложному условию
В условиях сначала вычисляются простые логические выражения, затем операции НЕ,
затем операции И, в последнюю очередь – операции ИЛИ. Для того чтобы обеспечить
другой порядок вычислений, можно использовать круглые скобки.
Подробнее