выразить в вычисляемом поле скд
Работа с вычисляемыми полями
Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление также как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс, для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог.
Пример
В приведенном запросе получаются данные из регистра продаж и регистра планов продаж. Результатом запроса будет таблица, где для каждого подразделения и каждой номенклатуры будет получено плановое и фактическое количество продаж.
Определим вычисляемое поле. Для этого перейдем в конструкторе схемы компоновки данных на вкладку Вычисляемые поля и добавим поле.
Результат отчета будет выглядеть так:
Номенклатура | Подразделение | Стоимость план | Стоимость факт | Перевыполнение плана |
Вентилятор настольный | Отдел оптовой продажи | 238,32 | 737,55 | 209,48 |
Мужские сапоги с искусственным мехом | Отдел оптовой продажи | 234,24 | -100,00 | |
Мишка (конфеты) | Отдел розничной продажи | 114,91 | Не запланировано |
Т.е. для каждой строчки было рассчитано значение вычисляемого поля.
Теперь в итог отчета будет выводиться сумма по полям, в том числе и по полю ПеревыполнениеПлана :
Номенклатура | Подразделение | Стоимость план | Стоимость факт | Перевыполнение плана |
Вентилятор настольный | Отдел оптовой продажи | 238,32 | 737,55 | 209,48 |
Мужские сапоги с искусственным мехом | Отдел оптовой продажи | 234,24 | -100,00 | |
Мишка (конфеты) | Отдел розничной продажи | 114,91 | Не запланировано | |
Итого | 472,56 | 852,46 | 109,48 |
Для того чтобы получить правильный итог по выполнению плана изменим формулу расчета итога по полю Выполнение плана :
В этой формуле уже получается не сумма отношений факта к плану, а отношения суммы факта к сумме плана. Кроме того, в итоге учитываются только те записи, для которых был установлен план.
Введем данную формулу в выражение ресурса:
Теперь результат отчета будет выглядеть так:
Вычисляемые поля СКД в 1С 8.3 и 8.2 на примере
Как правило, в основе набора данных Схемы Компоновки Данных (СКД) лежит запрос. Запросы в программе 1С: Предприятие предоставляют программисту богатые возможности для получения данных. В связи с этим возникает вопрос, зачем нужны еще и вычисляемые поля?
Думаю, что никого не удивлю, если скажу, что не все поля можно выразить с помощью запроса.
Рассмотрим несколько примеров, как пользоваться вычисляемыми полями.
Создадим новый отчет и зайдем в Схему Компоновки Данных. Вычисляемые поля 1С СКД настраиваются на одноименной вкладке:
Колонка «Путь к данным» задает наименование поля. В колонке «Выражение» прописывается формула для вычисления поля. Можно использовать арифметические выражения, конструкцию «ВЫБОР КОГДА ТОГДА КОНЕЦ», и даже обращаться к экспортным функциям общих модулей системы.
Вот несколько примеров:
Разница значений:
Вывод текста по условию:
ВЫБОР КОГДА СуммаНачОстаток > 0 ТОГДА
«Имеется долг за организацией»
ИНАЧЕ «Долг отсутствует» КОНЕЦ
Форматирование:
«Месяц оплаты:» + Формат(ДатаОплаты, «ДФ = ‘MMMM’»)
Использование функции общего модуля:
УправлениеКонтактнойИнформациейЗарплатаКадры.ПолучитьКонтактнуюИнформацию (Док.Сотрудник, &ТелСотрудника)
Подробнее описание возможностей вычисляемых полей можно найти в синтаксис-помощнике: «Система компоновки данных — Язык выражений системы компоновки данных».
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
1С: Вычисляемые поля в СКД
Грамотное использование схемы компоновки данных (СКД) позволяет:
Но далеко не все разработчики по максимуму используют возможности схемы, так как не все её настройки очевидны и интуитивно понятны. В частности многие знают, что в 1С в СКД есть вычисляемые поля, однако, не до конца представляют область их использования и методы работы с ними.
Что такое вычисляемое поле
В большинстве случаев в качестве источника данных в схеме компоновки выступает запрос. В принципе, внутри самого запроса уже можно использовать различные формулы, конструкции и выражения. Возникает закономерный вопрос, зачем же нужен дублирующий функционал?
Дело в том, что СКД – это нечто большее, нежели просто отображение результата выполнения запроса и это прекрасно видно из формы создания схемы (Рис.1).
Вычисляемые поля позволяют выполнять определенные действия со сформированным набором данных:
Давайте по этому списку и пойдем.
Массив значений в одной ячейке
Смоделируем ситуацию, когда необходимо получить в отдельную ячейку все номера документов поступления по контрагенту:
таким образом, мы в нашей схеме создали дополнительное расчетное поле;
Как видно из приведенного примера, никаких сложностей в добавлении и обработке вычисляемых полей нет. Мы использовали две функции: Массив() и СоединитьСтроки().
Несколько слов о последней. Помимо первого параметра, указывающего на идентификатор массива, таблицы значений или значения, в ней могут быть установлены еще два:
Обращение к экспортным функциям общего модуля
В качестве источника данных для заполнения вычисляемого поля могут выступать функции общего модуля.
Несколько важных моментов:
В качестве примера использования мы возьмем тот же самый запрос к документам поступления и выведем «Сумму документа» прописью в отдельную колонку. Сам запрос мы описывать не будем, перейдем непосредственно к вычисляемым полям:
Таким образом, мы видим, что практически любой обработчик данных может быть инициализирован из СКД, что значительно расширяет возможности использования схемы.
Выражения языка компоновки
Достаточно часто в работе разработчика возникает ситуация, когда в поле СКД необходимо вывести результат деления:
Во избежание проблем, в этих случаях желательно в вычисляемое поле ввести проверку на деление на 0.
Сделать это можно с помощью конструкции «Выбор Когда ….Тогда… Иначе… Конец».
В конце несколько слов о достаточно новой функции ВычислитьВыражение(). С её помощью, в частности можно вычислять отклонения в стоимости между текущей и предыдущей строкой, накопительный остаток и т.д.
Допустим, получить СуммуДокумента из предыдущей строки нашего запроса можно указав в поле «Выражение» значение ВычислитьВыражение(«СуммаДокумента». «ПредыдущаяСумма»).
1С 8.3 : Функции языка выражений системы компоновки данных (СКД) Выразить, ЕстьNull…
Выразить (Cast) – данная функция предназначена для выделения типа из выражения, которое может содержать составной тип. В случае, если выражение будет содержать тип, отличный от требуемого типа, будет возвращено значение NULL.
Синтаксис:
Выразить(Выражение, УказаниеТипа)
Пример:
Выразить(Данные.Реквизит1, «Число(10,3)»)
ЕстьNull (IsNull) – данная функция возвращает значение второго параметра в случае, если значение первого параметра NULL. В противном случае будет возвращено значение первого параметра.
Синтаксис:
ЕстьNull(Выражение1, Выражение2)
Пример:
ЕстьNULL(Сумма(Продажи.СуммаОборот), 0)
ACos – вычисляет арккосинус в радианах.
ASin – вычисляет арксинус в радианах.
ATan – вычисляет арктангенс в радианах.
Cos – вычисляет косинус.
Exp – возведение числа e в степень.
Log – вычисляет натуральный логарифм.
Log10 – вычисляет логарифм X по основанию 10.
Pow – возведение в степень.
Синтаксис:
Pow(Основание, Показатель)
Sin – вычисляет синус.
Sqrt – вычисляет квадратный корень.
Tan – вычисляет тангенс.
Окр (Round) – округляет исходное число до нужной разрядности. Режим округления стандартный (1,5 как 2).
Синтаксис:
Окр(Выражение, Разрядность)
Цел (Int) – отсекает дробную часть числа.
Функции общих модулей
Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется.
Пример:
СокращенноеНаименование(Документы.Ссылка, Документы.Дата, Документы.Номер)
В данном примере будет осуществлен вызов функции “СокращенноеНаименование” из общего модуля конфигурации.
Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.
Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.
Представление (Resentation) – данная функция возвращает строковое представление переданного значения не примитивного типа. Для значений примитивного типа возвращает само значение.
Если в качестве параметра используется массив или таблица значений, то функция возвращает строку, содержащую строковые представление всех элементов массива, разделенных символами “; “. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка “ ”.
Строка (String) – данная функция преобразует переданное значение в строку.
Если в качестве параметра используется массив или таблица значений, то функция возвращает строку, содержащую строковые представление всех элементов массива, разделенных символами “; “. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка “ ”.
ЗначениеЗаполнено (ValueIsFilled)
Для значений NULL, Неопределено всегда возвращает Ложь.
Для значений Булево всегда возвращает Истину.
Для остальных типов возвращает Истину, если значение отличается от значения по умолчанию для данного типа.
УровеньВГруппировке (LevelInGroup) – данная функция получает текущий уровень записи относительно группировки.
Может быть использована для получения уровня вложенности записи в иерархической группировке.
ТипЗначения(ValueType)
Возвращает значение типа Тип, содержащее тип значения параметра функции.
Язык выражений системы компоновки данных (1Cv8)
Содержание
Язык выражений системы компоновки данных
Язык выражений системы компоновки данных предназначен для записи выражений, используемых в различных частях системы.
Выражения используются в следующих подсистемах:
Литералы
В выражении могут присутствовать литералы. Возможны литералы следующих типов:
Строка
Строковый литерал записывается в символах «”», например:
При необходимости использования внутри строкового литерала символа «”», следует использовать два таких символов.
Число
Число записывается без пробелов, в десятичном формате. Дробная часть отделяется при помощи символа «.». Например:
Литерал типа дата записывается при помощи ключевого литерала ДАТАВРЕМЯ (DATETIME). После данного ключевого слова, в скобках, через запятую перечисляются год, месяц, день, часы, минуты, секунды. Указание времени не обязательно.
Булево
Булевы значения могут быть записаны при помощи литералов Истина (True), Ложь (False).
Значение
Для указания литералов других типов (системных перечислений, предопределенных данных) используется ключевое слово Значение, после которого в скобках идет указание имени литерала.
Операции над числами
Унарный –
Данная операция предназначена для изменения знака числа на обратный. Например:
Унарный +
Данная операция не выполняет над числом никаких действий. Например:
Данная операция предназначена для вычисления разности двух чисел. Например:
Бинарный +
Данная операция предназначена для вычисления суммы двух чисел. Например:
Произведение
Данная операция предназначена для вычисления произведения двух чисел. Например:
Деление
Данная операция предназначена для получения результата деления одного операнда на другой. Например:
Остаток от деления
Данная операция предназначена для получения остатка от деления одного операнда на другой. Например:
Операции над строками
Конкатенация (Бинарный +)
Данная операция предназначена для конкатенации двух строк. Например:
Подобно
Данная операция проверяет соответствие строки переданному шаблону.
Значением оператора ПОДОБНО является ИСТИНА, если значение удовлетворяет шаблону, и ЛОЖЬ в противном случае.
Следующие символы в имеют смысл, отличный от просто очередного символа строки:
означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем эта последовательность может располагаться, начиная с произвольной позиции в строке.
Операции сравнения
Равно
Данная операция предназначена для сравнения двух операндов на равенство. Например:
Не равно
Данная операция предназначена для сравнения двух операндов на неравенство. Например:
Меньше
Данная операция предназначена для проверки того, что первый операнд меньше второго. Например:
Больше
Данная операция предназначена для проверки того, что первый операнд больше второго. Например:
Меньше или равно
Данная операция предназначена для проверки того, что первый операнд меньше либо равен второму. Например:
Больше или равно
Данная операция предназначена для проверки того, что первый операнд больше либо равен второму. Например:
Операция В
Операция проверки наличия значения в наборе данных
Операция осуществляет проверку наличия значения в указанном наборе данных. Набор данных для проверки должен содержать одно поле. Например:
Операция проверки значения на NULL
Данная операция возвращает значение Истина в случае, если значение является значением NULL. Например:
Операция проверки значения на неравенство NULL
Данная операция возвращает значение Истина в случае, если значение не является значением NULL. Например:
Логические операции
Логические операции принимают в качестве операндов выражения, имеющие тип Булево.
Операция НЕ
Операция НЕ возвращает значение Истина в случае, если ее операнд имеет значение Ложь, и значение Ложь в случае, если ее операнд имеет значение Истина. Например:
Операция И
Операция И возвращает значение Истина в случае, если оба операнда имеют значение Истина, и значение Ложь в случае, если один из операндов имеет значение Ложь. Например:
Операция ИЛИ
Операция ИЛИ возвращает значение Истина в случае, если один из операндов имеет значение Истина, и Ложь в случае, если оба операнда имеют значение Ложь. Например:
Агрегатные функции
Агрегатные функции осуществляют некоторое действие над набором данных.
Сумма
Агрегатная функция Сумма рассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. Например:
Количество
Функция Количество рассчитывает количество значений отличных от значения NULL. Например:
Количество различных
Эта функция рассчитывает количество различных значений. Например:
Максимум
Функция получает максимальное значение. Например:
Минимум
Функция получает минимальное значение. Например:
Среднее
Функция получает среднее значение для значений, отличных от NULL. Например:
Другие операции
Операция ВЫБОР
Операция Выбор предназначена для осуществления выбора одного из нескольких значений при выполнении некоторых условий. Например:
Правила сравнения двух значений
Если типы сравниваемых значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов:
Отношения между различными ссылочными типами определяются на основе ссылочных номеров таблиц, соответствующих тому или иному типу.
Если типы данных совпадают, то производится сравнение значений по следующим правилам:
Работа со значением NULL
Любая операция, в которой значение одного из операндов NULL, будет давать результат NULL.
Приоритеты операций
Операции имеют следующие приоритеты (первая строка имеет низший приоритет):
Функции языка выражений системы компоновки данных
Вычислить
Функция Вычислить предназначена для вычисления выражения в контексте некоторой группировки. Функция имеет следующие параметры:
В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке.
Уровень
Функция предназначена для получения текущего уровня записи.
НомерПоПорядку
Получить следующий порядковый номер.
НомерПоПорядкуВГруппировке
Возвращает следующий порядковый номер в текущей группировке.
Формат
Получить отформатированную строку переданного значения.
Форматная строка задается в соответствии с форматной строкой 1С:Предприятие.
НачалоПериода
Функция предназначена для выделения определенной даты из заданной даты.
КонецПериода
Функция предназначена для выделения определенной даты из заданной даты.
ДобавитьКДате
Функция предназначена для прибавления к дате некоторой величины.
РазностьДат
Функция предназначена для получения разницы между двумя датами.
Подстрока
Данная функция предназначена для выделения подстроки из строки.
ДлинаСтроки
Функция предназначена для определения длины строки.
Данная функция предназначена для выделения года из значения типа Дата.
Квартал
Данная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4.
Месяц
Данная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапа-зоне от 1 до 12.
ДеньГода
Данная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365(366).
Данная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31.
Неделя
Данная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1.
ДеньНедели
Данная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7(воскресенье).
Данная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23.
Минута
Данная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59.
Секунда
Данная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59.
Выразить
Данная функция предназначена для выделения типа из выражения, которое может содержать составной тип. В случае, если выражение будет содержать тип, отличный от требуемого типа, будет возвращено значение NULL.
ЕстьNull
Данная функция возвращает значение второго параметра в случае, если значение первого параметра NULL.
В противном случае будет возвращено значение первого параметра.
Функции общих модулей
Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется.
В данном примере будет осуществлен вызов функции «СокращенноеНаименование» из общего модуля конфигурации.
Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.
Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.