在SAP中通过编程更改库位号(保管员名)

这是以前写的SAP程序,特点是通过录入(更改)界面,即时驱动批输入模块,后台处理数据。程序清单如下:

REPORT ZBH NO STANDARD PAGE HEADING LINE-SIZE 95 MESSAGE-ID Z1.
*&---------------------------------------------------------------------&
*    修改帐本号(XXXX)     by Paul Feng(FQ)     2003.07.07
*          Ver1.5              Last Modified     2005.01.10
*&---------------------------------------------------------------------&

TABLES: MARA, MAKT.
DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
DATA:   WZDM(18) TYPE C, BH(18) TYPE C, WLMS LIKE MAKT-MAKTX.

SELECTION-SCREEN BEGIN OF BLOCK XGBH WITH FRAME TITLE TEXT-001.

SELECTION-SCREEN SKIP 2.
SELECT-OPTIONS: DM FOR MARA-MATNR NO-EXTENSION NO INTERVALS OBLIGATORY
                       MEMORY ID MAT.

SELECTION-SCREEN SKIP 1.


SELECTION-SCREEN END OF BLOCK XGBH.

START-OF-SELECTION.

IF NOT DM-LOW IS INITIAL.

             WZDM = DM-LOW.
             CALL FUNCTION 'ZFORMATDM'
                                       CHANGING MATERIALDM = WZDM.

             SELECT SINGLE * FROM MARA WHERE MATNR EQ WZDM.

             IF SY-SUBRC EQ 0.
                BH = MARA-BISMT.
                CALL SCREEN '0100'.
             ELSE.
                MESSAGE I079 WITH DM-LOW.
             ENDIF.
ENDIF.


END-OF-SELECTION.

FORM DYNPRO USING DYNBEGIN NAME VALUE.

  IF  DYNBEGIN = 'X'.
    CLEAR BDCDATA.
    MOVE: 'X'   TO BDCDATA-DYNBEGIN,
          NAME  TO BDCDATA-PROGRAM,
          VALUE TO BDCDATA-DYNPRO.
    APPEND BDCDATA.
  ELSE.
    CLEAR BDCDATA.
    MOVE: NAME  TO BDCDATA-FNAM,
          VALUE TO BDCDATA-FVAL.
    APPEND BDCDATA.
  ENDIF.

ENDFORM.

MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'XGBH'.
  SET TITLEBAR '100'.
  WZDM = DM-LOW.
  SHIFT WZDM LEFT DELETING LEADING '0'.
  SELECT SINGLE * FROM MAKT WHERE MATNR = DM-LOW.
  IF SY-SUBRC EQ 0.
       WLMS = MAKT-MAKTX.
  ELSE.
       WLMS = ''.
  ENDIF.


ENDMODULE.                 " STATUS_0100  OUTPUT

MODULE USER_COMMAND_0100 INPUT.

  IF SY-UCOMM EQ 'WRITE'.

         IF WZDM IS INITIAL.
            MESSAGE E096.

         ELSE.

             CALL FUNCTION 'ZFORMATDM'
                                      CHANGING MATERIALDM = WZDM.
             SELECT SINGLE * FROM MARA WHERE MATNR EQ WZDM.
             IF SY-SUBRC EQ 0.

                   PERFORM ZBHXG USING WZDM BH.  "BDC Direct Input

                   IF SY-SUBRC EQ 0.
                      MESSAGE I131 WITH '成功!'.
                   ELSE.
                      MESSAGE I131 WITH '失败!原因未知。'.
                   ENDIF.
             ELSE.
                   SHIFT WZDM LEFT DELETING LEADING '0'.
                   MESSAGE E079 WITH WZDM.
             ENDIF.
         ENDIF.

  ENDIF.

ENDMODULE.                 " USER_COMMAND_0100  INPUT

FORM ZBHXG USING    P_WZDM
                    P_BH.

perform bdc_dynpro      using 'SAPLMGMM' '0060'.
perform bdc_field       using 'BDC_CURSOR'
                              'RMMG1-MATNR'.
PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                              '/00'.
PERFORM BDC_FIELD       USING 'RMMG1-MATNR' P_WZDM.

perform bdc_dynpro      using 'SAPLMGMM' '0070'.
perform bdc_field       using 'BDC_CURSOR'
                              'MSICHTAUSW-KZSEL(01)'.

perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.

PERFORM BDC_FIELD       USING 'MSICHTAUSW-KZSEL(01)' 'X'.

perform bdc_dynpro      using 'SAPLMGMM' '4000'.
perform bdc_field       using 'BDC_OKCODE'
                              '=BU'.
perform bdc_field       using 'BDC_CURSOR'
                              'MARA-BISMT'.
perform bdc_field       using 'MARA-BISMT'
                              P_BH.
perform bdc_transaction using 'MM02'.

ENDFORM.                    " ZBHXG

FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.
  IF FVAL <> '/'.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
  ENDIF.
ENDFORM.

FORM BDC_TRANSACTION USING TCODE.
TABLES: T100.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: CTUMODE LIKE CTU_PARAMS-DISMODE VALUE 'N'.
DATA: CUPDATE LIKE CTU_PARAMS-UPDMODE VALUE 'L'.
DATA: E_GROUP(12), E_GROUP_OPENED.
DATA: E_USER(12), E_KEEP(1) TYPE C VALUE ''. " not keep session
DATA: E_HDATE LIKE SY-DATUM.

  DATA: L_MSTRING(480).
  DATA: L_SUBRC LIKE SY-SUBRC.
    REFRESH MESSTAB.
    CALL TRANSACTION TCODE USING BDCDATA
                     MODE   CTUMODE
                     UPDATE CUPDATE
                     MESSAGES INTO MESSTAB.
    L_SUBRC = SY-SUBRC.

    LOOP AT MESSTAB.
      SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
                                AND   ARBGB = MESSTAB-MSGID
                                AND   MSGNR = MESSTAB-MSGNR.
      IF SY-SUBRC = 0.
        L_MSTRING = T100-TEXT.
        IF L_MSTRING CS '&1'.
          REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
          REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
          REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
          REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
        ELSE.
          REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
          REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
          REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
          REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
        ENDIF.
        CONDENSE L_MSTRING.
        WRITE: / MESSTAB-MSGTYP, L_MSTRING(250).
      ELSE.
        WRITE: / MESSTAB.
      ENDIF.
    ENDLOOP.
    SKIP.

    IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
      IF E_GROUP_OPENED = ' '.
        CALL FUNCTION 'BDC_OPEN_GROUP'
             EXPORTING  CLIENT   = SY-MANDT
                        GROUP    = E_GROUP
                        USER     = E_USER
                        KEEP     = E_KEEP
                        HOLDDATE = E_HDATE.
         E_GROUP_OPENED = 'X'.
      ENDIF.
      CALL FUNCTION 'BDC_INSERT'
           EXPORTING TCODE     = TCODE
           TABLES    DYNPROTAB = BDCDATA.
    ENDIF.
  REFRESH BDCDATA.
  CLEAR T100.
ENDFORM.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值