Tuesday, August 19, 2025

mark payment with vendor invoice using x++ d365fo

 public boolean markVendInvoicesForSettlement(

    LedgerJournalTrans  _journalTrans,

    VendAccount         _vendAccount,       

    RecId               _settlementRecId,   

    AmountCur           _settlementAmount)  

{

    boolean                     ret;

    InvoiceId                   invoiceId;

    VendTrans                   vendTrans;

    VendTable                   vendTable;

    VendTransOpen               vendTransOpen;

    AmountCur                   settlementAmount;

    CustVendOpenTransManager    settleManager;

    SpecTransManager            specTransManager;

    ret                 = true;

    settleManager       = CustVendOpenTransManager::construct(_journalTrans);

    specTransManager    = settleManager.parmSpecTransManager();

    vendTable           = VendTable::find(_vendAccount);

    vendTrans           = VendTrans::find(_settlementRecId);

    vendTransOpen       = VendTransOpen::findRefId(vendTrans.RecId);

    settlementAmount    = _settlementAmount;

    invoiceId           = vendTrans.Invoice;

    if (vendTransOpen.RecId != 0)

    {

        AmountCur unmarkedAmount = specTransManager.findUnmarkedAmountForRef( vendTransOpen.AmountCur,vendTransOpen.Company(), vendTransOpen.TableId, vendTransOpen.RecId);

        if (!settleManager.checkTransFullyMarkedByOtherSpec(vendTransOpen))

        {

            settleManager.updateTransMarked(vendTransOpen, NoYes::Yes);

            if (abs(settlementAmount) <= abs(unmarkedAmount))

            {

                settleManager.updateSettleAmountPaymCur(vendTransOpen, settlementAmount);

            }

            else

            {

                settleManager.updateSettleAmountPaymCur(vendTransOpen, unmarkedAmount);

            }

            ttsBegin;

            _journalTrans.selectForUpdate(true);

            if (invoiceId)

            {

                _journalTrans.MarkedInvoice = invoiceId;

            }

            else

            {

                _journalTrans.MarkedInvoice = '*';

            }

            _journalTrans.SettleVoucher = SettlementType::SelectedTransact;

            _journalTrans.update();

            ttsCommit;

        }

    }


    return ret;

}


Call API using x++ D365FO

 System.Net.HttpWebRequest    request; System.Net.HttpWebResponse   response; System.IO.Stream             dataStream; System.IO.StreamReade...