16.04.2018, 13:14 | #1 |
Участник
|
Разноска строк из нескольких закупок
Есть табличка содержащая несколько записей вида(ссылка на строку закупки, кол-во), строки могут принадлежать разным закупкам, кол-во не обязательно совпадает со строкой закупки
Надо написать процедуру которая сделает по данным этой табличке PackingSlip и Invoice. Все параметры(типа суммовой обработки) должны тоже применяться Нашел вот такой код, но что-то совсем жестко выглядит(плюс для PackingSlip его получается надо будет дублировать). Случаем никто не решал такую задачу? есть какие-то более "красивые" способы? Версия АХ2012R3 https://dynamicsuser.net/ax/f/develo...single-invoice |
|
16.04.2018, 14:42 | #2 |
Участник
|
Посмотрите в сторону использования методов
X++: purchFormLetter.createFromLines(...); purchFormLetter.parmLineList(...); X++: protected void postPackingSlip() { PurchFormLetter purchFormLetter; Num internalPackingSlipId; if (!packingSlipUpdateList.empty()) { internalPackingSlipId = NumberSeq::newGetNum(PurchParameters::numRefPurchPackingSlipId()).num(); purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip); purchFormLetter.createFromLines(true); purchFormLetter.parmLineList(packingSlipUpdateList.pack()); purchFormLetter.update(purchTable, internalPackingSlipId, purchFormLetter.transDate(), PurchUpdate::ReceiveNow); } }
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: trud (5). |
16.04.2018, 15:49 | #3 |
Участник
|
Еще для вдохновения:
1. Packing slip X++: SalesFormLetter salesFormLetter; SalesParmUpdate salesParmUpdate; SetEnumerator set; CustPackingSlipJour custPackingSlipJour; SysQueryRun chooseLines; salesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip); salesFormLetter.getLast(); salesFormLetter.resetParmListCommonCS(); salesFormLetter.proforma(false); salesFormLetter.createParmUpdateFromParmUpdateRecord( SalesFormletterParmData::initSalesParmUpdateFormletter( DocumentStatus::PackingSlip, salesFormLetter.pack())); salesParmUpdate = salesFormLetter.salesParmUpdate(); salesParmUpdate.SpecQty = SalesUpdate::DeliverNow; salesParmUpdate.Proforma = NoYes::No; if(salesParmUpdate.SumBy == AccountOrder::Order) { salesParmUpdate.SumSalesId = _sumSalesId; } salesParmUpdate.update(); salesFormLetter.salesParmUpdate(salesParmUpdate); chooseLines = this.calcQuery(); // Custom Query salesFormLetter.chooseLinesQuery(chooseLines); salesFormLetter.reArrangeNow(true); salesFormLetter.validateAll(false); salesFormLetter.chooseLines(); salesFormLetter.run(); set = Set::create(SysOperationHelper::base64Decode(salesFormLetter.getOutputContract().parmAllJournals())).getEnumerator(); while (set.moveNext()) { custPackingSlipJour = set.current(); break; } return custPackingSlipJour.PackingSlipId; X++: public SysQueryRun calcQuery() { Query q = new Query(queryStr(SalesUpdate)); QueryBuildDataSource qbds; qbds = q.dataSourceTable(tableNum(SalesLine)); ... join your table ... return new SysQueryRun(q); } X++: SalesFormLetter salesFormLetter; SalesParmUpdate salesParmUpdate; CustPackingSlipJour custPackingSlipJour; TmpFrmVirtual tmpFrmVirtual; List selectedList = new List(Types::Record); SalesParmTable salesParmTable; select firstonly RecId, TableId from custPackingSlipJour where custPackingSlipJour.PackingSlipId == _consolidatedPackingSlipId; tmpFrmVirtual.clear(); tmpFrmVirtual.TableNum = custPackingSlipJour.TableId; tmpFrmVirtual.RecordNo = custPackingSlipJour.RecId; tmpFrmVirtual.NoYes = NoYes::Yes; tmpFrmVirtual.Id = _sumSalesId; tmpFrmVirtual.insert(); selectedList.addEnd(tmpFrmVirtual); salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice); salesFormLetter.selectFromJournal(selectedList.pack()); salesFormLetter.specQty(SalesUpdate::PackingSlip); salesFormLetter.run(); |
|
|
За это сообщение автора поблагодарили: trud (5). |
16.04.2018, 18:38 | #4 |
Аманд
|
Так это стандарт вроде?
Цитата:
строки могут принадлежать разным закупкам, кол-во не обязательно совпадает со строкой закупки
|
|
|
|