Buscar en este blog

lunes, 6 de octubre de 2014

Crear y postear un LedgerVoucher en Ax 2012

En Dynamics Ax, todas las transacciones financieras sin importar en dónde sean generadas terminan en el módulo de General ledger (libro mayor). Cualquier modificación personalizada que se requiera en este módulo, los desarrolladores debemos usar las APIs de Ax para crearlas, de otra forma, si las creamos directamente en las tablas es muuuuy probable que afectemos la exactitud de los datos financieros.

Entonces, para asegurarnos de mantener la coherencia entre datos debemos usar estas APIs. Uno de ellos es el proceso de ledgervoucher, que en español es como un identificador de la transacción. Esto nos permite "postear" o registrar un voucher financiero en el libro de mayor.

Los vouchers en Dynamics Ax son las entradas de balance financiero representadas en una sola operación. Estos voucher incluyen 2 o mas transacciones del ledger. La API de LedgerVoucher se asegura que todos los criterios requeridos como números de vouchers, periodos financieros, cuentas ledger, dimensiones financieras, saldos y otros, son válidos.

Aquí voy a poner cómo podemos crear y postear un ledger voucher desde código. Voy a crear un único voucher con dos transacciones (operaciones).

private container postTransToLedger()
{
    Voucher                     voucher;
    RefRecId                    generalJournalEntryRecid;
    LedgerVoucher               voucherPaym;
    LedgerVoucherObject         voucherObject;
    LedgerVoucherTransObject    voucherTransObject;
    Ledger                      ledger = Ledger::findByLegalEntity(CompanyInfo::find().RecId);
    GRWModoPagoCaja             modoPago = GRWModoPagoCaja::find(this.ModoPagoId);
    NumberSeq                   numberSeq;
    ;

    numberSeq           = numberSeq::newGetNum(GRWCajaParameters::CajaVoucherTrans());
    voucher             = numberSeq.num();
    voucherPaym         = LedgerVoucher::newLedgerPost( DetailSummary::Detail,
                                                        SysModule::Ledger,
                                                        GRWCajaParameters::CajaVoucherTrans().numberSequenceTable().NumberSequence);

    voucherObject       = LedgerVoucherObject::newVoucher(  voucher,
                                                            this.TransDate,
                                                            SysModule::Ledger,
                                                            LedgerTransType::None,
                                                            false,
                                                            OperationsTax::Current);

    voucherPaym.addVoucher(voucherObject);

    voucherTransObject = LedgerVoucherTransObject::newBasicDefault( voucherObject,
                                                                    LedgerPostingType::LedgerJournal,
                                                                    DimensionDefaultingService::serviceCreateLedgerDimension(modoPago.CuentaPuente), // Cuenta de cuenta puente
                                                                    this.Currencycode,
                                                                    this.AmountCur,
                                                                    this.AmountMST,
                                                                    Currency::curAmount2CurAmount(this.AmountMST, ledger.AccountingCurrency, ledger.ReportingCurrency));

    voucherTransObject.parmTransTxt(strfmt("Transacción de caja Manual Puenteo %1", this.ModoPagoId));
    voucherObject.addTrans(voucherTransObject);

    voucherTransObject = LedgerVoucherTransObject::newBasicDefault( voucherObject,
                                                                    LedgerPostingType::LedgerJournal,
                                                                    DimensionDefaultingService::serviceCreateLedgerDimension(modoPago.CuentaCaja), // Cuenta caja
                                                                    this.Currencycode,
                                                                    -this.AmountCur,
                                                                    -this.AmountMST,
                                                                    -Currency::curAmount2CurAmount(this.AmountMST, ledger.AccountingCurrency, ledger.ReportingCurrency));

    voucherTransObject.parmTransTxt(strfmt("Transacción de caja Manual Concentración %1", this.ModoPagoId));
    voucherObject.addTrans(voucherTransObject);

    voucherPaym.end();



    return [voucher, generalJournalEntryRecid];
}


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrolladores de Ax en nuestro idioma.

3 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  2. En ningún momento llenás generalJournalEntryRecid...

    ResponderBorrar
  3. Buenas noches Yered, me podrías dar una mano por fa!!!! Necesito generar asientos de unas facturas que se generan a partir de ordenes de venta, esta lógica que publicaste me podria servir? si la respuesta es si, donde deberia insertar este codigo?. Estoy intentando insertar este codigo dentro mi logica donde hago la facturacion (osea en el insert de las facturas) pero se me complica porque trabajo con el 365 y no tengo todas las clases que tu usas. Esta excelente tu blog,, mucho me sirvió ya,! espero que puedas darme una mano! Saludos. mi correo es die407@gmail.com

    ResponderBorrar