|
![]() |
#1 |
MCTS
|
Классы создания строк отгрузочных накладных
(пишу на память) ProdJournalCreate ProdJournalCreateBOM ProdJournalCreateLocation - мой класс Там есть метод createLines. В стандарте - создает строки по одному JournalNameId (это есть B). Мой класс (С) создает отдельные журналы для каждого склада BOM, используя при этом дополнительную функциональность класса В. Для этого есть таблица соответствий JournalNameId->Склад. В классе ProdJournalCreate (A) в методе CreateLines только завершающая операция. Вот и нужно, создать строки следуя алгоритму разбивки по складам, а затем вызвать super() класса A, не вызывая при этом алгоритм "по одному JournalNameId". А в ProdJournalCreate - только две строки - собственно запись в бд (ProdJournalCreate->CreateLines). Последний раз редактировалось Eldar9x; 04.03.2008 в 19:55. |
|
![]() |
#2 |
Участник
|
Как бы я сделал всё что выше super() в классе ProdJournalCreateBOM вынес бы в отдельный метод
X++: Protected void preCreateLines() { ProdJournalBOM prodJournalBOM; ProdBOMCalc prodBOMCalc; ProdBOM prodBOM; BOMCalcData BOMCalcData = BOMCalcData::newProdTable(qtyCalc,ProdTable::find(prodId)); ; setPrefix("@SYS28536"); this.initProdJournalTableData(prodJournalType::Picklist); prodJournalTransData = prodJournalTableData.JournalStatic().newJournalTransData(prodJournalBOM,prodJournalTableData); if (prodJournalTable.NumOfLines) prodJournalTransData.parmLastLineNum(prodJournalBOM::lastLineNum(journalId)); if (! oprNumTo) oprNumTo = oprNumFrom; BOMCalcData = BOMCalcData::newProdTable(qtyCalc,ProdTable::find(prodId)); while select forupdate prodBOM index hint numIdx where prodBOM.prodId == prodId && prodBOM.OprNum >= oprNumFrom && (prodBOM.OprNum <= oprNumTo || ! oprNumTo) { prodBOMCalc = prodBOMCalc::newBOMCalcData(BOMCalcData,prodBOM,ConsumpProposal,BOMAutoConsump,! prodBOM.ConstantReleased, shipAccError); if (prodBOMCalc.hasQty() || (endUpdate && prodBOM.backorderStatus == ProdBackStatus::Release)) { prodJournalTableData.initJournalId(); this.initTransFromProdBOM(prodJournalBOM,prodBOM); ProdBOMCalc.setProdJournalBOM(prodJournalBOM); if (ConsumpAsProposal) { prodJournalBOM.BOMConsump = prodJournalBOM.BOMProposal; prodJournalBOM.inventConsump = prodJournalBOM.inventProposal; } if (proposalAsConsump) { prodJournalBOM.BOMProposal = prodJournalBOM.BOMConsump; prodJournalBOM.inventProposal = prodJournalBOM.inventConsump; } prodBOM.ConstantReleased = noYes::Yes; prodJournalBOM.insertJournalCreate(prodJournalTransData,prodBOM); if (prodBOM.ConstantReleased != prodBOM.orig().ConstantReleased) prodBOM.doUpdate(); } } } X++: Protected void createLines() { ; this.preCreateLines(); super(); } |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |