MIGO供应商批次增强.docx

上传人:b****6 文档编号:6004374 上传时间:2023-01-02 格式:DOCX 页数:14 大小:469.32KB
下载 相关 举报
MIGO供应商批次增强.docx_第1页
第1页 / 共14页
MIGO供应商批次增强.docx_第2页
第2页 / 共14页
MIGO供应商批次增强.docx_第3页
第3页 / 共14页
MIGO供应商批次增强.docx_第4页
第4页 / 共14页
MIGO供应商批次增强.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

MIGO供应商批次增强.docx

《MIGO供应商批次增强.docx》由会员分享,可在线阅读,更多相关《MIGO供应商批次增强.docx(14页珍藏版)》请在冰豆网上搜索。

MIGO供应商批次增强.docx

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:

  TYPE zsmigo_103.

* 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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1