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

Андрей Литвинов
Дата создания: 20 декабря 2011 в 10:29

Введение

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

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

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

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

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

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

 

С параметрами 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. Передача списка записей справочников от мастера действий в отчет происходит в виде строки кодов разделенных символом «|». Для передачи списка документов можно организовать строку, состоящую из ИД документов разделенных символом «|».

2. Для каждого отчета можно не разрабатывать свой мастер действий, достаточно до выполнения метода Execute правильно инициировать свойство CurrentStep.

3. Ничего не мешает подобным же образом организовать «интерфейс» для сценариев.

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

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




Теги
4.7 4.8 awards isbl is-builder sql server бизнес-решение введение в is-builder видео дайджест документ интеграция клик настройка отчет разработка сообщество справочник сценарий функция
показать все теги