需求:按单按库生产的CRTD状态半成品工单重复创建问题
绑定成功案例:
SELECT DEMANDLINEID,SUPPLYORDERID,DEMANDORDERID,QTYALLOCATED,ITEM FROM ABPPMGR.SUPPLYDMDPEGPLAN WHERE ITEM='000000102002000817CZ';--前台显示 --SO:5000156623 模拟创建了成品MO:5000156623/70_1-MFG001,成品MO号供给者为半成品MO:001201126508 SELECT DEMANDORDERID,DEMANDLINEID,DEMANDTYPE,ITEM,QTYINMOVE,SOURCEDATE,SUPPLYORDERID,SUPPLYTYPE,QTYALLOCATED FROM ABPPMGR.supplydmdpegging WHERE (DEMANDORDERID='5000156623' AND DEMANDLINEID='70_1') OR DEMANDORDERID='5000156623/70_1-MFG001' ; --000000101002001849CZ 001201126508 000000102002000845CZ SELECT PRODUCTIONORDID,BOMID,ITEM,QTYORDERED,REQUIREDDATE,ROUTINGID,UDF_MO_FACTORY FROM ABPPMGR.PRODUCTIONORDERS WHERE PRODUCTIONORDID='5000156623/70_1-MFG001'; SELECT * FROM IN_SFCHEADER where so_id='5000156623' and so_line_id='70'; SELECT * FROM ABPPMGR.MST_BOMCOMPONENTSALT where alternateitem like '000000102002000817CZ%' ;--alternateitem替代料,item为主料
解决方法:
下面修改SAP_MO表是为了避免TECO,CLSD的工单写到IN_MO或IN_SFCHEADER表的PEGGED_MO_ID栏位中,导致supplydmdpegging表中无法将此工单与SO进行绑定
下面是修复当使用替料时导致CRTD绑定失败问题,原因是工艺路线数据问题导致
.
以下是因为工艺路线问题导致绑定不成功
成功绑定案例2(拆分计划行)
SELECT DEMANDLINEID,SUPPLYORDERID,DEMANDORDERID,QTYALLOCATED,ITEM FROM ABPPMGR.SUPPLYDMDPEGPLAN WHERE ITEM='000000102005000397CA';--前台显示 SELECT DEMANDORDERID,DEMANDLINEID,DEMANDTYPE,ITEM,QTYINMOVE,SOURCEDATE,SUPPLYORDERID,SUPPLYTYPE,QTYALLOCATED FROM ABPPMGR.supplydmdpegging WHERE ITEM='000000102005000397CA' ; SELECT PRODUCTIONORDID,BOMID,ITEM,QTYORDERED,REQUIREDDATE,ROUTINGID,UDF_MO_FACTORY FROM ABPPMGR.PRODUCTIONORDERS WHERE PRODUCTIONORDID LIKE '5000154378/460%'; SELECT * FROM IN_MO where so_id='5000154378' and so_line_id='460';
写入代码为
--no ASS MO yet INSERT ALL WHEN SOCOUNT =1 THEN INTO abppmgr.SUPPLYDMDPEGGING ( ENTERPRISE , ENGINE_ID , DEMANDLINEID , DEMANDORDERID , DEMANDTYPE , ITEM , QTYALLOCATED , SITEID , LOCATIONID , SUPPLYORDERID , SUPPLYTYPE , ISDEMANDLOCKED , SYS_CREATED_BY ) values( ENTERPRISE , ENGINE_ID , SO_LINE_ID , SO_ID , 'SO' , PRODUCT_ITEM , QTYORDERED , SITEID , NULL , PRODUCTIONORDID , 'MFG' , '1' , SYS_CREATED_BY ) when SOCOUNT=1 then INTO abppmgr.PRODUCTIONORDERS ( ENTERPRISE , ENGINE_ID , BOMID , ITEM , PLANNEDSTARTDATE , PRODUCTIONORDID , QTYORDERED , REQUIREDDATE , ROUTINGID , SITEID , SYS_CREATED_BY ,ISFEEDSLOCKED ,ISQTYLOCKED ,ISROUTINGLOCKED ) values(ENTERPRISE , ENGINE_ID , BOMID , PRODUCT_ITEM , PLANNEDSTARTDATE , PRODUCTIONORDID , QTYORDERED , REQUIREDDATE , ROUTINGID , SITEID , SYS_CREATED_BY ,ISFEEDSLOCKED ,ISQTYLOCKED ,ISROUTINGLOCKED) when SOCOUNT is not null then INTO abppmgr.SUPPLYDMDPEGGING ( ENTERPRISE , ENGINE_ID , DEMANDLINEID , DEMANDORDERID , DEMANDTYPE , ITEM , QTYALLOCATED , SITEID , SUPPLYORDERID , SUPPLYTYPE , ISDEMANDLOCKED , SYS_CREATED_BY ) values( ENTERPRISE , ENGINE_ID , NULL , PRODUCTIONORDID , 'MFG' , SEMI_ITEM , SEMI_QTY , SITEID , SEMI_MO , 'MFG' , '1' , SYS_CREATED_BY ) SELECT ENTERPRISE , ENGINE_ID , BOMID , SO_ID , SO_LINE_ID , SEMI_ITEM , PRODUCT_ITEM , PLANNEDSTARTDATE , PRODUCTIONORDID , QTYORDERED , SEMI_QTY , SEMI_MO , REQUIREDDATE , ROUTINGID , SITEID , SYS_CREATED_BY ,ISFEEDSLOCKED ,ISQTYLOCKED ,ISROUTINGLOCKED , SOCOUNT from ( SELECT V_ENTERPRISE ENTERPRISE , V_ENGINEID ENGINE_ID , SO.SO_ID , SO.SO_LINE_ID , DECODE(TRIM(BR.BOM_ID),NULL,NULL,''|| LTRIM(SO.ITEM_ID,'0') ||'_'|| TRIM(BR.BOM_ID)) BOMID , SO.ITEM_ID PRODUCT_ITEM , SYSDATE PLANNEDSTARTDATE , SO.SO_ID||'/'||SO. SO_LINE_ID||'-'||'MFG001' PRODUCTIONORDID , SO.ORDERED_QTY QTYORDERED , MO.QUANTITY SEMI_QTY , MO.MO_ID SEMI_MO , NVL(SO.UDF_PROMD,SO.UDF_CRSD) REQUIREDDATE , BR.ROUTING_ID ROUTINGID , V_SITEID SITEID , MO.ITEM_ID SEMI_ITEM , V_PRONAME||'_'||V_STEP SYS_CREATED_BY ,'1' ISFEEDSLOCKED ,'1' ISQTYLOCKED ,'1' ISROUTINGLOCKED, ROW_NUMBER() OVER(PARTITION BY MO.PEGGED_SO_ID,MO.PEGGED_SO_LINE_ID ORDER BY SO.SO_LINE_ID desc) SOCOUNT, ROW_NUMBER() OVER(PARTITION BY MO.PEGGED_SO_ID,MO.PEGGED_SO_LINE_ID,MO.MO_ID ORDER BY SO.SO_LINE_ID desc) RN FROM IN_SEMI_MO_LOCKED MO,IN_SALES_ORDER SO,IN_ITEMBOMROUTING BR WHERE MO.PEGGED_SO_ID=SO.SO_ID AND MO.PEGGED_SO_LINE_ID=SUBSTR(SO.SO_LINE_ID,1,INSTR(SO.SO_LINE_ID,'_')-1) AND BR.PRODUCED_ITEM_ID=SO.ITEM_ID and MO.PEGGED_MO_ID is null AND BR.siteid=SO.siteid AND EXISTS(SELECT NULL FROM IN_BOM_HEADER BH WHERE BH.BOM_ID=BR.BOM_ID AND BH.MO_BOM_MARK='0') ) WHERE RN=1 AND EXISTS (SELECT NULL FROM ABPPMGR.MST_ITEMMASTER AM WHERE PRODUCT_ITEM = AM.ITEM) AND EXISTS (SELECT NULL FROM ABPPMGR.MST_ITEMMASTER AM WHERE SEMI_ITEM = AM.ITEM) AND NOT EXISTS (SELECT NULL FROM abppmgr.SUPPLYDMDPEGGING SUP WHERE SO_ID = SUP.DEMANDORDERID AND SO_LINE_ID = SUP.DEMANDLINEID) ; COMMIT;