Введение
В составе стандартной поставки системы есть компонента «Разработка отчетов», позволяющая формировать различные отчеты, в том числе аналитические. Но вот беда – данный функционал не содержит встроенного интерфейса и для того чтобы запросить какие-либо параметры
разработчикам приходилось использовать функцию 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. Ничего не мешает подобным же образом организовать «интерфейс» для сценариев.