|
|
#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;
} С уважением , Римантас |
|
|
|
|
#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). | |
|
|
#3 |
|
Участник
|
оффтоп:
а почему EVGGL ?!? |
|
|
|
|
#4 |
|
Banned
|
|
|
|
|
|
#5 |
|
Участник
|
Цитата:
. Только хочу переспросить - где поместить етот метод TCHUpdatePlannedOrderSalesPoolId , в какoй класс ? Ещё раз СПАСИБО ! Римантас |
|
|
|
|
#6 |
|
Banned
|
ReqCalc, очевидно.
|
|
|
|
|
#7 |
|
Участник
|
Евгений, правильно ли я понимаю что Ваш код обрабатывает только непосредственно связанные ReqTrans, т.е. через уровни Sales - Prod - ProdBOM - Purch или Sales - Transfer - Purch функция не работает?
|
|
|
|
|
#8 |
|
Banned
|
|
|
|
|
|
#9 |
|
Участник
|
Замечательно ... Вечером пропускали планирование - всё работает !
EVGL , простите , но ещё хочу попросить совета . В некоторых случаях планирование делает в ручную - из заказов продажи делает Explosion ( форма ReqTransExplosion ) . Здесь ваш метод действует на главную строку заказа ( продукт ) , но незаполняет для строк составляюших продукта . Может быть и для етого у вас есть решение ? ...С благодарносьтю , Римантас |
|
|
|
|
#10 |
|
Аманд
|
Цитата:
чтобы в "Спланированных заказах" были видные данные для какого заказа пордажи есть запланирована строка
|
|
|
|
|
#11 |
|
Banned
|
|
|
|
|
|
#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(); } } Добавил ети строки , так что если не нашли , то шаг назад с reqTransSettled . Действует хорошо ...Спасибо ! Римантас |
|
|
|
| За это сообщение автора поблагодарили: wojzeh (1). | |
|
|
#13 |
|
Участник
|
В нижней части показывает только один раз продажный заказ - на конечный продукт . А на всех остальных - последовательность запланированных заказов . И проблема здесь в том , как филтрировать и найти кучу информации для конкретного заказа продажи . Так что для етого в ReqPO полей маловато ...
Решение EVGL - очень хорошее . С уважением , Римантас |
|
|
|
|
|