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

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

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

Пример

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

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

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

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

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

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

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

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

НоменклатураПодразделениеСтоимость планСтоимость фактПеревыполнение плана
Вентилятор настольныйОтдел оптовой продажи238,32737,55209,48
Мужские сапоги с искусственным мехомОтдел оптовой продажи234,24-100,00
Мишка (конфеты)Отдел розничной продажи114,91Не запланировано

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

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

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

НоменклатураПодразделениеСтоимость планСтоимость фактПеревыполнение плана
Вентилятор настольныйОтдел оптовой продажи238,32737,55209,48
Мужские сапоги с искусственным мехомОтдел оптовой продажи234,24-100,00
Мишка (конфеты)Отдел розничной продажи114,91Не запланировано
472,56852,46109,48

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

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

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

Введем данную формулу в выражение ресурса:

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

Как правило, в основе набора данных Схемы Компоновки Данных (СКД) лежит запрос. Запросы в программе 1С: Предприятие предоставляют программисту богатые возможности для получения данных. В связи с этим возникает вопрос, зачем нужны еще и вычисляемые поля?

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

Рассмотрим несколько примеров, как пользоваться вычисляемыми полями.

Создадим новый отчет и зайдем в Схему Компоновки Данных. Вычисляемые поля 1С СКД настраиваются на одноименной вкладке:

Получите 267 видеоуроков по 1С бесплатно:

Колонка «Путь к данным» задает наименование поля. В колонке «Выражение» прописывается формула для вычисления поля. Можно использовать арифметические выражения, конструкцию «ВЫБОР КОГДА ТОГДА КОНЕЦ», и даже обращаться к экспортным функциям общих модулей системы.

Вот несколько примеров:

Разница значений:

Вывод текста по условию:

ВЫБОР КОГДА СуммаНачОстаток > 0 ТОГДА
«Имеется долг за организацией»
ИНАЧЕ «Долг отсутствует» КОНЕЦ

Форматирование:

«Месяц оплаты:» + Формат(ДатаОплаты, «ДФ = ‘MMMM’»)

Использование функции общего модуля:

УправлениеКонтактнойИнформациейЗарплатаКадры.ПолучитьКонтактнуюИнформацию (Док.Сотрудник, &ТелСотрудника)

Подробнее описание возможностей вычисляемых полей можно найти в синтаксис-помощнике: «Система компоновки данных — Язык выражений системы компоновки данных».

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К» сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Грамотное использование схемы компоновки данных (СКД) позволяет:

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

Но далеко не все разработчики по максимуму используют возможности схемы, так как не все её настройки очевидны и интуитивно понятны. В частности многие знают, что в 1С в СКД есть вычисляемые поля, однако, не до конца представляют область их использования и методы работы с ними.

Что такое вычисляемое поле

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

Дело в том, что СКД – это нечто большее, нежели просто отображение результата выполнения запроса и это прекрасно видно из формы создания схемы (Рис.1).

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

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

Давайте по этому списку и пойдем.

Массив значений в одной ячейке

Смоделируем ситуацию, когда необходимо получить в отдельную ячейку все номера документов поступления по контрагенту:

  • С помощью конструктора реализуем простейший запрос (Рис. 2) Рис. 2
  • На закладке «Вычисляемые поля» мы создадим новое поле и назовем его МассивИдентификаторов, подставив в колонку «Выражение» фразу Массив(Номер) (Рис. 3) Рис. 3

таким образом, мы в нашей схеме создали дополнительное расчетное поле;

  • Перейдем на закладку «Ресурсы» и установим выражение для расчета итога по контрагенту (Рис. 4), заменив выражение по умолчанию «Сумма» на «СоединитьСтроки»; Рис. 4
  • На закладке «Настройки» определим внешний вид нашего отчета, добавим новую группировку «Контрагент» и укажем её выбранные поля (Рис. 4); Рис. 4
  • Результат выполнения обработки можно увидеть на Рис. 5. Рис.5

Как видно из приведенного примера, никаких сложностей в добавлении и обработке вычисляемых полей нет. Мы использовали две функции: Массив() и СоединитьСтроки().

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

  1. РазделительЭлементов – указывает, какой символ будет отделять один элемент массива или одну строку таблицы значений от другого (в нашем случае мы опустили этот параметр и по умолчанию был назначен перенос строки);
  2. РазделительКолонок – символ, используемый для разделения колонок таблицы значений (по умолчанию используется точка с запятой).

Обращение к экспортным функциям общего модуля

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

Несколько важных моментов:

  • Функция обязательно должна быть экспортной;
  • Если функция расположена в общем модуле с установленным признаком «Глобальный», её вызов осуществляется непосредственно по имени, в противном случае вызов функции должен происходить по схеме «Имя общего модуля». «Имя вызываемой функции».

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

  1. Создадим новое поле «СуммаПропись»;
  2. Определим его выражение, как на Рис.6; Рис.6
  3. В общем модуле создадим экспортную функцию (Рис.7); Рис.7
  4. Этап настройки отчета пропустим и сразу посмотрим на результат (Рис.8). Рис. 8

Таким образом, мы видим, что практически любой обработчик данных может быть инициализирован из СКД, что значительно расширяет возможности использования схемы.

Выражения языка компоновки

Достаточно часто в работе разработчика возникает ситуация, когда в поле СКД необходимо вывести результат деления:

  1. Рассчитать среднюю стоимость номенклатуры;
  2. Всевозможные проценты;
  3. Расчеты среднего заработка и т.д.

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

Сделать это можно с помощью конструкции «Выбор Когда ….Тогда… Иначе… Конец».

В конце несколько слов о достаточно новой функции ВычислитьВыражение(). С её помощью, в частности можно вычислять отклонения в стоимости между текущей и предыдущей строкой, накопительный остаток и т.д.

Допустим, получить СуммуДокумента из предыдущей строки нашего запроса можно указав в поле «Выражение» значение ВычислитьВыражение(«СуммаДокумента». «ПредыдущаяСумма»).

>