Немного про СКД. Характеристики и проверка пустого отчета

10.10.19

Разработка - СКД

Пример использования характеристик в СКД и программная работа с ними. А также описание проверки результата отчета на заполненность.

Совместим несовместимое

Сегодня мы рассмотрим две простые темы из мира разработки отчетов на СКД. Статья больше ориентирована на новичков, а также тех, для кого СКД все еще черный ящик (если такие еще остались). Для опытных гуру СКД здесь вряд ли можно будет найти что-то новое.

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

Все не просто, а очень просто! Поехали!

Отчет пустой?

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

Результат проверки отчета на заполненнось

Отчет формирует все возможные комбинации 6 цифр, диапазон, который указывается в шапке. При оказании диапазона от 1 до 3 отчет показывает сформированные комбинации, если же указать диапазон от 1 до 0, то отчет будет пустым, т.к. такой диапазон ошибочный.

 
 Что там за запрос в отчете

При этом в шапке отчета изменяется значение поля "Отчет пустой".

Реализация проверки

Как уже говорилось выше, отчет построен на базе СКД. В модуле объекта отчета используется событие "ПриКомпоновкеРезультата", в котором программно формируется результат отчета. Листинг события приведен ниже:

 
 Алгоритм проверки

На листинге даны комментарии практически к каждому шагу программного формирования отчета. Нас больше всего интересует часть кода в конце процедуры, где проверяется заполненность отчета. Здесь, при поэлементном выводе отчета, проверяется заполненность значений параметров элемента компоновки. Если хотя бы 1 элемент заполнен, то отчет не считается пустым. Значения компоновки - это те значения, которые будут выведены в табличный документ для текущего элемента компоновки (строка таблицы отчета, группировка и др.).

Добавлять в отчет реквизит "ОтчетПустой" не обязательно. Здесь это сделано лишь для примера. Использовать этот подход можно практически для любого отчета на СКД.

Пример использования

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

Процедура РассылкаОтчета()
	
	ТабДок = Новый ТабличныйДокумент;
	ОтчетДляРассылки = Отчеты.ПроверкаОтчетаНаЗаполненность.Создать();
	ОтчетДляРассылки.СкомпоноватьРезультат(ТабДок);
	
	ОтчетПустой = Истина;
	Если ОтчетДляРассылки.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ОтчетПустой", ОтчетПустой)
		И ОтчетПустой = Ложь Тогда
		ОтвправитьТабличныйДокументПоПочте(ТабДок);	
	КонецЕсли;	
	
КонецПроцедуры

Здесь мы сначала компонуем результат, а после проверяем параметр "ОтчетПустой" в настройках компоновщика. Если отчет не пустой, то отправляем сформированный табличный документ на электронную почту.

Листинг процедуры отправки на электронную почту выкладывать не вижу смысла. Проблем с отправкой быть не должно, ведь все уже есть в БСП (или на крайний случай в синтаксис-помощнике).

Все очень просто

Должен признаться, что подобный метод проверки отчетов на заполненность в свое время подглядел в конфигурации 1С:Документооборот, поэтому некоторый плагиат в статье конечно есть =) Но я думаю, что разработчики из фирмы "1С" не обидятся, а кто-нибудь из читателей узнает для себя что-нибудь новое. В БСП есть отдельные функции общих модулей, которые таким же способом позволяют проверить заполненность результата отчета.

// Проверьте, есть ли такая функция в Вашей конфигурации.
Пустой = ОтчетыСервер.ОтчетПустой(ОтчетОбъект);

Используйте БСП, живите правильно! :)

Особенность использования механизма характеристик

Механизм характеристик СКД был отлично описан Дмитрием Ивановым в статье "СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ", поэтому для полноты информации рекомендую сходить по этой ссылке. Сегодня же мы рассмотрим простейший пример работы с ними, а также некоторые особенности программной работы.

Что у нас есть?

Пример будем приводить на конфигурации "Управление производственным предприятием" версии 1.3. Хоть она и не самая свежая, но для примера это не имеет никакого значения. Все информация может быть использована и в современных решениях на базе платформы 1С.

В информационной базе для всех элементов справочника "Организации" добавлены свойства "Основной склад", "Связанный контрагент" и "Страна размещения". Нам нужно создать отчет в системе компоновки данных (СКД), в котором мы сможем накладывать отбор по дополнительным характеристиками организаций.

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

Создаем отчет и настраиваем характеристики

Создадим простой отчет. В нем будет один набор данных со следующим запросом:

ТекстЗапроса = 
"ВЫБРАТЬ
|	Организации.Ссылка КАК Организация,
|	Организации.ИНН,
|	Организации.КПП
|ИЗ	Справочник.Организации КАК Организации";

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

На скриншоте ниже представлен вывод отчета с текущими настройками.

Отлично. Теперь перейдем к настройке характеристик, но перед этим напомню в общих чертах работу механизма характеристик в большинстве типовых конфигураций, в том числе и УПП. Для этого используются несколько объектов конфигурации.

  1. План видов характеристик "СвойстваОбъектов".
  2. Регистр сведений "ЗначенияСвойствОбъектов".

Графически связь между объектом информационной базы и его характеристиками можно изобразить по такой схеме:

Опишем схему подробнее. В регистре сведений "ЗначенияСвойствОбъектов" в измерении "Объект" содержится ссылка на элемент информационной базы, для которого сохраняется свойство. В нашем примере это ссылка на элемент справочника "Организации". Все возможные свойства объекта определяются в плане видов характеристик (ПВХ) "СвойстваОбъектов". Значение характеристики, сохраняемое в регистре сведений, зависит от доступных типов данных для элемента плана видов характеристик, записанного в измерение "Свойство". Это описание должно дать лишь общее представление о механизме доп. свойств. На практике он сложнее, но при при необходимости разобраться будет не сложно.

