Работа с выражениями
Функция Вычислить предназначена для вычисления выражения в контексте некоторой группировки. Функция используется для совместимости с предыдущими версиями платформы. Вместо неё рекомендуется использовать функцию ВычислитьВыражение.
Вычислить(Выражение, Группировка, ТипРасчета)
- Выражение. Тип Строка. Содержит вычисляемое выражение;
- Группировка. Тип Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например:
Сумма(Продажи.СуммаОборот) / Вычислить(«Сумма(Продажи.СуммаОборот)», «ОбщийИтог»)
В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке.
- ТипРасчета. Тип Строка. В случае если данный параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех записей группировки. В случае если значение параметра «Группировка», значения будут вычисляться для текущей групповой записи группировки.
ВычислитьВыражение (EvalExpression)
Функция ВычислитьВыражение предназначена для вычисления выражения в контексте некоторой группировки. Функция учитывает отбор группировок, но не учитывает иерархические отборы.
Функция не может применяться к группировке в групповом отборе этой группировки.
ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)
- Выражение. Тип Строка. Содержит вычисляемое выражение;
- Группировка. Тип Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например:
Сумма(Продажи.СуммаОборот) / Вычислить(«Сумма(Продажи.СуммаОборот)», «ОбщийИтог»)
В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке;
- ТипРасчета. Тип Строка. В случае если данный параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех записей группировки.
В случае если значение параметра «Группировка», значения будут вычисляться для текущей групповой записи группировки.
Если параметр имеет значение «ГруппировкаНеРесурса», то при вычислении функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки.
При вычислении функции ВычислитьВыражение со значением «ГруппировкаНеРесурса» для групповых записей, не являющихся группировками по ресурсам, функция вычисляется так же, как бы она вычислялась со значением параметра «Группировка».
Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля – ресурса, по которому выполняется группировка, выдает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение, с указанным параметром «ГруппировкаНеРесурса». Для остальных ресурсов в группировке по ресурсу выдаются обычные выражения ресурсов.
Если параметр имеет значение «Иерархия», то выражение нужно вычислять для родительской иерархической записи, если таковая имеется, и для всей группировки, если родительской иерархической записи не имеется. Компоновщик макета при генерации выражения для поля «% в группе иерархии» генерирует выражение, содержащее отношение выражения ресурса к функции ВычислитьВыражение для выражения ресурса, вычисляемого для текущей группировки с типом вычисления «Иерархия».
- «Первая» («First»). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля.
Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет. - «Последняя» («Last»). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля.
Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет. - «Предыдущая» («Previous»). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки.
Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то получается первая запись группировки.
При получении предыдущей записи для итога по группировке считается, что получается первая запись. - «Следующая» («Next»). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки.
Например, Следующая(2) – получение следующей от следующей записи.
Если следующая запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3 и для третьей записи получают Следующая, то считается, что записей нет.
При получении следующей записи для итога по группировке считается, что записи нет. - «Текущая» («Current»). Необходимо получить текущую запись.
При получении для итога по группировке получается первая запись. - «ОграничивающееЗначение» («BoundaryValue»). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению.
Например, если в качестве поля упорядочивания используется поле Период, оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.
- «Первая» («First»). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет. - «Последняя» («Last»). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет. - «Предыдущая» («Previous»). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то считается, что записей нет.
При получении предыдущей записи для итога по группировке считается, что получается последняя запись. - «Следующая» («Next»). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) – получение следующей от следующей записи.
Если следующая запись выходит за пределы группировки, получается последняя запись. Например, если записей 3 и для третьей записи получают Следующая, то получается третья запись.
При получении следующей записи для итога по группировке считается, что записи нет. - «Текущая» («Current»). Необходимо получить текущую запись.
При получении для итога по группировке получается первая запись. - «ОграничивающееЗначение» («BoundaryValue»). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
В качестве записи будет получаться последняя запись, значение поля упорядочивания у которой меньше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.01.2010.
- «Вместе» («Together») — обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей;
- «Отдельно» («Separately») — обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания;
Например, если полученная последовательность упорядочена по дате:
1. 01 января 2001 Иванов М. 10
2. 02 января 2001 Петров С. 20
3. 02 января 2001 Сидоров Р. 30
4. 03 января 2001 Петров С. 40
Если значение параметра — «Отдельно», предыдущей к записи 3 будет запись 2, а при использовании «Вместе» — запись 1. А фрагментом для текущей записи к записи 2 для «Отдельно» будет запись 2, а для «Вместе» — записи 2 и 3. Таким образом, сумма по текущей записи для «Отдельно» составит 20, а для «Вместе» — 50.
При указанном «Вместе» в параметрах Начало и Конец нельзя указывать смещение для позиций «Первая», «Последняя», «Предыдущая», «Следующая».
Значение по умолчанию «Отдельно».
Примечания:
Функция учитывает отбор группировок, но не учитывает иерархические отборы.
Функция не может применяться к группировке в групповом отборе этой группировки. Например, в отборе группировки Номенклатура нельзя использовать выражение ВычислитьВыражение(«Сумма(СуммаОборот)», , «ОбщийИтог») > 1000. Но такое выражение можно использовать в иерархическом отборе.
Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.
При расчете интервальных выражений для общего итога (параметр Группировка имеет значение «ОбщийИтог») считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.
Компоновщик макета при генерации выражения функции ВычислитьВыражение, в случае если выражение упорядочивания содержит поля, которые не могут быть использованы в группировке, заменяет функцию ВычислитьВыражение на NULL.
ВычислитьВыражениеСГруппировкойМассив (EvalExpressionWithGroupArray)
ВычислитьВыражениеСГруппировкойМассив (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)
Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Максимум(ВычислитьВыражениеСГруппировкойМассив («Сумма(СуммаОборот)», «Контрагент»));
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функция ВычислитьМассивСГруппировкой генерирует выводимое выражение таким образом, чтобы данные выводить представления и данные были упорядочены.
Например, для пользовательского поля с выражением:
компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений («Представление(Сумма(НаборДанных.СуммаОборот)), Сумма(НаборДанных.СуммаОборот)», «НаборДанных.Контрагент»), «2»)))
ВычислитьВыражениеСГруппировкойТаблицаЗначений (EvalExpressionWithGroupValueTable)
ВычислитьВыражениеСГруппировкойТаблицаЗначений (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)
Функция возвращает таблицу значений, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
ВычислитьВыражениеСГруппировкойТаблицаЗначений («Контрагент КАК Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж», «Контрагент»)
Результатом работы данной функции будет таблица значений с колонками Контрагент и ОбъемПродаж, в которых будут находиться контрагенты с их объемами продаж.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Например, для пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойТаблицаЗначений («Контрагент, Сумма(СуммаОборот)», «Контрагент»)
Компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(ПолучитьЧасть(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений («НаборДанных.Контрагент, НаборДанных.КонтрагентПредставление, Сумма(НаборДанных.СуммаОборот), Представление(НаборДанных.СуммаОборот), НаборДанных.ПолеУпорядочивание», «НаборДанных.Контрагент»), «5, 1, 3»), «2, 4»))
Функции языка выражений системы компоновки данных
1. Вычислить (Eval) — предназначена для вычисления выражения в контексте некоторой группировки. Функция используется для совместимости с предыдущими версиями платформы. Вместо неё рекомендуется использовать функцию ВычислитьВыражение.
Синтаксис :
Вычислить(Выражение, Группировка, ТипРасчета)
- Выражение (Строка). Cодержит вычисляемое выражение;
- Группировка (Строка). Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем.
Например:
Сумма(Продажи.СуммаОборот) / Вычислить(«Сумма(Продажи.СуммаОборот)», «ОбщийИтог»).
В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке. - ТипРасчета (Строка). В случае если данный параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех записей группировки. В случае если значение параметра «Группировка», значения будут вычисляться для текущей групповой записи группировки.
Синтаксис :
ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)
- Выражение (Строка). Содержит вычисляемое выражение;
- Группировка (Строка). Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем;
- ТипРасчета (Строка). В случае если данный параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех записей группировки. В случае если значение параметра «Группировка», значения будут вычисляться для текущей групповой записи группировки. Если параметр имеет значение «ГруппировкаНеРесурса», то при вычислении функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки. При вычислении функции ВычислитьВыражение со значением «ГруппировкаНеРесурса» для групповых записей, не являющихся группировками по ресурсам, функция вычисляется так же, как бы она вычислялась со значением параметра «Группировка». Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля – ресурса, по которому выполняется группировка, выдает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение, с указанным параметром «ГруппировкаНеРесурса». Для остальных ресурсов в группировке по ресурсу выдаются обычные выражения ресурсов. Если параметр имеет значение «Иерархия», то выражение нужно вычислять для родительской иерархической записи, если таковая имеется, и для всей группировки, если родительской иерархической записи не имеется. Компоновщик макета при генерации выражения для поля «% в группе иерархии» генерирует выражение, содержащее отношение выражения ресурса к функции ВычислитьВыражение для выражения ресурса, вычисляемого для текущей группировки с типом вычисления «Иерархия».
- Начало. Указывает, с какой записи нужно начинать фрагмент, в котором рассчитывать агрегатные функции выражения и из какой записи получать значения полей вне агрегатных функций. Строка, содержащая одно из:
- «Первая» («First»). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Первая(3) – получение третьей записи от начала группировки. Если первая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет.
- «Последняя» («Last»). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Последняя(3) – получение третьей записи от конца группировки. Если последняя запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет.
- «Предыдущая» («Previous»). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) – получение предыдущей от предыдущей записи. Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то получается первая запись группировки. При получении предыдущей записи для итога по группировке считается, получается первая запись.
- «Следующая» («Next»). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) – получение следующей от следующей записи. Если следующая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3 и для третьей записи получают Следующая, то считается, что записей нет. При получении следующей записи для итога по группировке считается, что записи нет.
- «Текущая» («Current»). Необходимо получить текущую запись. При получении для итога по группировке получается первая запись.
- «ОграничивающееЗначение» («BoundaryValue»). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания. В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.
- «Первая» («First»).
- «Последняя» («Last»).
- «Предыдущая» («Previous»).
- «Следующая» («Next»).
- «Текущая» («Current»).
- «ОграничивающееЗначение» («BoundaryValue»).
- «Вместе» («Together») — обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей;
- «Отдельно» («Separately») — обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания;
В данном примере вычисляется значение текущей иерархии:
Выбор
Когда Уровень() > 0
Тогда ВычислитьВыражение(«Ссылка», , «Иерархия»)
Иначе Null
КонецПримечания :
Функция учитывает отбор группировок, но не учитывает иерархические отборы. Функция не может применяться к группировке в групповом отборе этой группировки. Например, в отборе группировки Номенклатура нельзя использовать выражение ВычислитьВыражение(«Сумма(СуммаОборот)», , «ОбщийИтог») > 1000 . Но такое выражение можно использовать в иерархическом отборе. Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют. При расчете интервальных выражений для общего итога (параметр Группировка имеет значение «ОбщийИтог») считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют. Компоновщик макета при генерации выражения функции ВычислитьВыражение, в случае если выражение упорядочивания содержит поля, которые не могут быть использованы в группировке, заменяет функцию ВычислитьВыражение на NULL.3. ВычислитьВыражениеСГруппировкойМассив (EvalExpressionWithGroupArray) — функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Синтаксис :
ВычислитьВыражениеСГруппировкойМассив (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)- Выражение (Строка) — выражение, которое нужно вычислить. Например, «Сумма(СуммаОборот)»;
- ВыраженияПолейГруппировки — выражения полей группировки, перечисленные через запятую. Например, «Контрагент, Партия»;
- ОтборЗаписей — выражение, применяемое к детальным записям. Например, «ПометкаУдаления = Ложь». Если в данном параметре используется агрегатная функция, то при выполнении компоновки данных возникнет ошибка;
- ОтборГруппировок — отбор, применяемый к групповым записям. Например: «Сумма(СуммаОборот) > &Параметр1».
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функция ВычислитьМассивСГруппировкой генерирует выводимое выражение таким образом, чтобы данные выводить представления и данные были упорядочены.
Например, для пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойМассив(«Сумма(СуммаОборот)», «Контрагент»)
компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений («Представление(Сумма(НаборДанных.СуммаОборот)), Сумма(НаборДанных.СуммаОборот)», «НаборДанных.Контрагент»), «2»)))4. ВычислитьВыражениеСГруппировкойТаблицаЗначений (EvalExpressionWithGroupValueTable) — функция возвращает таблицу значений, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Синтаксис :
ВычислитьВыражениеСГруппировкойТаблицаЗначений (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)- Выражение (Строка) — выражение, которое нужно вычислить. В строке может быть перечислено несколько выражений через запятую. После каждого выражения может быть необязательное ключевое слово КАК и имя колонки таблицы значений. Например: «Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж».
- ВыраженияПолейГруппировки — выражения полей группировки, перечисленные через запятую. Например, «Контрагент, Партия»;
- ОтборЗаписей — выражение, применяемое к детальным записям. Например, «ПометкаУдаления = Ложь». Если в данном параметре используется агрегатная функция, то при выполнении компоновки данных возникнет ошибка;
- ОтборГруппировок — отбор, применяемый к групповым записям. Например: «Сумма(СуммаОборот) > &Параметр1».
Результатом работы данной функции будет таблица значений с колонками Контрагент и ОбъемПродаж, в которых будут находиться контрагенты с их объемами продаж.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Например, пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойТаблицаЗначений («Контрагент, Сумма(СуммаОборот)», «Контрагент»)
Компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(ПолучитьЧасть(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений («НаборДанных.Контрагент, НаборДанных.КонтрагентПредставление, Сумма(НаборДанных.СуммаОборот), Представление(НаборДанных.СуммаОборот), НаборДанных.ПолеУпорядочивание», «НаборДанных.Контрагент»), «5, 1, 3»), «2, 4»))5. Уровень (Level) — функция предназначена для получения текущего уровня записи.
6. НомерПоПорядку (SequenceNumber) — получить следующий порядковый номер.
7. НомерПоПорядкуВГруппировке (SequenceNumberInGrouping) — возвращает следующий порядковый номер в текущей группировке.
8. Формат (Format) — получить отформатированную строку переданного значения.
Синтаксис :
Формат(Значение, ФорматнаяСтрока)- Значение — выражение, которое требуется отформатировать;
- ФорматнаяСтрока — форматная строка задается в соответствии с форматной строкой 1С:Предприятие.
9. НачалоПериода (BeginOfPeriod) — функция предназначена для выделения определенной даты из заданной даты.
Синтаксис :
НачалоПериода(Дата, ТипПериода)- Дата (Дата). Заданная дата;
- ТипПериода (Строка). Содержит одно из значений: Минута; Час; День; Неделя; Месяц; Квартал; Год; Декада; Полугодие.
10. КонецПериода (EndOfPeriod) — функция предназначена для выделения определенной даты из заданной даты.
Синтаксис :
КонецПериода(Дата, ТипПериода)- Дата (Дата). Заданная дата;
- ТипПериода (Строка). Содержит одно из значений: Минута; Час; День; Неделя; Месяц; Квартал; Год; Декада; Полугодие.
11. ДобавитьКДате (DateAdd) — функция предназначена для прибавления к дате некоторой величины.
Синтаксис :
ДобавитьКДате(Выражение, ТипУвеличения, Величина)- Выражение (Дата). Исходная дата;
- ТипУвеличения (Строка). Содержит одно из значений: Минута; Час; День; Неделя; Месяц; Квартал; Год; Декада; Полугодие.
- Величина (Число). На сколько необходимо увеличить дату, дробная часть игнорируется.
12. РазностьДат (DateDifference) — функция предназначена для получения разницы между двумя датами.
Синтаксис :
РазностьДат(Выражение1 , Выражение2 , ТипРазности)- Выражение1 (Дата). Вычитаемая дата;
- Выражение2 (Дата). Исходная дата;
- ТипРазности (Строка). Содержит одно из значений: Секунда; Минута; Час; День; Месяц; Квартал; Год.
13. Подстрока (Substring) — данная функция предназначена для выделения подстроки из строки.
Синтаксис :
Подстрока(Строка, Позиция, Длина)- Строка (Строка). Строка, из которой выделяют подстроку;
- Позиция (Число). Позиция символа, с которого начинается выделяемая из строки подстрока;
- Длина (Число). Длина выделяемой подстроки.
14. ДлинаСтроки (StringLength) — функция предназначена для определения длины строки.
- Строка (Строка). Строка, длину которой определяют.
15. Год (Year) — данная функция предназначена для выделения года из значения типа Дата.
- Дата (Дата). Дата, по которой определяют год.
16. Квартал (Quarter) — данная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4.
- Дата (Дата). Дата, по которой определяют квартал
17. Месяц (Month) — данная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапа-зоне от 1 до 12.
- Дата (Дата). Дата, по которой определяют месяц.
18. ДеньГода (DayOfYear) — данная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365(366).
- Дата (Дата). Дата, по которой определяют день года.
19. День (Day) — данная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31.
- Дата (Дата). Дата, по которой определяют дня месяца.
20. Неделя (Week) — данная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1.
- Дата (Дата). Дата, по которой определяют номера недели.
21. ДеньНедели (WeekDay) — данная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7(воскресенье).
- Дата (Дата). Дата, по которой определяют день недели .
22. Час (Hour) — данная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23.
- Дата (Дата). Дата, по которой определяют час суток.
23. Минута (Minute) — данная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59.
- Дата (Дата). Дата, по которой определяют минута часа.
24. Секунда (Second) — данная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59.
- Дата (Дата). Дата, по которой определяют секунды минуты.
25. Выразить (Cast) — данная функция предназначена для выделения типа из выражения, которое может содержать составной тип. В случае, если выражение будет содержать тип, отличный от требуемого типа, будет возвращено значение NULL.
Синтаксис :
Выразить(Выражение, УказаниеТипа)- Выражение — преобразуемое выражение;
- УказаниеТипа (Строка). Содержит строку типа. Например, «Число», «Строка» и т.п. Кроме примитивных типов данная строка может содержать имя таблицы. В этом случае будет осуществлена попытка выразить к ссылке на указанную таблицу.
26. ЕстьNull (IsNull) — данная функция возвращает значение второго параметра в случае, если значение первого параметра NULL. В противном случае будет возвращено значение первого параметра.
Синтаксис :
ЕстьNull(Выражение1, Выражение2)- Выражение1 — проверяемое значение;
- Выражение2 — возвращаемое значение, если значение Выражение1 есть NULL.
27. ACos — вычисляет арккосинус в радианах.
- Выражение (Число). Значение косинуса (в диапазоне -1 . 1), по которому определяется угол.
- Выражение (Число). Значение синуса (в диапазоне -1 . 1), по которому определяется угол.
- Выражение (Число). Значение тангенса, по которому определяется угол.
- Выражение (Число). Задается в радианах.
- Выражение (Число). Значение степени.
- Выражение (Число). Исходное число, больше 0.
- Выражение (Число). Исходное число, больше 0.
Синтаксис :
Pow(Основание, Показатель)- Основание (Число). Основание операции возведения в степень.
- Показатель (Число). Показатель степени.
- Выражение (Число). Задается в радианах.
- Выражение (Число). Неотрицательное число.
- Выражение (Число). Значение синуса, по которому определяется угол.
Синтаксис :
Окр(Выражение, Разрядность)- Выражение (Число). Исходное число;
- Разрядность (Число). Число знаков дробной части, до которых производится округление.
- Выражение (Число). Дробное число.
Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется.
Пример :
СокращенноеНаименование(Документы.Ссылка, Документы.Дата, Документы.Номер)В данном примере будет осуществлен вызов функции «СокращенноеНаименование» из общего модуля конфигурации.
Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.
Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.41. Представление (Resentation) — данная функция возвращает строковое представление переданного значения не примитивного типа. Для значений примитивного типа возвращает само значение.
Если в качестве параметра используется массив или таблица значений, то функция возвращает строку, содержащую строковые представление всех элементов массива, разделенных символами «; «. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка «<Пустое значение>».
42. Строка (String) — данная функция преобразует переданное значение в строку.
Если в качестве параметра используется массив или таблица значений, то функция возвращает строку, содержащую строковые представление всех элементов массива, разделенных символами «; «. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка «<Пустое значение>».
43. ЗначениеЗаполнено (ValueIsFilled)
Для значений NULL, Неопределено всегда возвращает Ложь.
Для значений Булево всегда возвращает Истину.
Для остальных типов возвращает Истину, если значение отличается от значения по умолчанию для данного типа.44. УровеньВГруппировке (LevelInGroup) — данная функция получает текущий уровень записи относительно группировки.
Может быть использована для получения уровня вложенности записи в иерархической группировке.
Язык выражений СКД. Примеры использования функции Вычислить Выражение ()
Рассматриваемая функция позволяет вычислить выражение по какой-либо группировке отчета в программе 1С. Подробно описывать параметры данной функции в 1С 8.3 мы не будем – с ними можно ознакомиться в справке:
Здесь же рассмотрим примеры использования функции в отчетах, созданных в рамках демонстрационной конфигурации «Управляемое приложение».
1. Расчет суммы нарастающим итогом
Задача: в отчете по продажам необходимо добавить колонки с нарастающим итогом по сумме и количеству.
В наборы данных добавляем запрос по регистру «Продажи»:
Добавляем два вычисляемых поля: «СуммаНарастающимИтогом» и «КоличествоНарастающимИтогом». Выражение для них не указываем:
Затем в ресурсах указываем выражения для этих полей:
В первом параметре «Выражение» указываем агрегатную функцию «Сумма» по тому полю, по которому нужно получить нарастающий итог.
В параметре «Начало» указываем «Первая», а в параметре «Конец» – «Текущая». Таким образом в колонках с сумой нарастающим итогом будут суммироваться все записи с первой по текущую. Для первой записи будет получена сумма только для нее, а для второй – сумма первой и второй записей, для третьей – сумма первой, второй и третьей и т.п.
Проверяем отчет в режиме предприятия:
В колонке «Количество нарастающим итогом» видим в первой строке число 2, во второй число 5 – сумма первой и второй строки в колонке «Количество Оборот», в третьей – число 8, равное сумме первой, второй и третьей и т.п.
2. Вычисление предыдущего курса с помощью функции Вычислить Выражение ()
Еще одна очень распространенная задача – вывод в отчет информации о курсе на предыдущий день.
В отчет в программы 1С добавляем запрос по регистру «Курсы валют».
На вкладке «Вычисляемые поля» добавляем новое поле: «ПредыдущийКурс». Затем указываем для него выражение:
В данном случае в функцию ВычислитьВыражение() в первом параметре указываем поле «Курс». А в параметрах «Начало» и «Конец» указываем «Предыдущая». Т.е. в вычисляемом поле будет подставляться значение из предыдущей строки в колонке «Курс».
Видим, что во второй строке в колонке «Предыдущий курс» указано значение из первой строки колонки «Курс» и т.п.
3. Сравнение с определенным значением в отчете 1С
Еще одна задача – в отчете требуется указать значение в каждой строке со значением в определенной колонке. Например, в отчете по продажам рассчитать процент суммы продаж товара в текущей строке от суммы продаж одного из товаров, который пользователь укажет в параметрах отчета.
В отчете составляем запрос по регистру «Продажи»:
Добавляем вычисляемое поле «Процент», выражение для него не указываем, т.к. расчеты процента будут производиться только на уровне итогов:
На вкладке «Параметры» добавляем параметр «ТоварДляСравнения», в котором пользователь будет указывать, с каким товаром нужно производить сравнение. На вкладке «Ресурсы» указываем выражение для поля «Процент».
Тут мы определяем сумму по полю «СуммаОборот» и для расчета процента от продаж выбранного пользователем товара умножаем эту сумму на 100, а затем делим на результат функции ВычислитьВыражение().
В нее так же передаем сумму по полю «СуммаОборот», но только при условии, что товар в текущей строке равен товару, указанному в параметре «Товары для сравнения».
Также для наглядности зададим оформление для колонки «Товар» так, чтобы товар выбранный пользователем выделялся цветом:
В качестве товара для сравнения выбран товар «Босоножки». Проверим верен ли расчет на примере товара «Валенки».
За выбранный период было продано товаров на сумму 12500 и 4500 соответственно.
Функция Вычислить предназначена для вычисления выражения в контексте некоторой группировки. Функция используется для совместимости с предыдущими версиями платформы. Вместо неё рекомендуется использовать функцию ВычислитьВыражение.
Вычислить(Выражение, Группировка, ТипРасчета)
- Выражение. Тип Строка. Содержит вычисляемое выражение;
- Группировка. Тип Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например:
Сумма(Продажи.СуммаОборот) / Вычислить(«Сумма(Продажи.СуммаОборот)», «ОбщийИтог»)
В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке.
- ТипРасчета. Тип Строка. В случае если данный параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех записей группировки. В случае если значение параметра «Группировка», значения будут вычисляться для текущей групповой записи группировки.
ВычислитьВыражение (EvalExpression)
Функция ВычислитьВыражение предназначена для вычисления выражения в контексте некоторой группировки. Функция учитывает отбор группировок, но не учитывает иерархические отборы.
Функция не может применяться к группировке в групповом отборе этой группировки.ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)
- Выражение. Тип Строка. Содержит вычисляемое выражение;
- Группировка. Тип Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например:
Сумма(Продажи.СуммаОборот) / Вычислить(«Сумма(Продажи.СуммаОборот)», «ОбщийИтог»)
В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке;
- ТипРасчета. Тип Строка. В случае если данный параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех записей группировки.
В случае если значение параметра «Группировка», значения будут вычисляться для текущей групповой записи группировки.
Если параметр имеет значение «ГруппировкаНеРесурса», то при вычислении функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки.
При вычислении функции ВычислитьВыражение со значением «ГруппировкаНеРесурса» для групповых записей, не являющихся группировками по ресурсам, функция вычисляется так же, как бы она вычислялась со значением параметра «Группировка».
Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля – ресурса, по которому выполняется группировка, выдает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение, с указанным параметром «ГруппировкаНеРесурса». Для остальных ресурсов в группировке по ресурсу выдаются обычные выражения ресурсов.
Если параметр имеет значение «Иерархия», то выражение нужно вычислять для родительской иерархической записи, если таковая имеется, и для всей группировки, если родительской иерархической записи не имеется. Компоновщик макета при генерации выражения для поля «% в группе иерархии» генерирует выражение, содержащее отношение выражения ресурса к функции ВычислитьВыражение для выражения ресурса, вычисляемого для текущей группировки с типом вычисления «Иерархия».
- «Первая» («First»). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля.
Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет. - «Последняя» («Last»). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля.
Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет. - «Предыдущая» («Previous»). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки.
Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то получается первая запись группировки.
При получении предыдущей записи для итога по группировке считается, получается первая запись. - «Следующая» («Next»). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки.
Например, Следующая(2) – получение следующей от следующей записи.
Если следующая запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3 и для третьей записи получают Следующая, то считается, что записей нет.
При получении следующей записи для итога по группировке считается, что записи нет. - «Текущая» («Current»). Необходимо получить текущую запись.
При получении для итога по группировке получается первая запись. - «ОграничивающееЗначение» («BoundaryValue»). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению.
Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.
- «Первая» («First»). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет. - «Последняя» («Last»). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет. - «Предыдущая» («Previous»). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то считается, что записей нет.
При получении предыдущей записи для итога по группировке считается, получается последняя запись. - «Следующая» («Next»). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) – получение следующей от следующей записи.
Если следующая запись выходит за пределы группировки, получается последняя запись. Например, если записей 3 и для третьей записи получают Следующая, то получается третья запись.
При получении следующей записи для итога по группировке считается, что записи нет. - «Текущая» («Current»). Необходимо получить текущую запись.
При получении для итога по группировке получается первая запись. - «ОграничивающееЗначение» («BoundaryValue»). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
В качестве записи будет получаться последняя запись, значение поля упорядочивания у которой меньше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.01.2010.
- «Вместе» («Together») — обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей;
- «Отдельно» («Separately») — обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания;
Например, если полученная последовательность упорядочена по дате:
1. 01 января 2001 Иванов М. 10
2. 02 января 2001 Петров С. 20
3. 02 января 2001 Сидоров Р. 30
4. 03 января 2001 Петров С. 40При использовании обработки одинаковых значений порядка «Отдельно», предыдущей к записи 3 будет запись 2, а при использовании «Вместе» — запись 1. А фрагментом для текущей записи к записи 2 для «Отдельно» будет запись 2, а для «Вместе» — записи 2 и 3. Таким образом, сумма по текущей записи для «Отдельно» составит 20, а для «Вместе» — 50.
При указанном «Вместе» в параметрах Начало и Конец нельзя указывать смещение для позиций «Первая», «Последняя», «Предыдущая», «Следующая».
Значение по умолчанию «Отдельно».
Примечания:
Функция учитывает отбор группировок, но не учитывает иерархические отборы.
Функция не может применяться к группировке в групповом отборе этой группировки. Например, в отборе группировки Номенклатура нельзя использовать выражение ВычислитьВыражение(«Сумма(СуммаОборот)», , «ОбщийИтог») > 1000. Но такое выражение можно использовать в иерархическом отборе.
Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.
При расчете интервальных выражений для общего итога (параметр Группировка имеет значение «ОбщийИтог») считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют.
Компоновщик макета при генерации выражения функции ВычислитьВыражение, в случае если выражение упорядочивания содержит поля, которые не могут быть использованы в группировке, заменяет функцию ВычислитьВыражение на NULL.