代码创建生产单并进展到【已评估】状态 !

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;
    }
}

posted @ 2016-09-26 15:47  snowman_wx  阅读(382)  评论(0)    收藏  举报