Теперь перейдем к настройке характеристик в схеме компоновки данных. Для этого запустим конструктор запроса и перейдем на вкладку "Характеристики". Здесь нужно добавить поле связи объекта информационной базы с таблицами свойств и значений свойств. Ранее мы рассматривали схему связи между объектами конфигурации для хранения доп. свойств/характеристик. В соответствии с этой информацией настройка будет следующей:

После этого запрос набора данных дополнится инструкциями получения характеристик объектов. 

"ВЫБРАТЬ
|	Организации.Ссылка КАК Организация,
|	Организации.ИНН,
|	Организации.КПП
|ИЗ
|	Справочник.Организации КАК Организации
| // Доп. инструкции для получения характеристик
|{ХАРАКТЕРИСТИКИ
|	ТИП(Справочник.Организации)
|	ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов
|	ПОЛЕКЛЮЧА Ссылка
|	ПОЛЕИМЕНИ Наименование
|	ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
|	ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
|	ПОЛЕОБЪЕКТА Объект
|	ПОЛЕВИДА Свойство
|	ПОЛЕЗНАЧЕНИЯ Значение }"

На этом все. Функционал отчета теперь позволяет выбрать поля дополнительных характеристик в отчете (поля вывода, отборы и т.д.). Но есть одно НО. Использовать эти поля в настройках отчета мы можем только в режиме 1С:Предприятия. В конфигураторе мы не можем увидеть поля характеристик, что логично, ведь характеристики вводятся пользователем и хранятся в информационной базе. 

Но если есть необходимость, мы можем добавить поля характеристик, например, в отбор перед его открытием или сделать настройку отчета в режиме 1С:Предприятие, а настройки перенести в конфигуратор через XML-файл (выгружается стандартными средствами СКД). Рассмотрим небольшой пример.

Программная работа с характеристиками

При открытии формы отчета выполним следующим программный код:

	ТекущиеНастройки = КомпоновщикНастроек.Настройки;
	КоллекцияОтборов = ТекущиеНастройки.Отбор.Элементы;

	// Добавляем отбор по доп. реквизиту номенклатуры "Основной склад" 
	НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Основной склад]");
	НовЭл.Использование = Ложь;
	
	// Добавляем отбор по доп. реквизиту номенклатуры "Страна размещения"
	НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Страна размещения]");
	НовЭл.Использование = Ложь;
	
	// Добавляем отбор по доп. реквизиту номенклатуры "Связанный контрагент"
	НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]");
	НовЭл.Использование = Ложь;

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

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

Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]"),

а именно на текст "[Связанный контрагент]". Если мы напишем вот так:

Новый ПолеКомпоновкиДанных("Организация.СвязанныйКонтрагент"),

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

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

Новый ПолеКомпоновкиДанных(".[]")

Теперь мы можем устанавливать настройки отчета, даже если поля недоступны в конструкторе СКД.

А Вы используете характеристики?

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

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

Продолжим позже

На этом все, спасибо что дочитали до конца! СКД наше все!

Другие ссылки

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159433    872    399    

861

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8684    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

3 стартмани

05.02.2024    6996    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3148    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10804    23    John_d    25    

124

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    8017    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. acanta 10.10.19 23:13 Сейчас в теме
Спасибо.
Имхо, 1с могли бы придумать более интересное применение для комбинаторики.
Например, размеры одежды-обуви по брендам.
Генерируем числа от 34 до 45 с интервалом в 0.5 и извлекаем из базы данных ОФД подстроки...
YPermitin; +1 Ответить
2. ixijixi 1913 11.10.19 06:28 Сейчас в теме
Тема конструктора характеристик совершенно не раскрыта, а ведь там всё очень не просто
YPermitin; +1 Ответить
3. пользователь 11.10.19 06:59
(2) задачи такой не стояло. Пожтому я добавил ссылку на соседнюю статью про характеристики, там подробнее.
4. zqzq 25 11.10.19 08:38 Сейчас в теме
Программная работа с характеристиками: обычно в предприятии в конструкторе СКД (ИР) нужные характеристики "вытягиваю" (в отборы и т. д.), а потом через экспорт схемы в файл выгружаю в конфигуратор.
upd: заметил, что автор как раз об этом писал в середине статьи, ОК.
YPermitin; +1 Ответить
5. пользователь 11.10.19 08:39
6. bulpi 217 11.10.19 14:15 Сейчас в теме
Не проще ли для оценки , пустой отчет или нет, выгружать результат компоновщиком в таблицу значений, и потом проверить Количество()>0
7. пользователь 11.10.19 14:27
(6) если нужно отчет в табличный документ сформировать, то сначала придется в таблицу значений выгружать, а потом в таб. док. Ну то есть два раза отчет формировать.

Ну и выгружать в ТЖ тоже не хорошо. Если отчет 100 тыс. записей содержит, то память на сервере ради этого тратить не очень хорошо.
8. murat_ 34 26.09.21 17:12 Сейчас в теме
Я в СКД для полей характеристик, используемых в вариантах отчета, создаю отдельные вычисляемые поля.
Раньше вычисляемые поля просто создавал в виде шаблонов с пустыми выражениями, а инициализировал потом их программно.
Потом попробовал сразу в выражения вычисляемых полей вписать в виде Организация.[Связанный контрагент].
Программное заполнение больше не понадобилось.
Да, при этом конструктор СКД ругается с ошибкой, что таких полей не существует, но дает сохранить.
Но, зато в конфигураторе уже можно полноценно настроить нужных вариант СКД с использованием характеристиками.
AlisultanovZakir; +1 Ответить
Оставьте свое сообщение