viernes, octubre 05, 2012

Dynamics AX 2012: Secuencia numérica manual

Para establecer una secuencia númerica de forma manual podemos utilizar el siguiente código:


NumberSeq                   numberSeq,NumberSeqVoucher;
NumberSequenceReference     _NumberSequenceReference;
Num                         Number;
Voucher                     voucher;
NumberSequenceReference    _voucherSequenceReference
;

numberSeq = new NumberSeq();

//Realizar las busquedas de las secuencias numéricas configuradas para utilizar como número de asiento
_voucherSequenceReference = NumberSeqReference::findReference(extendedTypeNum(SalesInvoiceVoucher));
    // mejor utilizar SalesParameters::numRefSalesInvoiceVoucher()

//Realizar las busquedas de las secuencias numéricas configuradas para utilizar como número del documento
_NumberSequenceReference    =   NumberSequenceReference::findByDatatypeAndScope(extendedTypeNum(SalesCreditNoteId));

//Instanciar la clase de secuencias numéricas para establecer el número de factura (documento)que se va utilizar
NumberSeq = numberSeq::newGetNumFromCode(NumberSequenceTable::find(_NumberSequenceReference.NumberSequenceId).NumberSequence);

//Instanciar la clase de secuencias numéricas para establecer el número de asiento que se va utilizar
NumberSeqVoucher= numberSeq::newGetNumFromCode(NumberSequenceTable::find(_voucherSequenceReference.NumberSequenceId).NumberSequence);
 
 
Number = numberSeq.num();
 
//Es necesario establecer un nivel de transacción mayor a 1 para que se pueda generar una secuencia numerica
ttsbegin;
if (_voucherSequenceReference && !_voucherSequenceReference.AllowSameAs)
{
    voucher=NumberSeqVoucher.num();
}
else
{
       voucher = Number;
}
ttscommit;

//Establecer el numero de documento y asiento   
numberSeq.setNumVoucherLec(Number,voucher);


EL código especificado anteriormente puede ser utilizado dentro de la clase NumberSeq como un método publico estatico para que pueda ser invocado desde cualquier parte del desarrollo.

No hay comentarios: