Buscar en este blog

jueves, 9 de febrero de 2012

Exportar datos a Excel con Dynamics Ax 2009

Pues eso, el siguiente ejemplo muestra cómo enviar los datos de una consulta a un archivo de excel desde Dynamics Ax 2009. Esto es necesario en el caso en que tenemos algún usuario quisquilloso que necesita información de su área muy detallada y que en Ax no se encuentra en ningun reporte, a veces es mas fácil hacer la consulta y mandarla a un excel.
En el siguiente ejemplo, se muestra cómo pasar el resultado de una consulta a un excel y que al correr el código se abra en automático la hoja que se genero. La consulta calcula el saldo de cuentas contables referentes a los conjuntos de artículos.


static void SaldosCuentasExcel(Args _args)
{
    LedgerTable ledgerTable;
    ItemGroupId itemGroupId;
    InventPosting inventPosting;
    InventItemGroup inventItemGroup;
    AmountMST balance;


    TransDate fromDate,todate;
    LedgerBalanceSum_CurrentMST ledgerBalanceSum_CurrentMST_SaldoMes;


    CustTable custTable;
    SysExcelApplication application;
    SysExcelWorkBooks    workbooks;
    SysExcelWorkBook     workbook;
    SysExcelWorksheets  worksheets;
    sysExcelWorksheet   worksheet;
    SysExcelCells       cells;
    SysExcelCell        cell;
    int                 row;
    ;
    application = SysExcelApplication::construct();
    workbooks = application.workbooks();
    workbook = workbooks.add();
    worksheets = workbook.worksheets();
    worksheet = worksheets.itemFromNum(1);
    cells = worksheet.cells();
    cells.range('A:A').numberFormat('@');


    fromdate = str2date("01/01/2011",123);
    todate = str2date("08/02/2012",123);
    ledgerBalanceSum_CurrentMST_SaldoMes = new LedgerBalanceSum_CurrentMST(fromdate,todate);


    while select ItemRelation, LedgerAccountId, InventAccountType from inventPosting
    join inventItemGroup
    order by inventItemGroup.Name
    where inventPosting.ItemRelation == inventItemGroup.ItemGroupId
    {
        balance = ledgerBalanceSum_CurrentMST_SaldoMes.balance(inventPosting.LedgerAccountId);
        row++;
        cell = cells.item(row,1);
        cell.value(inventItemGroup.Name);
        cell = cells.item(row,2);
        cell.value(inventPosting.LedgerAccountId);
        cell = cells.item(row,3);
        cell.value(enum2str(inventPosting.InventAccountType));
        cell = cells.item(row,4);
        cell.value(balance);
    }
    application.visible(true);
}


Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.




miércoles, 8 de febrero de 2012

Saldo de cuenta contable en Dynamics Ax

Pues aquí un tip chiquito, algunas veces para efectos de verificar cómo se van afectando los saldos de las cuentas contables de acuerdo a las compras, ventas y traslados en Ax es necesario saber los saldos de las cuentas en un solo paso, en vez de estar dando clic a cada cuenta y despues en el botón de "Saldo".
Así que por código, les muestro cómo calcular el saldo de las cuentas que estan asignadas a los grupos de artículos. Espero les sirva.

static void yc_jobs(Args _args)
{
    LedgerTable ledgerTable;
    ItemGroupId itemGroupId;
    InventPosting inventPosting;
    InventItemGroup inventItemGroup;
    AmountMST balance;    
    TransDate fromDate,todate; 
    LedgerBalanceSum_CurrentMST ledgerBalanceSum_CurrentMST_SaldoMes;
    ;
    fromdate = str2date("01/01/2011",123);
    todate = str2date("08/02/2012",123);
    ledgerBalanceSum_CurrentMST_SaldoMes = new LedgerBalanceSum_CurrentMST(fromdate,todate);
            
    while select ItemRelation, LedgerAccountId, InventAccountType from inventPosting
    join inventItemGroup 
    order by inventItemGroup.Name
    where inventPosting.ItemRelation == inventItemGroup.ItemGroupId
    {
        balance = ledgerBalanceSum_CurrentMST_SaldoMes.balance(inventPosting.LedgerAccountId);
        info(strfmt("%1, %2, %3, %4", inventItemGroup.Name, inventPosting.LedgerAccountId,
        inventPosting.InventAccountType, balance));
    }
}