Как правило, в основе набора данных Схемы Компоновки Данных (СКД) лежит запрос. Запросы в программе 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
Как видно из приведенного примера, никаких сложностей в добавлении и обработке вычисляемых полей нет. Мы использовали две функции: Массив() и СоединитьСтроки().
Несколько слов о последней. Помимо первого параметра, указывающего на идентификатор массива, таблицы значений или значения, в ней могут быть установлены еще два:
- РазделительЭлементов – указывает, какой символ будет отделять один элемент массива или одну строку таблицы значений от другого (в нашем случае мы опустили этот параметр и по умолчанию был назначен перенос строки);
- РазделительКолонок – символ, используемый для разделения колонок таблицы значений (по умолчанию используется точка с запятой).
Обращение к экспортным функциям общего модуля
В качестве источника данных для заполнения вычисляемого поля могут выступать функции общего модуля.
Несколько важных моментов:
- Функция обязательно должна быть экспортной;
- Если функция расположена в общем модуле с установленным признаком «Глобальный», её вызов осуществляется непосредственно по имени, в противном случае вызов функции должен происходить по схеме «Имя общего модуля». «Имя вызываемой функции».
В качестве примера использования мы возьмем тот же самый запрос к документам поступления и выведем «Сумму документа» прописью в отдельную колонку. Сам запрос мы описывать не будем, перейдем непосредственно к вычисляемым полям:
- Создадим новое поле «СуммаПропись»;
- Определим его выражение, как на Рис.6;
Рис.6
- В общем модуле создадим экспортную функцию (Рис.7);
Рис.7
- Этап настройки отчета пропустим и сразу посмотрим на результат (Рис.8).
Рис. 8
Таким образом, мы видим, что практически любой обработчик данных может быть инициализирован из СКД, что значительно расширяет возможности использования схемы.
Выражения языка компоновки
Достаточно часто в работе разработчика возникает ситуация, когда в поле СКД необходимо вывести результат деления:
- Рассчитать среднюю стоимость номенклатуры;
- Всевозможные проценты;
- Расчеты среднего заработка и т.д.
Во избежание проблем, в этих случаях желательно в вычисляемое поле ввести проверку на деление на 0.
Сделать это можно с помощью конструкции «Выбор Когда ….Тогда… Иначе… Конец».
В конце несколько слов о достаточно новой функции ВычислитьВыражение(). С её помощью, в частности можно вычислять отклонения в стоимости между текущей и предыдущей строкой, накопительный остаток и т.д.
Допустим, получить СуммуДокумента из предыдущей строки нашего запроса можно указав в поле «Выражение» значение ВычислитьВыражение(«СуммаДокумента». «ПредыдущаяСумма»).
В вычисляемых полях СКД можно использовать свои функции расчетов!
для этого необходимо добавить экспорнутю функцию в общий модуль:
Код 1C v 8.х
В скд на закладке вычисляемые поля добавляете поле:
указываете Путь к данными и пишете по аналогии с примером: