SAP ABAP收货或者货物移动(MIGO,MB11,MB1A)在保存时候的增强点
增強的BADI是:MB_DOCUMENT_BADI,特別要注意的是假如你是想在點擊保存按鈕的時候根據生成的憑證號,把某些數據更新到你的自建表的話,要用第二個方法MB_DOCUMENT_UPDATE,調試可以在第一個方法MB_DOCUMENT_BEFORE_UPDATE里面調試,特別注意不能在方法MB_DOCUMENT_BEFORE_UPDATE里面寫COMMIT WORK,因為兩個方法的參數完全一樣,所以可以在第一個方法那邊調試,然后直接把所有的代碼拷貝到第二個,要注意第二個方法打斷點是無法進去的,但是他確實有執行,所以說只能在第一個方法那邊調試,下面賦一段寫的代碼吧:
?method?if_ex_mb_document_badi~mb_document_update.
??data:?gs_mseg?type??mseg.
??data:?gt_gdfh?type?table?of?ztmm_gdfh.
??data:?gs_gdfh?type?ztmm_gdfh.
??data:?gt_gdth?type?table?of?ztmm_gdth.
??data:?gs_gdth?type?ztmm_gdth.
??data:?gt_lxjj?type?table?of?ztmm_lxjjgl.
??data:?gs_lxjj?type?ztmm_lxjjgl.
??data:?gs_mkpf?type?mkpf.
??if?sy-tcode?eq?‘MIGO’?or?sy-tcode??eq?‘MB11′.
????read?table?xmkpf?into?gs_mkpf?index?1.
????loop?at?xmseg?into?gs_mseg.
??????if???gs_mseg-bwart?eq?‘201′?and?gs_mseg-sobkz?eq?”?.
????????select?single?zgngo?into?gs_lxjj-zlxjjbm?from?marc?where?matnr?eq?gs_mseg-matnr?and?werks?eq?gs_mseg-werks.
????????if?sy-subrc?eq?0.
??????????gs_lxjj-mblnr?=?gs_mseg-mblnr.
??????????gs_lxjj-matnr?=?gs_mseg-matnr.
??????????gs_lxjj-werks?=?gs_mseg-werks.
??????????gs_lxjj-bldat?=?gs_mkpf-bldat.
??????????append?gs_lxjj?to?gt_lxjj.
????????endif.
??????endif.
??????if?gs_mseg-werks?eq?‘SD00′?and?(?(?gs_mseg-bwart?eq?‘201′?and?gs_mseg-sobkz?eq?”?)??or??(?gs_mseg-bwart?eq?‘201′?and?gs_mseg-sobkz?eq?‘K’?)
??????or?(?gs_mseg-bwart?eq?‘221′?and?gs_mseg-sobkz?eq?‘Q’?)?or?(?gs_mseg-bwart?eq?‘251′?and?gs_mseg-sobkz?eq?”?)
?????or?(?gs_mseg-bwart?eq?‘251′?and?gs_mseg-sobkz?eq?‘K’?)?or?(?gs_mseg-bwart?eq?‘221′?and?gs_mseg-sobkz?eq?‘K’?)?).
*??????BREAK?ZZWANGLP.
????????gs_gdfh-mblnr?=?gs_mseg-mblnr.
????????gs_gdfh-mjahr?=?gs_mseg-mjahr.
????????gs_gdfh-bldat?=?gs_mkpf-bldat.
????????gs_gdfh-budat?=?gs_mkpf-budat.
????????gs_gdfh-cpudt?=?gs_mkpf-cpudt.
????????gs_gdfh-cputm?=?gs_mkpf-cputm.
????????gs_gdfh-mblpo?=?gs_mseg-zeile.
????????gs_gdfh-matnr?=?gs_mseg-matnr.
????????gs_gdfh-menge?=?gs_mseg-menge.
????????gs_gdfh-charg?=?gs_mseg-charg.
????????gs_gdfh-lgort?=?gs_mseg-lgort.
????????gs_gdfh-lgpla?=?gs_mseg-lgpla.
????????gs_gdfh-dmbtr?=?gs_mseg-dmbtr.
????????gs_gdfh-pspel???=?gs_mseg-ps_psp_pnr.
????????gs_gdfh-zdj???=?gs_gdfh-dmbtr?/?gs_gdfh-menge.“單價=(本位幣金額/發放數量)
**序列號:通過MBLNR&MJAHR&?MBLPO在表SER03中找到OBKNR,再通過OBKNR在表OBJK找到SERNR作為序列號更新到表ZTMM_GDFH
*????????SELECT?SINGLE?SERNR?INTO?GS_GDFH-SERNR?FROM?OBJK
*??????????JOIN?SER03?ON?SER03~OBKNR?=?OBJK~OBKNR
*????????WHERE?MBLNR?EQ?GS_MSEG-MBLNR?AND?MJAHR?EQ?GS_MSEG-MJAHR?AND?ZEILE?EQ?GS_MSEG-ZEILE.
*??????供應商:通過CHARG在表MCHA找到LIFNR
????????select?single?lifnr?into?gs_gdfh-lifnr?from?mcha?where?charg?eq?gs_gdfh-charg?and?matnr?eq?gs_gdfh-matnr?and?werks?eq?‘SD00′.
*??????合同號:通過CHARG在表EKBE中找到EBELN,再通過EBELN在表EKKO找到SUBMI。
????????select?single?submi?into?gs_gdfh-submi?from?ekko
??????????join?ekbe?on?ekbe~ebeln?=?ekko~ebeln
????????where?charg?eq?gs_gdfh-charg?and?matnr?eq?gs_gdfh-matnr?and?werks?eq?‘SD00′.
*???????采購訂單及行號:通過CHARG在表EKBE中找到EBELN,再通過EBELN在表EKPO找到EKPO-EBELP。
????????select?single?ekbe~ebeln?ebelp?into?(gs_gdfh-ebeln,gs_gdfh-ebelp)
??????????from?ekko
??????????join?ekbe?on?ekbe~ebeln?=?ekko~ebeln
??????????where?charg?eq?gs_gdfh-charg?and?matnr?eq?gs_gdfh-matnr?and?werks?eq?‘SD00′.“EBELP?EQ?GS_MSEG-ZEILE.
*????依據預留編號及預留項目編號作為關鍵字段,在表ZTMM_GDXX找到工單、作業工種(工序)、工單行號字段
????????select?single?zgd?zgx?zhxmbh?into?(gs_gdfh-zgd,gs_gdfh-zgx,gs_gdfh-zgdhh)?from?ztmm_gdxx?where?rsnum?eq?gs_mseg-rsnum?and?rspos?eq?gs_mseg-rspos.
????????if?sy-subrc?ne?0.
??????????clear?gs_gdfh.
????????else.
??????????gs_gdfh-zyfh?=?‘X’.
??????????append?gs_gdfh?to?gt_gdfh.
????????endif.
??????endif.
??????if?gs_mseg-werks?eq?‘SD00′?and?(?(?gs_mseg-bwart?eq?‘202′?and?gs_mseg-sobkz?eq?”?)?or?(?gs_mseg-bwart?eq?‘202′?and?gs_mseg-sobkz?eq?‘K’?)??or??(?gs_mseg-bwart?eq?‘222′?and?gs_mseg-sobkz?eq?‘Q’?)
??????????or?(?gs_mseg-bwart?eq?‘252′?and?gs_mseg-sobkz?eq?”?)?or?(?gs_mseg-bwart?eq?‘222′?and?gs_mseg-sobkz?eq?‘K’?)
?????????or?(?gs_mseg-bwart?eq?‘252′?and?gs_mseg-sobkz?eq?‘K’?)?).“OR?(?GS_MSEG-BWART?EQ?’242′?AND?GS_MSEG-SOBKZ?EQ?”?)dete?by?libin?20120516?bc?songwenbin
*??????BREAK?ZZWANGLP.
????????gs_gdth-mblnr?=?gs_mseg-mblnr.
????????gs_gdth-mjahr?=?gs_mseg-mjahr.
????????gs_gdth-bldat?=?gs_mkpf-bldat.
????????gs_gdth-budat?=?gs_mkpf-budat.
????????gs_gdth-cpudt?=?gs_mkpf-cpudt.
????????gs_gdth-cputm?=?gs_mkpf-cputm.
????????gs_gdth-mblpo?=?gs_mseg-zeile.
????????gs_gdth-matnr?=?gs_mseg-matnr.
????????gs_gdth-menge?=?gs_mseg-menge.
????????gs_gdth-charg?=?gs_mseg-charg.
????????gs_gdth-lgort?=?gs_mseg-lgort.
????????gs_gdth-lgpla?=?gs_mseg-lgpla.
????????gs_gdth-dmbtr?=?gs_mseg-dmbtr.
????????gs_gdth-pspel???=?gs_mseg-ps_psp_pnr.
????????gs_gdth-zdj???=?gs_gdth-dmbtr?/?gs_gdth-menge.“單價=(本位幣金額/發放數量)
**序列號:通過MBLNR&MJAHR&?MBLPO在表SER03中找到OBKNR,再通過OBKNR在表OBJK找到SERNR作為序列號更新到表ZTMM_GDFH
*????????SELECT?SINGLE?SERNR?INTO?GS_GDFH-SERNR?FROM?OBJK
*??????????JOIN?SER03?ON?SER03~OBKNR?=?OBJK~OBKNR
*????????WHERE?MBLNR?EQ?GS_MSEG-MBLNR?AND?MJAHR?EQ?GS_MSEG-MJAHR?AND?ZEILE?EQ?GS_MSEG-ZEILE.
*????依據預留編號及預留項目編號作為關鍵字段,在表ZTMM_GDXX找到工單、作業工種(工序)、工單行號字段
????????select?single?zgd?zgx?zhxmbh?into?(gs_gdth-zgd,gs_gdth-zgx,gs_gdth-zgdhh)?from?ztmm_gdxx?where?rsnum?eq?gs_mseg-rsnum?and?rspos?eq?gs_mseg-rspos.
????????if?sy-subrc?ne?0.
??????????clear?gs_gdfh.
????????else.
??????????gs_gdth-zyfh?=?‘X’.
??????????append?gs_gdth?to?gt_gdth.
????????endif.
??????endif.
????endloop.
????if?gt_gdfh?is?not?initial.
??????modify?ztmm_gdfh?from?table?gt_gdfh.
????endif.
????if?gt_gdth?is?not?initial.
??????modify?ztmm_gdth?from?table?gt_gdth.
????endif.
????if?gt_lxjj?is?not?initial.
??????modify?ztmm_lxjjgl?from?table?gt_lxjj.
????endif.
??endif.
endmethod.
總結
以上是生活随笔為你收集整理的SAP ABAP收货或者货物移动(MIGO,MB11,MB1A)在保存时候的增强点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel单元格里面提取或去掉某些字符
- 下一篇: MIGO的屏幕增强