- Главная
- Программирование 1С
- Настройка отчёта в СКД. Как округлить число.
Настройка отчёта в СКД. Как округлить число.
Округление числа в отчёте на СКД.
Для выполнения этой задачи проще всего воспользоваться инструментом «Оформление». Делается это в конструкторе СКД на вкладке «Наборы данных». Для каждого поля отчёта можно настроить «Оформление». Нужно выбрать пункт «Формат» и задать точность числа. Для вычисляемых полей эта операция проделывается на вкладке «Вычисляемые поля».
Источником для запроса является виртуальная таблица РегистрНакопления.Продажи.Обороты, построенная по данным регистра в интервале между ДатаНач и ДатаКон.
В качестве выходных полей берем Номенклатура и результат деления значения полей источника СтоимостьОборот и КоличествоОборот. Причем оператором ВЫРАЗИТЬ() тип последнего поля приводится к примитивному типу Число с определенным форматом (длина – 15, точность – 2).
Грамотное использование схемы компоновки данных (СКД) позволяет:
- значительно снизить время, необходимое на разработку отчета;
- избавиться от необходимости создания управляемой формы обработчика;
- получить на выходе красивый результат с возможностью дополнительной настройки пользователем.
Но далеко не все разработчики по максимуму используют возможности схемы, так как не все её настройки очевидны и интуитивно понятны. В частности многие знают, что в 1С в СКД есть вычисляемые поля, однако, не до конца представляют область их использования и методы работы с ними.
Что такое вычисляемое поле
В большинстве случаев в качестве источника данных в схеме компоновки выступает запрос. В принципе, внутри самого запроса уже можно использовать различные формулы, конструкции и выражения. Возникает закономерный вопрос, зачем же нужен дублирующий функционал?
Дело в том, что СКД – это нечто большее, нежели просто отображение результата выполнения запроса и это прекрасно видно из формы создания схемы (Рис.1).
Вычисляемые поля позволяют выполнять определенные действия со сформированным набором данных:
- Выводить в определенную ячейку массив данных, полученных запросом, соединив несколько строк в одну;
- Обращаться к экспортным функциям общего модуля;
- Выполнять различные выражения, доступные для языка компоновки и использование специальных функций ВычислитьВыражение.
Давайте по этому списку и пойдем.
Массив значений в одной ячейке
Смоделируем ситуацию, когда необходимо получить в отдельную ячейку все номера документов поступления по контрагенту:
- С помощью конструктора реализуем простейший запрос (Рис. 2)
Рис. 2
- На закладке «Вычисляемые поля» мы создадим новое поле и назовем его МассивИдентификаторов, подставив в колонку «Выражение» фразу Массив(Номер) (Рис. 3)
Рис. 3
таким образом, мы в нашей схеме создали дополнительное расчетное поле;
- Перейдем на закладку «Ресурсы» и установим выражение для расчета итога по контрагенту (Рис. 4), заменив выражение по умолчанию «Сумма» на «СоединитьСтроки»;
Рис. 4
- На закладке «Настройки» определим внешний вид нашего отчета, добавим новую группировку «Контрагент» и укажем её выбранные поля (Рис. 4);
Рис. 4
- Результат выполнения обработки можно увидеть на Рис. 5.
Рис.5
Как видно из приведенного примера, никаких сложностей в добавлении и обработке вычисляемых полей нет. Мы использовали две функции: Массив() и СоединитьСтроки().
Несколько слов о последней. Помимо первого параметра, указывающего на идентификатор массива, таблицы значений или значения, в ней могут быть установлены еще два:
- РазделительЭлементов – указывает, какой символ будет отделять один элемент массива или одну строку таблицы значений от другого (в нашем случае мы опустили этот параметр и по умолчанию был назначен перенос строки);
- РазделительКолонок – символ, используемый для разделения колонок таблицы значений (по умолчанию используется точка с запятой).
Обращение к экспортным функциям общего модуля
В качестве источника данных для заполнения вычисляемого поля могут выступать функции общего модуля.
Несколько важных моментов:
- Функция обязательно должна быть экспортной;
- Если функция расположена в общем модуле с установленным признаком «Глобальный», её вызов осуществляется непосредственно по имени, в противном случае вызов функции должен происходить по схеме «Имя общего модуля». «Имя вызываемой функции».
В качестве примера использования мы возьмем тот же самый запрос к документам поступления и выведем «Сумму документа» прописью в отдельную колонку. Сам запрос мы описывать не будем, перейдем непосредственно к вычисляемым полям:
- Создадим новое поле «СуммаПропись»;
- Определим его выражение, как на Рис.6;
Рис.6
- В общем модуле создадим экспортную функцию (Рис.7);
Рис.7
- Этап настройки отчета пропустим и сразу посмотрим на результат (Рис.8).
Рис. 8
Таким образом, мы видим, что практически любой обработчик данных может быть инициализирован из СКД, что значительно расширяет возможности использования схемы.
Выражения языка компоновки
Достаточно часто в работе разработчика возникает ситуация, когда в поле СКД необходимо вывести результат деления:
- Рассчитать среднюю стоимость номенклатуры;
- Всевозможные проценты;
- Расчеты среднего заработка и т.д.
Во избежание проблем, в этих случаях желательно в вычисляемое поле ввести проверку на деление на 0.
Сделать это можно с помощью конструкции «Выбор Когда ….Тогда… Иначе… Конец».
В конце несколько слов о достаточно новой функции ВычислитьВыражение(). С её помощью, в частности можно вычислять отклонения в стоимости между текущей и предыдущей строкой, накопительный остаток и т.д.
Допустим, получить СуммуДокумента из предыдущей строки нашего запроса можно указав в поле «Выражение» значение ВычислитьВыражение(«СуммаДокумента». «ПредыдущаяСумма»).