|
27.09.2012, 08:31 | #1 |
Участник
|
Сопоставление VendTrans
Существует задача..
Есть конкретная сумма на которую необходимо сопоставить документы . Все необходимо сделать программно. Как я понял: 1) VendTrans - проводки 2) VendTransOpen - не сопоставленные, частично сопоставленные с оплатой документы 3) VendSettelement - инф. о сопоставлении оплаты и документа Какие функции использовать для частичного сопоставление нужного документа с оплатой? нужного документа с оплатой? Последний раз редактировалось Fanygrom; 27.09.2012 в 08:36. |
|
27.09.2012, 09:35 | #2 |
NavAx
|
Через перекрестные ссылки посмотрите, как используется VendTrans::settleTransact(..).
|
|
27.09.2012, 09:51 | #3 |
Программатор
|
X++: void settleTrans(VendTrans _vendTransDebit, VendTrans _vendTransCredit, VendTable _vendTable, TransDate _transDate = systemDateGet()) { CustVendOpenTransManager manager; VendTransOpen vendTransOpenDebit; VendTransOpen vendTransOpenCredit; SpecTransManager specTransManager = SpecTransManager::construct(_vendTable); ; if(specTransManager.getSpecTransCount() > 0) specTransManager.deleteAll(); manager = CustVendOpenTransManager::construct(_vendTable); vendTransOpenDebit = _vendTransDebit.transOpen(); vendTransOpenCredit = _vendTransCredit.transOpen(); manager.parmSettlePostingDate(_transDate); if (vendTransOpenDebit && vendTransOpenCredit) { manager.updateTransMarked(vendTransOpenDebit, NoYes::Yes); manager.updateTransMarked(vendTransOpenCredit, NoYes::Yes); manager.settleMarkedTrans(); } |
|
28.09.2012, 05:58 | #4 |
Участник
|
Забыл написать Axapta 3.0
И CustVendOpenTransManager найти не могу. Цитата:
Сообщение от Sada
X++: void settleTrans(VendTrans _vendTransDebit, VendTrans _vendTransCredit, VendTable _vendTable, TransDate _transDate = systemDateGet()) { CustVendOpenTransManager manager; VendTransOpen vendTransOpenDebit; VendTransOpen vendTransOpenCredit; SpecTransManager specTransManager = SpecTransManager::construct(_vendTable); ; if(specTransManager.getSpecTransCount() > 0) specTransManager.deleteAll(); manager = CustVendOpenTransManager::construct(_vendTable); vendTransOpenDebit = _vendTransDebit.transOpen(); vendTransOpenCredit = _vendTransCredit.transOpen(); manager.parmSettlePostingDate(_transDate); if (vendTransOpenDebit && vendTransOpenCredit) { manager.updateTransMarked(vendTransOpenDebit, NoYes::Yes); manager.updateTransMarked(vendTransOpenCredit, NoYes::Yes); manager.settleMarkedTrans(); } Допустим документ на сумму 1000 руб, а необходимо сопоставить только на 500 рублей. Последний раз редактировалось Fanygrom; 28.09.2012 в 07:20. |
|
28.09.2012, 11:08 | #5 |
Участник
|
Цитата:
Сообщение от Sada
X++: void settleTrans(VendTrans _vendTransDebit, VendTrans _vendTransCredit, VendTable _vendTable, TransDate _transDate = systemDateGet()) { CustVendOpenTransManager manager; VendTransOpen vendTransOpenDebit; VendTransOpen vendTransOpenCredit; SpecTransManager specTransManager = SpecTransManager::construct(_vendTable); ; if(specTransManager.getSpecTransCount() > 0) specTransManager.deleteAll(); manager = CustVendOpenTransManager::construct(_vendTable); vendTransOpenDebit = _vendTransDebit.transOpen(); vendTransOpenCredit = _vendTransCredit.transOpen(); manager.parmSettlePostingDate(_transDate); if (vendTransOpenDebit && vendTransOpenCredit) { manager.updateTransMarked(vendTransOpenDebit, NoYes::Yes); manager.updateTransMarked(vendTransOpenCredit, NoYes::Yes); manager.settleMarkedTrans(); } Что делать? |
|
28.09.2012, 10:31 | #6 |
Программатор
|
Ну как вариант разбить проводку на две
X++: void splitVendTransOpen(VendTrans _vendTrans) { VendTransOpen vendTransOpen; VendTransOpen newVendTransOpen; ; if (this.dutyamount()) { vendTransOpen = _vendTrans.transOpen(dateNull(), true); vendTransOpen.AmountCur = -(taxAmount + this.chargeAmount()); vendTransOpen.AmountMST = vendTransOpen.AmountCur; vendTransOpen.NV_Txt = this.txtTaxAdminCharge(); vendTransOpen.doUpdate(); newVendTransOpen.data(vendTransOpen); newVendTransOpen.AmountCur = -this.dutyamount(); newVendTransOpen.AmountMST = newVendTransOpen.AmountCur; newVendTransOpen.NV_Txt = this.txtDuty(); newVendTransOpen.DueDate = newVendTransOpen.DueDate + 1; newVendTransOpen.doInsert(); } } Последний раз редактировалось Sada; 28.09.2012 в 10:40. |
|
28.09.2012, 11:21 | #7 |
Программатор
|
теперь не знаю трёшки под рукой нету
Последний раз редактировалось Sada; 28.09.2012 в 11:28. |
|
28.09.2012, 11:34 | #8 |
Участник
|
автоматическое сопоставление в трёшке реализовано вроде тут:
CustVendAutoSettlement_Vend_RU CustVendAutoSettlement_RU CustVendAutoDialog_RU копать, что бы понять логику и оценить затраты на переделку, можно начать отсюда. а дальше, наверное, кривая доведёт Вас до таблички SpecTrans, и интересных методов её заполнения, типа OffsetVoucher.updateNow() Вроде нормально написано, разобраться по коду можно. Удачи! |
|
|
За это сообщение автора поблагодарили: Fanygrom (1). |
03.10.2012, 14:32 | #9 |
Участник
|
Использовал класс Specification и метод create для создания "очереди" на сопоставления в таблице SpecTrans
Затем для сопоставления использовал метод VendTrans::settleTransact(); Вот так задача решена) |
|
Теги |
vendtransopen, проводки по сопоставлению, сопоставление |
|
|