17.01.2007, 15:08 | #1 |
Участник
|
ReqPO и ReqTrans - планирование
Здраствуйте ,
Мои шефы хотят чтобы в "Спланированных заказах" были видные данные для какого заказа пордажи есть запланирована строка . В первые я сделал как отображение через метод и он действует ( не на все строки ) . Но , как вы знаете , на такую информацию неработает поиск и филтрирование . Я буду добавлят два поля в ReqPO табличку - SalesId и CustName и заполню ети поля нужной информации . Вопрос в том , что я пока непонимаю как добиться до SalesId по настоящему . Вот мой метод отображения - и он не действует на все 100 % .. :-(( : Код: Display InventTransRefId refId( Int nRez = 1 ) { InventTransRefId cRet; ReqTrans reqTrans, reqTrans2; ReqTransCov reqCov; Salestable salTbl; CustTable cstTbl; ReqPO reqPo; ; reqTrans = this.reqTrans(); reqCov = reqTrans.selectCov(false); reqtrans2 = reqtrans.reqTransSettled(reqCov,false); if ( reqTrans2 ) { cRet = reqTrans2.RefId; salTbl = salestable::find(cRet); if ( salTbl ) { if ( nRez == 1 ) { cstTbl = CustTable::find(salTbl.CustAccount); cRet = cRet + " " + cstTbl.Name; } } else { cRet = ""; reqPo = ReqPo::find(reqTrans2.ReqPlanId,reqTrans2.RefId,false); if ( reqPo ) { reqTrans = reqPo.reqTrans(); reqCov = reqTrans.selectCov(false); reqtrans2 = reqtrans.reqTransSettled(reqCov,false); if ( reqTrans2 ) { cRet = reqTrans2.RefId; salTbl = salestable::find(cRet); if ( salTbl ) { if ( nRez == 1 ) { cstTbl = CustTable::find(salTbl.CustAccount); cRet = cRet + " " + cstTbl.Name; } } } else cRet = ""; } } } return cRet; } С уважением , Римантас |
|
17.01.2007, 16:02 | #2 |
Banned
|
Пожалуйста: приведенный ниже код копирует поле из SalesLine в ReqPO. Практически ваш случай.
X++: // EVGGL, PT0616 --> protected void TCHUpdatePlannedOrderSalesPoolId(ReqSetupDim _setupDim) { ReqTrans reqTrans; ReqTransCov reqTransCov; ReqTrans reqTransSettled; SalesPoolId salesPoolId, oldSalesPoolId; ReqPO reqPO; Map mapPlannedOrder; MapIterator mi_PlannedOrder; Map mapReqTransReceipts; ReqTransCache reqTransCache = reqPlanData.reqTransCache(); mapPlannedOrder = reqTransCache.mapPlannedOrder(); mapReqTransReceipts = reqTransCache.findReceipts(_setupDim); if (! mapPlannedOrder || ! mapReqTransReceipts) return; mi_PlannedOrder = new mapIterator(mapPlannedOrder); mi_PlannedOrder.begin(); while (mi_PlannedOrder.more()) { // ignore planned order coming from another cycle if (! mapReqTransReceipts.exists(mi_PlannedOrder.key())) { mi_PlannedOrder.next(); continue; } reqTrans = mapPlannedOrder.lookup(mi_PlannedOrder.key()); salesPoolId = ""; oldSalesPoolId = ""; if (reqTrans.CovQty && ! reqTrans.IsDerivedDirectly && ! reqTrans.IsForecastPurch && (reqTrans.RefType == ReqRefType::ItemPlannedOrder || reqTrans.RefType == ReqRefType::BOMPlannedOrder)) { reqTransCov = reqTrans.selectCovJoinTrans(true); reqTransSettled = reqTransCov.joinChild(); while (reqTransCov) { if (reqTransCov.Qty == 0) continue; if (! reqTransSettled.InventTransId || ! reqTransSettled.RefId || reqTransSettled.RefType != ReqRefType::Sales) { // There cannot be any common relation salesPoolId = ""; break; } salesPoolId = SalesLine::findInventTransId(reqTransSettled.InventTransId).TCHSalesPoolId; if (! salesPoolId) break; if (oldSalesPoolId && salesPoolId != oldSalesPoolId) { salesPoolId = ""; break; } oldSalesPoolId = salesPoolId; next reqTransCov; } if (salesPoolId) { reqPO = reqTrans.reqPo(true); reqPO.TCHSalesPoolId = salesPoolId; reqPO.doUpdate(); } } mi_PlannedOrder.next(); } } X++: ... } // EVGGL, PT0616 --> this.TCHUpdatePlannedOrderSalesPoolId(setupDim); // EVGGL, PT0616 <-- } ttscommit; } catch (Exception::Deadlock) ... |
|
|
За это сообщение автора поблагодарили: wojzeh (1), shogel (1). |
17.01.2007, 16:04 | #3 |
Участник
|
оффтоп:
а почему EVGGL ?!? |
|
17.01.2007, 16:06 | #4 |
Banned
|
|
|
17.01.2007, 16:17 | #5 |
Участник
|
Цитата:
Ещё раз СПАСИБО ! Римантас |
|
17.01.2007, 16:19 | #6 |
Banned
|
ReqCalc, очевидно.
|
|
17.01.2007, 18:03 | #7 |
Участник
|
Евгений, правильно ли я понимаю что Ваш код обрабатывает только непосредственно связанные ReqTrans, т.е. через уровни Sales - Prod - ProdBOM - Purch или Sales - Transfer - Purch функция не работает?
|
|
17.01.2007, 20:49 | #8 |
Banned
|
|
|
18.01.2007, 09:32 | #9 |
Участник
|
Замечательно ... Вечером пропускали планирование - всё работает ! EVGL , простите , но ещё хочу попросить совета . В некоторых случаях планирование делает в ручную - из заказов продажи делает Explosion ( форма ReqTransExplosion ) . Здесь ваш метод действует на главную строку заказа ( продукт ) , но незаполняет для строк составляюших продукта . Может быть и для етого у вас есть решение ? ...
С благодарносьтю , Римантас |
|
18.01.2007, 10:28 | #10 |
Аманд
|
Цитата:
чтобы в "Спланированных заказах" были видные данные для какого заказа пордажи есть запланирована строка
|
|
18.01.2007, 10:32 | #11 |
Banned
|
|
|
18.01.2007, 10:32 | #12 |
Участник
|
X++: [B] if ( !salesid && reqTransSettled ) { reqPO = reqTransSettled.reqPo(false); if ( reqPO.SalesId ) salesId = reqPO.SalesId; }[/B] if ( salesId ) { reqPO = reqTrans.reqPo(true); if ( salesid != reqPO.SalesId ) { reqPO.SalesId = salesId; reqPO.SalesName = Salestable::find(salesId,false).SalesName; reqPO.doUpdate(); } } Спасибо ! Римантас |
|
|
За это сообщение автора поблагодарили: wojzeh (1). |
18.01.2007, 10:37 | #13 |
Участник
|
В нижней части показывает только один раз продажный заказ - на конечный продукт . А на всех остальных - последовательность запланированных заказов . И проблема здесь в том , как филтрировать и найти кучу информации для конкретного заказа продажи . Так что для етого в ReqPO полей маловато ... Решение EVGL - очень хорошее .
С уважением , Римантас |
|
|
|