web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :

Liquidación Automática de Transacciones con X++ Dynamics AX 2012

Juan Antonio Tomas Profile Picture Juan Antonio Tomas 236 User Group Leader

Hola a todos, en uno de los últimos proyectos en los que estoy participando, nos ha surgido la necesidad de realizar la creación de Diarios Generales y Diarios de Pagos, así como la creación de Facturas de Servicios directamente desde código X++. El código para realizar esta operación, como ya sabréis, es relativamente sencillo y funciona bastante bien. Pero, en este caso, nos surge una necesidad específica:

Cuando generamos, por ejemplo, un Diario General,  sabéis que podemos marcar ciertas transacciones abiertas del cliente para que se liquiden de forma automática con las líneas del diario en cuestión (o contra la Factura de Servicios), de esta forma, vamos cerrando transacciones y disminuyendo el saldo abierto del cliente.

La forma de marcar estas transacciones para su liquidación es muy sencilla. Simplemente tenemos que indicar en la línea del diario la cuenta del cliente, y posteriormente ir a Funciones / Liquidación. Una vez abierto este nuevo formulario, únicamente tenemos que marcar las transacciones que queremos marcar y cerrarlo. Estas transacciones marcadas se liquidarán en el momento de registrar el diario (o factura).

Pues bien, la necesidad que nos surgió era realizar esta misma liquidación de forma automática por medio de programación, de forma que, al crear el diario o factura, estas transacciones se marquen en función de unos filtros realizados, para que, al ejecutar el registro del diario o factura, se vayan machacando las transacciones abiertas del cliente.

El objetivo de este artículo no es otro que compartir este pequeño fragmento de código con la comunidad, así como guardármelo para futuras ocasiones ;). Como ahora veréis, es un código tan sencillo como útil.

// jatomas.com
// t: @juanan169
// Marcar transacciones abiertas de cliente - Código testado en AX 2012 R3 CU10
public void markTransaction(LedgerJouranlTrans _ledgerJournalTrans)
{
    CustTransOpen               custTransOpen;
    CustTrans                   custTrans;
    CustVendOpenTransManager    custVendOpenTransManager;
    CustAccount                 custAccount     = "Codigo_cliente";

    // Seleccionamos la transacción abierta del cliente que queremos liquidar
    select custTransOpen
        index hint RefRecIdx
        where custTransOpen.AccountNum  == custAccount
        join custTrans
            where custTrans.AccountNum      == custTransOpen.AccountNum
                && //...
     
    // Marcar transacción
    custVendOpenTransManager = CustVendOpenTransManager::construct(_ledgerJournalTrans);
    // Si se trata de Factura de servicios
    // custVendOpenTransManager = CustVendOpenTransManager::construct(_custInvoiceTable);
    custVendOpenTransManager.updateTransMarked(custTransOpen, true);
    custVendOpenTransManager.updateSettleAmount(custTransOpen, _ledgerJournalTrans.amount());
    
    // Actualizar linea de diario para indicar que está marcada
    // Esta parte de código exclusiva para Diarios
    _ledgerJournalTrans.selectForUpdate(true);
    _ledgerJournalTrans.SettleVoucher   = SettlementType::SelectedTransact;
    _ledgerJournalTrans.update();
       
}

Pues hasta aquí el artículo de hoy, espero que os resulte útil.

Saludos!!

Comments

*This post is locked for comments