![]() |
#1 |
Участник
|
Отчёты в Excel
Добрый день! Имеется Аксапта 2.5, необходимо отчёты по основным средствам вывести в Excel. Я перекрываю метод main класса RAssetStandardReportDialog следующим образом (пример приведён для отчёта RassetListing): <div class='XPPtop'>X++</div><div class='XPP'> [color=:blue]private[/color] [color=:blue]static[/color] [color=:blue]void[/color] main(Args _args) { … ; reportDialog.setReportName(_args.parm()); [color=:blue]if[/color] (reportDialog.prompt()) { dlg = reportDialog.progressDlg(); [color=:green]// Create process dialog [/color] excel = [color=:blue]new[/color] ComExcelDocument_RU(); excel.newFile([color=:red]"d:\\template.xlt"[/color], [color=:blue]false[/color]); excel.InsertValue(ComExcelDocument_RU::numToNameCell(1, 1), reportDialog.assetStandard() ); qr = reportDialog.queryRun(); [color=:blue]if[/color] (qr.prompt()) { [color=:blue]while[/color] (qr.[color=:blue]next[/color]()) { rassetTable = qr.GetNo(1); [color=:green]// вручную получаю значения, которые рассчитываются в отчёте [/color] rassetSumTrans = RAssetSumCalc_Trans::newAssetPeriod (rassetTable.AccountNum, reportDialog.assetStandard()); AssetGroup = RAssetStandards::find(rAssetTable.AccountNum, reportDialog.assetStandard()).AssetGroup; currencyCode = RAssetStandards::find(rAssetTable.AccountNum, reportDialog.assetStandard()).currencyCode; [color=:green]// вывожу информацию по строке в Excel [/color] excel.InsertValue(ComExcelDocument_RU::numToNameCell(1, i + 2), rassetTable.AssetGroup); … excel.InsertValue(ComExcelDocument_RU::numToNameCell(7, i + 2), num2str(rassetSumTrans.netBookValue(), 10, 2, 1, 3)); i++; dlg.incCount(); [color=:green]// Force progress bar to its end [/color] } } excel.Visible([color=:blue]true[/color]); excel.finalize(); } }</div> Всё работает… но остаётся ощущение неправильности и нарушения идеологии. Возникает ряд вопросов: 1) Существуют ли другие, более элегантные способы получения желаемых отчётов в Excel’е? 2) У отчёта RassetListing есть методы assetStandard, assetGroup (RassetListing->Designs->AutoDesignSpecs->RassetTable_1), assetNetBookValue и пр. Я пока не нашёл способа добраться до них, в связи с чем мне приходится их рассчитывать в методе main класса-потомка от RAssetStandardReportDialog. Каким образом их можно брать напрямую из отчёта? 3) Полный путь к шаблону я указываю явно (excel.newFile("d:\\template.xlt", false)), это пойдёт только на этапе тестирования. Существует ли функция, возвращающая абсолютный путь к Application\Share\Include? В принципе, труда не составит написать таблицу и форму, подобную CustParameters и задавать путь там – но такой способ решения этого вопроса неоправданно сложен. -- С уважением, Павел Протасов. |
|