2016-11-21 4 views
0

Мне нужно изменить формы заказа, так что пользователь может выбрать и сохранить ПО в формате PDF в папке назначенияЭкспорт отчета в PDF AX 2012 10 д.е.

![Purchase Order Form Я создал новую кнопку, поэтому после того, как пользователь выбирает данные и нажимает , система создает файл PDF и сохраняет его в папку назначения.

Это мой код

public static void main(Args _args) 
{ 
PurchTable      purchTable,purchTable2, row; 

PurchPurchaseOrderController purchPurchaseOrderController ; 
PurchPurchaseOrderContract  purchPurchaseOrderContract; 
SrsReportRunImpl    srsReportRun; 
VendPurchOrderJour    vendPurchOrderJour; 
FormDataSource     purchTable_ds; 

str        PDFName; 
int        tot = 0; 

Args       args ; 
ReportName      reportName = "PurchPurchaseOrder.ReportPRI"; 
; 

    if(_args.record().TableId == tableNum(PurchTable)) 
{ 
    purchTable2 = _args.record(); 
    purchTable_ds = purchTable2.dataSource();  
} 

if (purchTable_ds.anyMarked()) 
{ 
    row = purchTable_ds.getFirst(1, false); 
    info("a1"); 
    while(row) 
    {   
     tot++; 

     info(row.PurchId); 

     args = new Args(); 

     args.record(row); 

     select firstFast purchTable where purchTable.RecId == row.RecId ; 

     select firstFast vendPurchOrderJour where vendPurchOrderJour.PurchId == purchTable.PurchId ; 

     PDFName = strFmt("C:\\SharePDF\\%1.pdf",strReplace(purchTable.PurchId,'/','_')); 

     purchPurchaseOrderController = new PurchPurchaseOrderController(); 
     purchPurchaseOrderController.parmReportName(ReportName); 

     purchPurchaseOrderContract = purchPurchaseOrderController.parmReportContract().parmRdpContract(); 

     purchPurchaseOrderContract.parmRecordId(vendPurchOrderJour.RecId); 

     purchPurchaseOrderController.parmArgs(args); 

     srsReportRun = purchPurchaseOrderController.parmReportRun() as SrsReportRunImpl; 

     purchPurchaseOrderController.parmReportRun(srsReportRun); 

     purchPurchaseOrderController.parmReportContract().parmReportExecutionInfo(new SrsPrintMgmtExecutionInfo()); 

     purchPurchaseOrderController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File); 
     purchPurchaseOrderController.parmReportContract().parmPrintSettings().overwriteFile(true); 
     purchPurchaseOrderController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF); 
     purchPurchaseOrderController.parmReportContract().parmPrintSettings().fileName(PDFName); 

     purchPurchaseOrderController.runReport(); 


     row = purchTable_ds.getNext(); 
    } 
} 

info(strFmt("%1",tot)); 

} 

Этот код работает и будет создан файл PDF, но только для последнего ПО.

Любые предложения по устранению этой проблемы? Спасибо

+0

если вы debugg код в этой строке: 'строка = purchTable_ds.getFirst (1, ложь),' получить первый заказ на поставку или получить неверное значение? –

+0

он получает последнее ПО. – julius

+0

Попробуйте использовать класс [MultiSelectionHelper] (https://msdn.microsoft.com/en-us/library/multiselectionhelper.aspx). [Получить избранные записи по классу MultiSelectionHelper] (http://mafsarkhan.blogspot.de/2013/05/get-select-records-by.html) является одним из многих руководств по его использованию. –

ответ

0

Это была решена. Спасибо за все.

Это мой полный код

public static void main(Args _args) 
{ 
PurchTable      purchTable,purchTable2, row; 
PurchPurchaseOrderContract  purchPurchaseOrderContract; 

VendPurchOrderJour    vendPurchOrderJour; 
FormDataSource     purchTable_ds; 
SRSPrintDestinationSettings  settings; 
SrsReportRunController   controller ; 

str        folderPath; 
dialog       d; 

DialogField      dialogFilename; 

str        PDFName, FilePath; 
int        tot = 0; 

Args       args; 
ReportName      reportName = "PurchPurchaseOrder.ReportPRI"; 

PurchTable      _PurchTable; 
MultiSelectionHelper   _helper = MultiSelectionHelper::construct(); 
; 


d = new dialog(); 
d.caption("select a folder"); 
dialogFilename = d.addField(extendedTypeStr(FilePath));//add a field where you select your file in a specific path 
d.run(); 

if(d.closedOk()) 
{ 
    folderPath = dialogFileName.value();//return path file value 

    if(folderPath == '') 
    { 
     folderPath = 'C:\\SharePdf'; 
    } 


    if(_args.record().TableId == tableNum(PurchTable)) 
    { 
     purchTable2 = _args.record(); 
     purchTable_ds = purchTable2.dataSource(); 
    } 


if (purchTable_ds.anyMarked()) 
{ 
    row = purchTable_ds.getFirst(1, false); 

    while(row) 
    { 
     tot++; 

     args = new Args(); 

     select firstFast purchTable where purchTable.RecId == row.RecId ; 

     select firstFast vendPurchOrderJour where vendPurchOrderJour.PurchId == purchTable.PurchId ; 

     PDFName = strFmt("%2\\%1.pdf",strReplace(purchTable.PurchId,'/','_'), folderPath); 

     controller = new SrsReportRunController(); 
     purchPurchaseOrderContract = new PurchPurchaseOrderContract(); 

     controller.parmReportName(ReportName); 
     controller.parmExecutionMode(SysOperationExecutionMode::Synchronous); 
     controller.parmShowDialog(false); 

     purchPurchaseOrderContract.parmRecordId(vendPurchOrderJour.RecId); 

     args.record(row); 

     controller.parmReportContract().parmRdpContract(purchPurchaseOrderContract); 
     controller.parmArgs(args); 

     settings = controller.parmReportContract().parmPrintSettings(); 
     settings.printMediumType(SRSPrintMediumType::File); 
     settings.fileFormat(SRSReportFileFormat::PDF); 
     settings.overwriteFile(true); 
     settings.fileName(PDFName); 

     controller.startOperation(); 

     row = purchTable_ds.getNext(); 
    } 

} 

info(strFmt("%1 Total",tot)); 

} 

} 
0

Появляется ваша ошибка в этой строке row = purchTable_ds.getFirst(1, false); вам нужен класс MultiSelectionHelper.

Try с этим кодом:

public static void main(Args _args) 
{ 
    PurchTable      purchTable,purchTable2, row; 

    PurchPurchaseOrderController purchPurchaseOrderController ; 
    PurchPurchaseOrderContract  purchPurchaseOrderContract; 
    SrsReportRunImpl    srsReportRun; 
    VendPurchOrderJour    vendPurchOrderJour; 
    FormDataSource     purchTable_ds; 

    str        PDFName; 
    int        tot = 0; 

    Args       args ; 
    ReportName      reportName = "PurchPurchaseOrder.ReportPRI"; 

    //New 
    PurchTable   _PurchTable; 
    MultiSelectionHelper _helper = MultiSelectionHelper::construct(); 
    //New end 
    ; 

    //New 
    _helper.parmDatasource(purchTable_ds); 
    _PurchTable = _helper.getFirst(); 

    while(_PurchTable.RecId != 0){ 
      Purchtable = _PurchTable; 
    //New end    
      tot++; 

      //info(row.PurchId); 

      //args = new Args(); 

      //args.record(row); 

      //select firstFast purchTable where purchTable.RecId == row.RecId ; 

      select firstFast vendPurchOrderJour where vendPurchOrderJour.PurchId == purchTable.PurchId ; 

      PDFName = strFmt("C:\\SharePDF\\%1.pdf",strReplace(purchTable.PurchId,'/','_')); 

      purchPurchaseOrderController = new PurchPurchaseOrderController(); 
      purchPurchaseOrderController.parmReportName(ReportName); 

      purchPurchaseOrderContract = purchPurchaseOrderController.parmReportContract().parmRdpContract(); 

      purchPurchaseOrderContract.parmRecordId(vendPurchOrderJour.RecId); 

      purchPurchaseOrderController.parmArgs(args); 

      srsReportRun = purchPurchaseOrderController.parmReportRun() as SrsReportRunImpl; 

      purchPurchaseOrderController.parmReportRun(srsReportRun); 

      purchPurchaseOrderController.parmReportContract().parmReportExecutionInfo(new SrsPrintMgmtExecutionInfo()); 

      purchPurchaseOrderController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File); 
      purchPurchaseOrderController.parmReportContract().parmPrintSettings().overwriteFile(true); 
      purchPurchaseOrderController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF); 
      purchPurchaseOrderController.parmReportContract().parmPrintSettings().fileName(PDFName); 

      purchPurchaseOrderController.runReport(); 

      //New 
      _PurchTable = _helper.getNext(); 
      //New end 
     } 


    info(strFmt("%1",tot)); 

} 
+0

Спасибо за ваш ответ, но проблема все еще существует. ваш код по-прежнему генерирует только 1 pdf. Я думаю, что проблема заключается в 'purchasePurchaseOrderController.runReport();' потому что 'info (strFmt ("% 1 ", tot));' не показывает – julius

+0

нормально, но эта строка работает нормально? '_PurchTable = _helper.getFirst();' и '' Пока (...) 'отлично работает? –

+0

это работа хорошо. Если я комментирую '//purchPurchaseOrderController.runReport();' он показывает весь номер PO и получает общее ПО, но не создает PDF – julius

Смежные вопросы