Farseer

导航

生成折扣日记账

有些场景下,供应商开发票时会有折扣,开票金额会小于收货金额,过账发票时,系统根据收货金额过账,自动产生折扣金额对应的日记账,与过账发票产生的供应商交易记录自动核销。

public void createDiscountJournal(ERM_VendStatementTable _statementTable)
{
    LedgerJournalTable          journalTable;
    LedgerJournalTrans          journalTrans;
    Voucher                     voucher;
    CustVendOpenTransManager    manager;
    VendTransOpen               vendTransOpen;
    VendTrans                   vendTrans;
    LedgerJournalCheckPost      journalCheckPost;
    LedgerJournalName           journalName;
    ERM_PurchInvoice            purchInvoice;
    ;

    if(!_statementTable.discountAmount())
        return;

    ttsbegin;

    select purchInvoice
    where purchInvoice.StatementId == _statementTable.StatementId;


    journalName = LedgerJournalName::find(VendParameters::find().ERM_DiscountJournalNameId);

    voucher = NumberSeq::newGetVoucher(LedgerParameters::numRefLedgerTempVoucher()).voucher();
    journalTable.initFromLedgerJournalName(journalName.JournalName);
    journalTable.insert();

    journalTrans.JournalNum         = journalTable.JournalNum;
    journalTrans.Voucher            = voucher;
    journalTrans.TransDate          = purchInvoice.InvoiceDate? purchInvoice.InvoiceDate:systemDateGet();
    journalTrans.AccountType        = LedgerJournalACType::Vend;
    journalTrans.AccountNum         = _statementTable.VendAccount;
    journalTrans.AmountCurDebit     = _statementTable.discountAmount();
    journalTrans.Approved           = NoYes::Yes;
    journalTrans.OffsetAccountType  = journalName.OffsetAccountType;
    journalTrans.OffsetAccount      = journalName.OffsetAccount;
    journalTrans.CurrencyCode       = VendTable::find(_statementTable.VendAccount).Currency;
    journalTrans.ExchRate           = Currency::exchRate(journalTrans.CurrencyCode);
    journalTrans.SettleVoucher      = SettlementType::SelectedTransact;

    journalTrans.insert();

    manager = CustVendOpenTransManager::construct(journalTrans);


    select vendTransOpen
    exists join vendTrans
    where vendTransOpen.RefRecId == vendTrans.RecId &&
            vendTrans.Invoice == _statementTable.StatementId &&
                vendTrans.AccountNum == _statementTable.VendAccount;

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

    journalCheckPost = LedgerJournalCheckPost::newLedgerJournalTable(journalTable,NoYes::Yes);
    journalCheckPost.run();

    _statementTable.Status = ERM_VendStatementStatus::Invoiced;
    _statementTable.update();
    _statementTable.dataSource().reread();
    _statementTable.dataSource().refresh();
    _statementTable.dataSource().active();

    ttscommit;

}

AX2009 放在这里做个备份

posted on 2017-06-12 21:42  佛西亚  阅读(390)  评论(3编辑  收藏  举报