Войти
Образовательный портал. Образование
  • Попробуем разобраться в см - Документ
  • Открытия галилея в области астрономии
  • Сопливые грибы но не маслята
  • Имена мальчиков рожденных в январе Азербайджанские имена родившиеся в январе по гороскопу
  • Суточный диурез у беременных женщин
  • Как рассчитать налог на автомобиль по лошадиным силам Изменения по транспортному налогу в году
  • Агрегатные функции системы компоновки данных. Выражения в языке запросов 1с 8 максимум в запросе

    Агрегатные функции системы компоновки данных. Выражения в языке запросов 1с 8 максимум в запросе

    Программирование 1С состоит не только из написания программы. 1С это слиток действий пользователя и данных с которыми он работает.

    Данные хранятся в базе данных. Запросы 1С – это способ доставать данные из базы данных для того, чтобы показать пользователю в форме или чтобы обработать их.

    Основополагающая часть отчета – это запрос 1С. В случае отчета СКД – это большая часть отчета.

    Сядьте. Вздохните. Успокойтесь. Сейчас я скажу Вам новость.

    Чтобы программировать в 1С недостаточно знать язык программирования 1С. Нужно еще знать язык запросов 1С.

    Язык запросов 1С – это совершенно отдельный язык, который позволяет указать какие данные нам нужно достать из базы данных.

    Он тоже двуязычен – то есть можно писать на русском или на английском. Он исключительно похож на язык запросов SQL и тем, кто знает такой – можно расслабиться.

    Как используются Запросы 1С

    Когда пользователь запускает 1С в режиме Предприятие – в запущенном клиенте нет ни грамма данных. Поэтому когда нужно открыть справочник – 1С запрашивает данные из базы данных, то есть делает запрос 1С.

    Запросы 1С бывают:

    • Автоматические запросы 1С
      Формируются автоматически системой. Вы создали форму списка документов. Добавили колонку. Это значит, что при открытии этой формы в режиме Предприятие будет запрос и будут запрошены данные по этой колонке.
    • Полуавтоматические запросы 1С
      Есть множество методов (функций) в языке 1С, при обращении к которым происходит запрос к базе данных. Например.ПолучитьОбъект()
    • Ручные запросы 1С (написанные программистом специально как запрос)
      Вы можете написать запрос 1С самостоятельно в коде и выполнить его.

    Создание и выполнение запросов 1С

    Запрос 1С – это собственно текст запроса на языке запросов 1С.
    Текст можно написать ручками. То есть взять и написать (если знаешь этот язык).

    Так как 1С продвигает концепцию визуального программирования, где многое или почти все можно сделать без написания кода ручками – есть специальный объект Конструктор запроса, который позволяет без знания языка запросов нарисовать текст запроса. Однако чудес не бывает – для этого нужно знать как работать с конструктором.

    После того как готов текст запроса 1С – его нужно выполнить. Для этого есть объект в коде 1С Запрос(). Вот пример:

    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ
    | Номенклатура.Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Услуга";
    Выборка = Запрос.Выполнить().Выбрать();

    Сообщить(Выборка.Ссылка);
    КонецЦикла;

    Как Вы видите в примере – после выполнения запроса 1С к нам приходит результат и мы должны его обработать. Результат – это одна или несколько строчек таблицы (в специальном виде).

    Результат можно выгрузить в обычную таблицу:
    Выборка = Запрос.Выполнить().Выгрузить(); //Результат – таблица значений

    Или просто обойти по строчкам.
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    //Что-то делаем с результатами запроса
    КонецЦикла;

    Работа с запросами 1С

    Основные принципы запросов 1С

    Основные принципы построения запроса 1С –
    ВЫБРАТЬ СписокПолей ИЗ НазваниеТаблицы ГДЕ Условия

    Пример построения такого запроса 1С:

    ВЫБРАТЬ
    //список полей, которые надо выбрать
    Ссылка,
    Наименование,
    Код
    ИЗ
    //наименование таблицы, откуда выбираем данные
    //список таблиц – это список объектов в окне конфигуратора
    Справочник.Номенклатура
    ГДЕ
    //указываем отбор
    ВидТовара = &Услуга //отбор по внешнему значению
    Или Услуга // «Услуга» реквизит типа Булево, отбор по значению Истина
    УПОРЯДОЧИТЬ ПО
    //Сортировка
    Наименование

    Список таблиц 1С

    Названия таблиц Вы смотрите в окне конфигуратора. Только необходимо вместо «Справочники» писать «Справочник», например «Справочник.Номенклатура» или «Документ.РеализацияТоваровУслуг» или «РегистрНакопления.Продажи».

    Для регистров есть дополнительные таблицы (виртуальные), которые позволяют получить итоговые цифры.

    РегистрСведений.ИмяРегистра.СрезПоследних(&Дата) – запрос 1С из регистра сведений, если он является периодическим, на определенную дату

    РегистрНакопления.ИмяРегистра.Остатки(&Дата) – запрос 1С из регистра остатков на определенную дату

    РегистрНакопления.ИмяРегистра.Обороты(&ДатаНачала, &ДатаОкончания) – запрос 1С из регистра оборотов за период с даты начала по дату окончания.

    Дополнительные принципы

    Когда мы запрашиваем список каких то данных – работают основные принципы. Но мы можем запросить также цифры и запрос может нам их посчитать (сложить например).

    ВЫБРАТЬ
    //Количество(ИмяПоля) – считает количество
    //Поле КАК ДругоеИмя – переименовывает поле
    Количество(Ссылка) КАК КоличествоПроведенныхДокументов
    ИЗ

    ГДЕ
    Проведен

    Этот запрос 1С вернет нам общее количество документов. Однако в каждом документе есть поле Организация. Допустим мы хотим посчитать с помощью запроса 1С количество документов по каждой организации.

    ВЫБРАТЬ
    //просто поле документа
    Организация,
    //считаем количество
    Количество(Ссылка) КАК КоличествоПоОрганизациям
    ИЗ
    Документ.РеализацияТоваровУслуг
    ГДЕ
    Проведен
    СГРУППИРОВАТЬ ПО

    Организация

    Этот запрос 1С вернет нам количество документов по каждой организации (также говорят «в разрезе организаций»).

    Посчитаем дополнительно с помощью запроса 1С сумму этих документов:

    ВЫБРАТЬ
    //просто поле документа
    Организация,
    //считаем количество

    //считаем сумму

    ИЗ
    Документ.РеализацияТоваровУслуг
    ГДЕ
    Проведен
    СГРУППИРОВАТЬ ПО
    //необходимо использовать, если в списке полей есть функция подсчета() и одновременно одно или несколько полей – тогда нужно группировать по этим полям
    Организация

    Этот запрос 1С вернет нам также сумму документов.

    ВЫБРАТЬ
    //просто поле документа
    Организация,
    //считаем количество
    Количество(Ссылка) КАК КоличествоПоОрганизациям,
    //считаем сумму
    Сумма(СуммаДокумента) КАК Сумма
    ИЗ
    Документ.РеализацияТоваровУслуг
    ГДЕ
    Проведен
    СГРУППИРОВАТЬ ПО
    //необходимо использовать, если в списке полей есть функция подсчета() и одновременно одно или несколько полей – тогда нужно группировать по этим полям
    Организация
    ИТОГИ ПО Общие

    Язык запросов 1С обширен и сложен и мы не будем рассматривать в одном уроке все его возможности – читайте наши следующие уроки.

    Кратко о дополнительных возможностях языка запросов 1С:

    • Соединение данных из нескольких таблиц
    • Вложенные запросы
    • Пакетный запрос
    • Создание собственных виртуальных таблиц
    • Запрос из таблицы значений
    • Использование встроенных функций получения значения и манипулирования значениями.

    Конструктор запросов 1С

    Чтобы не писать текст запроса руками – существует конструктор запросов 1С. Просто нажмите правой кнопкой мыши в любом месте модуля и выберите Конструктор запроса 1С.

    Выберите в конструкторе запросов 1С нужную таблицу слева и перетащите правее.

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

    На закладке Условия в конструкторе запросов 1С Вы можете выбрать нужные отборы таким же способом (перетащив поля, по которым Вы будете делать отбор). Не забудьте выбрать верное условие.

    На закладке Порядок – указывается сортировка. На закладке Итоги – суммирование итогов.

    С помощью конструктора запросов 1С Вы можете изучить любой существующий запрос. Для этого нажмите правой кнопкой на текст существующего запроса и выберите также конструктор запросов 1С – и запрос будет открыт в конструкторе запросов 1С.

    <Разыменование поля> |

    <Агрегатная функция> |

    <Встроенная функция> |

    <Операция выбора> |

    <Приведение типа>[.<Разыменование поля>] |

    <3начение> |

    <Выражение> <Бинарная операция> <Выражение> |

    <Унарная операция> <Выражение> |

    Выражения в списке полей выборки, в предложениях ИМЕЮЩИЕ, ИТОГИ, УПОРЯДОЧИТЬ ПО могут быть агрегатными функциями . Агрегатные функции описаны на .

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

    В выражениях могут непосредственно указываться значения ло­гических, числовых, строковых и др. констант ; также могут ис­пользоваться значения параметров запроса , как описано на . В выражениях к значениям соответствующих типов могут применяться бинарные и унарные операции.

    Разыменование полей

    Выражения языка запросов в простейшем случае представляют собой ссылки на поля таблиц информационной базы. В общем виде ссылки описываются следующими правилами:

    [<Таблица>.]<Имя поля>[.<Имя поля>[...]]

    <Имя таблицы> | <Псевдоним источника>

    Разыменование поля начинается с имени таблицы, содержащей это поле. Если <Имя поля> уникально - существует только у одной из таблиц среди указанных в списке источников, <Таблица> может быть опущена.

    Если поле имеет ссылочный тип, язык запросов позволяет обра­щаться к полям таблицы, на которую ссылается поле, и так далее. Имена полей указываются через точку.

    Если исходной таблице в списке источников присвоен <Псевдоним источника>, он может использоваться вместо имени таблицы в разыменовании полей этой таблицы. В против­ном случае указывается <Имя таблицы> (см. описание источ­ников данных запроса).

    Агрегатные функции языка запросов

    В языке запросов предусмотрены агрегатные функции, которые используются при группировке результатов запроса и при подсчете итогов. Агрегатные функции предназначены для обобщения значений указанного параметра. Определены следующие агрегат­ные функции:

    СУММА (<Выражение >) |

    СРЕДНЕЕ (<Выражение>) |

    МИНИМУМ (<Выражение>) |

    МАКСИМУМ (<Выражение>) |

    КОЛИЧЕСТВО ([РАЗЛИЧНЫЕ] <Выражение> | *)

    Выбрать
    Накладная.Номенклатура.Наименование,
    Сумма(Накладная.Сумма) Как Сумма,
    Среднее(Накладная.Сумма) Как Среднее,
    Максимум(Накладная.Сумма) Как Максимум,
    Минимум(Накладная.Сумма) Как Минимум,
    Количество(Накладная.Сумма) Как Колич
    Из

    Сгруппировать По
    Накладная.Номенклатура
    Итоги Общие

    Результат запроса:

    Наименование Сумма Среднее Максимум Минимум Колич
    265 955,45 12 511,12 40 000,23 555 8
    Брюки детские 28 500,22 9 500,07 15000 3000 3
    Рубашка «Ков­бойка» 24000 8000 16000 4000 3
    Джинсы жен­ские 63555 6 355,5 30000 555 10
    Свитер детский 6400 6400 6400 6400 1
    Раковина «Ли­лия» 60 000,23 30000,115 40 000,23 20000 2
    Мойдодыр «Ак­вариум» 65500 21 833,33 40000 8000 3
    Смеситель «Ультра» 15000 15000 15000 15000 1
    Кухонный ком­байн Крупс 3000 3000 3000 3000 1

    Агрегатные функции могут использоваться в списке полей вы­борки, предложениях ИМЕЮЩИЕ, ИТОГИ, УПОРЯДОЧИТЬ ПО.

    Агрегатная функция СУММА

    Функция вычисляет арифметическую сумму всех попавших в выборку значений поля.

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

    Если поле не может содержать числовых значений, то примене­ние функции СУММА к такому полю вызовет ошибку. Если поле может содержать числовые значения (имеет составной тип дан­ных), то данная функция может быть применена к такому полю. Но если среди значений поля в выборке встретится нечисловое значение (помимо значений NULL), это вызовет ошибку.

    Агрегатная функция СРЕДНЕЕ

    Функция вычисляет среднее значение всех попавших в выборку значений поля.

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

    Если поле не может содержать числовых значений, то примене­ние функции СРЕДНЕЕ к такому полю вызовет ошибку. Если поле может содержать числовые значения (имеет составной тип данных), то данная функция может быть применена к такому по­лю. Но если среди значений поля в выборке встретится нечисло­вое значение (помимо значений NULL), это вызовет ошибку.

    Агрегатная функция МИНИМУМ

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

    При определении минимального значения применяются правила сравнения значений, описанные на .

    Агрегатная функция МАКСИМУМ

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

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

    При определении максимального значения применяются правила сравнения значений, описанные на .

    Агрегатная функция КОЛИЧЕСТВО

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

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

    ВЫБРАТЬ
    Количество(*) Как Всего,
    Количество(Различные Накладная.Номенклатура) Как Разные
    Из
    Документ.РасходнаяНакладная.Состав Как Накладная

    Результат запроса:

    Всего Разные
    24 8

    Встроенные функции языка запросов

    В языке запросов определены встроенные функции, которые мо­гут использоваться в выражениях в списке полей выборки (см. стр. 300) и в условии отбора в предложении ГДЕ (см. стр. 315). Опре­делены следующие встроенные функции:

    ПОДСТРОКА(<Выражение>, <3начение>, <3начение>) |
    ГОД(<Выражение>) |
    КВАРТАЛ(<Выражение>) |
    МЕСЯЦ(<Выражение>) |
    ДЕНЬГОДА(<Выражение>) |
    ДЕНЬ(<Выражение>) |
    НЕДЕЛЯ(<Выражение>) |
    ДЕНЬНЕДЕЛИ(<Выражение>) |
    ЧАС(<Выражение>) |
    МИНУТА(<Выражение>) |
    СЕКУНДА(<Выражение>)

    Данная функция предназначена для выделения подстроки из строки.

    <Выражение>

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

    <3начение>

    Позиция символа, с которого начинается вы­деляемая из строки подстрока. Значение типа Число.

    <3начение>

    Длина выделяемой подстроки. Значение типа Число.

    Если в качестве первого параметра фигурирует строка, то резуль­татом функции будет строка (возможно нулевой длины). Если в качестве первого параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки.

    Выбрать
    Справочних.Контрагенты.Наименование,
    Подстрока(Справочник.Контрагенты.Наименование, 3, 5) Как Подстрока

    Результат запроса:

    Данная функция предназначена для вычисления номера года из значения типа Дата.

    Данная функция предназначена для вычисления номера квартала из з гачения типа Дата. Номер квартала находится в диапазоне 1-4.

    Параметр функции - это выражение, имеющее тип Дата.

    Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качест­ве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки.

    Данная функция предназначена для вычисления номера месяца из значения типа Дата. Номер месяца находится в диапазоне 1 -12.

    Параметр функции - это выражение, имеющее тип Дата-

    Данная функция предназначена для вычисления дня года из зна­чения типа Дата. День года находится в диапазоне 1 - 366.

    Параметр функции - это выражение, имеющее тип Дата.

    Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки.

    Данная функция предназначена для вычисления дня месяца из значения типа Дата. День месяца находится в диапазоне 1 - 31.

    Параметр функции - это выражение, имеющее тип Дата.

    Данная функция предназначена для вычисления номера недели года из значения типа Дата.

    Параметр функции - это выражение, имеющее тип Дата.

    Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качест­ве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки.

    Данная функция предназначена для вычисления дня недели из значения типа Дата. День недели находится в диапазоне 1 (по­недельник) - 7 (воскресенье).

    Параметр функции - это выражение, имеющее тип Дата.

    Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качест­ве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки.

    Данная функция предназначена для вычисления часа суток из значения типа Дата. Час суток находится в диапазоне 0 - 23.

    Параметр функции - это выражение, имеющее тип Дата.

    Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качест­ве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки.

    Данная функция предназначена для вычисления минуты часа из значения типа Дата. Минута часа находится в диапазоне 0 - 59.

    Параметр функции - это выражение, имеющее тип Дата.

    Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качест­ве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки.

    Данная функция предназначена для вычисления секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне 0 - 59.

    Параметр функции - это выражение, имеющее тип Дата.

    Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качест­ве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки.

    Операции выбора в языке запросов

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

    Операция выбора описывается следующим набором правил:

    ВЫБОР
    <Альтернативы выбора>
    [ИНАЧЕ
    <Выражение>]
    КОНЕЦ

    <Одиночный выбор> [<Альтернативы выбора>]

    КОГДА
    <Логическое выражение>
    ТОГДА
    <Выражение>

    В операции выбора может указываться неограниченное количест­во альтернативных одиночных выборов КОГДА... ТОГДА. Они обрабатываются в запросе последовательно; если <Логическое выражение> имеет значение ИСТИНА, обработка операции вы­бора завершается; результатом операции является значение вы­ражения, указанного после слова ТОГДА. Логические выражения описаны на .

    Значение выражения, указанного после слова ИНАЧЕ использует­ся в качестве результата операции выбора в том случае, если во всех ранее указанных альтернативных одиночных выборах преди­кат имел значение ЛОЖЬ.

    Выбрать
    ,
    Выбор
    Когда Справочник.Номенклатура.ЭтоГруппа = Истина Тогда "Это Группа"
    Когда Справочник.Номенклатура.ЗакупочнаяЦена > 1000 Тогда "1000 -"
    Когда Справочник.Номенклатура.ЗакупочнаяЦена > 100 Тогда "100 - 1000"
    Когда Справочник.Номенклатура.ЗакупочнаяЦена > 10 Тогда "10 - 100"
    Когда Справочник.Номенклатура.ЗакупочнаяЦена > 0 Тогда «0 - 10»
    Иначе "Не Задана"
    Конец Цена

    Результат запроса:

    Наименование Цена
    Брюки детские 100 - 1000
    Рубашка «Ковбойка» 1000-
    Одежда Это группа
    Джинсы женские 1000-
    Свитер детский Не задана
    Сантехника Это группа
    Бытовая техника Это группа
    Раковина «Лилия» Не задана
    Мойдодыр «Аквариум» Не задана
    Смеситель «Ультра» 100 - 1000
    Кухонный комбайн Крупе 1000-
    Мясорубка Браун Не задана
    Электронож Крупе Не задана
    Зажигалка для газовой плиты «Огонек» Не задана
    Калькулятор бухгалтерский Не задана
    Кухонная техника Это группа
    Оргтехника Это группа

    Приведение типа в языке запросов

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

    ВЫРАЗИТЬ (<Выражение> КАК <Тип значения>)

    БУЛЕВО | ЧИСЛО | СТРОКА | ДАТА | <Имя таблицы>

    <Выражение> приводится к одному из базовых типов, или к ссылочному типу данных; в последнем случае <Имя таблицы> указывает на соответствующую таблицу информационной базы.

    Если <Выражение> содержит в составном типе требуемый <Тип значения>, то приведение типа считается осуществи­мым, и для каждого значения указанного типа результатом будет это самое значение. Для значений других типов результатом при­ведения типа будет значение NULL.

    Если <Выражение> не содержит в составном типе требуемый <Тип значения>, то выполнение данного запроса завершится ошибкой из-за принципиальной невозможности совершить при­ведение типов.

    Константы и параметры в языке запросов

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

    ИСТИНА |
    ЛОЖЬ |
    <Литерал типа ЧИСЛО> |
    <Литерал типа СТРОКА> |
    <Литерал типа ДАТА> |
    <Имя параметра>

    <Целое число> [.<Целое число>]

    <Последовательность символов>

    ДАТАВРЕМЯ (<Целое число>, <Целое число>, <Целое число>[, <Целое число>, <Целое число>, <Целое число>])

    Значения типа булево, число, строка в языке запросов зада­ются так же, как и во встроенном языке.

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

    В запрос могут передаваться параметры (см. описание объекта Запрос). Значения параметров могут использоваться в выраже­ниях языка запросов, для этого необходимо указать символ & и после него <Имя параметра>.

    Условия в языке запросов

    В языке запросов используются условия отбора, в соответствии с которыми осуществляется отбор данных в предложениях ГДЕ, ИМЕЮЩИЕ и СОЕДИНЕНИЕ. Условия описываются по следующим правилам:

    <Логическое слагаемое> [ИЛИ <Логическое слагаемое>]

    <Логический сомножитель> [И <Логический сомножитель>]

    НЕ <Логический сомножитель> | (<Условие отбора>) | <Логическое выражение>

    В простейшем случае условие является выражением, результат которого имеет значение логического типа. Логические выраже­ния описаны ниже.

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

    Логические операторы имеют приоритет:

    Самый высокий приоритет имеет логический оператор НЕ.

    Следующим по приоритету является оператор И.

    Самый низкий приоритет у оператора ИЛИ.

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

    Логические выражения в языке запросов

    В языке запросов в операциях выбора и в условиях отборов ис­пользуются логические выражения:

    <Выражение> |
    <Выражение> <Операция сравнения> <Выражение> |
    <Выражение> [НЕ] В [ИЕРАРХИИ] (<Список значений>)

    <Выражение> [НЕ] В [ИЕРАРХИИ] <Описание запроса> |
    <Выражение> [НЕ] МЕЖДУ <Выражение> И <Выражение> |
    <Выражение> ЕСТЬ [НЕ] NULL |
    <Выражение> ССЫЛКА <Имя таблицы> |
    <Выражение> [НЕ] ПОДОБНО <Литерал типа СТРОКА> [СПЕЦСИМВОЛ <Литерал типа СТРОКА>]

    <Выражение> [, <Выражение> [, ...] ]

    Логическим выражением может быть:

    Обычное <Выражение> языка запросов, если его результат имеет логический тип;

    <Операция сравнения> двух выражений языка запросов; выполняются в соответствии с правилами сравнения значений описанными на ;

    Оператор проверки совпадения / не совпадения значения выражения с одним из перечисленных или со значениями, со­держащимися в результате другого запроса;

    Оператор проверки вхождения значения выражения в диапа­зон;

    Оператор проверки значения выражения на NULL;

    Оператор проверки ссылочного значения выражения на ссыл­ку на определенную таблицу;

    Оператор проверки строкового значения на подобие шаблону.

    При сравнении значений используются правила сравнения значе­ний, описанные на .

    Оператор В позволяет проверить, совпадает ли значение выраже­ния, указанного справа от него, с одним из значений, описанных слева. Если совпадает хотя бы с одним - результатом оператора будет ИСТИНА, иначе - ЛОЖЬ. Применение НЕ изменяет дейст­вие оператора на обратное. Сравнение значений производится по правилам, описанным на .

    Выбрать
    Справочник.Номенклатура.Наименование
    Где
    Справочник.Номенклатура.Родитель.Наименование В ("Бытовая техника", "Оргтехника")

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

    //В качестве параметра Группа в запрос передается ссылка
    //на какую-либо группу справочника Номенклатура.
    Выбрать
    Справочник.Номенклатура.Наименование
    Где
    Справочник.Номенклатура.Ссылка В ИЕРАРХИИ (&Группа)

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

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

    Оператор МЕЖДУ позволяет проверить, входит ли значение выра­жения, указанного справа от него, в диапазон, указанный слева. Если входит - результатом оператора будет ИСТИНА, иначе -ЛОЖЬ Применение НЕ изменяет действие оператора на обратное. Сравнение значений производится по правилам, описанным на .

    Выбрать

    Справочник.Номенклатура.ЗакупочнаяЦена
    Где
    Справочник.Номенклатура.ЗакупочнаяЦена МЕЖДУ 100 И 1000

    Оператор ЕСТЬ NULL позволяет проверить значение выражения слева от него на NULL. Если значение равно NULL результатом оператора будет ИСТИНА, иначе - ЛОЖЬ. Применение НЕ изме­няет действие оператора на обратное.

    Справочник.Номенклатура.Наименование,

    Справочник.Номенклатура.ЗакупочнаяЦена

    Справочник.Номенклатура.ЗакупочнаяЦена Есть NULL

    Оператор ССЫЛКА позволяет проверить, является ли значение выражения, указанного справа от него, ссылкой на таблицу, ука­занную слева Если да - результатом оператора будет ИСТИНА, иначе - ЛОЖЬ. Разыменование таблиц описано на .

    ВЫБРАТЬ
    Справочник.Номенклатура.Наименование,
    Справочник.Номенклатура.ЕдиницаИзмерения
    ГДЕ
    Справочник.Номенклатура.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения

    Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону - результатом оператора бу­дет ИСТИНА, иначе - ЛОЖЬ.

    Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:

    % (процент): последовательность, содержащая любое количе­ство произвольных символов

    _ (подчеркивание): один произвольный символ.

    [...] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадрат­ных скобок. В перечислении могут встречаться диапазоны, на­пример a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.

    [^...] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания.

    Любой другой символ означает сам себя и не несет никакой до­полнительной нагрузки.

    Если в качестве самого себя необходимо записать один из пере­численных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.

    Например, шаблон "%АБВ[абвг]\_абв%" СПЕЦСИМВОЛ "\" означает подстроку, состоящую из последовательности символов:

    буквы А, буквы Б; буквы В; одной цифры, одной из букв а, 6, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем перед этой последовательностью может располагаться произволь­ный набор символов.

    Важно! Если параметр функции имеет тип Строка и в нем указывается имя поля, которое содержит пробелы, то такое имя поля должно быть заключено в квадратные скобки.
    Например: "[Количество Оборот]".

    1. Сумма (Total) - рассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.

    Пример :
    Сумма(Продажи.СуммаОборот)

    2. Количество (Count) - рассчитывает количество значений отличных от значения NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.

    Синтаксис :
    Количество([Различные] Параметр)

    В указания получения различных значений следует перед параметром метода Количество указать Различные (Distinct).

    Пример :
    Количество(Продажи.Контрагент)
    Количество(Различные Продажи.Контрагент)

    3. Максимум (Maximum) - получает максимальное значение. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.

    Пример :
    Максимум(Остатки.Количество)

    4. Минимум (Minimum) - получает минимальное значение. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.

    Пример :
    Минимум(Остатки.Количество)

    5. Среднее (Average) - получает среднее значение для значений, отличных от NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива.

    Пример :
    Среднее(Остатки.Количество)

    6. Массив (Array) - формирует массив, содержащий для каждой детальной записи значение параметра.

    Синтаксис :
    Массив([Различные] Выражение)

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

    Пример :
    Массив(Контрагент)

    7. ТаблицаЗначений (ValueTable) - формирует таблицу значений, содержащую столько колонок, сколько параметров у функции. Детальные записи получаются из наборов данных, которые нужны для получения всех полей, участвующих в выражениях параметров функции.

    Синтаксис :
    ТаблицаЗначений([Различные] Выражение1 [КАК ИмяКолонки1][, Выражение2 [КАК ИмяКолонки2],...])

    Если параметрами функции выступают поля–остатки, то в результирующую таблицу значений попадут значения для записей по уникальным комбинациям измерений из других периодов. При этом значения получаются только для полей-остатков, измерений, счетов, полей периодов и их реквизитов. Значениями остальных полей в записях из других периодов считаются равными NULL. Если выражение содержит функцию ТаблицаЗначений, то считается, что данное выражение является агрегатным. Если указано ключевое слово Различные, то в получаемой таблице значений не будет строк, содержащих одинаковые данные. После каждого параметра может располагаться необязательное ключевое слово КАК и имя, которое будет назначено колонке таблицы значений.

    Пример :
    ТаблицаЗначений(Различные Номенклатура, ХарактеристикаНоменклатуры КАК Характеристика)

    8. Свернуть (GroupBy) - предназначена для удаления дубликатов из массива.

    Синтаксис :
    Свернуть(Выражение, НомераКолонок)

    Параметры :

    • Выражение - выражение типа Массив или ТаблицаЗначений, значения элементов которого нужно свернуть;
    • НомераКолонок - (если выражение имеет тип ТаблицаЗначений) тип Строка. Номера или имена (через запятую) колонок таблицы значений, среди которых нужно искать дубликаты. По умолчанию – все колонки.
    Пример :
    Свернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона");

    9. ПолучитьЧасть (GetPart) - получает таблицу значений, содержащую определенные колонки из исходной таблицы значений.

    Синтаксис :
    ПолучитьЧасть(Выражение, НомераКолонок)

    Параметры :

    • Выражение - тип ТаблицаЗначений. Таблица значений, из которой нужно получить колонки;
    • НомераКолонок - тип Строка. Номера или имена (через запятую) колонок таблицы значений, которые нужно получить.
    Возвращаемое значение: ТаблицаЗначений, в которой имеются только колонки, которые указаные в параметре.

    Пример :
    ПолучитьЧасть(Свернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона"),"НомерТелефона");

    10. Упорядочить (Order) - предназначена для упорядочивания элементов массива и таблицы значений.

    Синтаксис :
    Упорядочить(Выражение, НомераКолонок)

    Параметры :

    • Выражение - Массив или ТаблицаЗначений, из которой нужно получить колонки;
    • НомераКолонок - (если выражение имеет тип ТаблицаЗначений) номера или имена (через запятую) колонок таблицы значений, по которым нужно упорядочить. Может содержать направление упорядочивания и необходимость автоупорядочивания: Убыв/Возр + Автоупорядочивание.
    Возвращаемое значение: Массив или ТаблицаЗначений, с упорядоченными элементами.

    Пример :
    Упорядочить(ТаблицаЗначений(НомерТелефона, Адрес, ДатаЗвонка),"ДатаЗвонка Убыв");

    11. СоединитьСтроки (JoinStrings) - предназначена для объединения строк в одну строку.

    Синтаксис :
    СоединитьСтроки (Значение, РазделительЭлементов, РазделителиКолонок)

    Параметры :

    • Значение - выражения, которые нужно объединить в одну строку. Если является Массивом, то в строку будут объединяться элементы массива. Если является ТаблицаЗначений, то в строку будут объединяться все колонки и строки таблицы;
    • РазделительЭлементов - строка, содержащая текст, который нужно использовать в качестве разделителя между элементами массива и строками таблицы значений. По умолчанию – символ перевода строк;
    • РазделителиКолонок - строка, содержащая текст, который нужно использовать в качестве разделителя между колонками таблицы значений. По умолчанию "; ".
    Пример :
    СоединитьСтроки(ТаблицаЗначений(НомерТелефона, Адрес));

    12. ГрупповаяОбработка (GroupProcessing) - возвращает объект ДанныеГрупповойОбработкиКомпоновкиДанных. В объект в свойство Данные помещается в виде таблицы значений значения группировок для каждого выражения, указанного в параметре функции Выражения. В случае использования иерархической группировки каждый уровень иерархии обрабатывается отдельно. Значения для иерархических записей также помещаются в данные. В свойство ТекущийЭлемент объекта помещается строка таблицы значений, для которой в настоящий момент вычисляется функция.

    Синтаксис :
    ГрупповаяОбработка(Выражения, ВыраженияИерархии, ИмяГруппировки)

    Параметры :

    • Выражения . Выражения, которые нужно вычислить. Строка, в которой через запятую перечислены выражения, которые нужно вычислить. После каждого выражение возможно наличие необязательного ключевого слова КАК и имени колонки результирующей таблицы значений. Каждое выражение образует колонку таблицы значений свойства Данные объекта ДанныеГрупповойОбработкиКомпоновкиДанных.
    • ВыраженияИерархии . Выражения, которые нужно вычислить для иерархических записей. Аналогично параметру Выражения с тем отличием, что параметр ВыраженияИерархии используется для иерархических записей. Если параметр не указан, то для вычисления значений для иерархических записей используется выражения, указанные в параметре Выражение.
    • ИмяГруппировки . Имя группировки, в которой нужно вычислять группировку обработки. Строка. Если не указано, то вычисление происходит в текущей группировке. Если вычисление идет в таблице и параметр содержит пустую строку, или не указан, то значение вычисляется для группировки – строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя на имя группировки в результирующем макете. Если группировка не доступна, то функция будет заменена на значение NULL.
    13. Каждый (Every) - если хоть одна запись имеет значение Ложь, то результат Ложь, иначе Истина.

    Синтаксис :
    Каждый(Выражение)

    Параметр :

    • Выражение - тип Булево.
    Пример :
    Каждый()

    14. Любой (Any) - если хоть одна запись имеет значение Истина, то результат Истина, иначе Ложь

    Синтаксис :
    Любой(Выражение)

    Параметр :

    • Выражение - тип Булево.
    Пример :
    Любой()

    15. СтандартноеОтклонениеГенеральнойСовокупности (Stddev_Pop) - вычисляет стандартное отклонение совокупности. Вычисляется по формуле: SQRT(ДисперсияГенеральнойСовокупности(X)).

    Синтаксис :
    СтандартноеОтклонениеГенеральнойСовокупности(Выражение)

    Параметр :

    • Выражение - тип Число.

    Пример :

    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ СтандартноеОтклонениеГенеральнойСовокупности(Y) ИЗ Таблица
    Результат: 805.694444

    16. СтандартноеОтклонениеВыборки (Stddev_Samp) - вычисляет совокупное типовое стандартное отклонение. Вычисляется по формуле: SQRT(ДисперсияВыборки(X)).

    Синтаксис :
    СтандартноеОтклонениеВыборки(Выражение)

    Параметр :

    • Выражение - тип Число.
    Тип возвращаемого значения Число.

    Пример :

    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ СтандартноеОтклонениеВыборки(Y) ИЗ Таблица
    Результат: 28.3847573

    17. ДисперсияВыборки (Var_Samp) - вычисляет типовое различие ряда чисел без учета значений NULL в этом наборе. Вычисляется по формуле: (Сумма(X^2) - Сумма(X)^2 / Количество(X)) / (Количество(X) - 1). Если Количество(X) = 1, то возвращается значение NULL.

    Синтаксис :
    ДисперсияВыборки(Выражение)

    Параметр :

    • Выражение - тип Число.
    Пример :
    ВЫБРАТЬ ДисперсияГенеральнойСовокупности(Y) ИЗ Таблица
    Результат: 716.17284

    19. КовариацияГенеральнойСовокупности (Covar_Pop) - вычисляет ковариацию ряда числовых пар. Вычисляется по формуле: (Сумма(Y * X) - Сумма(X) * Сумма(Y) / n) / n, где n число пар (Y, X) в которых ни Y ни X не являются NULL.

    Синтаксис :
    КовариацияГенеральнойСовокупности(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Пример :
    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ КовариацияГенеральнойСовокупности(Y, X) ИЗ Таблица
    Результат: 59.4444444

    20. КовариацияВыборки (Covar_Samp) - вычисляет типовое различие ряда чисел без учета значений NULL в этом наборе. Вычисляется по формуле: (Сумма(Y * X) - Сумма(Y) * Сумма(X) / n) / (n-1), где n число пар (Y, X) в которых ни Y ни X не являются NULL.

    Синтаксис :
    КовариацияВыборки(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Пример :
    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ КовариацияВыборки(Y, X) ИЗ Таблица
    Результат: 66.875

    21. Корреляция (Corr) - вычисляет коэффициент корреляции ряда числовых пар. Вычисляется по формуле: КовариацияГенеральнойСовокупности(Y, X) / (СтандартноеОтклонениеГенеральнойСовокупности(Y) * СтандартноеОтклонениеГенеральнойСовокупности(X)). Не учитываются пары, в которых Y или X равны NULL.

    Синтаксис :
    Корреляция(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Пример :
    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ Корреляция(X, Y) ИЗ Таблица
    Результат: 0.860296149

    22. РегрессияНаклон (Regr_Slope) - вычисляет наклон линии. Вычисляется по формуле: КовариацияГенеральнойСовокупности(Y, X) / ДисперсияГенеральнойСовокупности(X). Вычисляется без учета пар, содержащих NULL.

    Синтаксис :
    РегрессияНаклон(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Пример :
    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ РегрессияНаклон(Y, X) ИЗ Таблица
    Результат: 8.91666667

    23. РегрессияОтрезок (Regr_Intercept) - вычисляет Y-точку пересечения линии регресса. Вычисляется по формуле: Среднее(Y) - РегрессияНаклон(Y, X) * Среднее(X). Вычисляется без учета пар, содержащих NULL.

    Синтаксис :
    РегрессияОтрезок(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Пример :
    ВЫБРАТЬ РегрессияКоличество(Y, X) ИЗ Таблица
    Результат: 9

    25. РегрессияR2 (Regr_R2) - вычисляет коэффициент детерминации. Вычисляется без учета пар, содержащих NULL.

    Синтаксис :
    РегрессияR2(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Возвращаемое значение:
    • Null - если ДисперсияГенеральнойСовокупности(X) = 0;
    • 1 - если ДисперсияГенеральнойСовокупности(Y)=0 И ДисперсияГенеральнойСовокупности(X)<>0;
    • POW(Корреляция(Y,X),2) - если ДисперсияГенеральнойСовокупности(Y)>0 И ДисперсияГенеральнойСовокупности(X)<>0.
    Пример :
    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ РегрессияR2(Y, X) ИЗ Таблица
    Результат: 0.740109464

    26. РегрессияСреднееX (Regr_AvgX) - вычисляет среднее число X после исключения X и Y пар, где или X или Y являются пустыми. Среднее(X) вычисляется без учета пар, содержащих NULL.

    Синтаксис :
    РегрессияСреднееX(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Пример :
    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ РегрессияСреднееX(Y, X) ИЗ Таблица
    Результат: 5

    27. РегрессияСреднееY (Regr_AvgY) - вычисляет среднее число Y после исключения X и Y пар, где или X или Y являются пустыми. Среднее(Y) вычисляется без учета пар, содержащих NULL.

    Синтаксис :
    РегрессияСреднееY(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Пример :
    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ РегрессияСреднееY(Y, X) ИЗ Таблица
    Результат: 24.2222222

    28. РегрессияSXX (Regr_SXX) - вычисляется по формуле: РегрессияКоличество(Y, X) * ДисперсияГенеральнойСовокупности(X). Вычисляется без учета пар, содержащих NULL.

    Синтаксис :
    РегрессияSXX(Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Возвращает сумму квадратов независимых выражений, используемых в линейной модели регресса. Функция может использоваться, чтобы оценить статистическую обоснованность модели регресса.

    Пример :
    ВЫБРАТЬ РегрессияSYY(Y, X) ИЗ Таблица
    Результат: 6445.55556

    30. РегрессияSXY (Regr_SXY) - вычисляется по формуле: РегрессияКоличество(Y, X) * КовариацияГенеральнойСовокупности(Y, X). Вычисляется без учета пар, содержащих NULL.

    Синтаксис :
    РегрессияSXY (Y, X)

    Параметры :

    • Y - тип Число;
    • X - тип Число.
    Пример :
    X 1 2 3 4 5 6 7 8 9
    Y 7 1 2 5 7 34 32 43 87
    ВЫБРАТЬ РегрессияSXY(Y, X) ИЗ Таблица
    Результат: 535

    31. МестоВПорядке (Rank)

    Синтаксис :
    МестоВПорядке(Порядок, ПорядокИеррахии, ИмяГруппировки)

    Параметры :

    • Порядок – тип Строка. Содержит выражения, в последовательности которых нужно расположить групповые записи, разделенные через запятую. Направление упорядочивания управляется при помощи слов Возр, Убыв. После поля также можно указать строку Автоупорядочивание, что обозначает, что при упорядочивании ссылок нужно использовать поля упорядочивания, определенные для объекта, на который ссылка. Если последовательность не указана, то значение рассчитывается в последовательности группировки;
    • ПорядокИеррахии – тип Строка. Содержит выражения упорядочивания для иерархических записей;
    • ИмяГруппировки – тип Строка. Имя группировки, в которой нужно вычислять группировку обработки. Если не указано, то вычисление происходит в текущей группировке. Если вычисление идет в таблице и параметр содержит пустую строку, или не указан, то значение вычисляется для группировки – строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя на имя группировки в результирующем макете. Если группировка не доступна, то функция будет заменена на значение NULL.
    Если в последовательности имеются две или более записей с одинаковыми значениями полей упорядочивания, то для всех записей функция возвращает одинаковые значения.

    Пример :
    МестоВПорядке("[Количество Оборот]")

    32. КлассификацияABC (ClassificationABC)

    Синтаксис :
    КлассификацияABC(Значение, КоличествоГрупп, ПроцентыДляГрупп, ИмяГруппировки)

    Параметры :

    • Значение – тип Строка. по которому нужно рассчитывать классификацию. Строка, в которой указано выражение;
    • КоличествоГрупп - тип Число. Задает количество групп, на который нужно разбить;
    • ПроцентыДляГрупп - тип Строка. Столько, на сколько групп нужно разбить минус 1. Через запятую. Если не задано, то автоматически;
    • ИмяГруппировки - тип Строка. Имя группировки, в которой нужно вычислять группировку обработки. Если не указано, то вычисление происходит в текущей группировке. Если вычисление идет в таблице и параметр содержит пустую строку, или не указан, то значение вычисляется для группировки – строки. Компоновщик макета при генерации макета компоновки данных заменяет данное имя на имя группировки в результирующем макете. Если группировка не доступна, то функция будет заменена на значение NULL.
    Результатом работы функции будет номер класса, начиная с 1, который соответствует классу A.

    Пример :
    КлассификацияABC("Сумма(ВаловаяПрибыль)", 3, "60, 90")

    ; Вложенные запросы (в разработке).

    Поступление товаров и услуг .

    Новые вкладки: Группировка

    Теоретическая часть урока №5

    Группировка в запросе — это объединение нескольких строк выборки в одну, при этом используется два вида полей:

    • Группировочные . Строки, в которых набор этих полей принимает одинаковые значения, сворачиваются одну строку;
    • Группируемые. Для свернутых строк значения этих полей рассчитываются при помощи агрегатных функций:
      • Сумма . Значения поля суммируется по всем сгруппированным строкам;
      • Среднее . Рассчитывается среднее значение поля среди сгруппированных строк;
      • Максимум . Вычисляется максимальное значение поля среди сгруппированных строк;
      • Минимум . Вычисляется минимальное значение поля среди сгруппированных строк;
      • Количество . Вычисляется количество сгруппированных строк, вне зависимости от того к какому полю применяется данная агрегатная функция;
      • Количество различных . Вычисляется количество различных значений данного поля по всем сгруппированным строкам.

    Пример 1. Пусть у нас есть таблица с двумя полями: Фрукт и Количество . Сгруппировать строки с одинаковыми фруктами и посчитать общее количество по каждому фрукту.

    По условиям примера поле Фрукт — группировочное, а поле Количество — группируемое при помощи агрегатной функции Сумма .

    После группировки наша таблица будет выглядеть так:

    Пример 2. На складе фрукты хранятся в ящиках, коробках и т.п. Так как фрукты приходили разными партиями, цена на них может различаться. Посчитать максимальные цены фруктов для каждого вида тары.

    Таким образом у нас есть таблица с тремя полями Фрукт , Тара , Цена. Необходимо сгруппировать строки по полям Фрукт и Тара , а по полю Цена посчитать Максимум .

    В данном примере у нас два группировочных поля и одно группируемое. После группировки наша таблица будет выглядеть так:

    Теперь посмотрим, как реализован механизм группировки в конструкторе запросов 1с. В конструкторе перейдем на вкладку Группировка , она состоит из трех разделов:

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

    Следует заметить, что если вы используете группировку в запросе, то вам необходимо распределить все выбранные в запрос поля между разделами группировочных и группируемых . Если вы этого не сделаете, то оставшиеся поля автоматически перейдут в раздел группируемых. Исключение составляют только поля созданные вручную и не содержащие полей таблиц (строковые или числовые, например). Их включать в группировку не обязательно, так как их значение одинаково для всех строк выборки.

    Практическая часть урока №5

    Разберем решение задачи, приведенной в начале урока. Напомню условия:

    Задача: Получить суммы поступлений за текущий год с разбивкой по месяцам. Для получения данных использовать проведенные документы Поступление товаров и услуг .

    • Создадим новый запрос;
    • Запустим конструктор запросов;
    • Выберем таблицу ПоступлениеТоваровУслуг из ветки Документы ;
    • Из таблицы ПоступлениеТоваровУслуг выберем поля Дата и СуммаДокумента;
    • Выделим поле Дата и нажмем кнопку Изменить текущий элемент , чтобы открыть его в редакторе произвольных выражений;

    • В разделе Функции языка запросов найдем ветку Функции работы с датами ;
    • Из данной ветки перетащим в раздел выражений функцию Месяц и заменим параметр Дата на выбранное нами поле с датой поступления;

    • Нажмем кнопку ОК, в нижней части редактора произвольных выражений;
    • Перейдем на вкладку Объединения / Псевдонимы и установим для поля с номером месяца псевдоним Месяц ;

    • Перейдем на вкладку Условия;
    • В разделе Поля , раскроем ветку ПоступлениеТоваровУслуг при помощи кнопки «+»;
    • Найдем реквизит Дата и перетащим его в раздел условия, выберем оператор сравнения Между и укажем параметры начала и окончания года, например НачалоГода и КонецГода ;
    • Из раздела Поля перетащим реквизит Проведен , поставим в строке с условием флаг Произвольное и сотрем лишнюю часть условия «= &Проведен»;
    • Перейдем на вкладку Группировка ;
    • В раздел группировочных полей перетащим поле МЕСЯЦ(ПоступлениеТоваровУслуг.Дата) , а в раздел группируемых полей ПоступлениеТоваровУслуг.СуммаДокумента . По умолчанию установится агрегатная функция Сумма , в данном случае она нас вполне устраивает;


    • Написание запроса завершено, нажмем кнопку ОК , чтобы закрыть конструктор запросов;

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