Lettrer une facture

Applicable pour la version 2009

Première manière

Voici comment lettrer une facture (client ou fournisseur).

Nous avons besoin du record dans LedgerJournalTrans et CustTransOpen ou VendTransOpen ou encore, comme l’exemple ci-dessous, la Map CustVendTransOpen. Ce qui est une meilleur solution.

Ici j’ai également rajouté un boolean pour voir si l’on devait lettrer ou pas.

protected void settle()
{
    SpecTrans           specTrans;
    ;

    if (!settle)
    {
        return;
    }

    if (!this.custVendTransOpen())
    {
        return; 
    }

    settle                  = false;

    //init table id and recid
    specTrans.SpecTableId   =  ledgerJournalTrans.TableId;
    specTrans.SpecRecId     =  ledgerJournalTrans.RecId;
    specTrans.SpecCompany   =  ledgerJournalTrans.dataAreaId;

    //init table id and recid
    specTrans.RefTableId    =  this.custVendTransOpen().TableId;
    specTrans.RefRecId      =  this.custVendTransOpen().RecId;
    specTrans.RefCompany    =  this.custVendTransOpen().dataAreaId;

    //init currency and amount
    specTrans.Code          =  ledgerJournalTrans.CurrencyCode;
    specTrans.Balance01     =  ledgerJournalTrans.AmountCurCredit
                            ?  ledgerJournalTrans.AmountCurCredit
                            : (ledgerJournalTrans.AmountCurDebit) * -1;

    //add line
    specTrans.insert();
}

Seconde manière

Achat
static void settleVend(Args _args)
{
    VendTrans      vendTrans1, vendTrans2;
    VendTable      vendTable;
    ;

    while select vendTrans1
    where vendTrans1.PaymReference != ""
    {
            select firstOnly vendTrans2
            where vendTrans2.PaymReference == vendTrans1.PaymReference
            &&    vendTrans2.AmountCur == vendTrans1.AmountCur * -1;
            if(vendTrans2 && (vendTrans1.AmountCur + vendTrans2.AmountCur == 0))
            {
                vendTable = VendTable::find(vendTrans1.AccountNum);
                vendTrans1.transData().markForSettlement(vendTable);
                vendTrans2.transData().markForSettlement(vendTable);
                vendTrans::settleTransact(vendTable);
            }
 
    }
}
Vente
static void settleCust(Args _args)
{
    CustTrans      custTrans1, custTrans2;
    CustTable      custTable;
    ;

    while select custTrans1
    where custTrans1.PaymReference != ""
    {
       if(custTrans1.isPayment())
       {
            select firstOnly custTrans2
            where custTrans2.PaymReference == custTrans1.PaymReference
            &&    custTrans2.AmountCur == CustTrans1.AmountCur * -1;
            if(custTrans2 && (custTrans1.AmountCur + custTrans2.AmountCur == 0))
            {
                custTable = CustTable::find(CustTrans1.AccountNum);
                custTrans1.transData().markForSettlement(custTable);
                custTrans2.transData().markForSettlement(custTable);
                CustTrans::settleTransact(custTable);
            }
        }
    }
}

Applicable pour la version 3 et 4

Pour la version 3 et 4 d’Ax. C’est le même code SAUF qu’il n’y a pas de champ specTrans.RefCompany et specTrans.SpecCompany utilisé pour l’intersociété.

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s