MIGO供应商批次增强.docx
- 文档编号:6004374
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:14
- 大小:469.32KB
MIGO供应商批次增强.docx
《MIGO供应商批次增强.docx》由会员分享,可在线阅读,更多相关《MIGO供应商批次增强.docx(14页珍藏版)》请在冰豆网上搜索。
MIGO供应商批次增强
MIGO增强
增强最终效果:
在MIGO界面新增一个页签用于输入供应商批次号.
1、SE11建立数据表用于存储供应商批次,表结构如下:
MANDT
MANDT
CLNT
3
0
客户端
MBLNR
MBLNR
CHAR
10
0
物料凭证编号
MJAHR
MJAHR
NUMC
4
0
物料凭证年度
ZEILE
MBLPO
NUMC
4
0
物料凭证中的项目
LICHA
ZLICHA
CHAR
30
0
供应商批次
EBELN
EBELN
CHAR
10
0
采购凭证号
EBELP
EBELP
NUMC
5
0
采购凭证的项目编号
MATNR
MATNR
CHAR
18
0
物料号
WERKS
WERKS_D
CHAR
4
0
工厂
LGORT
LGORT_D
CHAR
4
0
库存地点
CHARG
CHARG_D
CHAR
10
0
批号
2、建立结构,在屏幕数据交换时使用
3、建立表类型
设置关键字段:
4、SE80建立函数组
创建屏幕1000,
设计格式,插入供应商批次字段
创建function:
zmigo_103_get_data
FUNCTION zmigo_103_get_data.
*"----------------------------------------------------------------------
*"*"Local interface:
*" EXPORTING
*" VALUE(ES_MIGO_BADI_SCREEN_FIELDS) TYPE ZSMIGO_103
*"----------------------------------------------------------------------
* Get all data from fields of external screen
* First move all customer-fields
MOVE-CORRESPONDING zmigo_103 TO es_migo_badi_screen_fields..
ENDFUNCTION.
function:
ZMIGO_103_PUT_DATA
FUNCTION ZMIGO_103_PUT_DATA.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(IS_MIGO_BADI_SCREEN_FIELDS) TYPE ZSMIGO_103 OPTIONAL
*"----------------------------------------------------------------------
* Put all data from fields to external screen
* First fill all customer-fields
MOVE-CORRESPONDING is_migo_badi_screen_fields TO ZMIGO_103.
ENDFUNCTION.
function:
ZMIGO_103_UPDATE_DATA
FUNCTION zmigo_103_update_data.
*"----------------------------------------------------------------------
*"*"Local interface:
*" TABLES
*" IT_MIGO_BADI_EXAMPLE STRUCTURE ZMIGO_103 OPTIONAL
*"----------------------------------------------------------------------
INSERT zmigo_103 FROM TABLE it_migo_badi_example.
IF sy-subrc <> 0.
MESSAGE a398(00) WITH '收货批次更新失败 '.
ENDIF.
ENDFUNCTION.
5、SE19创建实现
6、创建执行类ZCL_IM_103_MIGO_BADI,激活Z103_MIGO_BADI
双击类
维护类属性
维护下列方法,激活所有,运行T_codeMIGO就可以看到第一个图的效果了。
在创建执行类的时候所有方法里面会对应生成相应的代码,有些方法用不到,就注释掉
不然激活的时候会报错。
method IF_EX_MB_MIGO_BADI~INIT.
* Regristration of BAdI-Implementation:
* Append class attribute GF_CLASS_ID (='MIGO_BADI_IMPLEMENTATION1') to
* regristration table.
APPEND gf_class_id TO ct_init.
endmethod.
METHOD if_ex_mb_migo_badi~pbo_detail.
DATA:
ls_extdata TYPE zsmigo_103.
* This check is obligatory, otherwise the program flow is incorrect
* (If there would be more than one implementation of BAdI MB_MIGO_BADI,
* only one subscreen would be displayed).
CHECK i_class_id = gf_class_id.
* Show screen only if there is an item
CHECK i_line_id <> 0.
* External subscreen:
* The content of global field G_NO_INPUT (set in method MODE_SET) will
* influence the number of external subsreen:
IF g_no_input IS INITIAL AND g_bwart = '103'.
e_cprog = 'SAPLZMIGO_103'.
e_dynnr = '1000'. "External fields:
Input
e_heading = '收货批次'.
ENDIF.
*101移动类型也增加输入 lanyf 2016-1-13 DEVK921012
IF g_no_input IS INITIAL AND g_bwart = '101'.
e_cprog = 'SAPLZMIGO_103'.
e_dynnr = '1000'. "External fields:
Input
e_heading = '收货批次'.
ENDIF.
IF g_no_input IS INITIAL AND g_bwart = '105'.
e_cprog = 'SAPLZMIGO_103'.
e_dynnr = '1000'. "External fields:
Input
e_heading = '供应商批次'.
ENDIF.
* Set G_LINE_ID (= line_id of item displayed on detail-tabstrip)
g_line_id = i_line_id.
* Read data
READ TABLE gt_extdata INTO ls_extdata
WITH TABLE KEY line_id = i_line_id.
* Export data to function group (for display on subscreen)
CALL FUNCTION 'ZMIGO_103_PUT_DATA'
EXPORTING
is_migo_badi_screen_fields = ls_extdata.
ENDMETHOD. "IF_EX_MB_MIGO_BADI~PBO_DETAIL
METHOD if_ex_mb_migo_badi~pai_detail.
*-----------------------------------------------------------------------
* Changing parameter E_FORCE_CHANGE can be set to 'X'. In this case
* method LINE_MODIFY is called.
* ATTENTION:
* DO NOT SET parameter E_FORCE_CHANGE = ' '. In this case you might
* overwrite parameter E_FORCE_CHANGE of another BAdI implementation.
*-----------------------------------------------------------------------
DATA:
ls_extdata_new TYPE zsmigo_103,
ls_extdata_old TYPE zsmigo_103.
* Only if a line exists
CHECK i_line_id <> 0.
* Get data from external screen
CALL FUNCTION 'ZMIGO_103_GET_DATA'
IMPORTING
es_migo_badi_screen_fields = ls_extdata_new.
* Compare new data with old data
READ TABLE gt_extdata INTO ls_extdata_old
WITH TABLE KEY line_id = i_line_id.
ls_extdata_new-line_id = i_line_id.
IF ls_extdata_old <> ls_extdata_new.
* If there were any changes, it's obligatory to force MIGO to trigger
* method LINE_MODIFY.
e_force_change = 'X'.
ENDIF.
ENDMETHOD. "IF_EX_MB_MIGO_BADI~PAI_DETAIL
METHOD if_ex_mb_migo_badi~line_modify.
DATA:
ls_extdata_old TYPE zsmigo_103,
ls_extdata_new TYPE zsmigo_103,
ls_migo_badi_exampl TYPE zmigo_103,
l_subrc TYPE sy-subrc.
* Get external data from internal table:
READ TABLE gt_extdata INTO ls_extdata_old
WITH TABLE KEY line_id = i_line_id.
l_subrc = sy-subrc.
* Update data in internal table:
IF l_subrc <> 0.
* Line is new:
If GOITEM has a reference to a material document,
* the already existing external data can be read.
IF NOT cs_goitem-mblnr IS INITIAL AND NOT cs_goitem-mjahr IS INITIAL
AND NOT cs_goitem-zeile IS INITIAL.
IF cs_goitem-bwart = '103' or cs_goitem-bwart = '101'."增强101收货批次 2016-1-13
SELECT SINGLE * FROM zmigo_103 INTO ls_migo_badi_exampl
WHERE mblnr = cs_goitem-mblnr
AND mjahr = cs_goitem-mjahr
AND zeile = cs_goitem-zeile.
IF sy-subrc = 0.
MOVE-CORRESPONDING ls_migo_badi_exampl TO ls_extdata_new.
ENDIF.
ELSEIF cs_goitem-bwart = '105' or cs_goitem-bwart = '101'."增强101收货批次 2016-1-13
SELECT SINGLE * FROM zmigo_103 INTO ls_migo_badi_exampl
* WHERE ebeln = cs_goitem-ebeln
* AND ebelp = cs_goitem-ebelp
WHERE mjahr = cs_goitem-lfbja
AND mblnr = cs_goitem-lfbnr
AND zeile = cs_goitem-lfpos.
IF sy-subrc = 0.
MOVE-CORRESPONDING ls_migo_badi_exampl TO ls_extdata_new.
ENDIF.
ENDIF.
ENDIF.
ls_extdata_new-line_id = i_line_id.
INSERT ls_extdata_new INTO TABLE gt_extdata.
ELSE.
* Line exists:
Get external data entered on BAdI-subscreeen, but only
* if line_modify was called for the item displayed in the
* 'detail tabstrip'.
CHECK g_line_id = i_line_id.
CALL FUNCTION 'ZMIGO_103_GET_DATA'
IMPORTING
es_migo_badi_screen_fields = ls_extdata_new.
ls_extdata_new-line_id = i_line_id.
* if ls_extdata_new-sgtxt <> ls_extdata_old-sgtxt.
** Field was changed on external screen
* cs_goitem-sgtxt = ls_extdata_new-sgtxt.
* else.
** Take data from GOITEM
* ls_extdata_new-sgtxt = cs_goitem-sgtxt.
* endif.
MODIFY TABLE gt_extdata FROM ls_extdata_new.
ENDIF.
IF cs_goitem-bwart = '105' OR cs_goitem-bwart = '101'.
SELECT SINGLE licha
INTO cs_goitem-licha
FROM zmigo_103
WHERE ebeln = cs_goitem-ebeln
AND ebelp = cs_goitem-ebelp
AND mjahr = cs_goitem-lfbja
AND mblnr = cs_goitem-lfbnr
AND zeile = cs_goitem-lfpos.
ENDIF.
ENDMETHOD. "IF_EX_MB_MIGO_BADI~LINE_MODIFY
METHOD IF_EX_MB_MIGO_BADI~LINE_DELETE.
DELETE TABLE gt_extdata WITH TABLE KEY line_id = i_line_id.
ENDMETHOD. "IF_EX_MB_MIGO_BADI~LINE_DELETE
METHOD IF_EX_MB_MIGO_BADI~RESET.
* Clear all internal data:
CLEAR:
gt_extdata,
g_no_input,
"gs_exdata_header,
G_BWART,
G_XS,
g_cancel,
g_line_id.
ENDMETHOD. "IF_EX_MB_MIGO_BADI~RESET
METHOD if_ex_mb_migo_badi~post_document.
DATA:
ls_migo_badi_example TYPE zmigo_103,
lt_migo_badi_example TYPE TABLE OF zmigo_103,
ls_extdata TYPE zsmigo_103,
ls_xmseg TYPE mseg,
l_xchar TYPE marc-xchar.
FIELD-SYMBOLS:
* Transaction MIGO will now post a material document.
* Any errors here MUST be issued as A-message (better:
X-message)
* Copy data from material document into internal table
LOOP AT gt_extdata INTO ls_extdata.
IF g_cancel IS INITIAL.
READ TABLE it_mseg INTO ls_xmseg
WITH KEY line_id = ls_extdata-line_id.
ELSE.
READ TABLE it_mseg INTO ls_xmseg
WITH KEY smbln = ls_extdata-mblnr
smblp = ls_extdata-zeile
sjahr = ls_extdata-mjahr.
ENDIF.
IF sy-subrc IS INITIAL.
IF ( ls_xmseg-bwart = '103' OR ls_xmseg-bwart = '101' ) AND ls_xmseg-werks = '1000'.
MOVE-CORRESPONDING ls_extdata TO ls_migo_badi_example.
* MOVE-CORRESPONDING ls_xmseg TO ls_migo_badi_example.
ls_migo_badi_example-mblnr = ls_xmseg-mblnr.
ls_migo_badi_example-zeile = ls_xmseg-zeile.
ls_migo_badi_example-mjahr = ls_xmseg-mjahr.
ls_migo_badi_example-ebeln = ls_xmseg-ebeln.
ls_migo_badi_example-ebelp = ls_xmseg-ebelp.
ls_migo_badi_example-matnr = ls_xmseg-matnr.
ls_migo_badi_example-werks = ls_xmseg-werks.
ls_migo_badi_example-lgort = ls_xmseg-lgort.
ls_migo_badi_example-charg = ls_xmseg-charg.
*判断是否为必填
SELECT SINGLE xchpf
INTO l_xchar
FROM marc
WHERE matnr = ls_xmseg-matnr
AND werks = ls_xmseg-werks
AND xchpf <> ''.
IF ls_extdata-licha IS INITIAL.
IF l_xchar IS NOT I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MIGO 供应商 批次 增强