05.06.2004, 20:42 | #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 и задавать путь там – но такой способ решения этого вопроса неоправданно сложен. -- С уважением, Павел Протасов. |
|
06.06.2004, 13:17 | #2 |
Участник
|
Цитата:
но остаётся ощущение неправильности и нарушения идеологии.
А что что, на ваш взгляд, вызывает это ощущение? Сама необходимость программировать вывод? Цитата:
Существуют ли другие, более элегантные способы получения желаемых отчётов в Excel’е?
Можно просто делать обычные Аксаптовские отчеты, затем выводить в текстовый файл с расширением txt или xls, потом открывать в Excel'е. Никакого избыточного программирования. Если же вы не против того, чтобы затратить время на программирование, то посмотрите на www.axforum.ru, там приводилось много способов. Так например, предлагалось сначала готовить диапазон, а затем вставлять его одним движением через буфер обмена. Цитата:
Я пока не нашёл способа добраться до них
Я же просто вывел отчет в текстовый файл и не парился бы... Если хочется избавиться от строчек-заголовков страниц, то в отчете можно убрать шаблон ReportDesign. Пожалуй, это единственное изменение на которое лично я бы согласился Цитата:
Существует ли функция, возвращающая абсолютный путь к Application\Share\Include?
Пример использования см. SysFileDeployment.sourcePath() кстати, выводить код Аксапты лучше внутри тегов [ xpp ] Код [ /xpp ] (нужно убрать пробелы). либо воспользуйтесь кнопкой X++ при создании сообщения. |
|
06.06.2004, 23:09 | #3 |
Участник
|
Цитата:
А что что, на ваш взгляд, вызывает это ощущение?
Сама необходимость программировать вывод? Оно (ощущение) было вызвано тем, что отчёт формирует всю необходимую информацию и всего лишь хотелось её использовать. Цитата:
Можно просто делать обычные Аксаптовские отчеты, затем выводить в текстовый файл с расширением txt или xls, потом открывать в Excel'е.
Цитата:
посмотрите на www.axforum.ru, там приводилось много способов.
-- С уважением, Павел Протасов. |
|
07.06.2004, 08:39 | #4 |
Участник
|
Цитата:
Сообщение от Павел Протасов
Цитата:
Можно просто делать обычные Аксаптовские отчеты, затем выводить в текстовый файл с расширением txt или xls, потом открывать в Excel'е.
Это не повод переписывать весь механизм отчетов, не так ли? Это повод запрограммировать эту цепочку. |
|