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