Добавлен: 31.03.2023
Просмотров: 931
Скачиваний: 13
Любая агрегатная функция принимает в качестве аргумента какой-либо столбец табличных данных, а возвращает единственное значение. Агрегатные функции пред назначены для обобщения значений указанного столбца. В табл. 1 перечислены агрегатные функции, доступные в системе 1С: Предприятие 8.3.
Таблица 1. Перечень агрегатных функций
Название |
Комментарий |
СУММА |
Вычисляет сумму всех значений, содержащихся в указанном столбце. В качестве параметра функции можно указывать только поле, содержащее числовое значение |
МАКСИМУМ |
Находит наибольшее значение в указанном столбце |
МИНИМУМ |
Находит наименьшее значение в указанном столбце |
СРЕДНЕЕ |
Вычисляет среднее арифметическое значение по указанному столбцу |
КОЛИЧНСТВО |
Подсчитывает количество значений, содержащихся в указанном столбце |
Что касается функции КОЛИЧЕСТВО, то следует отметить три способа ее применения — функция позволяет подсчитать:
- количество значений указанного поля, которые не равны NULL
- количество различных значений указанного поля, не равных NULL (для этого необходимо указать ключевое слово РАЗЛИЧНЫЕ)
- количество строк в результате запроса (для этого в качестве параметра функции надо указать символ *)
В листинге 2.11 представлен текст запроса, который демонстрирует применение описанных в табл. 1 функций применительно к документам ПоступлениеТоваров, а окно схемы компоновки данных очередного отчета приведено на рис. 105.
Листинг 2.11. Запрос, демонстрирующий использование агрегатных функций
ВЫБРАТЬ Товар,
СУММА(Сумма) КАК СуммаПоТовару,
МАКСИМУМ(Сумма) КАК МаксимальнаяСумма,
МИНИМУМ(Сумма) КАК МинимальнаяСумма,
СРЕДНЕЕ(Сумма) КАК СредняяСумма
ИЗ Документ.ПоступлениеТоваров.ПереченьТоваров
СГРУППИРОВАТЬ ПО Товар
Рис. 105. Окно схемы компоновки данных для запроса, приведенного в листинге 2.11
В режиме 1С:Предприятие результат выполнения рассматриваемого запроса показан на рис. 106.
Рис. 106. Отчет, полученный с использованием агрегатных функций
Для иллюстрации приемов применения функции КОЛИЧЕСТВО приведем запрос (листинг 2.12).
Листинг 2.12. Запрос, демонстрирующий использование функции КОЛИЧЕСТВО
ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Всего,
КОЛИЧЕСТВО (РАЗЛИЧНЫЕ Поступление.Фирма) КАК ЧислоФирм
ИЗ Документ.ПоступлениеТоваров КАК Поступление
Окно схемы компоновки данных и результат выполнения запроса в режиме 1С:Предприятие представлены соответственно на рис. 107 и 108.
Рис. 107. Окно схемы компоновки данных для запроса, приведенного на листинге 2.12
Рис. 108. Отчет, демонстрирующий использование функции КОЛИЧЕСТВО
Параметрические запросы
Часто в запросах имеются параметры, которые пользователь может указывать в диалоге. Допустим нам необходимо получить с помощью запроса информацию о документах по поступлениям товаров в определенный филиал не позднее указанной даты. Текст запроса для решения данной задачи приведен в листинге 2.13.
Листинг 2.13. Параметрический запрос для извлечения дат и номеров документов
ВЫБРАТЬ Дата, Номер
ИЗ Документ.ПоступлениеТоваров
ГДЕ Дата <= &ГраницаДаты И Филиал=&УказанныйФилиал
В запросе мы использовали автоматически формируемые в любом документе реквизиты Номер и Дата. В текст запроса включен также символ &, обозначающий параметр (в данном случае параметров два — для определения даты и названия филиала).
Создание нового отчета («Отчет2_10») начнем традиционно с вкладки «Основные» окна редактирования объекта конфигурации. Следующий шаг заключается в переходе к созданию схемы компоновки. На рис. 109 представлена вкладка «Наборы» данных окна конструктора схемы компоновки данных.
Рис. 109. Окно конструктора схемы компоновки данных
После этого перейдем на вкладку «Параметры», где задаются условия отбора данных для отчета (рис. 110). Система в соответствии с текстом запроса автоматически разместила два параметра:
- УказанныйФилиал
- ГраницаДаты
Рис. 110. Вкладка «Параметры» окна конструктора схемы компоновки данных
Обратим внимание на флажок «Ограничение» доступности. Если этот флажок не устанавливать, то рассматриваемый параметр будет доступен для пользователя в форме отчета, а если установить, то в режиме 1С: Предприятие в форме отчета параметр виден не будет.
После выполнения установок перейдем на вкладку «Настройки» и определим поля для отчета с именем Отчет2_10 (рис. 111).
Рис. 111. Установки на вкладке «Настройки» конструктора схемы компоновки данных
Далее наша задача заключается в том, чтобы предоставить пользователю возможность устанавливать параметры УказанныйФилиал и ГраницаДаты. Для этого надо перейти на дополнительную вкладку «Параметры» (рис. 112), выделить параметр «Граница даты», щелкнуть на кнопке «Свойства» элемента пользовательских настроек (самый нижний значок в вертикальном ряду значков) и в открывшемся окне установить флажок «Включать в пользовательские настройки» (рис. 113).
Рис. 112. Дополнительная вкладка Параметры в окне конструктора схемы компоновки данных
Рис. 113. Окно для включения параметра в пользовательские настройки
Аналогичные настройки выполним для параметра УказанныйФилиал. На этом необходимые действия в конфигураторе завершаются, теперь можно перейти в режим 1С:Предприятие и сформировать отчет (рис. 114).
Рис. 114. Отчет 2_10, демонстрирующий выполнение запроса из листинга 2.13
Рассмотрим еще один пример на тему использования параметров в запросе. Будем считать, что наша задача заключается в том, чтобы прочитать движения по регистру накопления КоличествоТоваров, используя ссылку на документ (листинг 2.14). В качестве параметра запроса выступает документ, который привел к формированию записей в регистре накопления КоличествоТоваров.
Листинг 2.14. Запрос для извлечения информации из регистра КоличествоТоваров
ВЫБРАТЬ Товар,Филиал,Количество
ИЗ РегистрНакопления.КоличествоТоваров КАК КоличествоТоваров
ГДЕ КоличествоТоваров.Регистратор=&Регистратор
Начнем создание нового отчета и на вкладке «Основные» введем название отчета «Отчет2_11». В поле запроса в окне схемы компоновки данных разместим текст, приведенный в листинге 2.15. После этого перейдем на вкладку «Параметры», где определяются необходимые параметры отчета (рис. 116).
Рис. 115. Вкладка «Параметры» окна конструктора схемы компоновки данных
Видно, что система компоновки данных в соответствии с текстом запроса автоматически включила параметр «Регистратор». Обратим внимание на то, что требуется сбросить флажок «Ограничение доступности», чтобы пользователь получил возможность установки данного параметра непосредственно в форме отчета.
Перейдем далее на вкладку Настройки и определим поля для формируемого отчета (рис. 116).
Рис. 116. Выбор полей для схемы компоновки данных
Для предоставления пользователю возможности устанавливать параметры в форме отчета необходимо выполнить те же самые настройки для параметра «Регистратор» на уже знакомой дополнительной вкладке «Параметры». После этого можно перейти в режим 1С:Предприятие и получить необходимый отчет (рис. 117).
Рис. 117. Отчет 2_11 в режиме 1С:Предприятие
Рассмотрим еще один пример, связанный с документом ПоступлениеТоваров. В табличной части этого документа присутствует реквизит «Цена». Возможна ситуация, когда необходимо отобрать документы, в которых значение в этом поле оказалось меньше того, которое пользователь указал в форме отчета. Если документов много, то визуальный просмотр для отбора необходимых документов не очень эффективен. Для решения данной задачи оформим текст запроса в соответствии с листингом 2.15.
Листинг 2.15. Запрос для отбора документов по условию в поле Цена
ВЫБРАТЬ РАЗЛИЧНЫЕ ПереченьТоваров.Ссылка // выборка неповторяющихся записей
КАК ОтобранныйДокумент
ИЗ Документ.ПоступлениеТоваров.ПереченьТоваров КАК ПереченьТоваров
ГДЕ ПереченьТоваров.Цена < &ГраницаЦены
В данном запросе при наличии в одном документе нескольких строк с ценой, меньшей, чем указанная пользователем, в результат запроса найденный документ попадает только один раз (рис. 118).
Рис. 118. Отбор документов по поступлению товаров с ценой меньше указанной
Ключевое слово МЕЖДУ
В языке запросов имеется вспомогательное ключевое слово МЕЖДУ, предназначенное для задания интервалов. Например, запрос, приведенный в листинге 2.16, перед выполнением требует установки значений параметров Дата1 и Дата2. При этом в результат запроса попадут только те записи регистра накопления КоличествоТоваров, которые соответствуют выбранному интервалу по дате.
Листинг 2.16. Запрос с ключевым словом МЕЖДУ
ВЫБРАТЬ Товар,
Филиал, Количество, Регистратор
ИЗ РегистрНакопления.КоличествоТоваров
ГДЕ РегистрНакопления.КоличествоТоваров.Период МЕЖДУ &Дата1 И &Дата2
Заметим, что в конструкции рассматриваемого запроса используется параметр Период, который отражает дату и время внесения информации. На рис. 119 представлен результат выполнения данного запроса.
Рис. 119. Результат выполнения запроса к регистру с использованием слова МЕЖДУ
Рассмотрим теперь пример реализации аналогичного запроса к документам ПоступлениеТоваров (листинг 2.17). В этом случае происходит перебор документов, имеющихся в информационной базе (рис. 120). Для запроса используется параметр Дата, характеризующий дату и время создания документа.
Листинг 2.17. Запрос к документам с использованием ключевого слова МЕЖДУ
ВЫБРАТЬ Товар, Количество,
Сумма
ИЗ Документ.ПоступлениеТоваров.ПереченьТоваров
ГДЕ Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
Рис. 120. Результат выполнения запроса к документам с использованием слова МЕЖДУ
Ключевое слово ИМЕЮЩИЕ
В языке запросов существует ключевое слово ИМЕЮЩИЕ, которое позволяет накладывать условия на значения агрегатных функций. При этом в условии отбора со словом ИМЕЮЩИЕ можно использовать агрегатные функции только для полей, по которым осуществляется группировка (листинг 2.12). На рис. 121 показан результат указанного отбора по имеющейся информации в информационной базе.
Листинг 2.18. Запрос с ключевым словом ИМЕЮЩИЕ
ВЫБРАТЬ Товар, СУММА(Сумма) КАК СуммаТоваров
ИЗ Документ.ПоступлениеТоваров.ПереченьТоваров КАК Перечень
СГРУППИРОВАТЬ ПО Товар
ИМЕЮЩИЕ СУММА(Сумма) > 325000
Рис. 121. Реализация запроса с использованием ключевого слова ИМЕЮЩИЕ
Объединение запросов
В языке запросов имеется возможность объединять результаты нескольких запросов; при этом из записей, полученных с помощью каждого из объединяемых запросов, получается общий результат. При объединении каждый запрос собирает данные независимо, а такие операции, как упорядочивание результатов и расчет итогов, выполняются уже над результатом объединения запросов.