
SAP生产工单更改(CO02)记录详细教程.doc
9页SAP生产工单更改(C002)记录详细教程SAP生产工单更改(C002)记录详细教程In SAP system, it has not prodution orders change record. it is very pity! how to solve it? you can use below ways : 需求:SAP在更改生产工单时并没有提供详细的更改记录,查看SAP 的Notes,如果强行开启FLG_D0C (控制往更改记录CDHDR, CDPOS里 写数据)标记,在批量处理组件过多的生产工单时会导致程序运行出 错,SAP建议不开启User耍求对保护字段进行更改记录,无奈只有 使用SAP提供的增强功能,东西经过测试初步完成,发出来共享一下, 如果大家有史好的方法,发出来讨论讨论,步骤如下:1. CM0D新增一项耳ZC002,增加增强PPCOOOOlo2•查看、Debug SAP源代码,了解数据流向,主耍了解在变更工单组 件和表头未保存前这些数据存放在哪里?最后查到这两数据放在调 用出口 函数参数表:component_table, header_tableo3.设计数据表结构:ZPC002,记录更改,结构如下:MANDT MANDT CLNT 3AUFNR AUFNR CHAR 12MATNR MATNR CHAR 18FILED FIELDNAME CHAR 30AENAM AENAM CHAR 12LAEDA LAEDA DATS 8TCODE TCODE CHAR 20CHNID CDCHNGIND CHAR 1HOSTIP CHAR20 CHAR 20HOST MSH0ST2 CHAR 32VALUE_OLD CHAR20 CHAR 20VALUE_NEW CHAR20 CHAR 20TIMES CDUZEIT TIMS 64.在 EXIT_SAPLC0BT_001 的 ZXC01U01 写入代码,component_table 中的数据跟RESB中的相应保护字段值对比,得出组件更改记录,表头 更改记录由header_table与视图CAUFV对比而來。
对于因工单总数 更改导至组件数量更改的记录可以写一程序从ZPC002里分开,开放 给用户使用,其他-些更改情况请自行研究代码如下:代码通过了 User测试更正已传至生产系统,改善了保存吋的速度,不用拿更改后的工单组件与RESB里的一个个对比了 **& 包括 ZXCO1UO1 **& *TABLES:caufv, resb.DATA:BEGIN OF old resb OCCURS0,〃更改后未保存之RESB.aufnrLIKEposnrLIKEmatnrLIKErsnum LIKErsposxloekLIKELIKEbdmng objnr END OF oldLIKELIKEresb-aufnr, resb-posnr, resb-matnr, resb-rsnum, resb-rspos, resb-xloek, resb-bdmng, resb-objnr, resb.DATA: BEGIN OF new_resb OCCURS 0. 〃数据库中的 RESB.INCLUDE STRUCTURE old_resb・DATA: END OF new_resb・DATA: BEGIN OF obj_resb OCCURS 0. 〃插入的 RESBINCLUDE STRUCTURE old resb.DATA:END OF obj_resb.DATA:i_zpco02 LIKE zpco02 OCCURS 0 WITH HEADER LINE.DATA:i_temp LIKE zpco02 OCCURS 0 WITH HEADER LINE.DATA:iporg LIKE msxxlist-hostadr,ipdec(16) TYPE c, host (18) TYPE c.DATA: charl(20) TYPE c, char2(20) TYPE c.DATA: inst_flg TYPE c VALUE N‘, chan_had TYPE c VALUE N・* teco_flg TYPE c VALUE N,* read_flg TYPE c ・^BREAK-POINT.CHECK sy-tcode EQ C002・** Get user IP,hostnameCALL FUNCTION TH USER INF0,〃 Get user IP, hostnameEXPORTINGclient 二 sy-mandtuser = sy-unameIMPORTING hostaddr 二 iporgterminal 二 hostEXCEPTIONSOTHERS 二 1.**"Conv. IP addr to format xxx・ xxx・ xxx・ xxxCALL FUNCTION GWY_IPADR2STRING,〃Conv.IP addrEXPORTING ipadr 二 iporgIMPORTING string 二 ipdec.***Common var.MOVE: sy-mandt TO i_temp-mandt,sy-uname TOi_temp-aenam,sy-datum TOi_temp-laeda,sy-uzeit TOsy-tcode TOi_temp-tcode,ipdec TO i_temp-hostip, host TO i_temp-host, header_tab1e~aufnr TO i_temp-aufnr.***Check M/0 header **check if status eq ,TECOl *LOOP AT status_table WHERE objnr EQ header_table~objnr* AND stat EQ 10045・ ** MOVE:,Y,TO teco_flg.*ENDLOOP.*CHECK teco_flg NE Y・ *CIIECK read_flg NE Y・SELECT SINGLE gamng gltrp INTO (caufv-gamng, caufv-gltrp)FROM caufv WHERE aufnr EQ header_table-aufnr.** qtyIF header_tab1e-gamng NE caufv-gamng・MOVE: caufv-gamng TO charl, header_tab1e-gamng TO char2.MOVE-CORRESPONDING i_temp TO i_zpco02・MOVE:更改工单总数TO i_zpco02-filed,,U TO i_zpco02-chnid,charl TO i_zpco02-value_old,cha.r2 TO i_zpco02-value_new.APPEND i_zpco02. inst_flg 二’Y. chari—had 二Y・ENDIF.**dateIF header_table-gltrp NE caufv-gltrp・MOVE-CORRESPONDING i_temp TO i_zpco02・MOVE:更改完成时间TO i_zpco02-filed,U, TO i_zpco02-chnid,caufv-gltrp TO i_zpco02-value_old, header_table-gltrp TO i_zpco02-value_new・APPEND i_zpco02. inst_flg 二’Y.ENDIF.IF inst_flg 二’Y.INSERT zpco02 FROM TABLE i_zpco02 ACCEPTING DUPLICATE KEYS. inst_flg 二’N.ENDIF.^DELETE component_table WHERE vbkz EQ I・LOOP AT component_table WHERE vbkz EQ UOR vbkz EQ IOR vbkz EQ D.CASE component_table-vbkz.WHEN I・MOVE-CORRESPONDING i_temp TO i_zpco02.MOVE:新增组件TO i_zpco02-filed,r TO i_zpco02-chnid,TO i_zpco02-value_old, 〃old_resb-niatnr component_table-niatni TO i_zpco02-va.lue_new,新增的组件TO i_zpco02-matnr,* rea.d_flg TO i_zpco02~readf,component_table-alpos TO i_zpco02-alpos,sy-tabix TO i_zpco02-loopid・APPEND i_zpco02.inst_flg 二Y.WHEN,D・MOVE-CORRESPONDING i_temp TO i_zpco02・ MOVE:删除组件TO i_zpco02-filed, D TO i_zpco02-chnid, resb-xloek TO i_zpco02~value_old, component_table-xloek TO i_zpco02-va.lue_new, component_tab1e-matnr TO i_zpco02-matnr, * rea.d_flg TO i_zpco02~readf, component_table-alpos TO i_zpco02-alpos, sy-tabix TO i_zpco02-loopid・ APPEND i_zpco02. inst_flg 二’Y.WHEN U・SELECT SINGLE matnr bdmng INTO (resb-matnr, resb-bdmng)FROM resb WHERE aufnr EQ component_table~aufnrAND posnrEQ component_table-posnrAND matnrEQ component_table-matnrAND rsnum EQcomponent_table-rsnumAND rsposEQ component_table-rspos.IF component_table-nidtni NE resb-matnr.MOVE-CORRESPONDING i_temp TO i_zpco02.MOVE:更改组件TO i_zpco02-filed,,U TO i_zpco02-chnid, resb-matnr TO i_zpco02-value_old, component_table-niatni TO i_zpco02-va.lue_new, 更改的丁单组件TO i_zpco02-matnr,* rea.d_flg TO i_zpco02~readf。












