代码创建生产单并进展到【已评估】状态 !
public void MthPlanConfirmed()
{
xtTProductMthPlanLine m_MthPlanLine,m_UptMthPlanLine,m_OrigMthPlanLine,m_GroupMthPlanLine;
ProdTable m_ProdTable;
InventDim inventDim,inventDimLocal;
BOMId bomIdDate;
RouteId routeIdDate;
ProdId repeatProdId;
InventTable inventTable;
InventItemInventSetup inventItemInventSetup;
ProdUpdCostEstimation costEstimation;
;
m_OrigMthPlanLine.setTmp();
m_GroupMthPlanLine.setTmp();
if (Box::yesNo( strFmt( "a) BOM和工艺路线是否最新版本?\nb) 产品追溯清单是否最新版本?" ),DialogButton::Yes, "询问") == DialogButton::Yes)
{
ttsBegin;
insert_recordset m_OrigMthPlanLine(ItemId,schedulBatchNum,ProjId,PartConversionQty,DlvDate)
select ItemId,schedulBatchNUm,ProjId,PartConversionQty,DlvDate
from m_MthPlanLine
where m_MthPlanLine.VersionId == g_MthPlanTable.VersionId
&& !m_MthPlanLine.ProdId;
// 待创建生产单物料信息
while select ProjId,ItemId,schedulBatchNum,PartConversionQty from m_OrigMthPlanLine
group by ProjId,ItemId,schedulBatchNum,PartConversionQty
{
m_GroupMthPlanLine.clear();
m_GroupMthPlanLine.ItemId = m_OrigMthPlanLine.ItemId;
m_GroupMthPlanLine.ProjId = m_OrigMthPlanLine.ProjId;
m_GroupMthPlanLine.schedulBatchNum = m_OrigMthPlanLine.schedulBatchNum;
m_GroupMthPlanLine.PartConversionQty = m_OrigMthPlanLine.PartConversionQty;
m_GroupMthPlanLine.DlvDate = xtTProductMthPlanLine::getMaxOfDlvDate(m_OrigMthPlanLine.ProjId,
m_OrigMthPlanLine.ItemId,m_OrigMthPlanLine.schedulBatchNum);
m_GroupMthPlanLine.MthPlanID = xtTProductMthPlanLine::getFirstMthPlanID(m_OrigMthPlanLine.ProjId,
m_OrigMthPlanLine.ItemId,m_OrigMthPlanLine.schedulBatchNum).MthPlanID;//某些情况下无法唯一追溯
m_GroupMthPlanLine.insert();
}
// 创建生产单 有效物料清单版本 有效工艺路线
while select m_GroupMthPlanLine
{
if(g_MthPlanTable.MthPlanState == xtEMthPlanState::companentConfirm && this.getRepeatProdId(m_GroupMthPlanLine))
{
this.updateMthPlanLineRefPRrodId(m_GroupMthPlanLine,this.getRepeatProdId(m_GroupMthPlanLine));//更新月计划明细行 关联生产订单
}
else// 此计划单未执行过【部件确认】,或者执行过但是新追加行需要生成新的生产单。
{
m_ProdTable.clear();
inventTable = InventTable::find(m_GroupMthPlanLine.ItemId);
if (!inventTable.RecId)
{
throw error(strFmt(InventTable::txtNotExist(),m_GroupMthPlanLine.ItemId));
}
if (!inventTable.inventItemType().canBeProduced())
{
throw error(strFmt("@SYS78161",inventTable.ItemType));
}
m_ProdTable.initValue();
m_ProdTable.ProdId = NumberSeq::newGetNum(ProdParameters::numRefProdId()).num();
m_ProdTable.initFromInventTable(inventTable);
m_ProdTable.ItemId = m_GroupMthPlanLine.ItemId;
m_ProdTable.QtyCalc = m_GroupMthPlanLine.PartConversionQty;
m_ProdTable.QtySched = m_GroupMthPlanLine.PartConversionQty;
m_ProdTable.RemainInventPhysical = m_GroupMthPlanLine.PartConversionQty;
m_ProdTable.ProdType = ProdType::Standard;
m_ProdTable.DlvDate = m_GroupMthPlanLine.DlvDate;
m_ProdTable.BOMDate = m_GroupMthPlanLine.DlvDate;
m_ProdTable.tscReqDate = m_GroupMthPlanLine.DlvDate;
m_ProdTable.tscReqRefType = ReqRefType::ProdMthPlan;
m_ProdTable.tscReqRefId = m_GroupMthPlanLine.MthPlanID;//来源编号无法唯一追溯
m_ProdTable.CalcDate = systemDateGet();
m_ProdTable.SchedDate = systemDateGet();
m_ProdTable.LatestSchedDate = m_ProdTable.DlvDate;
m_ProdTable.SchedDate = systemDateGet();
m_ProdTable.setInventStorageDim(InventDim::find(m_ProdTable.InventDimId), inventTable);
if (inventTable.isFormulaAllowed())
{
m_ProdTable.ProdType = ProdType::Process;
}
inventDim = InventDim::find(m_ProdTable.InventDimId);
inventDim.xtInventProjId = m_GroupMthPlanLine.ProjId;
inventDimLocal = InventDim::findOrCreate(inventDim);
m_ProdTable.InventDimId = inventDimLocal.InventDimId;
inventItemInventSetup = InventItemInventSetup::find(m_GroupMthPlanLine.ItemId, m_ProdTable.InventDimId);
if (!inventItemInventSetup.RecId)
{
throw error(strFmt("@SYS5700",m_GroupMthPlanLine.ItemId, InventItemOrderSetupType::Invent));
}
if (inventItemInventSetup.isStopped())
{
throw error(strFmt("@SYS13295", m_GroupMthPlanLine.ItemId, InventItemOrderSetupType::Invent));
}
bomIdDate = BOMVersion::findActive(m_ProdTable.ItemId,m_ProdTable.BOMDate, m_ProdTable.QtySched, inventDimLocal).bomId;
routeIdDate = RouteVersion::findActive(m_ProdTable.ItemId,m_ProdTable.BOMDate, m_ProdTable.QtySched, inventDimLocal).RouteId;
if(m_ProdTable.BOMId != bomIdDate || m_ProdTable.RouteId != routeIdDate)
{
m_ProdTable.selectForUpdate(true);
m_ProdTable.bomId = bomIdDate;
m_ProdTable.RouteId = routeIdDate;
}
if (m_ProdTable.isProjMethodConsumed() && !m_ProdTable.validateWrite())
{
throw error("@SYS21628");
}
// 生产单交易记录相关表更新 ===Begin===
m_ProdTable.RemainInventPhysical = m_ProdTable.QtySched;
m_ProdTable.insertFromForm(inventDimLocal,m_ProdTable.typeClient().numberSeqProdId());
// 生产单交易记录相关表更新 ===End===
m_ProdTable.reread();
// 生产订单更新状态为 : 已估计 ==Begin===
costEstimation = ProdUpdCostEstimation::newProdId(m_ProdTable.ProdId, m_ProdTable.ProfitSet);
costEstimation.run();
// 生产订单更新状态为 : 已估计 ==End===
this.updateMthPlanLineRefPRrodId(m_GroupMthPlanLine,m_ProdTable.ProdId);//更新月计划明细行 关联生产订单
this.ChangeMthPlanTableStatus();//更改月计划状态为 部件确认
}
}
callerFormDS.executeQuery();
ttsCommit;
}
}

浙公网安备 33010602011771号