1с вычислить выражение выбор когда

Обновлено: 07.07.2024

Синтаксис:
ВычислитьВыражениеСГруппировкойМассив (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)

Пример:
Максимум(ВычислитьВыражениеСГруппировкойМассив ("Сумма(СуммаОборот)", "Контрагент"));

Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функция ВычислитьМассивСГруппировкой генерирует выводимое выражение таким образом, чтобы данные выводить представления и данные были упорядочены.
Например, для пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Контрагент")
компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Представление(Сумма(НаборДанных.СуммаОборот)), Сумма(НаборДанных.СуммаОборот)", "НаборДанных.Контрагент"), "2")))

Синтаксис:
ВычислитьВыражениеСГруппировкойТаблицаЗначений (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)

Пример:
ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент КАК Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж", "Контрагент")

Результатом работы данной функции будет таблица значений с колонками Контрагент и ОбъемПродаж, в которых будут находиться контрагенты с их объемами продаж.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Например, пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент, Сумма(СуммаОборот)", "Контрагент")
Компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(ПолучитьЧасть(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений ("НаборДанных.Контрагент, НаборДанных.КонтрагентПредставление, Сумма(НаборДанных.СуммаОборот), Представление(НаборДанных.СуммаОборот), НаборДанных.ПолеУпорядочивание", "НаборДанных.Контрагент"), "5, 1, 3"), "2, 4"))

При работе с языком запросов 1С, иногда возникает ситуация, когда требуется проверить выражение, является ли оно ЛОЖЬ или Истина. В случае положительного результата присвоить ему значение выражения для замены.

Конструкция оператора ВЫБОР

ВЫБОР

КОГДА <ПроверяемоеВыражение> ТОГДА <ВыражениеЗамены_1>

ИНАЧЕ < ВыражениеЗамены_2>

КОНЕЦ

Несколько примеров

Пример №1

Есть таблица «Таблица1», в которой перечислены все дни с понедельника по воскресенье.

ДеньНедели
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресенье

Необходимо, для строк со значениями «Суббота» и «Воскресенье» в отдельном поле указать, что это выходной. Во всех остальных случаях, рабочий день. Реализуем поставленную задачу в виде запроса к исходной таблице.

Текст запроса может выглядеть так:

ДеньНедели ВидДня
Понедельник Рабочий день
Вторник Рабочий день
Среда Рабочий день
Четверг Рабочий день
Пятница Рабочий день
Суббота Выходной
Воскресенье Выходной

В данном примере, используя оператор ВЫБОР, мы перебираем все строки из «Таблица1». Параллельно проверяя каждую на соответствие условию.

Если сработает одно из них, то в колонку «ВидДня» произойдёт запись выражения замены, расположенного после ключевого слова ТОГДА. Во всех остальных случаях будет записано выражение расположенное после слова ИНАЧЕ. Причём если убрать секцию ИНАЧЕ, программа примет такую конструкцию и не выдаст ошибку. Однако если проверяемое выражение вернёт ЛОЖЬ, тогда строки, в которые должно было подставится выражение замены, получать значение NULL. Рассмотрим подробнее подобную ситуацию.

Пример №2

Возьмём уже известную нам таблицу из первого примера.

ДеньНедели
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресенье

Получите понятные самоучители по 1С бесплатно:

Необходимо вывести в отдельную таблицу количество выходных дней. Причём информацию о количестве рабочих дней, будем считать излишней. Для наглядности решим задачу в несколько этапов. За основу возьмём запрос из примера №1. Уберём из него секцию ИНАЧЕ, а поле для вывода оставим только то, которое получаем конструкцией оператора ВЫБОР.

ВидДня
<NULL>
<NULL>
<NULL>
<NULL>
<NULL>
Выходной
Выходной

Из результата запроса видно, что все строки, не вошедшие в условие после ключевого слова КОГДА получили <NULL>. Как известно <NULL> это отсутствие значения. Таким образом, нам остаётся только сгруппировать полученную таблицу. Применив к группировке агрегатную функцию КОЛИЧЕСТВО ( <Выражение>).

Текст запроса может выглядеть так:

В заключении хочется сказать, что оператор ВЫБОР хоть и не часто находит свое применение при написании запросов в 1С, но в некоторых ситуациях является незаменимым инструментом для разработчика.

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


Эта панель входит в стандартный состав перспективы Отладка . Если вы закрыли эту панель, или находитесь в другой перспективе, вы можете открыть эту панель из главного меню основного окна, нажав Окно > Показать панель > Прочие… > 1С:Предприятие > Выражения .

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

Структура информации в панели

Если значение выражения имеет примитивный тип ( Число , Строка и т. д.), то 1C:EDT показывает такое значение одной строкой. В противном случае 1C:EDT показывает значение деревом, ветки которого являются свойствами (если это объект) или элементами (если это объект, являющийся коллекцией значений).

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

Условные обозначения

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

Выражение. Тип Неопределено , а также в тех случаях, когда значение недоступно для чтения. Тип Число . Тип Строка . Тип Дата . Тип Булево . Объект встроенного языка. Неименованная коллекция (обращение к ее элементам возможно по индексам). Например, Массив . Именованная коллекция (обращение к ее элементам возможно по именам или по индексам). Например, Структура . Группа элементов коллекции. Эта группа не является свойством встроенного языка, это логическая группировка, которая содержит в себе элементы коллекции, обозначенные их индексами.

