[AX 2012 R3 - How To] Crear un diario de factura con X++

marzo 23, 2017 Christian Amado 0 Comentarios

Microsoft Dynamics AX En esta entrada mostraré cómo crear un diario de factura con X++, no es muy complicado pero debemos tener en cuenta una cierta cantidad de puntos para poder hacerlo de manera correcta. El código incluye comentarios.

Creación del diario de facturas desde X++

public boolean createVendorInvoiceService()
{
    int                                 i;
    LedgerJournalCheckPost              jourCheckPost;
    LedgerJournalTable                  jourTable;

    AxLedgerJournalTable                header  = new AxLedgerJournalTable();
    AxLedgerJournalTrans                trans;

    container                           offsetDim, offsetDimAccount;

    // Esta es la entrada contra la cuenta del proveedor.
    DimensionAttributeValueCombination  davc;

    //Tabla con personalizaciones de campos
    ServiceParameters                   parametros;
    LedgerJournalNameId                 ledgerJournalNameId;

    //Generar números aleatorios
    RandomGenerate                      randomGenerate = RandomGenerate::construct();
    int                                 monto = randomGenerate.randomInt(1000, 32000);

    //Asignación general de variables
    parametros          = ServiceParameters::find(); //Parametros generales personalizados
    ledgerJournalNameId = parametros.InvoiceJournalName; //Nombre del diario para Cuentas por Pagar

    try
    {
        ttsBegin;
        //Creación de cabecera para el diario de facturas del proveedor
        header.parmJournalName(ledgerJournalNameId);
        header.parmJournalType(LedgerJournalName::find(ledgerJournalNameId).JournalType); //asignamos el tipo de Diario desde los nombres de diarios
        header.parmApprover(HcmWorker::findByPersonnelNumber("000001").Person); //El nombre de la persona autorizada.
        header.save();

        //Creación las líneas. Tres líneas para este caso
        //1. Cuenta del proveedor con el crédito total
        //2. Débito del pago.
        //3. Débito del pago.
        for (i=1; i<=3; i++)
        {
            trans = new AxLedgerJournalTrans();
            trans.parmLineNum(i);
            trans.parmJournalNum(header.ledgerJournalTable().JournalNum);
            trans.parmTransDate(systemDateGet());//Le pasamos la fecha de hoy
            trans.parmTxt(strFmt("Descripción Número %1",i)); //Texto identificatorio

            trans.parmOffsetAccountType(LedgerJournalACType::Ledger);
            trans.parmCurrencyCode("USD"); //Dólares

            //Primeramente, procedemos a crear la línea que corresponde al proveedor
            if (i == 1)
            {
                // Nota: Esto funciona únicamente si el registro DimensionValueAttributeCombination
                // existe.
                select firstonly RecId from davc
                    where davc.DisplayValue == "000000104"; //Este número pertenece a la cuenta del proveedor.

                trans.parmLedgerDimension(davc.RecId);
                trans.parmAccountType(LedgerJournalACType::Vend); //Proveedor
                trans.parmInvoice("FC-001-001-123456"); //Número de factura
                trans.parmAmountCurCredit(monto); //Esto se calculó desde Random.

                //Primero el Display value, luego Main account, Cantidad de dimensiones, Dimensión: Nombre, Valor.
                offsetDim   = ["1.1.01.03.0.0.01.001", "1.1.01.03.0.0.01.001", 2, "AGENCIA", "ADMINISTRACION", "CENTRODECOSTO", "200"];
                trans.parmOffsetLedgerDimension(AxdDimensionUtil::getLedgerAccountId(offsetDim));

                trans.parmTaxGroup("CONTC"); //Contado para compras
                trans.parmTaxItemGroup("C-IVADIR10"); //Tipo Impuesto. IVA 10% en Paraguay
            }
            else
            {
                trans.parmAccountType(LedgerJournalACType::Ledger);
                trans.parmAmountCurDebit(monto / 2); //El monto Random divido 2.

                offsetDimAccount = ["1.1.01.03.0.0.01.001", "1.1.01.03.0.0.01.001", 2, "AGENCIA", "ADMINISTRACION", "CENTRODECOSTO", "200"];
                trans.parmLedgerDimension(AxdDimensionUtil::getLedgerAccountId(offsetDimAccount));

                trans.parmTaxGroup("CONTC"); //Contado para compras
                trans.parmTaxItemGroup("C-IVADIR10"); //Tipo Impuesto. IVA 10% para Paraguay.
            }

            trans.parmApprover(HcmWorker::findByPersonnelNumber("000001").Person); //Persona que aprueba los pagos
            trans.parmApproved(NoYes::Yes);

            trans.save();
        }

        jourTable =  header.ledgerJournalTable();
        ttsCommit;

        //Verificamos si está marcada la opción de Registro automático (esta es una personalización).
        //Si el parámetro es verdadero, procedemos a Registrar el diario.
        jourCheckPost = LedgerJournalCheckPost::newLedgerJournalTable(jourTable ,parametros.IsAutomaticPostingGL);

        jourCheckPost.run();

        return true;
    }
    catch
    {
        ttsAbort;
    }

    return false;
}

0 comentarios: