1с скд добавить поле программно
В этой статье мы рассмотрим пример программного создания схемы компоновки данных 1С (далее — СКД). Сложно придумать задачу, в которой полное программное создание СКД будет оправдано, но использованные приемы и методы помогут понять программную структуру СКД и дадут понимание каким образом программно модифицировать ранее созданные и сохраненные в базе 1С или внешнем отчете или даже типовые СКД, что дает очень широкий спектр применения.
Создание объекта СКД.
Создание Источника. Нужно создать обязательный локальный.
Создание набора данных запроса
Заполнение полей этого набора данных. По заполнению соответствует группе «Поля» набора данных в графическом интерфейсе СКД. Доступны такие же поля. Имена соответствующих полей в графическом и программном интерфейсе немного отличаются, но при вводе “ДобавленноеПоле.” подсказка покажет перечень доступных полей и в них можно узнать поля из графического интерфейса. Это относится ко всем переменным созданным через “.Добавить()”.
Создание набора данных объекта. Таблицы значений объектов должны быть переданы при инициализации ПроцессорКомпоновкиДанных во втором параметре структурой, где ключом будет ИмяОбъекта, а значением сама ТЗ.
Заполнение полей этого набора данных.
Создание набора данных объединения
так же как у других наборов заполняются “Поля”, а в реквизит “Элементы” добавляются подчиненные наборы данных.
Создание связи наборов данных. По заполнению соответствует вкладке «Связи наборов данных» СКД.
Добавление вычисляемого поля. По заполнению соответствует вкладке «Вычисляемые поля» СКД.
Добавление ресурса. По заполнению соответствует вкладке «Ресурсы» СКД.
Добавление параметра. По заполнению соответствует вкладке “Параметры” СКД.
Заполнение настроек. По заполнению соответствует вкладке “Настройки” СКД.
Сначала выбранное поле добавляется в Выбранные поля отчета.
Затем заполняется структура отчета. Для вывода полного плоского списка в отчет добавляем одну структуру Группировка компоновки данных.
Если нужна таблица то она создается следующим образом:
Если нужна группировка ресурсов по колонкам — код аналогичный, только заполняем
Дополнительно хочу пояснить: если нам нужно добавить конкретное поле в выбор — то используем тип “ВыбранноеПолеКомпоновкиДанных” и заполняем данные по нему, чтобы добавить все поля “АвтоВыбранноеПолеКомпоновкиДанных”.
На этом программное создание схемы компоновки данных завершено. Теперь мы можем проводить с ней дальнейшие манипуляции или, к примеру, вывести ее в табличный документ следующим кодом:
Работа с вычисляемыми полями
В схеме компоновки данных есть возможность определения вычисляемого поля. Вычисляемые поля представляют собой дополнительные поля схемы, значения которых будут вычисляться по некоторой формуле. Вычисляемые поля можно создавать для того, чтобы использовать поля из различных наборов данных, выполнять операции над полями наборов данных - объект, и для других целей. В настройках компоновки данных вычисляемое поле будет фигурировать под именем, указанным в пути к данным этого поля. Пользователь сможет работать с вычисляемым полем точно так же, как и с полем набора данных.
Для того чтобы система смогла получить значение вычисляемого поля, необходимо указать выражение вычисляемого поля. Выражение вычисляемого поля описывается на языке выражений компоновки данных. В выражениях вычисляемого поля есть ограничение - в нем нельзя использовать вычисляемые поля. В остальном, ограничений нет - можно использовать все синтаксические конструкции языка выражений, можно использовать поля наборов данных, можно использовать функции общих модулей конфигурации.
Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление также как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс, для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог.
Пример
В схеме компоновки данных определим набор данных - запрос:
В приведенном запросе получаются данные из регистра продаж и регистра планов продаж. Результатом запроса будет таблица, где для каждого подразделения и каждой номенклатуры будет получено плановое и фактическое количество продаж.
Определим вычисляемое поле. Для этого перейдем в конструкторе схемы компоновки данных на вкладку Вычисляемые поля и добавим поле.
Назовем поле ПеревыполнениеПлана . В качестве выражения поля введем:
Таким образом, значением данного поля в случае, если значение поля СтоимостьПлан равно 0 , будет строка Не запланировано , и процент от перевыполнения плана в противном случае.
Для того чтобы в результат данное поле выводилось с точностью два знака, установим для поля в оформлении формат ЧДЦ=2 .
Определим настройки отчета, для этого добавим группировку - детальные записи (группировку без полей группировки) и в выбранные поля добавим поля Номенклатура , Подразделение , Стоимость план , Стоимость факт , Перевыполнение плана .
Результат отчета будет выглядеть так:
Т.е. для каждой строчки было рассчитано значение вычисляемого поля.
Для того чтобы по вычисляемому полю можно было рассчитывать итоги, добавим данное поле в список ресурсов. В конструкторе схемы компоновки это делается на вкладке Ресурсы . Выберем поле и добавим его в список ресурсов. Аналогичную операцию выполним и для полей СтоимостьПлан и СтоимостьФакт .
Теперь в итог отчета будет выводиться сумма по полям, в том числе и по полю ПеревыполнениеПлана :
Однако, простым суммированием, мы получили не вполне адекватный итог по перевыполнению плана. Мы получили сумму процентов по каждой комбинации Номенклатура / Подразделение .
Для того чтобы получить правильный итог по выполнению плана изменим формулу расчета итога по полю Выполнение плана :
В этой формуле уже получается не сумма отношений факта к плану, а отношения суммы факта к сумме плана. Кроме того, в итоге учитываются только те записи, для которых был установлен план.
Создаем отчет и без создания макета ОсновнаяСхемаКомпоновкиДанных. Переходим в модуль отчета и создаем Процедуру ПриКомпоновкеРезультата, СтандартнаяОбработка = Ложь.
1. Добавляем Источник данных.
2. Добавляем поля набора данных
3. Добавляем группировки данных
4. Добавляем авто поля в группировки.
5. Добавляем выбранные поля
6. Добавляем отбор (ВНаличииОстаток > 500)
7. Добавляем Сортировку
8. Добавляем оформление (Выделять желтым поля ВНаличииОстаток и Номенклатура, если ВНаличииОстаток > 1000).
В результате получаем отчет.
Полный текст процедуры.
Тестировал на платформе 1С:Предприятие 8.3 (8.3.15.1747).
Специальные предложения
Mi4man; zif74; Михаська; Drivingblind; user712426; lic_avenger; user1537184; jONES1979; Yan_Malyakov; aleks.public; ritd; rainspb; user1012671; alanto23; A_Max; sergey512; + 16 – Ответить
Молодец, хорошо разобрался в этой теме :-) Хардкорно использую СКД — с несколькими источниками данных, внешними наборами, переносом настроек, скд в скд и так далее, поэтому такие статьи однозначно должны быть в шпаргалках :-)
Очень хорошая статья. Ещё-бы такую-же но с использованием БСП. Евгений, огромное спасибо за полезную статью, беру себе в базу знаний.
Основы прописаны, но зачем делать объект вместо запроса ? А потом все таки делать запрос, но без отборов.
Вызов после выполнения компоновщика макета и до инициализации процессора.
Пытался освоить коллекцию элементов параметров скд, пока не получается
(17) Допустим, вы про заголовок, тогда под заголовком я имею в виду шапку отчета с именами полей, возможно мы по-разному поняли.
Если про параметры, то с НайтиЗначениеПараметра() и УстановитьЗначениеПараметра() нет проблем,а вот с добавлением новых…
А это код построения макета из произвольного запроса.
Михаська; СаморезикРу; Yan_Malyakov; atl1884; Silver0030; Cyberhawk; Kuzmin_A; John_d; + 8 – Ответить
"лучшая статья". "уважуха". "круто".
я чего-то не понимаю.
Во-первых, таких статей килотонны, во-вторых, программная работа с СКД разжёвана в десятках примеров, и это далеко не лучший, в третьих, есть книги Хрусталёвой. Тем не менее восторги и плюсики прям кучно. И пример-то тут весьма кастомизированный, и даже самое основное не полно объяснено.
Я ещё могу понять, когда статьи Пермитина плюсят, там действительно грамотное изложение. Но этот набор кода.
Нет, я действительно не понимаю.
Просмотры 49694
Загрузки 0
Рейтинг 562
Создание 15.01.20 10:01
Обновление 15.01.20 10:01
№ Публикации 1179039
Рубрики СКД
Тип файла Нет файла
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Да
См. также
Как просто запомнить алгоритм программного вывода в СКД Промо
Порой нужно быстро вывести на экран таблицу значений, используя СКД \ получить данные отчета в таблицу значений.. Несмотря на очевидность алгоритма - раньше мне проще было загуглить программный вывод, благо эта инфа есть везде. Но постепенно понял как его можно быстро вспомнить, и лишний раз ничего не искать. Конечно эта статья не для Гуру :) Но я думаю - что любой неопытный в СКД программист сделает для себя небольшое открытие.
01.09.2017 55141 unichkin 19
КУ! или Нарезка графика продолжается
23.04.2022 397 AnatolPopov 0
Нарезка графика ломтями
Как в СКД простыми средствами улучшить отображение графика, которому слишком тесно на шкале. Проверено в версии 8.3.13.1644.
09.04.2022 581 AnatolPopov 0
Убираем параметры из отбора СКД
Заметка о некоторых технических нюансах параметров данных и отборов СКД.
17.02.2022 2679 Yashazz 28
Полезности применения СКД Промо
Нюансы при работе из СКД на программном уровне.
11.04.2012 53124 logarifm 42
Отладка СКД
На митапе «Практика применения СКД» выступил ведущий разработчик 1С аутсорсинговой компании Programming Store Павел Шемякин. Павел рассказал, как бороться с нежелательной «оптимизацией» запроса СКД, какие инструменты для отладки СКД можно использовать – в чем их отличия и преимущества, и показал, как работать с консолью компоновки данных – на какие элементы структуры XML-файла макета СКД обращать внимание при поиске причин неправильной работы отчета.
08.02.2022 4586 ProfessionStore 2
Программная работа и компоненты СКД
На митапе «Практика применения СКД» выступил архитектор Digital Business Петр Базелюк. Он рассказал о том, как работать с СКД программно, и как, используя общедоступную библиотеку FoxyLink, создать свой процессор вывода результата СКД напрямую в формат JSON или в CSV.
Дополнение готовых отчетов своими колонками.
В отчета сделанных с помощью "Схемы компоновки данных" из пользовательского режима можно добавлять свои Поля, которые будет выводиться при формировании.
В данных полях позволительно применять арифметические действа.
Открываем "Настройки. " и переходим на закладку "Пользовательские настройки".
2. Добавляем "Новое поле Выражение"
Как будет отображаться при формировании
Выражение детальных записей:
[Сумма продажи] / Количество
Собственно из чего получились данные
Выражение итоговых записей:
[Сумма продажи] / Количество
Выражение для получения итогов по группировкам
Добавление полей проставляет собой прописывание арифметических действий между Доступными полями, (это позволительно отмеченных зеленым квадратиком) . Также особенность, если название такого поля состоит из двух или более слов, его необходимо заключить в квадратные скобки [ ]. Получиться вот так - [Сумма продажи].
После сохранения, это поле станет доступно для выбора:
Вот с помощью несложных манипуляций получаете нужное для себя значение. Данная возможность позволить добавлять нужные поля. В таких вариантах расчета как вам необходимо. Рентабельность, Эффективность и прочее значения будут считаться в вашей логики арифметических расчетов.
Итого, необходимо сохранить что вы сделали:
В этом случае ваша работа не будет потеряна и при следующем открытии отчета можно будет воспользоваться.
Функций, используемые при написании полей.
1. Арифметические « + , - , * , / » с этим понятно, думаю объяснить принцип их действия не надо.
2. Логические выражения в используются для определения отборов. « > , < , = , >= , , И , ИЛИ , НЕ » . Данные выражения используется с операцией выбора.
3. Операции выбора. Применяться для получения одного из возможных значений в соответствии с указанными условиями
ВЫБОР
КОГДА < Операция выбора >ТОГДА < Выражение >
ИНАЧЕ < Выражение >
КОНЕЦ
Пример :
ВЫБОР
КОГДА Количество > 0 и Сумма > 0 ТОГДА «Правильно»
ИНАЧЕ «Ошибка»
КОНЕЦ
Это расшифровывается так: при условии когда количество больше нуля и сумм больше нуля, будет выводиться текст «Правильно», а если хоть одно из условий не соблюдено выводиться «Ошибка».
4. Встроенная функция, позволяет произвести определенные преобразования с полями.
ПОДСТРОКА ( «Выражение» , «Начальная позиция» , «Конечная Позиция» ) – выбирается часть «Выражения» , ограниченного рамками «Начальной…» и «Конечной…» .
Как это поисходит при значении Номенклатура - «Паста шоколадная» формула Подстрока(Номенклатура, 1, 5) выведет значение «Паста»
Для работы с датой используются функции
Будет выводится соответствующий названию функции значение.
НАЧАЛОПЕРИОДА ( «Дата» , «Период сдвига» ), КОНЕЦПЕРИОДА ( «Дата» , «Период сдвига» ). Для данных функции, значение Выражения даты на начало или конец заданной даты.
ДОБАВИТЬКДАТЕ ( «Дата» , «Период сдвига» , «Величина , на которую требуется увеличить дату» ) - функция позволяет увеличить или уменьшить дату на определенное значение .
РАЗНОСТЬДАТ ( «Дата1» , «Дата2» , «Период сдвига» ) - Функция предназначена для получения разницы между двумя датами .
«Период сдвига» одно из «Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие».
5. Агрегатные функции языка запросов используются при группировке результатов подсчете итогов
СУММА ( <> ) арифметическую сумму всех попавших в выборку значений.
СРЕДНЕЕ ( <> ) вычисляет среднее значение всех попавших в выборку
МИНИМУМ ( <> ) вычисляет минимальное значение из всех попавших в выборку значений
МАКСИМУМ ( <> ) вычисляет максимальное значение из всех попавших в выборку значений
КОЛИЧЕСТВО ( <> ) подсчитывает количество значений параметра, попавших в выборку. Данная функция позволяет имеет варианты использования. КОЛИЧЕСТВО(*) - позволяет подсчитать количество строк в результате. КОЛИЧЕСТВО(РАЗЛИЧНЫЕ «Выражение») - позволяет подсчитать количество различных значений указанного поля.
Сумма(Выбор
Когда Подстрока ( Номенклатура , 1 , 5 ) = "Паста"
Тогда Количество * 0.2
Иначе Количество * 0.35
Конец)
Получится сумма значений при этом когда в начале наименования номенклатуры присутствует «Паста» в этом случает количество увеличивается на 0.2 если не присутствует увеличивается на 0.35.
Год ([ Документ . Дата ])
Выведется Год когда документ записан/проведен.
Более сложный пример, без расшифровки.
Выбор
Когда Квартал ([ Документ . Дата ]) = 1 И Подстрока ( Номенклатура , 1 , 5 ) = "Паста"
Тогда Количество * 0.2
Иначе Выбор
Когда Квартал ([ Документ . Дата ]) = 2
Тогда Количество * 0.3
Иначе Выбор
Когда Квартал ([ Документ . Дата ]) = 3
Тогда Количество * 0.4
Иначе Выбор
Когда Квартал ([ Документ . Дата ]) = 4
Тогда Количество * 0.5
Конец
Конец
Конец
Конец
Схема компоновки данных представляет собой большой конструктор, состоящий из наборов данных, вычисляемых полей, описания итоговых полей (ресурсов), макетов, вариантов настроек и т.д. Схему компоновки достаточно удобно создавать в конфигураторе при помощи конструктора схемы компоновки.
Но на практике часто встречаются задачи, когда схему компоновки нужно программно создать с нуля или доработать существующую схему при помощи кода на встроенном языке, настроить вариант отчета – добавить отбор, установить условное оформление, добавить группировку и т.д. Такие задачи решаются на внедрениях при адаптации типовых конфигураций фирмы “1С” под требования конкретного заказчика.
Задача действительно очень актуальная, участники Мастер-группы по СКД задают много вопросов на эту тему :)
Также традиционно много вопросов возникает при программной работе с пользовательскими настройками отчетов:
- Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках? Которое из этих значений используется для формирования отчета?
- Как связываются между собой настройки компоновщика и пользовательские настройки?
- Как установить значение отбора или параметра, если они вынесены в пользовательские настройки?
- И многие другие…
Поэтому мы опубликовали серию видеоуроков, в которых рассказывается, как работать со схемой компоновки программно.
Общая длительность всех видеоуроков – 1 час 5 минут.
Для того, чтобы Вам было проще ориентироваться в материале, мы указали тайминг наиболее важных моментов в видео.
Видео 1 – Программное создание варианта отчета
00:37 – В каком обработчике можно расположить код для создания настроек компоновки
01:00 – Где в Синтакс-помощнике можно “подсмотреть” свойства, которые потребуются при написании кода
01:58 – Как настроить группировки отчета
02:28 – Какое свойство позволяет создавать вложенные группировки
03:11 – Как включить/выключить отдельные элементы настроек.
Видео 2 – Программное создание группировки
00:22 – Как создать структуру отчета
02:00 – Как указать поля, по которым выполняется группировка
04:10 – Как настроить выбранные поля
06:30 – Как создать автополе.
Видео 3 – Программное создание вложенной группировки
00:22 – Как создать подчиненную группировку
02:05 – Почему в отчете группировки могут выводиться несколько раз
02:40 – Как проверить наличие группировок в структуре отчета.
Видео 4 – Программное добавление отбора
00:18 – Где в Синтакс-помощнике найти типы данных, необходимые для создания отборов
00:55 – Какие свойства объекта типа ЭлементОтбораКомпоновкиДанных нужно использовать для создания отбора
01:20 – Как создать отбор при помощи программного кода.
Видео 5 – Программная установка сортировки
00:25– Где в Синтакс-помощнике найти типы данных, необходимые для включения сортировки
00:50 – Какие свойства объекта типа ЭлементПорядкаКомпоновкиДанных нужно использовать для включения сортировки
01:00 – Как установить сортировку при помощи программного кода.
Видео 6 – Программное добавление условного оформления
00:25 – Где в Синтакс-помощнике найти типы данных, необходимые для работы с условным оформлением
00:33 – Какие свойства объекта типа ЭлементУсловногоОформленияКомпоновкиДанных нужно использовать
02:08 – Как добавить условное оформление при помощи программного кода
02:31 – Как задать перечень полей, к которым будет применяться условное оформление
03:34 – Как отобрать оформляемые данные
04:15 – Как при помощи программного кода описать применяемое оформление.
Видео 7 – Программная работа с пользовательскими настройками
01:01 – Как программно установить значение параметра
02:00 – Почему значения параметров, выводимые на форму отчета, не совпадают со значениями в самом отчете
04:25 – Что делает метод ПолучитьНастройки
05:10 – Как нужно работать с пользовательскими настройками
06:17 – Для чего нужно свойство ИдентификаторПользовательскойНастройки
07:10 – Где в типовой конфигурации УТ 11 можно найти пример работы с пользовательскими настройками.
Видео 8 – Особенности использования метода ПолучитьНастройки
00:58 – Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках
01:23 – Как связываются между собой настройки компоновщика и пользовательские настройки
03:06 – Как работает метод ПолучитьНастройки и значение какого типа он возвращает
Видео 9 – Программное создание отборов в пользовательских настройках
00:34 – Чем отличается отбор в настройках компоновщика и отбор в пользовательских настройках
02:34 – Как используется свойство ИдентификаторПользовательскойНастройки
03:08 – Какой алгоритм должен использоваться для установки значения отбора в пользовательских настройках
03:42 – Как реализовать процедуру для установки значения отбора в пользовательских настройках.
Видео 10 – Программное создание схемы компоновки
00:40 – Как при компоновке отчета программно создать схему, по которой будет формироваться отчет
02:15 – Какой алгоритм должен использоваться для программного создания с нуля схемы компоновки
02:50 – Как программно создать источник данных схемы компоновки
04:00 – Как программно добавить в схему набор данных – объект
06:25 – Как программно добавить поля набора данных.
Хотите научиться грамотно создавать отчеты на СКД и дорабатывать отчеты в типовых конфигурациях?
Чтобы подробнее изучить возможности системы компоновки данных и уверенно применять механизм на практике, рекомендуем пройти курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)
Читайте также: