Показать сообщение отдельно
Старый 03.09.2015, 16:50   #7  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Вот код который поможет найти не попавшие фактуры в обработку:
X++:
static void _HTC_VAT_Analyze_ObrabotkaNDS(Args _args)
{
    Dialog                              dialog = new Dialog();
    DialogField                         dlgDateStart;
    DialogField                         dlgDateEnd;
    
    Query                               query = new Query();
    QueryBuildDataSource                qbds;
    QueryRun                            qr;

    TransDate                           startDate, endDate;
    FactureJour_RU                      factureJour;

    COM rstAxa;    
    COM flds, fld; 
    COM xlApp;           
    COM wbks, wbk;      
    COM wkss, wks;        
    COM rng, cell, rngCR; 
    COM font;             
    COM entCol;          
    COM actWin;          
    int i, iMax;


    int adoTypeToExcel(str _type)
    {
        switch (_type)
        {
            case 'num' : return   5; // adDouble
            case 'str' : return   8; // adBSTR
            case 'date': return 133; // adDBDate
        }
        return 8;
    }


    ;
    dlgDateStart = dialog.addField(typeid(TransDate),'StartDate');
    dlgDateEnd  = dialog.addField(typeid(TransDate),'EndDate');

    dialog.run();
    
    startDate = dlgDateStart.value();
    endDate = dlgDateEnd.value();
    
    rstAxa = new COM('ADODB.Recordset');
    flds = rstAxa.Fields();
    flds.Append("FactureDate"         , adoTypeToExcel('date'));
    flds.Append("FactureExternalId"         , adoTypeToExcel('str'));
    flds.Append("CustVendAC"         , adoTypeToExcel('str'));
    flds.Append("Amount"         , adoTypeToExcel('num'));
    flds.Append("Tax"         , adoTypeToExcel('num'));
    rstAxa.Open();

    qbds = query.addDataSource(tableNum(FactureJour_RU));
    qbds.addRange(fieldNum(FactureJour_RU, Module)).value(queryValue(FactureModule_RU::Vend));
    qbds.addRange(fieldNum(FactureJour_RU, FactureDate)).value(strfmt('((%1 >= %2) && (%1 <= %3))', fieldstr(FactureJour_RU, FactureDate),date2StrXpp(startDate), date2StrXpp(endDate)));

    qbds = query.dataSourceTable(tableNum(FactureJour_RU)).addDataSource(tableNum(PurchBookVATProcessLogTrans_RU));
    qbds.relations(true);
    qbds.joinMode(JoinMode::NoExistsJoin);

    qr = new QueryRun(query);
    
    while(qr.next())
    {
        factureJour = qr.get(tableNum(FactureJour_RU));
        
        rstAxa.AddNew();
        fld = flds.Item("FactureDate"); fld.Value(facturejour.FactureDate);
        fld = flds.Item("FactureExternalId"); fld.Value(facturejour.FactureExternalId);
        fld = flds.Item("CustVendAC"); fld.Value(facturejour.CustVendInvoiceAccount);
        fld = flds.Item("Amount"); fld.Value(facturejour.FactureAmount);
        fld = flds.Item("Tax"); fld.Value(facturejour.FactureTax);
        rstAxa.Update();
    }

    xlApp = new COM('Excel.Application');

    wbks = xlApp.Workbooks();
    wbk  = wbks.Add();
    wkss = wbk.Worksheets();
    wks  = wkss.Item(1);
    wks.Name('NotExistsInPurchBook');
    rng  = wks.Range('A1');

    flds = rstAxa.Fields();
    iMax = flds.Count() - 1;
    for (i = 0; i <= iMax; i += 1)
    {
        fld = flds.Item(i);
        cell = rng.Offset(0, i);
        cell.Value2(fld.Name());
    }
    rngCR = rng.CurrentRegion();
    font = rngCR.Font();
    font.Bold(true);

    cell = rng.Offset(1, 0);
    cell.CopyFromRecordset(rstAxa);

    rngCR = rng.CurrentRegion();
    entCol = rngCR.EntireColumn();
    entCol.AutoFit();

    cell.Select();
    actWin = xlApp.ActiveWindow();
    actWin.FreezePanes(true);
    xlApp.Visible(true);
    rstAxa.Close();
}