gifts2017

Конструктор управленческих отчетов (СКД)

Опубликовал ффф ыыы (zqzq) в раздел Программирование - Инструментарий

Под управленческими отчетами будем понимать консолидированные отчеты, в строках которых разделы учета - статьи, в колонках ресурсы - суммы. Также возможны дополнительные группировки (например, колонки по месяцам); иерархия по статьям.

Пример: управленческий баланс.

Что можно сделать для упрощения разработки таких отчетов?

  • 1. Описать иерархию статей в наглядном виде.
  • 2. Простая настройка вывода результата.
  • 3. Получение данных разделить на небольшие независимые шаги.

Предлагаемое решение:

  • 0. Реализация в виде подсистемы конфигурации (управляемые формы 8.2/8.3 (такси частично тестировалось)).
  • 1. Иерархический справочник статей отчета.
  • 2. Результат описывается отчетом на СКД (внутренний/внешний) с объектным набором данных.
  • 3. Каждая статья содержит СКД, которая реализует интерфейс основного отчета (поля, параметры).

Далее, чтобы не было скучно, сразу примеры из прилагаемой базы.

Пример 1. Нужно получить такой отчет:

Добавляем новый отчет "Отчет1" в конфигурацию (возможно и внеший отчет; в примере будет внутренний), СКД:

Настройка:

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

Переходим в справочник "Статьи управленческих отчетов"

Тут нужно описать иерархию статей и реализовать СКД для статей нижнего уровня.
На примере "Статья 1"

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

В основном варианте настроек должны быть необходимые поля и параметры (если поля по синонимам, в варианте должны быть они заданы). Результатом должна быть плоская таблица, без итогов и группировок (допустима 1 составная группировка или детальные записи, без общих итогов).

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

Остальные статьи отчета аналогично.

Вот и всё, последний штрих - добавить "простой" код в модуль отчета для заполнения объектого набора данных

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    Справочники.УправленческиеОтчеты.ПриКомпоновкеРезультатаУправленческогоОтчета(
        ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка, ЭтотОбъект.СхемаКомпоновкиДанных,
        ЭтотОбъект.КомпоновщикНастроек,    ЭтотОбъект.Метаданные().Имя,
        Справочники.УправленческиеОтчеты.НайтиОбъектныйНаборДанныхСКД(ЭтотОбъект.СхемаКомпоновкиДанных).ИмяОбъекта);
КонецПроцедуры

Пример 2. Более приближенный к жизни.

Реализация аналогична, см. прилагаемую базу.

Внедрение подсистемы.
Сохранить конфигурацию из прилагаемой базы в файл. В целевой конфигурации "сравнить/объединить с конфигурацией из файла", отключить все галки, Действия - "отметить по подсистемам файла" - "КонструкторУправленческихОтчетов" + галка на самой подсистеме.

Дополнительная информация


Скачать файлы

Наименование Файл Версия Размер
Конструктор управленческих отчетов v1.0.0 - база с примерами использования (там же конфигурация подсистемы) 22
.dt 91,13Kb
13.05.15
22
.dt 1.0.0 91,13Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Артур Аюханов (artbear) 13.05.15 11:23
За тесты, а тем более через xUnitFor1C, отдельный плюс.
Спасибо за упоминание моей статьи по тестированию.

По статье - пока непонятен выигрыш по сравнению с ручным созданием отчета СКД (собственные запросы и прочее).
Расскадешь?

ОФФ по фреймворку xUnitFor1C вопросы/предложения/идеи есть?
2. Константин Юрин (kostyaomsk) 14.05.15 06:56
Интересная подсистема. Может, стоит интегрировать в самописные конфигуарции, а то каждый раз приходится что-то изобретать.
3. ффф ыыы (zqzq) 14.05.15 09:00
(1) artbear, плюсы, для примера, некий управленческий баланс, в котором строки получаются:
1) через остатки по счетам
2) через отчет "Ведомость по учету МПЗ"
3) через отчет "Ведомость по взаиморасчетам с контрагентами"
и т.д. Добавить сюда ещё иерархию статей.
Если всё это делать в рамках одной СКД, будет мега-монстр. Тут каждая статья имеет свою СКД, можно её загрузить из типового отчета, а далее все наборы данных сливаются в итоговый с добавлением статей.

По xUnitFor1C, тут был некий эксперимент, по итогам ваших статей и книжек К.Бека. Результаты скорее положительные, некоторое время уходит на написание тестов, по потом проще разработка и рефакторинг. Но психологически сложно каждые "2+2" проверять, в результате тесты на наиболее значимую функциональность вышли, что-то среднее между юнит и приёмочными.
4. Ярослав Радкевич (WKBAPKA) 17.05.15 11:51
(3) zqzq, вот как такой баланс свести и проверить... ололо

идея не нова... просто, я похожую задачу решал на УТП средствами построителя... сначала клиент захотел собрать баланс из разных регистров, ну типа там, взаиморасчеты, товары на складах и т.п.
сделал справочник Статьи баланса, где можно задать свой алгоритм расчета. На СКД как вариант можно было сделать ,но клиент капризный и любит свою форму баланса ... хотя, шаблоно, наверное, можно было и в СКД сделать... но! покрутил я этот баланс и сказал клиенту, знаете, что дорогая, я не хотите баланс сводить на обычном плане счетов... и прямо как в воду глядел :)
идея хорошая, но советую всем клиентам рекомендовать использовать план счетов для такого дела
5. ффф ыыы (zqzq) 18.05.15 08:19
(4) WKBAPKA, Подсистема позволяет и по счетам данные получать. Для случая, когда простой ОСВ не отделаешся, всякие там составные статьи и развернутые суммы по субконто (как типовой бух. баланс собирается, это адъ).
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа