Библиотека

Использование мастера действий при формировании отчетов

Андрей Литвинов
руководитель направления DIRECTUM
ООО «Бизнес-Альянс»

Андрей Литвинов делится опытом использования мастера действий при формировании отчётов в СЭД DIRECTUM. Дело несложное, если применить компоненту с характерным названием «Разработка отчетов»: можно обойтись без применения функций InputDialog и InputDialogEx.

Мастер действий

В составе стандартной поставки системы DIRECTUM есть компонента «Разработка отчетов», позволяющая (сюрприз!) формировать различные отчеты, в том числе аналитические. Но вот беда — данный функционал не содержит встроенного интерфейса и для того, чтобы запросить какие-либо параметры, разработчикам приходилось использовать функции InputDialog и InputDialogEx.

Безусловно, использование данных функций решает проблему запроса, например, периода, но если дело дойдет до списка записей справочника или списка документов, то приходится доставать бубен и разжигать ритуальный костер. К счастью, в версии DIRECTUM 4.7 появился новый объект — «Мастер действий», и его вполне можно использовать как интерфейс для отчетов.

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

Постановка задачи

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

Решение (часть 1)

Для начала создаем мастер действий и задаем ему параметры:

Задание параметров мастера действий в DIRECTUM

С параметрами DateBegin и DateEnd, думаю все ясно. Параметры RefVed и RefWorker реализуют списки записей справочников «Виды электронных документов» и «Работники», соответственно. А вот параметр ReportName — служебный, и будет хранить наименование отчёта, вызвавшего мастер. Далее создаем этап мастера типа «Форма» и размещаем на нем параметры. Также необходимо не забыть отключить действия «Previous» и «Next» — для параметров отчета нам необходимы только «Cancel» и «Finish».

Этапы мастера «Параметры отчетов»

В событие мастера «Finish»  прописываем следующий программный код:

Params = Wizard.Params
CurRep = Reports.GetObjectByName(Params.ValueByName("ReportName").Value)
RepParam = CurRep.Params
RepParam.Add("DateBegin";Params.ValueByName("DateBegin").Value)
RepParam.Add("DateEnd";Params.ValueByName("DateEnd").Value)

//Виды документов
sTmp = ""
foreach RefInfo in Params.ValueByName("RefVed").Value
  sTmp = AddSubString(RefInfo.Code;sTmp;"|")
endforeach 
RepParam.Add("RefVed";sTmp)

//Работники
sTmp = ""
foreach RefInfo in Params.ValueByName("RefWorker").Value
  sTmp = AddSubString(RefInfo.Code;sTmp;"|")
endforeach 
RepParam.Add("RefWorker";sTmp)

CurRep.Execute

Решение (часть 2)

Теперь можно приниматься за сам отчет, с которым все гораздо проще. Достаточно лишь в «Расчете», в начале, написать несколько строк:

//Код мастера действий "Параметры отчетов"

sWizardPrmCode = "ALTPrm"
RepParam = Object.Params

if RepParam.Count = 0
  CurWizard = Wizards.GetObjectByCode(sWizardPrmCode)
  CurWizard.Params.ValueByName("ReportName").Value = Object.Name
  CurWizard.CurrentStep = CurWizard.Steps.ValueByName("Параметры1")
  CurWizard.Execute
  Exit()
endif
DateBegin = RepParam.ValueByName("DateBegin")
DateEnd = RepParam.ValueByName("DateEnd")
if Not (Assigned(DateBegin) And Assigned(DateEnd))
  Exit()
endif   
RefVedCode = RepParam.ValueByName("RefVed") 
RefUsCode =  RepParam.ValueByName("RefWorker")

Заключение

  1. Передача списка записей справочников от мастера действий в отчет происходит в виде строки кодов, разделенных символом «|». Для передачи списка документов можно организовать строку, состоящую из ID документов, разделенных символом «|».
  2. Для каждого отчета можно не разрабатывать свой мастер действий, достаточно до выполнения метода Execute правильно инициировать свойство CurrentStep.
  3. Ничто не мешает нам подобным же образом организовать «интерфейс» для сценариев.

Оригинал был опубликован  20 декабря 2011 года на сайте DIRECTUM Club. На любые вопросы автор с удовольствием ответит по почте: al@b-alt.ru