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

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

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;
}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.