1с скд вычисляемые поля объединить два поля
Грамотное использование схемы компоновки данных (СКД) позволяет:
- значительно снизить время, необходимое на разработку отчета;
- избавиться от необходимости создания управляемой формы обработчика;
- получить на выходе красивый результат с возможностью дополнительной настройки пользователем.
Но далеко не все разработчики по максимуму используют возможности схемы, так как не все её настройки очевидны и интуитивно понятны. В частности многие знают, что в 1С в СКД есть вычисляемые поля, однако, не до конца представляют область их использования и методы работы с ними.
Что такое вычисляемое поле
В большинстве случаев в качестве источника данных в схеме компоновки выступает запрос. В принципе, внутри самого запроса уже можно использовать различные формулы, конструкции и выражения. Возникает закономерный вопрос, зачем же нужен дублирующий функционал?
Дело в том, что СКД – это нечто большее, нежели просто отображение результата выполнения запроса и это прекрасно видно из формы создания схемы (Рис.1).
Вычисляемые поля позволяют выполнять определенные действия со сформированным набором данных:
- Выводить в определенную ячейку массив данных, полученных запросом, соединив несколько строк в одну;
- Обращаться к экспортным функциям общего модуля;
- Выполнять различные выражения, доступные для языка компоновки и использование специальных функций ВычислитьВыражение.
Давайте по этому списку и пойдем.
Массив значений в одной ячейке
Смоделируем ситуацию, когда необходимо получить в отдельную ячейку все номера документов поступления по контрагенту:
- С помощью конструктора реализуем простейший запрос (Рис. 2) Рис. 2
- На закладке «Вычисляемые поля» мы создадим новое поле и назовем его МассивИдентификаторов, подставив в колонку «Выражение» фразу Массив(Номер) (Рис. 3) Рис. 3
таким образом, мы в нашей схеме создали дополнительное расчетное поле;
- Перейдем на закладку «Ресурсы» и установим выражение для расчета итога по контрагенту (Рис. 4), заменив выражение по умолчанию «Сумма» на «СоединитьСтроки»; Рис. 4
- На закладке «Настройки» определим внешний вид нашего отчета, добавим новую группировку «Контрагент» и укажем её выбранные поля (Рис. 4); Рис. 4
- Результат выполнения обработки можно увидеть на Рис. 5. Рис.5
Как видно из приведенного примера, никаких сложностей в добавлении и обработке вычисляемых полей нет. Мы использовали две функции: Массив() и СоединитьСтроки().
Несколько слов о последней. Помимо первого параметра, указывающего на идентификатор массива, таблицы значений или значения, в ней могут быть установлены еще два:
- РазделительЭлементов – указывает, какой символ будет отделять один элемент массива или одну строку таблицы значений от другого (в нашем случае мы опустили этот параметр и по умолчанию был назначен перенос строки);
- РазделительКолонок – символ, используемый для разделения колонок таблицы значений (по умолчанию используется точка с запятой).
Обращение к экспортным функциям общего модуля
В качестве источника данных для заполнения вычисляемого поля могут выступать функции общего модуля.
Несколько важных моментов:
- Функция обязательно должна быть экспортной;
- Если функция расположена в общем модуле с установленным признаком «Глобальный», её вызов осуществляется непосредственно по имени, в противном случае вызов функции должен происходить по схеме «Имя общего модуля». «Имя вызываемой функции».
В качестве примера использования мы возьмем тот же самый запрос к документам поступления и выведем «Сумму документа» прописью в отдельную колонку. Сам запрос мы описывать не будем, перейдем непосредственно к вычисляемым полям:
Таким образом, мы видим, что практически любой обработчик данных может быть инициализирован из СКД, что значительно расширяет возможности использования схемы.
Выражения языка компоновки
Достаточно часто в работе разработчика возникает ситуация, когда в поле СКД необходимо вывести результат деления:
- Рассчитать среднюю стоимость номенклатуры;
- Всевозможные проценты;
- Расчеты среднего заработка и т.д.
Во избежание проблем, в этих случаях желательно в вычисляемое поле ввести проверку на деление на 0.
Сделать это можно с помощью конструкции «Выбор Когда ….Тогда… Иначе… Конец».
В конце несколько слов о достаточно новой функции ВычислитьВыражение(). С её помощью, в частности можно вычислять отклонения в стоимости между текущей и предыдущей строкой, накопительный остаток и т.д.
Допустим, получить СуммуДокумента из предыдущей строки нашего запроса можно указав в поле «Выражение» значение ВычислитьВыражение(«СуммаДокумента». «ПредыдущаяСумма»).
Работа с вычисляемыми полями
В схеме компоновки данных есть возможность определения вычисляемого поля. Вычисляемые поля представляют собой дополнительные поля схемы, значения которых будут вычисляться по некоторой формуле. Вычисляемые поля можно создавать для того, чтобы использовать поля из различных наборов данных, выполнять операции над полями наборов данных - объект, и для других целей. В настройках компоновки данных вычисляемое поле будет фигурировать под именем, указанным в пути к данным этого поля. Пользователь сможет работать с вычисляемым полем точно так же, как и с полем набора данных.
Для того чтобы система смогла получить значение вычисляемого поля, необходимо указать выражение вычисляемого поля. Выражение вычисляемого поля описывается на языке выражений компоновки данных. В выражениях вычисляемого поля есть ограничение - в нем нельзя использовать вычисляемые поля. В остальном, ограничений нет - можно использовать все синтаксические конструкции языка выражений, можно использовать поля наборов данных, можно использовать функции общих модулей конфигурации.
Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление также как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс, для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог.
Пример
В схеме компоновки данных определим набор данных - запрос:
В приведенном запросе получаются данные из регистра продаж и регистра планов продаж. Результатом запроса будет таблица, где для каждого подразделения и каждой номенклатуры будет получено плановое и фактическое количество продаж.
Определим вычисляемое поле. Для этого перейдем в конструкторе схемы компоновки данных на вкладку Вычисляемые поля и добавим поле.
Назовем поле ПеревыполнениеПлана . В качестве выражения поля введем:
Таким образом, значением данного поля в случае, если значение поля СтоимостьПлан равно 0 , будет строка Не запланировано , и процент от перевыполнения плана в противном случае.
Для того чтобы в результат данное поле выводилось с точностью два знака, установим для поля в оформлении формат ЧДЦ=2 .
Определим настройки отчета, для этого добавим группировку - детальные записи (группировку без полей группировки) и в выбранные поля добавим поля Номенклатура , Подразделение , Стоимость план , Стоимость факт , Перевыполнение плана .
Результат отчета будет выглядеть так:
Т.е. для каждой строчки было рассчитано значение вычисляемого поля.
Для того чтобы по вычисляемому полю можно было рассчитывать итоги, добавим данное поле в список ресурсов. В конструкторе схемы компоновки это делается на вкладке Ресурсы . Выберем поле и добавим его в список ресурсов. Аналогичную операцию выполним и для полей СтоимостьПлан и СтоимостьФакт .
Теперь в итог отчета будет выводиться сумма по полям, в том числе и по полю ПеревыполнениеПлана :
Однако, простым суммированием, мы получили не вполне адекватный итог по перевыполнению плана. Мы получили сумму процентов по каждой комбинации Номенклатура / Подразделение .
Для того чтобы получить правильный итог по выполнению плана изменим формулу расчета итога по полю Выполнение плана :
В этой формуле уже получается не сумма отношений факта к плану, а отношения суммы факта к сумме плана. Кроме того, в итоге учитываются только те записи, для которых был установлен план.
Если у нас имеется доступ в Конфигуратор 1С, то мы можем создать отчет, в котором получим информацию из справочников и регистров, а так же результат расчетов в вычисляемых полях.
Оглавление
В данном примере рассмотрим такой отчет, в котором будем выводить данные из Регистра сведений, в котором содержатся данные из справочника Номенклатуры с реквизитами, а так же результат из документа-регистратора в котором было произведено одобрение серий для номенклатуры.
2. В новом окне задаем Имя для отчета, нажимаем "Открыть схему компоновки данных" (ОСКД):
Находясь на вкладке "Наборы данных" нажимаем кнопку:
3. Теперь в окне "Конструктор запроса" на вкладке "Таблицы и поля" нужно выбрать поля из таблицы (регистр), которые будем использовать в создаваемом отчете:
Из 1 колонки мне понадобился Регистр сведений "флСостоянияСертификацииСерий", который я нашел в дереве "РегистрыСведений", затем встал на него курсором и нажал на кнопку ">", после этого он отобразился во 2-ой колонке с данными, весь регистр я добавлять не стал, а раскрыл ветвь с "флСостоянияСертификацииСерий" и поочередно выделяя нужные регистры добавлял их через кнопку ">", после чего они отображались в 3-ей колонке: с этими данными мы уже будем работать в дальнейшей в нашем отчете.
После того как вывели нужные поля, нажимаем "ОК"
4. Переходим на вкладку "Настроки" ОСКД, указываем Имя в шапке отчета, Группировку, выбираем поля, которые будут выводиться в отчете:
Здесь же на вкладке "Отбор" можно настроить фильтр.
5. Теперь в отчете будут выводиться данные из выбранных регистров, но следующей задачей является вывести вычисляемые поля (колонки) с условием и представлением данных. В моем случае, серия одобрена "Да" / "Нет": подсчитать кол-во каждого критерия.
Переходим на вкладку "Вычисляемые поля", добавляем 2-а поля: колонка "Путь к данным": придумываем название поля, которое потом укажем на вкладке "Настройки" - "Выбранные поля", чтобы вывести вычисляемые поля в отчет (пункт №6). Колонка "Выражение" - это формула, в ней я указываю выборку, что если партия одобрена = Истина, если не одобрена, то = Ложь - в соответствии с условием, в колонке будет устанавливаться Булево "Да" или "Нет" (поле СерияНоменклатурыфлПартияОдобрена должно быть добавлено в Набор данных (пункт №3)):
Колонка "Заголовок" название заголовка в колонке отчета.
6. Чтобы подсчитать количество "Да" / "Нет" в группировке, нужно зайти на вкладку "Ресурсы" и указать поля, которые будем обрабатывать:
7. Теперь остается указать вычисляемые поля на вкладке "Настройки" - "Выбранные поля" чтобы вывести их в отчет:
8. Сохраняем отчет с расширением *.erf через "Файл" - "Сохранить". Теперь данный отчет можно открыть в 1С в пользовательском режиме "Предприятие", через "Файл" - "Открыть". Выше приведенные настройки сформировались в отчете в следующем виде:
Помимо выводимых данных из регистра сведений, в 2-ух последних колонках мы подсчитываем количество "Да" / "Нет"
Здравствуйте, уважаемый читатель! У нас очередной урок по основам системы компоновки. В третьей части вы познакомились с функциями языка выражений СКД, увидели особенности работы системы компоновки, а также разобрались с основными настройками полей компоновки. А сейчас мы рассмотрим новый материал. Поехали!
Дополнительные настройки полей СКД.
Колонка «Тип значения» позволяет указать тип данных для поля компоновки. Зачем указывать тип, например для поля «Номенклатура», если итак известно какого он типа? Это необходимо в случае, если поле компоновки составного типа. Можно выбрать определенный тип, тогда при отборе по этому полю будут выбираться значения данного типа.
Колонка «Доступные значения» позволяет указать доступные для выбора значения и ограничить выбор пользователя определёнными рамками.
Колонка «Оформление» позволяет задавать оформление полю компоновки, не используя макеты. Можно указать цвет шрифта, цвет рамки, ориентацию текста и т.д.
Колонка «Параметры редактирования» позволяет указать, как редактировать поле компоновки. Например, можно указать быстрый выбор элементов из списка в отборе. По умолчанию поле компоновки все параметры редактирования наследует от объекта метаданных.
Вычисляемые поля
На закладке «Вычисляемые поля» компоновки данных можно создавать свои вычисляемые поля.
Зачем нужны вычисляемые поля, если их можно создавать на уровне запроса? Не все поля можно описать с помощью запроса. Если нужно составить сложное поле из разных наборов данных, например типа запрос и объект, тогда без вычисляемых полей не обойтись. Добавить поле компоновки данных нельзя, если источником данных является запрос и стоит автозаполнение, а с помощью вычисляемых можно добавить сколько угодно полей.
В колонке вычисляемого поля «Выражение» нужно написать произвольное выражение, которое использует поля компоновки данных, обращаясь по их пути (колонка «Путь» на закладке «Наборы данных»). Либо можно использовать функции математического преобразования, либо обращаться к функциям общих модулей. Например, запишем в колонке «Путь к данным» название вычисляемого поля «Отклонение», а в поле «Выражение» следующее:
Посмотрите ещё один пример с применением функций СКД Массив и СоединитьСтроки, а ещё можно скачать отчёт по ГТД с использованием этих функций.
По сути, для вычисляемых полей задаются те же самые настройки, что и для полей компоновки. Здесь нет только колонки «Группа иерархии». При написании вычисляемых полей нельзя обращаться к другим вычисляемым полям.
Как передавать параметры и отборы в отчет, построенный на СКД без создания формы отчета?
Как выровнять заголовки столбцов по центру в отчете СКД?
Нужно задать два параметра в поле «Оформление» на закладке «Наборы данных»:
Также на закладке «Настройки» внизу вы найдете еще одну закладку: «Условное оформление». Там для каждой группировки, параметра и т.д. можно задать оформление, какое вы хотите.
Кажется, все рассказал! Как вы помните у вас есть возможность задавать вопросы, если возникли таковые. Постараюсь ответить. В будущем планирую написать еще статьи по этой теме, поэтому не забудьте подписаться на обновления нашего сайта, чтобы не пропустить! Также, обязательно составлю тест для закрепления материала из этого урока.
Как правило, в основе набора данных Схемы Компоновки Данных (СКД) лежит запрос. Запросы в программе 1С: Предприятие предоставляют программисту богатые возможности для получения данных. В связи с этим возникает вопрос, зачем нужны еще и вычисляемые поля?
Думаю, что никого не удивлю, если скажу, что не все поля можно выразить с помощью запроса.
Рассмотрим несколько примеров, как пользоваться вычисляемыми полями.
Создадим новый отчет и зайдем в Схему Компоновки Данных. Вычисляемые поля 1С СКД настраиваются на одноименной вкладке:
Колонка «Путь к данным» задает наименование поля. В колонке «Выражение» прописывается формула для вычисления поля. Можно использовать арифметические выражения, конструкцию «ВЫБОР КОГДА ТОГДА КОНЕЦ», и даже обращаться к экспортным функциям общих модулей системы.
Вот несколько примеров:
Разница значений:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Вывод текста по условию:
ВЫБОР КОГДА СуммаНачОстаток > 0 ТОГДА
«Имеется долг за организацией»
ИНАЧЕ «Долг отсутствует» КОНЕЦ
Форматирование:
«Месяц оплаты:» + Формат(ДатаОплаты, «ДФ = ‘MMMM'»)
Использование функции общего модуля:
УправлениеКонтактнойИнформациейЗарплатаКадры.ПолучитьКонтактнуюИнформацию (Док.Сотрудник, &ТелСотрудника)
Подробнее описание возможностей вычисляемых полей можно найти в синтаксис-помощнике: «Система компоновки данных — Язык выражений системы компоновки данных».
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Читайте также: