08.07.2011, 16:03 | #1 |
Участник
|
Особенности использования PurchFormLetter
Собственно, прошу поделиться опытом. На форуме уже обсуждались нюансы работы с PurchFormLetter, к примеру:
X++: PurchTable purchTable = PurchTable::find("кодЗакупки"); PurchFormLetter purchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice); ; purchFormLetter.update(purchTable, "Номер накладной", systemDateGet(), PurchUpdate::All, AccountOrder::None, NoYes::No, NoYes::No); Нашел в закромах следующий код: X++: protected void postVendPackingSkip(VendAccount _vendAccount) { SysQueryRun chooseLinesQuery; QueryBuildDataSource qbds; PurchFormLetter purchFormLetterPS; container purchIds; Num parmId; int i; ; purchIds = this.initOrders(_vendAccount); if (purchIds) { chooseLinesQuery = new SysQueryRun(querystr(PurchUpdate)); chooseLinesQuery.query().interactive(false); chooseLinesQuery.saveUserSetup(false); qbds = chooseLinesQuery.query().dataSourceTable(tablenum(PurchTable)); for (i = 1; i <= conlen(purchIds); i++) qbds.addRange(fieldnum(PurchTable, PurchId)).value(queryValue(conpeek(purchIds, i))); purchFormLetterPS = PurchFormLetter::construct(DocumentStatus::PackingSlip, true); purchFormLetterPS.chooseLinesQuery (chooseLinesQuery); parmId = purchFormLetterPS.parmId(); // Unique id purchFormLetterPS.parmParmTableNum (parmId); purchFormLetterPS.transDate (systemDateGet()); purchFormLetterPS.proforma (false); purchFormLetterPS.printFormLetter (false); purchFormLetterPS.createParmUpdate (false); purchFormLetterPS.specQty (PurchUpdate::ReceiveNow); purchFormLetterPS.sumBy (AccountOrder::Account); purchFormLetterPS.chooseLines (false); purchFormLetterPS.reArrangeNow (true); purchFormLetterPS.progressHide(); purchFormLetterPS.run(); } } Скажем, видно, что SpecQty здесь устанавливается в ReceiveNow. Если же мы захотим использовать подобный кусок кода для постинга инвойса со SpecQty = PackingSlip, проблем не избежать. Можно разбираться, делать метод PurchFormLetter_Invoice.initQueryBuild public, использовать что-то вроде: X++: protected void postVendInvoice(VendAccount _vendAccount) { SysQueryRun chooseLinesQuery; QueryBuildDataSource qbds; PurchFormLetter_Invoice purchFormLetterInv; container purchIds; Num parmId; str rangeStr; int i; ; purchIds = this.initOrders(_vendAccount); if (purchIds) { purchFormLetterInv = PurchFormLetter::construct(DocumentStatus::Invoice, true); purchFormLetterInv.reSelect(PurchUpdate::PackingSlip, NoYes::Yes); purchFormLetterInv.initQueryBuild(); qbds = purchFormLetterInv.chooseLinesQuery().query().dataSourceTable(tablenum(PurchTable)); for (i = 1; i <= conlen(purchIds); i++) qbds.addRange(fieldnum(PurchTable, PurchId)).value(queryValue(conpeek(purchIds, i))); qbds = purchFormLetterInv.chooseLinesQuery().query().dataSourceTable(tablenum(InventTrans)); if (qbds) { rangeStr = strfmt('(((%1.%2 == %4) && (%1.%3 == %5)) || ((%1.%2 == %6) && (%1.%3 == %7)))', qbds.name(), fieldstr(InventTrans,StatusReceipt), fieldstr(InventTrans,StatusIssue), queryValue(enum2int(StatusReceipt::Received)), queryValue(enum2int(StatusIssue::None)), queryValue(enum2int(StatusReceipt::None)), queryValue(enum2int(StatusIssue::Deducted))); SysQuery::findOrCreateRange(qbds, fieldnum(InventTrans, StatusReceipt)).value(rangeStr); } parmId = purchFormLetterInv.parmId(); // Unique id purchFormLetterInv.parmParmTableNum (parmId); purchFormLetterInv.transDate (systemDateGet()); purchFormLetterInv.proforma (false); purchFormLetterInv.printFormLetter (false); purchFormLetterInv.createParmUpdate (false); purchFormLetterInv.sumBy (AccountOrder::Account); purchFormLetterInv.chooseLines (false); purchFormLetterInv.reArrangeNow (true); purchFormLetterInv.progressHide(); purchFormLetterInv.run(); } } Интересно, как подобные задачи решают люди, которые собаку съели с классами PurchFormLetter и SalesFormLetter на закуску. Есть ли у кого информация о наличии удобных способов постинга произвольно выбранных записей с помощью этих классов? Последний раз редактировалось Hyper; 08.07.2011 в 16:13. |
|
Теги |
постинг, программно |
|
Похожие темы | ||||
Тема | Ответов | |||
Принцип использования дат | 4 | |||
Примеры использования AIF | 14 | |||
COM+ механизмы использования | 2 | |||
Номер накладной поставщика в purchFormLetter.update | 8 | |||
Пример использования RunBuf | 11 |
|