Совместим несовместимое
Сегодня мы рассмотрим две простые темы из мира разработки отчетов на СКД. Статья больше ориентирована на новичков, а также тех, для кого СКД все еще черный ящик (если такие еще остались). Для опытных гуру СКД здесь вряд ли можно будет найти что-то новое.
Сначала мы рассмотрим простой способ проверки наличия данных в результате сформированного отчета, а после обратимся к примеру работы с характеристиками в СКД, а также программной работе с ними.
Все не просто, а очень просто! Поехали!
Отчет пустой?
Решая задачи, в которых нужно выполнять формирование отчета программно, бывает необходимым проверить наличие результата в отчете. То есть, узнать пустой он или нет. Сегодня мы рассмотрим небольшой пример реализации такой проверки при программном формировании отчета на системе компоновки данных (СКД). Далее Вы можете видеть результат.
Отчет формирует все возможные комбинации 6 цифр, диапазон, который указывается в шапке. При оказании диапазона от 1 до 3 отчет показывает сформированные комбинации, если же указать диапазон от 1 до 0, то отчет будет пустым, т.к. такой диапазон ошибочный.
При этом в шапке отчета изменяется значение поля "Отчет пустой".
Реализация проверки
Как уже говорилось выше, отчет построен на базе СКД. В модуле объекта отчета используется событие "ПриКомпоновкеРезультата", в котором программно формируется результат отчета. Листинг события приведен ниже:
На листинге даны комментарии практически к каждому шагу программного формирования отчета. Нас больше всего интересует часть кода в конце процедуры, где проверяется заполненность отчета. Здесь, при поэлементном выводе отчета, проверяется заполненность значений параметров элемента компоновки. Если хотя бы 1 элемент заполнен, то отчет не считается пустым. Значения компоновки - это те значения, которые будут выведены в табличный документ для текущего элемента компоновки (строка таблицы отчета, группировка и др.).
Добавлять в отчет реквизит "ОтчетПустой" не обязательно. Здесь это сделано лишь для примера. Использовать этот подход можно практически для любого отчета на СКД.
Пример использования
Сделаем регламентное задание, которое будет запускать формирование отчета, и, если он не пустой, отправлять результат по почте. Обработчик регламентного задания будет выглядеть примерно так:
Процедура РассылкаОтчета()
ТабДок = Новый ТабличныйДокумент;
ОтчетДляРассылки = Отчеты.ПроверкаОтчетаНаЗаполненность.Создать();
ОтчетДляРассылки.СкомпоноватьРезультат(ТабДок);
ОтчетПустой = Истина;
Если ОтчетДляРассылки.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ОтчетПустой", ОтчетПустой)
И ОтчетПустой = Ложь Тогда
ОтвправитьТабличныйДокументПоПочте(ТабДок);
КонецЕсли;
КонецПроцедуры
Здесь мы сначала компонуем результат, а после проверяем параметр "ОтчетПустой" в настройках компоновщика. Если отчет не пустой, то отправляем сформированный табличный документ на электронную почту.
Листинг процедуры отправки на электронную почту выкладывать не вижу смысла. Проблем с отправкой быть не должно, ведь все уже есть в БСП (или на крайний случай в синтаксис-помощнике).
Все очень просто
Должен признаться, что подобный метод проверки отчетов на заполненность в свое время подглядел в конфигурации 1С:Документооборот, поэтому некоторый плагиат в статье конечно есть =) Но я думаю, что разработчики из фирмы "1С" не обидятся, а кто-нибудь из читателей узнает для себя что-нибудь новое. В БСП есть отдельные функции общих модулей, которые таким же способом позволяют проверить заполненность результата отчета.
// Проверьте, есть ли такая функция в Вашей конфигурации.
Пустой = ОтчетыСервер.ОтчетПустой(ОтчетОбъект);
Используйте БСП, живите правильно! :)
Особенность использования механизма характеристик
Механизм характеристик СКД был отлично описан Дмитрием Ивановым в статье "СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ", поэтому для полноты информации рекомендую сходить по этой ссылке. Сегодня же мы рассмотрим простейший пример работы с ними, а также некоторые особенности программной работы.
Что у нас есть?
Пример будем приводить на конфигурации "Управление производственным предприятием" версии 1.3. Хоть она и не самая свежая, но для примера это не имеет никакого значения. Все информация может быть использована и в современных решениях на базе платформы 1С.
В информационной базе для всех элементов справочника "Организации" добавлены свойства "Основной склад", "Связанный контрагент" и "Страна размещения". Нам нужно создать отчет в системе компоновки данных (СКД), в котором мы сможем накладывать отбор по дополнительным характеристиками организаций.
При этом мы будем использовать стандартный функционал СКД для работы с характеристиками объектов. Также рассмотрим особенность разработки подобных отчетов, а именно - отсутствие возможности использовать дополнительные характеристики в конструкторе схемы компоновки данных в режиме "Конфигуратор". Последнее не позволяет использовать поля характеристик в настройке выводимых полей в отчете, отборах, группировка в структуре отчета и так далее.
Создаем отчет и настраиваем характеристики
Создадим простой отчет. В нем будет один набор данных со следующим запросом:
ТекстЗапроса =
"ВЫБРАТЬ
| Организации.Ссылка КАК Организация,
| Организации.ИНН,
| Организации.КПП
|ИЗ Справочник.Организации КАК Организации";
Структура отчета будет иметь вывод только по детальным записям со всеми полями, выбираемыми в запросе. В конструкторе настройка структуры отчета будет выглядит следующим образом:
На скриншоте ниже представлен вывод отчета с текущими настройками.
Отлично. Теперь перейдем к настройке характеристик, но перед этим напомню в общих чертах работу механизма характеристик в большинстве типовых конфигураций, в том числе и УПП. Для этого используются несколько объектов конфигурации.
- План видов характеристик "СвойстваОбъектов".
- Регистр сведений "ЗначенияСвойствОбъектов".
Графически связь между объектом информационной базы и его характеристиками можно изобразить по такой схеме:
Опишем схему подробнее. В регистре сведений "ЗначенияСвойствОбъектов" в измерении "Объект" содержится ссылка на элемент информационной базы, для которого сохраняется свойство. В нашем примере это ссылка на элемент справочника "Организации". Все возможные свойства объекта определяются в плане видов характеристик (ПВХ) "СвойстваОбъектов". Значение характеристики, сохраняемое в регистре сведений, зависит от доступных типов данных для элемента плана видов характеристик, записанного в измерение "Свойство". Это описание должно дать лишь общее представление о механизме доп. свойств. На практике он сложнее, но при при необходимости разобраться будет не сложно.
Теперь перейдем к настройке характеристик в схеме компоновки данных. Для этого запустим конструктор запроса и перейдем на вкладку "Характеристики". Здесь нужно добавить поле связи объекта информационной базы с таблицами свойств и значений свойств. Ранее мы рассматривали схему связи между объектами конфигурации для хранения доп. свойств/характеристик. В соответствии с этой информацией настройка будет следующей:
После этого запрос набора данных дополнится инструкциями получения характеристик объектов.
"ВЫБРАТЬ
| Организации.Ссылка КАК Организация,
| Организации.ИНН,
| Организации.КПП
|ИЗ
| Справочник.Организации КАК Организации
| // Доп. инструкции для получения характеристик
|{ХАРАКТЕРИСТИКИ
| ТИП(Справочник.Организации)
| ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов
| ПОЛЕКЛЮЧА Ссылка
| ПОЛЕИМЕНИ Наименование
| ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
| ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
| ПОЛЕОБЪЕКТА Объект
| ПОЛЕВИДА Свойство
| ПОЛЕЗНАЧЕНИЯ Значение }"
На этом все. Функционал отчета теперь позволяет выбрать поля дополнительных характеристик в отчете (поля вывода, отборы и т.д.). Но есть одно НО. Использовать эти поля в настройках отчета мы можем только в режиме 1С:Предприятия. В конфигураторе мы не можем увидеть поля характеристик, что логично, ведь характеристики вводятся пользователем и хранятся в информационной базе.
Но если есть необходимость, мы можем добавить поля характеристик, например, в отбор перед его открытием или сделать настройку отчета в режиме 1С:Предприятие, а настройки перенести в конфигуратор через XML-файл (выгружается стандартными средствами СКД). Рассмотрим небольшой пример.
Программная работа с характеристиками
При открытии формы отчета выполним следующим программный код:
ТекущиеНастройки = КомпоновщикНастроек.Настройки;
КоллекцияОтборов = ТекущиеНастройки.Отбор.Элементы;
// Добавляем отбор по доп. реквизиту номенклатуры "Основной склад"
НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Основной склад]");
НовЭл.Использование = Ложь;
// Добавляем отбор по доп. реквизиту номенклатуры "Страна размещения"
НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Страна размещения]");
НовЭл.Использование = Ложь;
// Добавляем отбор по доп. реквизиту номенклатуры "Связанный контрагент"
НовЭл = КоллекцияОтборов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовЭл.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовЭл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]");
НовЭл.Использование = Ложь;
Тогда если мы посмотрим в отбор отчета в режиме 1С:Предприятие, то увидим следующую картину:
Таким образом, мы программно добавили отбор по дополнительным характеристикам справочника "Организации", не смотря на то, что в конструкторе СКД эти поля не были доступны. Обратите внимание на синтаксис определения поля компоновки данных.
Новый ПолеКомпоновкиДанных("Организация.[Связанный контрагент]"),
а именно на текст "[Связанный контрагент]". Если мы напишем вот так:
Новый ПолеКомпоновкиДанных("Организация.СвязанныйКонтрагент"),
то при запуске отчета СКД неправильно определит поля компоновки. В настройках поля отбора будут выделены как некорректные:
Для дополнительных свойств и реквизитов, которые не доступны в конструкторе СКД, при программном обращении необходимо использовать следующий синтаксис:
Новый ПолеКомпоновкиДанных(".[]")
Теперь мы можем устанавливать настройки отчета, даже если поля недоступны в конструкторе СКД.
А Вы используете характеристики?
Использование настройки характеристик в СКД позволяет значительно упростить разработку сложных отчетов. Несмотря на некоторые недостатки в работе, такие как отсутствие возможности настройки отбора по доп. свойствам в конструкторе и т.д., механизм характеристик можно считать значительным шагом в упрощении разработки отчетов на платформе 1С.
В статье мы рассмотрели далеко не все возможности характеристик в СКД. За рамками статьи остались такие возможности как: произвольное определение источников данных, как для свойств, так и для значений характеристик, а также отбор по владельцу для всех доступных характеристик в информационной базе и многое другое. Тема большая, есть куда расширять круг своих знаний.
Продолжим позже
На этом все, спасибо что дочитали до конца! СКД наше все!