Колонки

Имя Выражение, имя переменной или свойства. Значение Значение выражения, переменной или свойства. Фактический тип Тип значения выражения, переменной или свойства.

Клики мышью

Одиночный клик На выражении: Переводит ячейку Имя в режим редактирования и позволяет изменить выражение.

Командная панель


Показать имена типов Перед именем переменной 1C:EDT показывает имя типа ее значения. Команда доступна тогда, когда колонки Значение и Фактический тип скрыты. Показать логическую структуру Не используется при разработке прикладных решений «1С:Предприятия 8». Свернуть все Сворачивает все уровни иерархии, существующие в панели, до первого уровня. Добавить отслеживаемое выражение. Открывает диалог для добавления нового выражения. Удалить Удаляет выделенные выражения. Удалить все Удаляет все выражения. Показать дополнительные команды Открывает выпадающее меню, в котором содержатся дополнительные команды для панели. Макет > Подменю содержит следующие команды: По вертикали Показывает область сведений под таблицей выражений. По горизонтали Показывает область сведений справа от таблицы выражений. Размер столбца по умолчанию: Расположение области сведений выбирается автоматически (снизу или справа) в зависимости от размеров панели. Expressions View Only Если нажата, область сведений не показывается. Если отжата — область сведений показывается. Показать столбцы Если нажата, показываются колонки Значение и Фактический тип . Если отжата — эти колонки не показываются. Выбрать столбцы. Открывает диалог, который позволяет вам выбрать, какие колонки будут показаны в таблице выражений.

Контекстное меню таблицы выражений


Выбрать все Выделяет все выражения в панели. Копировать выражения Копирует выделенные выражения, их значения и типы в буфер обмена. Удалить Удаляет выделенные выражения. Удалить все Удаляет все выражения. Найти. Ищет выражения, переменные и свойства по именам среди тех выражений, переменных и свойств, которые показаны в панели. Добавить отслеживаемое выражение. Открывает диалог для добавления нового выражения. Выключить Выключает отслеживание выражения. При остановке исполнения программы и при пошаговой отладке значение выражения вычисляться не будет. Включить Включает отслеживание выражения. При остановке исполнения программы и на каждом шаге отладки будет вычисляться значение выражения. Изменить отслеживаемое выражение. Открывает диалог для изменения выражения. Вычислить отслеживаемое выражение Вычисляет выражение. Команда полезна в том случае, когда отслеживаемое выражение выключено и автоматически не вычисляется. Создать отслеживаемое выражение Создает новое выражение из переменной или свойства, выделенных в панели. Показать в значениях Показывает содержимое коллекции в панели Значения . Эту команду удобно использовать в том случае, когда в панели Значения отключена связь с панелью Выражения .

Контекстное меню области сведений



Присвоить значение В области сведений вы можете написать выражение на встроенном языке например, Новый Структура("ключ1, ключ2", "значение1", "значение2") . Эта команда присвоит значение этого выражения той переменной, значение которой было показано в области сведений. Помощник по содержимому Открывает окно контекстной подсказки. Вырезать Копирует выделенный фрагмент в буфер обмена и удаляет его из области сведений. Копировать Копирует выделенный фрагмент из области сведений в буфер обмена. Вставить Вставляет фрагмент из буфера обмена в область сведений. Выбрать все Выбирает весь текст в области сведений. Найти и заменить. Открывает диалог, который позволяет вам найти в области сведений и заменить некоторое выражение. Переносить текст Если флажок установлен, длинные строки в области сведений будут переноситься на следующую строку так, чтобы их просмотр был возможен без горизонтальной прокрутки. Если флажок снят, длинные строки переноситься не будут и для их просмотра необходимо использовать горизонтальную прокрутку. Максимальная длина текста Устанавливает максимальную длину текста, который будет показан в области сведений. Стандартно длина текста не ограничена.

Работа с вычисляемыми полями

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

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

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

Пример

В схеме компоновки данных определим набор данных - запрос:

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

Определим вычисляемое поле. Для этого перейдем в конструкторе схемы компоновки данных на вкладку Вычисляемые поля и добавим поле.

Назовем поле ПеревыполнениеПлана . В качестве выражения поля введем:

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

Для того чтобы в результат данное поле выводилось с точностью два знака, установим для поля в оформлении формат ЧДЦ=2 .


Определим настройки отчета, для этого добавим группировку - детальные записи (группировку без полей группировки) и в выбранные поля добавим поля Номенклатура , Подразделение , Стоимость план , Стоимость факт , Перевыполнение плана .

Результат отчета будет выглядеть так:

Т.е. для каждой строчки было рассчитано значение вычисляемого поля.

Для того чтобы по вычисляемому полю можно было рассчитывать итоги, добавим данное поле в список ресурсов. В конструкторе схемы компоновки это делается на вкладке Ресурсы . Выберем поле и добавим его в список ресурсов. Аналогичную операцию выполним и для полей СтоимостьПлан и СтоимостьФакт .


Теперь в итог отчета будет выводиться сумма по полям, в том числе и по полю ПеревыполнениеПлана :

Однако, простым суммированием, мы получили не вполне адекватный итог по перевыполнению плана. Мы получили сумму процентов по каждой комбинации Номенклатура / Подразделение .

Для того чтобы получить правильный итог по выполнению плана изменим формулу расчета итога по полю Выполнение плана :

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

Читайте также: