Показать сообщение отдельно
Старый 15.12.2014, 13:45   #1  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Импорт информации по спланированным заказа на производство из экселя в АХ
Добрый день!
В виду извращенности бизнес логики необходимо импортировать data из Эксель и преобразовать ее в виде спланированных заказов на производство.
В принципе ничего сложного. Формат таблицы импорта:
Столбец1 Столбец2 Столбец3
Код номенклатуры Маршрут Колличество

Вот джоб он это сделает:
X++:
static void _HTC_EXCELIMPORT_DataImportToAXFromExcel(Args _args)
{
    SysExcelApplication              xlsApplication;
    SysExcelWorkBooks         xlsWorkBookCollection;
    SysExcelWorkBook                    xlsWorkBook;
    SysExcelWorksheets       xlsWorkSheetCollection;
    SysExcelWorksheet                  xlsWorkSheet;
    SysExcelRange                          xlsRange;
    SysExcelCells                             Cells;
    SysExcelCell                              RCell;
    CommaIO                                  inFile;
    int                                      nRow,i;
    DialogField                          dialogPath;
    DialogField                         dlgFilepath;
    DialogField                        dlgReqPlanId;
    DialogField                          dlgRefType;
    DialogField                     dlgInventSiteId;
    Dialog                                   dialog;
    Filename                               filename;

    ItemId                                    ItemId;
    ItemGroupId                          ItemGroupId;
    ItemBomId                              ItemBomId;
    ItemRouteId                          itemRouteId;

    ReqPO                                      ReqPo;

    ReqPlanId                              ReqPlanId;
    ReqRefType                               RefType;
    InventSiteId                        inventSiteId;

    ReqDate                                                                 ReqDate;
    ReqDateOrder                                                       ReqDateOrder;
    Qty                                                                         Qty;
    //FormStringControl                   FormStringControl = new FormStringControl();
        ;


    dialog = new Dialog("Import");
    dialogPath = dialog.addField(typeid(Filenameopen), "File Name");

    dlgRefType   = dialog.addField(typeid(ReqRefType), "Ref Type");
    dlgReqPlanId = dialog.addField(typeid(ReqPlanId), "Plan Id");
    dialog.run();
    if (dialog.run())
    {
        filename = (dialogPath.value());
        ReqPlanId = dlgReqPlanId.value();
        RefType   = dlgRefType.value();
    }
    inFile = new CommaIO (filename, 'R');

    if (!inFile || infile.status() != IO_Status::Ok )
    {
        throw error (strfmt("@SYS19312",filename));
    }
     try
    {
        xlsApplication          = SysExcelApplication::construct();
        xlsWorkBookCollection   = xlsApplication.workbooks();
        xlsWorkBookCollection.open(filename);
        xlsWorkSheetCollection  = xlsApplication.worksheets();
        xlsWorkSheet            = xlsWorkSheetCollection.itemFromNum(1);
        Cells                   = xlsWorkSheet.Cells();
        nRow = 2;
        RCell = Cells.Item(nRow, 1);

        while(RCell.value().bStr() != "")
        {
            ItemId                   = RCell.value().bStr();
            RCell                      = Cells.item(nRow,2);
            ItemRouteId                  = RCell.value().bStr();
            RCell                      = Cells.item(nRow,3);
            Qty                      = RCell.value().double();

            ReqDate                  = today();
            
            ttsbegin;
            
            ReqPo.initValue();
            ReqPo.ItemId                           = ItemId;
            ReqPo.ReqDate                         = ReqDate;
            ReqPo.ItemRouteId                     = ItemRouteId;
            ReqPo.ReqPlanId                                                      = ReqPlanId;
            ReqPo.ReqPOStatus                                        = ReqPOStatus::Approved;
            ReqPo.RefType                                                          = RefType;
            ReqPO.Qty                                                               =    Qty;
            ReqPo.CovInventDimId                                                     ="4799";

            ReqPo.insert();
            
            ttscommit;

            nRow++;
            RCell = Cells.Item(nRow, 1);
        }
        xlsApplication.quit();
        xlsApplication.finalize();
        info("Imported completed");
    }
    catch( Exception::Error)
    {
        //Close Excel.
        xlsApplication.quit ();
        xlsApplication.finalize ();
        ttsabort;
        info("Unable to process the excel import ");
    }

}
Но вот проблема - мне необходимо подтянуть действующую активную спецификацию.
И разумеется возник вопрос - А как это сделать??
Когда создается через форму то используется метод InventTable lookupBOMId одним из агрументов которого является FormStringControl. Но я планирую просто сделать класс для запуска импорта с точкой входа.