Язык выражений системы компоновки данных предназначен для записи выражений, используемых в различных частях системы.
Выражения используются в следующих подсистемах:
В выражении могут присутствовать литералы. Возможны литералы следующих типов:
Строковый литерал записывается в символах «”», например:
“Строковой литерал“
При необходимости использования внутри строкового литерала символа «”», следует использовать два таких символов.
Например:
“Литерал ““в кавычках“““
Число записывается без пробелов, в десятичном формате. Дробная часть отделяется при помощи символа «.». Например:
10.5 200
Литерал типа дата записывается при помощи ключевого литерала ДАТАВРЕМЯ (DATETIME). После данного ключевого слова, в скобках, через запятую перечисляются год, месяц, день, часы, минуты, секунды. Указание времени не обязательно.
Например:
ДАТАВРЕМЯ(1975, 1, 06) – Шестое января 1975 года ДАТАВРЕМЯ(2006, 12, 2, 23, 56, 57) – Второе декабря 2006 года, 23 часа 56 минут 57 секундода, 23 часа 56 минут 57 секунд
Булевы значения могут быть записаны при помощи литералов Истина (True), Ложь (False).
Для указания литералов других типов (системных перечислений, предопределенных данных) используется ключевое слово Значение, после которого в скобках идет указание имени литерала.
Значение(ВидСчета. Активный)
Данная операция предназначена для изменения знака числа на обратный. Например:
-Продажи.Количество
Данная операция не выполняет над числом никаких действий. Например:
+Продажи.Количество
Данная операция предназначена для вычисления разности двух чисел. Например:
ОстаткиИОбороты.НачальныйОстаток – ОстаткиИОбороты.КонечныйОстаток ОстаткиИОбороты.НачальныйОстаток - 100 400 – 357
Данная операция предназначена для вычисления суммы двух чисел. Например:
ОстаткиИОбороты.НачальныйОстаток + ОстаткиИОбороты.Оборот ОстаткиИОбороты.НачальныйОстаток + 100 400 + 357
Данная операция предназначена для вычисления произведения двух чисел. Например:
Номенклатура.Цена * 1.2 2 * 3.14
Данная операция предназначена для получения результата деления одного операнда на другой. Например:
Номенклатура.Цена / 1.2 2 / 3.14
Данная операция предназначена для получения остатка от деления одного операнда на другой. Например:
Номенклатура.Цена % 1.2 2 % 3.14
Данная операция предназначена для конкатенации двух строк. Например:
Номенклатура.Артикул + “: ”+ Номенклатура.Наименование
Данная операция проверяет соответствие строки переданному шаблону.
Значением оператора ПОДОБНО является ИСТИНА, если значение <Выражения> удовлетворяет шаблону, и ЛОЖЬ в противном случае.
Следующие символы в <Строке_шаблона> имеют смысл, отличный от просто очередного символа строки:
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>, указанный после ключевого слова СПЕЦСИМВОЛ (ESCAPE).
Например, шаблон
“%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\”
означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем эта последовательность может располагаться, начиная с произвольной позиции в строке.
Данная операция предназначена для сравнения двух операндов на равенство. Например:
Продажи.Контрагент = Продажи.НоменклатураОсновнойПоставщик
Данная операция предназначена для сравнения двух операндов на неравенство. Например:
Продажи.Контрагент <> Продажи.НоменклатураОсновнойПоставщик
Данная операция предназначена для проверки того, что первый операнд меньше второго. Например:
ПродажиТекщие.Сумма < ПродажиПрошлые.Сумма
Данная операция предназначена для проверки того, что первый операнд больше второго. Например:
ПродажиТекщие.Сумма > ПродажиПрошлые.Сумма
Данная операция предназначена для проверки того, что первый операнд меньше либо равен второму. Например:
ПродажиТекщие.Сумма <= ПродажиПрошлые.Сумма
Данная операция предназначена для проверки того, что первый операнд больше либо равен второму. Например:
ПродажиТекщие.Сумма >= ПродажиПрошлые.Сумма
Данная операция осуществляет проверку наличия значения в переданном списке значений. Результатом операции будет Истина, в случае, если значение найдено, или Ложь - в противном случае. Например:
Номенклатура В (&Товар1, &Товар2)
Операция осуществляет проверку наличия значения в указанном наборе данных. Набор данных для проверки должен содержать одно поле. Например:
Продажи.Контрагент В Контрагенты
Данная операция возвращает значение Истина в случае, если значение является значением NULL. Например:
Продажи.Контрагент ЕСТЬ NULL
Данная операция возвращает значение Истина в случае, если значение не является значением NULL. Например:
Продажи.Контрагент ЕСТЬ НЕ NULL
Логические операции принимают в качестве операндов выражения, имеющие тип Булево.
Операция НЕ возвращает значение Истина в случае, если ее операнд имеет значение Ложь, и значение Ложь в случае, если ее операнд имеет значение Истина. Например:
НЕ Документ.Грузополучатель = Документ.Грузоотправитель
Операция И возвращает значение Истина в случае, если оба операнда имеют значение Истина, и значение Ложь в случае, если один из операндов имеет значение Ложь. Например:
Документ.Грузополучатель = Документ.Грузоотправитель И Документ.Грузополучатель = &Контрагент
Операция ИЛИ возвращает значение Истина в случае, если один из операндов имеет значение Истина, и Ложь в случае, если оба операнда имеют значение Ложь. Например:
Документ.Грузополучатель = Документ.Грузоотправитель ИЛИ Документ.Грузополучатель = &Контрагент
Агрегатные функции осуществляют некоторое действие над набором данных.
Агрегатная функция Сумма рассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. Например:
Сумма(Продажи.СуммаОборот)
Функция Количество рассчитывает количество значений отличных от значения NULL. Например:
Количество(Продажи.Контрагент)
Эта функция рассчитывает количество различных значений. Например:
Количество(Различные Продажи.Контрагент)
Функция получает максимальное значение. Например:
Максимум(Остатки.Количество)
Функция получает минимальное значение. Например:
Минимум(Остатки.Количество)
Функция получает среднее значение для значений, отличных от NULL. Например:
Среднее(Остатки.Количество)
Операция Выбор предназначена для осуществления выбора одного из нескольких значений при выполнении некоторых условий. Например:
Выбор Когда Сумма > 1000 Тогда Сумма Иначе 0 Конец
Если типы сравниваемых значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов:
Отношения между различными ссылочными типами определяются на основе ссылочных номеров таблиц, соответствующих тому или иному типу.
Если типы данных совпадают, то производится сравнение значений по следующим правилам:
Любая операция, в которой значение одного из операндов NULL, будет давать результат NULL.
Есть исключения:
Операции имеют следующие приоритеты (первая строка имеет низший приоритет):
Функция Вычислить предназначена для вычисления выражения в контексте некоторой группировки. Функция имеет следующие параметры:
Сумма(Продажи.СуммаОборот) / Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")
В данном примере в результате получится отношение суммы по полю "Продажи.СуммаОборот" записи группировки к сумме того же поля во всей компоновке.
Функция предназначена для получения текущего уровня записи.
Пример:
Уровень()
Получить следующий порядковый номер.
Пример:
НомерПоПорядку()
Возвращает следующий порядковый номер в текущей группировке.
Пример:
НомерПоПорядкуВГруппировке()
Получить отформатированную строку переданного значения.
Форматная строка задается в соответствии с форматной строкой 1С:Предприятие.
Параметры:
Пример:
Формат(РасходныеНакладные.СуммаДок, "ЧДЦ=2")
Функция предназначена для выделения определенной даты из заданной даты.
Параметры:
Пример:
НачалоПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц")
Результат:
01.10.2002 0:00:00
Функция предназначена для выделения определенной даты из заданной даты.
Параметры:
Пример:
КонецПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Неделя")
Результат:
13.10.2002 23:59:59
Функция предназначена для прибавления к дате некоторой величины.
Параметры:
Пример:
ДобавитьКДате(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц", 1)
Результат:
12.11.2002 10:15:34
Функция предназначена для получения разницы между двумя датами.
Параметры:
Пример:
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), "ДЕНЬ")
Результат:
2
Данная функция предназначена для выделения подстроки из строки.
Параметры:
Пример:
ПОДСТРОКА(Контрагенты.Адрес, 1, 4)
Функция предназначена для определения длины строки.
Параметр:
Пример:
Строка(Контрагенты.Адрес)
Данная функция предназначена для выделения года из значения типа Дата.
Параметр:
ГОД(РасхНакл.Дата)
Данная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4.
Параметр
КВАРТАЛ(РасхНакл.Дата)
Данная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапа-зоне от 1 до 12.
МЕСЯЦ(РасхНакл.Дата)
Данная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365(366).
ДЕНЬГОДА(РасхНакл.Дата)
Данная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31.
ДЕНЬ(РасхНакл.Дата)
Данная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1.
НЕДЕЛЯ(РасхНакл.Дата)
Данная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7(воскресенье).
ДЕНЬНЕДЕЛИ(РасхНакл.Дата)
Данная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23.
ЧАС(РасхНакл.Дата)
Данная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59.
МИНУТА(РасхНакл.Дата)
Данная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59.
СЕКУНДА(РасхНакл.Дата)
Данная функция предназначена для выделения типа из выражения, которое может содержать составной тип. В случае, если выражение будет содержать тип, отличный от требуемого типа, будет возвращено значение NULL.
Параметры:
Пример:
Выразить(Данные.Реквизит1, "Число(10,3)")
Данная функция возвращает значение второго параметра в случае, если значение первого параметра NULL.
В противном случае будет возвращено значение первого параметра.
Пример:
ЕстьNULL(Сумма(Продажи.СуммаОборот), 0)
Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется.
Пример:
СокращенноеНаименование(Документы.Ссылка, Документы.Дата, Документы.Номер)
В данном примере будет осуществлен вызов функции "СокращенноеНаименование" из общего модуля конфигурации.
Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.
Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.