1с вычислить выражение выбор когда
Вычислить (Eval) — предназначена для вычисления выражения в контексте некоторой группировки. Функция используется для совместимости с предыдущими версиями платформы. Вместо неё рекомендуется использовать функцию ВычислитьВыражение.
- Выражение (Строка). Cодержит вычисляемое выражение;
- Группировка (Строка). Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем.
Например:
- В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке.
- ТипРасчета (Строка). В случае если данный параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех записей группировки. В случае если значение параметра «Группировка», значения будут вычисляться для текущей групповой записи группировки.
ВычислитьВыражение (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»).
- «Последняя» («Last»).
- «Предыдущая» («Previous»).
- «Следующая» («Next»).
- «Текущая» («Current»).
- «ОграничивающееЗначение» («BoundaryValue»).
- «Вместе» («Together») — обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей;
- «Отдельно» («Separately») — обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания;
Пример:
Получение отношения суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке:Доброго времени суток! В скд в поле "Вычисляемые поля" нужно Рассчитать 5 полей одно на основании другого. Возможно ли это?
1. Поле Процент:Выдает ошибку, что процент не найден. Если процент заменить на Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец, идет неверный расчет.
Плюс еще несколько полей нужно рассчитать на основе этих. Каким образом это можно сделать?
Вычисляемые поля
Ресурсы
(4) подскажите, каким образом можно рассчитать процент выполнения плана (факт*100/план), потом на основании процента, коэффициент, потом этом коэффициент умножить на факт и еще один коэффициент умножить на получившееся значение?
Подскажите, пожалуйста, как в ресурсах написать чтобы считалось количество полей у которых значение >0,4?
Примерно такВыбор когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец< 40 тогда 0 Когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец>= 120 тогда 1.2 иначе Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец/100 конец
(7) а потом мне еще этот коэффициент нужно умножить на число из отчета и получить некий Y, а потом, сумму Y умножить еще на один коэффициент.
Там будет просто миллион строк. отчет будет отрабатывать миллион лет.Как бы лучше выйти из этой ситуации?
Ну да, для каждого из 5-ти полей надо писать полные формулы без учета прошлых вычисляемых полей. Но в данном случае это не целесообразно уже для 3-го поля получится сумасшедшая формула (даже если часть полей вынести в запрос). По мне так проще формировать отчет программно через СКД результат вывести в таблицу значений , там рассчитать все нужные поля и готовую таблицу передать как внешний источник данных.
Либо если конфигурация не типовая создать общий модуль где будут вычисляться нужные выражения и уже функции общего модуля использовать в вычисляемых полях
(8) подскажите, пожалуйста, как это сделать? причем у меня сначала рассчитываются поля расшифровки, потом вычисляются коэффициенты (как для группировок так и для расшифровок), потом производятся вычисления.
(8)Либо если конфигурация не типовая создать общий модуль где будут вычисляться нужные выражения и уже функции общего модуля использовать в вычисляемых полях
Пишу в вычисляемых полях: ВычислитьВыражение("(ВесьКодПоля1)*(ВесьКОдПоля2)*(ВесьКодПоля3)","Проект","группировка")
Отчет не исполняется и пишет: Ожидается ) ")" Продолжить редактирование?
Куда только не добавляла скобку - ничего не работает. Что делать. Помогите, пожалуйста!!При работе с языком запросов 1С, иногда возникает ситуация, когда требуется проверить выражение, является ли оно ЛОЖЬ или Истина. В случае положительного результата присвоить ему значение выражения для замены.
Конструкция оператора ВЫБОР
Несколько примеров
Пример №1
Есть таблица «Таблица1», в которой перечислены все дни с понедельника по воскресенье.
ДеньНедели Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье Необходимо, для строк со значениями «Суббота» и «Воскресенье» в отдельном поле указать, что это выходной. Во всех остальных случаях, рабочий день. Реализуем поставленную задачу в виде запроса к исходной таблице.
Текст запроса может выглядеть так:
ВЫБРАТЬ
ДеньНедели,
ВЫБОР
КОГДА ДеньНедели =»Суббота »
ИЛИ ДеньНедели = «Воскресенье »
ТОГДА «Выходной»
ИНАЧЕ «Рабочий день»
КОНЕЦ КАК ВидДня
ИЗ
Таблица1. ДеньНедели КАК ДеньНедели
ДеньНедели ВидДня Понедельник Рабочий день Вторник Рабочий день Среда Рабочий день Четверг Рабочий день Пятница Рабочий день Суббота Выходной Воскресенье Выходной В данном примере, используя оператор ВЫБОР, мы перебираем все строки из «Таблица1». Параллельно проверяя каждую на соответствие условию.
КОГДА ДеньНедели =»Суббота »
ИЛИ ДеньНедели = «Воскресенье «
Если сработает одно из них, то в колонку «ВидДня» произойдёт запись выражения замены, расположенного после ключевого слова ТОГДА. Во всех остальных случаях будет записано выражение расположенное после слова ИНАЧЕ. Причём если убрать секцию ИНАЧЕ, программа примет такую конструкцию и не выдаст ошибку. Однако если проверяемое выражение вернёт ЛОЖЬ, тогда строки, в которые должно было подставится выражение замены, получать значение NULL. Рассмотрим подробнее подобную ситуацию.
Пример №2
Возьмём уже известную нам таблицу из первого примера.
ДеньНедели Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье Получите понятные самоучители по 1С бесплатно:
Необходимо вывести в отдельную таблицу количество выходных дней. Причём информацию о количестве рабочих дней, будем считать излишней. Для наглядности решим задачу в несколько этапов. За основу возьмём запрос из примера №1. Уберём из него секцию ИНАЧЕ, а поле для вывода оставим только то, которое получаем конструкцией оператора ВЫБОР.
ВЫБРАТЬ
ВЫБОР
КОГДА ДеньНедели =»Суббота »
ИЛИ ДеньНедели = «Воскресенье »
ТОГДА «Выходной»
КОНЕЦ КАК ВидДня
ИЗ
Таблица1. ДеньНедели КАК ДеньНедели
Из результата запроса видно, что все строки, не вошедшие в условие после ключевого слова КОГДА получили . Как известно это отсутствие значения. Таким образом, нам остаётся только сгруппировать полученную таблицу. Применив к группировке агрегатную функцию КОЛИЧЕСТВО ( ).
Текст запроса может выглядеть так:
ВЫБРАТЬ
КОЛИЧЕСТВО(ВЫБОР
КОГДА ДеньНедели =»Суббота »
ИЛИ ДеньНедели = «Воскресенье »
ТОГДА «Выходной»
КОНЕЦ) КАК ВидДня
ИЗ
Таблица1. ДеньНедели КАК ДеньНедели
В заключении хочется сказать, что оператор ВЫБОР хоть и не часто находит свое применение при написании запросов в 1С, но в некоторых ситуациях является незаменимым инструментом для разработчика.
Работа с вычисляемыми полями
В схеме компоновки данных есть возможность определения вычисляемого поля. Вычисляемые поля представляют собой дополнительные поля схемы, значения которых будут вычисляться по некоторой формуле. Вычисляемые поля можно создавать для того, чтобы использовать поля из различных наборов данных, выполнять операции над полями наборов данных - объект, и для других целей. В настройках компоновки данных вычисляемое поле будет фигурировать под именем, указанным в пути к данным этого поля. Пользователь сможет работать с вычисляемым полем точно так же, как и с полем набора данных.
Для того чтобы система смогла получить значение вычисляемого поля, необходимо указать выражение вычисляемого поля. Выражение вычисляемого поля описывается на языке выражений компоновки данных. В выражениях вычисляемого поля есть ограничение - в нем нельзя использовать вычисляемые поля. В остальном, ограничений нет - можно использовать все синтаксические конструкции языка выражений, можно использовать поля наборов данных, можно использовать функции общих модулей конфигурации.
Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление также как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс, для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог.
Пример
В схеме компоновки данных определим набор данных - запрос:
В приведенном запросе получаются данные из регистра продаж и регистра планов продаж. Результатом запроса будет таблица, где для каждого подразделения и каждой номенклатуры будет получено плановое и фактическое количество продаж.
Определим вычисляемое поле. Для этого перейдем в конструкторе схемы компоновки данных на вкладку Вычисляемые поля и добавим поле.
Назовем поле ПеревыполнениеПлана . В качестве выражения поля введем:
Таким образом, значением данного поля в случае, если значение поля СтоимостьПлан равно 0 , будет строка Не запланировано , и процент от перевыполнения плана в противном случае.
Для того чтобы в результат данное поле выводилось с точностью два знака, установим для поля в оформлении формат ЧДЦ=2 .
Определим настройки отчета, для этого добавим группировку - детальные записи (группировку без полей группировки) и в выбранные поля добавим поля Номенклатура , Подразделение , Стоимость план , Стоимость факт , Перевыполнение плана .
Результат отчета будет выглядеть так:
Т.е. для каждой строчки было рассчитано значение вычисляемого поля.
Для того чтобы по вычисляемому полю можно было рассчитывать итоги, добавим данное поле в список ресурсов. В конструкторе схемы компоновки это делается на вкладке Ресурсы . Выберем поле и добавим его в список ресурсов. Аналогичную операцию выполним и для полей СтоимостьПлан и СтоимостьФакт .
Теперь в итог отчета будет выводиться сумма по полям, в том числе и по полю ПеревыполнениеПлана :
Однако, простым суммированием, мы получили не вполне адекватный итог по перевыполнению плана. Мы получили сумму процентов по каждой комбинации Номенклатура / Подразделение .
Для того чтобы получить правильный итог по выполнению плана изменим формулу расчета итога по полю Выполнение плана :
В этой формуле уже получается не сумма отношений факта к плану, а отношения суммы факта к сумме плана. Кроме того, в итоге учитываются только те записи, для которых был установлен план.
Как правило, в основе набора данных Схемы Компоновки Данных (СКД) лежит запрос. Запросы в программе 1С: Предприятие предоставляют программисту богатые возможности для получения данных. В связи с этим возникает вопрос, зачем нужны еще и вычисляемые поля?
Думаю, что никого не удивлю, если скажу, что не все поля можно выразить с помощью запроса.
Рассмотрим несколько примеров, как пользоваться вычисляемыми полями.
Создадим новый отчет и зайдем в Схему Компоновки Данных. Вычисляемые поля 1С СКД настраиваются на одноименной вкладке:
Колонка «Путь к данным» задает наименование поля. В колонке «Выражение» прописывается формула для вычисления поля. Можно использовать арифметические выражения, конструкцию «ВЫБОР КОГДА ТОГДА КОНЕЦ», и даже обращаться к экспортным функциям общих модулей системы.
Вот несколько примеров:
Разница значений:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>Вывод текста по условию:
ВЫБОР КОГДА СуммаНачОстаток > 0 ТОГДА
«Имеется долг за организацией»
ИНАЧЕ «Долг отсутствует» КОНЕЦФорматирование:
«Месяц оплаты:» + Формат(ДатаОплаты, «ДФ = ‘MMMM'»)
Использование функции общего модуля:
УправлениеКонтактнойИнформациейЗарплатаКадры.ПолучитьКонтактнуюИнформацию (Док.Сотрудник, &ТелСотрудника)
Подробнее описание возможностей вычисляемых полей можно найти в синтаксис-помощнике: «Система компоновки данных — Язык выражений системы компоновки данных».
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Читайте также: