[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;
}
0 comentarios: