ABAP程序BDC调用F110的功能Demo

35 篇文章 1 订阅

本程序是通过BDC的方式来调用F110的功能,仅供参考

REPORT ZFIR_F110 MESSAGE-ID 00.

*&---------------------------------------------------------------------*
*& Include
*&---------------------------------------------------------------------*
INCLUDE ZFIR_F110_TOP.

INCLUDE ZFIR_F110_F01.

*&---------------------------------------------------------------------*
*& Initialization
*&---------------------------------------------------------------------*
INITIALIZATION.
  PERFORM FRM_INIT_DATA.


*&---------------------------------------------------------------------*
*& At Selection-Screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.

*&---------------------------------------------------------------------*
*& Start-Of-Selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM FRM_CHECK_INPUT.
  IF P_FKJY = GV_X.
    PERFORM FRM_CREATE_FKJY. "创建付款建议
  ELSE.
    PERFORM FRM_EXE_FKJY. "运行付款建议
  ENDIF.

**&---------------------------------------------------------------------*
**& End-Of-Selection
**&---------------------------------------------------------------------*
*END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& 包含               ZFIR_F110_TOP
*&---------------------------------------------------------------------*
TABLES: REGUH,REGUP,LFA1,KNA1,BSEG.

CONSTANTS: GV_X TYPE C VALUE 'X' .
DATA: GT_BDCDATA TYPE TABLE OF BDCDATA,
      GS_BDCDATA TYPE BDCDATA.
DATA: GT_MESSTAB TYPE TABLE OF BDCMSGCOLL,
      GS_MESSTAB TYPE BDCMSGCOLL.

DATA: GT_REGUP TYPE TABLE OF REGUP,
      GS_REGUP TYPE REGUP.


DATA: BEGIN OF GS_ALV.
        INCLUDE STRUCTURE REGUP.
DATA: TYPE ,
        MESS,
      END OF GS_ALV.
DATA: GT_ALV LIKE TABLE OF GS_ALV.
DATA: GV_REPID    TYPE SY-REPID.

TYPES: BEGIN OF TY_T001,
         BUKRS TYPE T001-BUKRS,
         LAND1 TYPE T001-LAND1,
         WAERS TYPE T001-WAERS,
       END OF TY_T001.

DATA: GT_T001 TYPE TABLE OF TY_T001,
      GS_T001 TYPE TY_T001.

DATA: GT_FIELDCAT TYPE LVC_T_FCAT, "SLIS_T_FIELDCAT_ALV,
      GS_LAYOUT   TYPE LVC_S_LAYO. "SLIS_LAYOUT_ALV.

DATA : GT_BAPIRET TYPE  STANDARD  TABLE  OF BAPIRET2,
       GS_BAPIRET TYPE BAPIRET2.

DATA: GV_ERR.
DATA: GV_LAUFI TYPE REGUH-LAUFI,
      GV_LAUFD TYPE REGUH-LAUFD.

DATA: GR_TABLE   TYPE  REF  TO CL_SALV_TABLE .
DEFINE M_ADD_MSG.
  GS_BAPIRET-TYPE      =  &1 .
  GS_BAPIRET-ID        =  &2 .
  GS_BAPIRET-NUMBER    =  &3 .
  GS_BAPIRET-MESSAGE   =  &4.
  APPEND GS_BAPIRET  TO  GT_BAPIRET .
  CLEAR GS_BAPIRET .
END-OF-DEFINITION.

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

  SELECT-OPTIONS:
              S_ZBUKR FOR REGUH-ZBUKR  MODIF ID OS1,
              S_ZWELS FOR BSEG-ZLSCH  MODIF ID OS1.
  PARAMETERS:
    P_NEDAT TYPE SY-DATUM  MODIF ID OP1,
    P_BUDAT TYPE SY-DATUM  MODIF ID OP1.
  SELECT-OPTIONS:
              S_WAERS FOR REGUH-WAERS MODIF ID M1,
              S_LIFNR FOR REGUH-LIFNR MODIF ID M1,
              S_KTOKK FOR LFA1-KTOKK  MODIF ID M1,
              S_KUNNR FOR REGUH-KUNNR MODIF ID M1,
              S_KTOKD FOR KNA1-KTOKD  MODIF ID M1.
  PARAMETERS:
    P_LAUFD TYPE REGUH-LAUFD  MODIF ID OP2,
    P_LAUFI TYPE REGUH-LAUFI  MODIF ID OP2.

SELECTION-SCREEN END OF BLOCK BO1.

SELECTION-SCREEN BEGIN OF BLOCK BO2 WITH FRAME TITLE TEXT-002.
  PARAMETERS: P_FKJY TYPE C RADIOBUTTON GROUP GR1 DEFAULT 'X' USER-COMMAND UCOM,
              P_FKYX TYPE C RADIOBUTTON GROUP GR1.
SELECTION-SCREEN END OF BLOCK BO2.

*&---------------------------------------------------------------------*
*& At Selection-Screen Output
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  PERFORM FRM_INIT_SCREEN.

AT SELECTION-SCREEN ON S_ZBUKR.
  PERFORM FRM_CHECK_BUKRS.

AT SELECTION-SCREEN ON S_ZWELS.
  PERFORM FRM_CHECK_ZWELS.

AT SELECTION-SCREEN ON P_NEDAT.
  PERFORM FRM_CHECK_NEDAT.

AT SELECTION-SCREEN ON P_BUDAT.
  PERFORM FRM_CHECK_BUDAT.

AT SELECTION-SCREEN ON P_LAUFD.
  PERFORM FRM_CHECK_LAUFD.

AT SELECTION-SCREEN ON P_LAUFI.
  PERFORM FRM_CHECK_LAUFI.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAUFD.
  PERFORM FRM_F4_P_LAUFD.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAUFI.
  PERFORM FRM_F4_P_LAUFI.
*&---------------------------------------------------------------------*
*& 包含               ZFIR_F110_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_INIT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_INIT_DATA .
  P_NEDAT = SY-DATUM.
  P_BUDAT = SY-DATUM.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_INIT_SCREEN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_INIT_SCREEN .
  LOOP AT SCREEN.
    IF SCREEN-NAME = 'P_LAUFI'.
      SCREEN-LENGTH = 5.
    ENDIF.

    IF SCREEN-GROUP1 = 'OP1' OR
       SCREEN-GROUP1 = 'OP2' OR
       SCREEN-GROUP1 = 'OS1'.
      SCREEN-REQUIRED = 2.
    ENDIF.
    IF P_FKJY = GV_X.
      IF SCREEN-GROUP1 = 'OP2'.
        SCREEN-ACTIVE = 0.
      ENDIF.
    ELSEIF P_FKYX = GV_X.
      IF SCREEN-GROUP1 = 'OS1' OR
        SCREEN-GROUP1 = 'OP1' OR
       SCREEN-GROUP1 = 'M1'.
        SCREEN-ACTIVE = 0.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_F4_P_LAUFD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_F4_P_LAUFD .
  DATA:    BEGIN OF LT_TLAUFK OCCURS 1.
             INCLUDE STRUCTURE ILAUFK.
  DATA:    END OF LT_TLAUFK.
  DATA: LV_XF4_C1 TYPE C.
  REFRESH LT_TLAUFK.
  LT_TLAUFK-LAUFK = SPACE.
  LT_TLAUFK-SIGN  = 'I'.
  APPEND LT_TLAUFK.
  CALL FUNCTION 'F4_ZAHLLAUF'
    EXPORTING
      F1TYP            = 'D'
      F2NME            = 'F110V-LAUFI'
    IMPORTING
      LAUFD            = P_LAUFD
      LAUFI            = P_LAUFI
      NOTHING_SELECTED = LV_XF4_C1
    TABLES
      LAUFK            = LT_TLAUFK.
  IF LV_XF4_C1 IS INITIAL.
*    LEAVE TO SCREEN 200.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_F4_P_LAUFI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_F4_P_LAUFI .
  DATA:    BEGIN OF LT_TLAUFK OCCURS 1.
             INCLUDE STRUCTURE ILAUFK.
  DATA:    END OF LT_TLAUFK.
  DATA: LV_XF4_C1 TYPE C.
  REFRESH LT_TLAUFK.
  LT_TLAUFK-LAUFK = SPACE.
  LT_TLAUFK-SIGN  = 'I'.
  APPEND LT_TLAUFK.
  CALL FUNCTION 'F4_ZAHLLAUF'
    EXPORTING
      F1TYP            = 'D'
      F2NME            = 'F110V-LAUFI'
    IMPORTING
      LAUFD            = P_LAUFD
      LAUFI            = P_LAUFI
      NOTHING_SELECTED = LV_XF4_C1
    TABLES
      LAUFK            = LT_TLAUFK.
  IF LV_XF4_C1 IS INITIAL.
*    LEAVE TO SCREEN 200.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_BUKRS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_BUKRS .
  IF P_FKJY = GV_X AND SY-UCOMM = 'ONLI'.
    IF S_ZBUKR[] IS   INITIAL.
      MESSAGE S001(00) WITH '请输入公司代码' DISPLAY LIKE 'E'.
      GV_ERR = GV_X.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_ZWELS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_ZWELS .
  IF P_FKJY = GV_X AND SY-UCOMM = 'ONLI'.
    IF S_ZWELS[] IS INITIAL.
      MESSAGE S001(00) WITH '请输入付款方式' DISPLAY LIKE'E'.
      GV_ERR = GV_X.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_NEDAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_NEDAT .
  IF P_FKJY = GV_X AND SY-UCOMM = 'ONLI'.
    IF P_NEDAT IS INITIAL.
      MESSAGE S001(00) WITH '请输入到期日期' DISPLAY LIKE 'E'.
      GV_ERR = GV_X.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_BUDAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_BUDAT .
  IF P_FKJY = GV_X AND SY-UCOMM = 'ONLI'.
    IF P_BUDAT IS INITIAL.
      MESSAGE S001(00) WITH '请输入过账日期' DISPLAY LIKE 'E'.
      GV_ERR = GV_X.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_LAUFD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_LAUFD .
  IF P_FKYX = GV_X AND SY-UCOMM = 'ONLI'.
    IF P_LAUFD  IS INITIAL.
      MESSAGE S001(00) WITH '请输入运行日期' DISPLAY LIKE 'E'.
      GV_ERR = GV_X.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_LAUFI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_LAUFI .
  IF P_FKYX = GV_X AND SY-UCOMM = 'ONLI'.
    IF P_LAUFI IS INITIAL.
      MESSAGE S001(00) WITH '请输入附加标识' DISPLAY LIKE'E'.
      GV_ERR = GV_X.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_INPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_INPUT .
  IF GV_ERR = 'X'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  IF P_FKJY = 'X'.
* 获取公司代码
    SELECT BUKRS,LAND1,WAERS
      FROM T001
      INTO TABLE @GT_T001
     WHERE BUKRS IN @S_ZBUKR
       AND WAERS IN @S_WAERS.
    SORT GT_T001 BY LAND1.

    IF GT_T001[] IS INITIAL.
      MESSAGE S001(00) WITH '公司代码不存在' DISPLAY LIKE 'E'.
      LEAVE LIST-PROCESSING.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CREATE_FKJY .


  " DBC创建参数
  PERFORM FRM_CREATE_PARAMETER.


* 返回消息
  IF GT_BAPIRET[] IS NOT INITIAL AND SY-BATCH = ''.
    TRY .
        CL_SALV_TABLE=>FACTORY(
          IMPORTING
            R_SALV_TABLE = GR_TABLE
          CHANGING
            T_TABLE      = GT_BAPIRET ).
      CATCH CX_SALV_MSG .                               "#EC NO_HANDLER
    ENDTRY .

    DATA : LR_COLUMNS  TYPE  REF  TO CL_SALV_COLUMNS . "All Column Objects

    LR_COLUMNS  = GR_TABLE->GET_COLUMNS( ).
    LR_COLUMNS->SET_OPTIMIZE(  'X'  ) .

*弹出框
    GR_TABLE->SET_SCREEN_POPUP(
      START_COLUMN = 1 "起始列
      END_COLUMN   = 100 "结束列
      START_LINE   = 1 "起始行
      END_LINE     = 10 ). "结束行

    GR_TABLE->DISPLAY( ).
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_PARAMETER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CREATE_PARAMETER .

  DATA: LV_RC TYPE I.
  DATA: LX_AUTH_CHECK TYPE REF TO CX_SY_AUTHORIZATION_ERROR.
  DATA: LV_TEXT  TYPE STRING,
        LV_TEXT1 TYPE STRING.
  DATA: LV_NEDAT TYPE SY-DATUM.
  DATA: LV_DATE TYPE CHAR10.

  DATA: LV_BUKLS TYPE F110V-BUKLS.
  DATA: LV_LIST1 TYPE F110V-LIST1.
  DATA: LV_FIELD TYPE CHAR30.
  DATA: LV_IND   TYPE NUMC2.
  DATA: LV_LAND1 TYPE T001-LAND1.
  DATA: LV_ZWELS TYPE REGUP-ZWELS.

  DATA: LV_NUMC TYPE NUMC4.
  RANGES: LR_BUKRS FOR T001-BUKRS.
* 获取公司代码

  DATA(LT_T001_TEM) = GT_T001[].
  SORT LT_T001_TEM BY LAND1.
  DELETE ADJACENT DUPLICATES FROM LT_T001_TEM COMPARING LAND1.


* 获取付款条件
  IF GT_T001[] IS NOT INITIAL.
    SELECT LAND1,ZLSCH
      FROM T042Z
      INTO TABLE @DATA(LT_T042)
       FOR ALL ENTRIES IN @GT_T001
     WHERE LAND1 = @GT_T001-LAND1
       AND ZLSCH IN @S_ZWELS.
  ENDIF.
* 获取供应商
  IF S_LIFNR[] IS NOT INITIAL OR S_KTOKK[] IS NOT INITIAL.
    SELECT LIFNR
      FROM LFA1
      INTO TABLE @DATA(LT_LFA1)
     WHERE LIFNR IN @S_LIFNR
       AND KTOKK IN @S_KTOKK.
  ENDIF.
* 获取客户
  IF S_KUNNR[] IS NOT INITIAL OR S_KTOKD[] IS NOT INITIAL.
    SELECT KUNNR
      FROM KNA1
      INTO TABLE @DATA(LT_KNA1)
     WHERE KUNNR IN @S_KUNNR
       AND KTOKD IN @S_KTOKD.
  ENDIF.

  LOOP AT LT_T001_TEM INTO DATA(LS_T001_TEM).
    DATA(LT_T001) = GT_T001[].
    DELETE LT_T001 WHERE LAND1 NE LS_T001_TEM-LAND1.

    CLEAR:LV_NUMC,GV_LAUFI,GV_LAUFD.

    REFRESH:GT_BDCDATA,GT_MESSTAB.
* 获取附加标识
    SELECT MAX( LAUFI )
      FROM REGUV
      INTO @DATA(LV_LAUFI)
     WHERE LAUFD = @SY-DATUM
       AND LAUFI LIKE 'V%'.

    IF LV_LAUFI IS NOT INITIAL.
      LV_NUMC  = LV_LAUFI+1(4).
      LV_NUMC = LV_NUMC + 1.
      GV_LAUFI = 'V' && LV_NUMC.
    ELSE.
      GV_LAUFI = 'V0001'.
    ENDIF.
    GV_LAUFD = SY-DATUM.

    LV_NEDAT = SY-DATUM + 1.

    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
    PERFORM FRM_BDC_FIELD       USING 'F110V-LAUFD' "运行日期
                                  GV_LAUFD.
    PERFORM FRM_BDC_FIELD       USING 'F110V-LAUFI' "标识
                                  GV_LAUFI.
    PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                  '=PAR'.

    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
    PERFORM FRM_BDC_FIELD       USING 'F110C-BUDAT' "过账日期
                                  P_BUDAT.
    PERFORM FRM_BDC_FIELD       USING 'F110C-GRDAT' "输入日期
                                  GV_LAUFD.
    PERFORM FRM_BDC_FIELD       USING 'F110V-FDEBI' "客户项目到期日
                                  P_NEDAT.

    REFRESH LR_BUKRS.

    DO 10 TIMES.
      CLEAR LV_IND.
      CLEAR: LV_BUKLS,LV_ZWELS.
      DO 3 TIMES.
        CLEAR: LV_BUKLS,LV_ZWELS.
        LOOP AT LT_T001 INTO DATA(LS_T001) FROM 1 TO 10.  "每次最多拼接10个公司代码
          CLEAR LV_LAND1.
          LV_LAND1 = LS_T001-LAND1.

          CONCATENATE LS_T001-BUKRS LV_BUKLS INTO LV_BUKLS SEPARATED BY ','.
          LR_BUKRS-SIGN = 'I'. LR_BUKRS-OPTION = 'EQ'. LR_BUKRS-LOW = LS_T001-BUKRS .
          APPEND LR_BUKRS.
          CLEAR LR_BUKRS.
          CLEAR:LS_T001.
        ENDLOOP.
        IF LV_BUKLS IS NOT INITIAL.
          DATA(LV_LEN) = STRLEN( LV_BUKLS ).
          DATA(LV_LEN_1) = LV_LEN - 1.
          LV_BUKLS =  LV_BUKLS+0(LV_LEN_1).

          LOOP AT LT_T042 INTO DATA(LS_T042) WHERE LAND1 = LV_LAND1.
            LV_ZWELS = LV_ZWELS && LS_T042-ZLSCH.
          ENDLOOP.

          LV_IND = LV_IND + 1.
          CLEAR:LV_FIELD.
          LV_FIELD = 'F110V-BUKLS(' && LV_IND && ')'.
          PERFORM FRM_BDC_FIELD       USING LV_FIELD
                                        LV_BUKLS.  "公司代码
          CLEAR:LV_FIELD.
          LV_FIELD = 'F110V-ZWELS(' && LV_IND && ')'.
          PERFORM FRM_BDC_FIELD       USING LV_FIELD
                                        LV_ZWELS.  "付款方式
          CLEAR:LV_FIELD.
          LV_FIELD = 'F110V-NEDAT(' && LV_IND && ')'.
          PERFORM FRM_BDC_FIELD       USING LV_FIELD
                                        LV_NEDAT.  "下一记账日期
          DELETE LT_T001 WHERE BUKRS IN LR_BUKRS.
          REFRESH LR_BUKRS.
          IF LT_T001[] IS INITIAL.
            EXIT.
          ENDIF.
        ELSE.
          EXIT.
        ENDIF.
        CLEAR:LV_LEN,LV_LEN_1.
      ENDDO.
      IF LT_T001[] IS INITIAL.
        EXIT.
      ENDIF.
      PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'. "超过3行要点下一页
      PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                    '=P+'.
      CLEAR:LV_LEN,LV_LEN_1.
    ENDDO.
    "供应商不为空
    IF LT_LFA1[] IS NOT INITIAL.
      PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                    '=%00170040000587980'.
      PERFORM FRM_BDC_DYNPRO      USING 'SAPLALDB' '3000'.
      "复制内表到剪切板
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
        EXPORTING
          NO_AUTH_CHECK        = GV_X
        IMPORTING
          DATA                 = LT_LFA1
        CHANGING
          RC                   = LV_RC
        EXCEPTIONS
          CNTL_ERROR           = 1
          ERROR_NO_GUI         = 2
          NOT_SUPPORTED_BY_GUI = 3
          NO_AUTHORITY         = 4
          OTHERS               = 5.

      PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                    '=CLIP'.
      PERFORM FRM_BDC_DYNPRO      USING 'SAPLALDB' '3000'.
      PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                    '=ACPT'.
    ENDIF.

    "客户不为空
    IF LT_KNA1[] IS NOT INITIAL.
      PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                    '=%00270040000587980'.
      PERFORM FRM_BDC_DYNPRO      USING 'SAPLALDB' '3000'.
      "复制内表到剪切板
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
        EXPORTING
          NO_AUTH_CHECK        = GV_X
        IMPORTING
          DATA                 = LT_KNA1
        CHANGING
          RC                   = LV_RC
        EXCEPTIONS
          CNTL_ERROR           = 1
          ERROR_NO_GUI         = 2
          NOT_SUPPORTED_BY_GUI = 3
          NO_AUTHORITY         = 4
          OTHERS               = 5.

      PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                    '=CLIP'.
      PERFORM FRM_BDC_DYNPRO      USING 'SAPLALDB' '3000'.
      PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                    '=ACPT'.
    ENDIF.

    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
    PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                  '=SEL'.

    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
    CLEAR LV_LIST1.
    DATA(LT_T001_N) = GT_T001[].
    DELETE LT_T001_N WHERE LAND1 NE LS_T001_TEM-LAND1.
    SORT LT_T001_N BY WAERS.
    DELETE ADJACENT DUPLICATES FROM LT_T001_N COMPARING WAERS.
    IF LINES( LT_T001_N ) > 1.
      LOOP AT LT_T001_N INTO LS_T001.
        CONCATENATE LV_LIST1 LS_T001-WAERS INTO LV_LIST1 SEPARATED BY ','.
      ENDLOOP.
      CLEAR: LV_LEN,LV_LEN_1.
      LV_LEN = STRLEN( LV_LIST1 ).
      LV_LEN_1 = LV_LEN - 1.
      LV_LIST1 =  LV_LIST1+0(LV_LEN_1).
      CONCATENATE '(' LV_LIST1 ')' INTO LV_LIST1.
    ELSE.
      READ TABLE LT_T001_N INTO LS_T001 INDEX 1.
      LV_LIST1 = LS_T001-WAERS.
    ENDIF.

    IF LV_LIST1 IS NOT INITIAL.


      PERFORM FRM_BDC_FIELD       USING 'F110V-TEXT1(01)'
                                    'BKPF-WAERS'.
      PERFORM FRM_BDC_FIELD       USING 'F110V-LIST1(01)'
                                    LV_LIST1.  "货币

    ENDIF.
    CLEAR LV_LIST1.

*  IF LV_LIST1 IS NOT INITIAL.
*    PERFORM FRM_BDC_FIELD       USING 'F110V-TEXT1(02)'
*                                  'BSEG-BELNR'.
*    PERFORM FRM_BDC_FIELD       USING 'F110V-LIST1(02)'
*                                  LV_LIST1.
*  ENDIF.
    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
    PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                  '=LOG'.
    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.

    PERFORM FRM_BDC_FIELD       USING 'F110V-XTRFA'
                                 GV_X.
    PERFORM FRM_BDC_FIELD       USING 'F110V-XTRZW'
                                  GV_X.
    PERFORM FRM_BDC_FIELD       USING 'F110V-XTRBL'
                                  GV_X.

    PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                  '=SICH'.
    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
    PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                  '/EBCK'.
    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
    PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                  '/EBCK'.

    REFRESH GT_MESSTAB.
    TRY.
        CALL TRANSACTION 'F110' WITH AUTHORITY-CHECK USING GT_BDCDATA
                         MODE   'N'"P_MODE
                         UPDATE 'S'
                         MESSAGES INTO GT_MESSTAB.
      CATCH CX_SY_AUTHORIZATION_ERROR INTO LX_AUTH_CHECK.
*     Authorization missing for user when executing transaction
        LV_TEXT = LX_AUTH_CHECK->GET_TEXT( ).
        SY-SUBRC = 99.
    ENDTRY.


    IF SY-SUBRC = 99.
*      MESSAGE S001 WITH LV_TEXT DISPLAY LIKE 'E'.
      M_ADD_MSG 'E' '00' '001' LV_TEXT.

    ENDIF.


    CLEAR GS_MESSTAB.
    READ TABLE GT_MESSTAB INTO GS_MESSTAB WITH KEY MSGID = 'F0'
                                                   MSGNR = '010'.
    IF SY-SUBRC = 0.
      MESSAGE ID     GS_MESSTAB-MSGID
              TYPE   GS_MESSTAB-MSGTYP
              NUMBER GS_MESSTAB-MSGNR
              INTO LV_TEXT
              WITH GS_MESSTAB-MSGV1
                   GS_MESSTAB-MSGV2
                   GS_MESSTAB-MSGV3
                   GS_MESSTAB-MSGV4.
      SY-SUBRC = 0.
*      MESSAGE S001 WITH LV_TEXT.
      M_ADD_MSG 'S' '00' '001' LV_TEXT.
      WAIT UP TO 10 SECONDS.
    ELSE.
      LOOP AT GT_MESSTAB INTO GS_MESSTAB.
        MESSAGE ID     GS_MESSTAB-MSGID
                TYPE   GS_MESSTAB-MSGTYP
                NUMBER GS_MESSTAB-MSGNR
                INTO LV_TEXT
                WITH GS_MESSTAB-MSGV1
                     GS_MESSTAB-MSGV2
                     GS_MESSTAB-MSGV3
                     GS_MESSTAB-MSGV4.

        LV_TEXT1 = LV_TEXT1 && LV_TEXT.
        CLEAR GS_MESSTAB.
        M_ADD_MSG 'E' '00' '001' LV_TEXT.
      ENDLOOP.
      SY-SUBRC = 10.
*      MESSAGE S001 WITH LV_TEXT1 DISPLAY LIKE 'E'.
*      M_ADD_MSG 'E' '00' '001' LV_TEXT1.

    ENDIF.

    IF SY-SUBRC = 0.
      " BDC 运行建议
      PERFORM FRM_CREATE_PROPOSAL USING GV_LAUFD GV_LAUFI.

    ENDIF.
    CLEAR LS_T001_TEM.
  ENDLOOP.
ENDFORM.


*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM FRM_BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR GS_BDCDATA.
  GS_BDCDATA-PROGRAM  = PROGRAM.
  GS_BDCDATA-DYNPRO   = DYNPRO.
  GS_BDCDATA-DYNBEGIN = GV_X.
  APPEND GS_BDCDATA TO GT_BDCDATA.
ENDFORM.                    "FRM_BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM FRM_BDC_FIELD USING FNAM FVAL.

  CLEAR GS_BDCDATA.
  GS_BDCDATA-FNAM = FNAM.
  GS_BDCDATA-FVAL = FVAL.
  APPEND GS_BDCDATA TO GT_BDCDATA.

ENDFORM.                    "FRM_BDC_FIELD
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_PROPOSAL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CREATE_PROPOSAL USING PV_LAUFD PV_LAUFI.

  DATA: LX_AUTH_CHECK TYPE REF TO CX_SY_AUTHORIZATION_ERROR.
  DATA: LV_TEXT  TYPE STRING,
        LV_TEXT1 TYPE STRING.
  REFRESH:GT_BDCDATA,GT_MESSTAB.
  SELECT COUNT(*)
    FROM REGUV
   WHERE LAUFD = PV_LAUFD
     AND LAUFI = PV_LAUFI.
  IF SY-SUBRC = 0.
    REFRESH: GT_BDCDATA,GT_MESSTAB.
    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
    PERFORM FRM_BDC_FIELD       USING 'F110V-LAUFD'
                                  PV_LAUFD.
    PERFORM FRM_BDC_FIELD       USING 'F110V-LAUFI'
                                  PV_LAUFI.
    PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                  '=VOEX'.
    PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '1106'.
    PERFORM FRM_BDC_FIELD       USING 'F110V-STRDT'
                                  PV_LAUFD.
    PERFORM FRM_BDC_FIELD       USING 'F110V-XSTRF'
                                  GV_X.

    REFRESH GT_MESSTAB.
    TRY.
        CALL TRANSACTION 'F110' WITH AUTHORITY-CHECK USING GT_BDCDATA
                         MODE   'N'"P_MODE
                         UPDATE 'S'
                         MESSAGES INTO GT_MESSTAB.
      CATCH CX_SY_AUTHORIZATION_ERROR INTO LX_AUTH_CHECK.
*     Authorization missing for user when executing transaction
        LV_TEXT = LX_AUTH_CHECK->GET_TEXT( ).
        SY-SUBRC = 99.
    ENDTRY.
    IF SY-SUBRC = 99.
      M_ADD_MSG 'E' '00' '001' LV_TEXT.
*      MESSAGE S001 WITH LV_TEXT DISPLAY LIKE 'E'.
*      LEAVE LIST-PROCESSING.
    ENDIF.
    CLEAR GS_MESSTAB.
    READ TABLE GT_MESSTAB INTO GS_MESSTAB WITH KEY MSGID = 'F0' MSGNR = '084'.
    IF SY-SUBRC = 0.
      MESSAGE ID     GS_MESSTAB-MSGID
              TYPE   GS_MESSTAB-MSGTYP
              NUMBER GS_MESSTAB-MSGNR
              INTO LV_TEXT
              WITH GS_MESSTAB-MSGV1
                   GS_MESSTAB-MSGV2
                   GS_MESSTAB-MSGV3
                   GS_MESSTAB-MSGV4.
      M_ADD_MSG 'S' '00' '001' LV_TEXT.
*      MESSAGE S001 WITH LV_TEXT.
*      SY-SUBRC = 0.
    ELSE.
      LOOP AT GT_MESSTAB INTO GS_MESSTAB.
        MESSAGE ID     GS_MESSTAB-MSGID
                TYPE   GS_MESSTAB-MSGTYP
                NUMBER GS_MESSTAB-MSGNR
                INTO LV_TEXT
                WITH GS_MESSTAB-MSGV1
                     GS_MESSTAB-MSGV2
                     GS_MESSTAB-MSGV3
                     GS_MESSTAB-MSGV4.

        LV_TEXT1 = LV_TEXT1 && LV_TEXT.
        CLEAR GS_MESSTAB.
        M_ADD_MSG 'E' '00' '001' LV_TEXT.
      ENDLOOP.
*      M_ADD_MSG 'E' '00' '001' LV_TEXT1.
*      SY-SUBRC = 10.
    ENDIF.
*    IF SY-SUBRC NE 0.
*      "BDC删除建议参数
*      PERFORM FRM_DELETE_PARAMETER.
*
*      MESSAGE S001 WITH LV_TEXT1 DISPLAY LIKE 'E'.
*      LEAVE LIST-PROCESSING.
*    ENDIF.
  ELSE.
    LV_TEXT  = '没有找到运行日期' && PV_LAUFD && '的标识' && PV_LAUFI.
    M_ADD_MSG 'E' '00' '001' LV_TEXT.
*    SY-SUBRC = 10.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DELETE_PARAMETER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DELETE_PARAMETER .
  DATA: LX_AUTH_CHECK TYPE REF TO CX_SY_AUTHORIZATION_ERROR.
  DATA: LV_TEXT  TYPE STRING,
        LV_TEXT1 TYPE STRING.


  REFRESH: GT_BDCDATA,GT_MESSTAB.
  PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
  PERFORM FRM_BDC_FIELD       USING 'F110V-LAUFD'
                                GV_LAUFD.
  PERFORM FRM_BDC_FIELD       USING 'F110V-LAUFI'
                                GV_LAUFI.
  PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.

  PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
  PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                '=PADE'.

  PERFORM FRM_BDC_DYNPRO      USING 'SAPLSPO1' '0100'.
  PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                '=YES'.

  REFRESH GT_MESSTAB.
  TRY.
      CALL TRANSACTION 'F110' WITH AUTHORITY-CHECK USING GT_BDCDATA
                       MODE   'N'
                       UPDATE 'S'
                       MESSAGES INTO GT_MESSTAB.
    CATCH CX_SY_AUTHORIZATION_ERROR INTO LX_AUTH_CHECK.
*     Authorization missing for user when executing transaction
      LV_TEXT = LX_AUTH_CHECK->GET_TEXT( ).
      SY-SUBRC = 99.
  ENDTRY.
  IF SY-SUBRC = 99.
    MESSAGE S001 WITH LV_TEXT DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  CLEAR GS_MESSTAB.
  READ TABLE GT_MESSTAB INTO GS_MESSTAB WITH KEY MSGID = 'F0' MSGNR = '085'.
  IF SY-SUBRC = 0.
    MESSAGE ID     GS_MESSTAB-MSGID
            TYPE   GS_MESSTAB-MSGTYP
            NUMBER GS_MESSTAB-MSGNR
            INTO LV_TEXT
            WITH GS_MESSTAB-MSGV1
                 GS_MESSTAB-MSGV2
                 GS_MESSTAB-MSGV3
                 GS_MESSTAB-MSGV4.
    MESSAGE S001 WITH LV_TEXT.
    SY-SUBRC = 0.
  ELSE.
    LOOP AT GT_MESSTAB INTO GS_MESSTAB.
      MESSAGE ID     GS_MESSTAB-MSGID
              TYPE   GS_MESSTAB-MSGTYP
              NUMBER GS_MESSTAB-MSGNR
              INTO LV_TEXT
              WITH GS_MESSTAB-MSGV1
                   GS_MESSTAB-MSGV2
                   GS_MESSTAB-MSGV3
                   GS_MESSTAB-MSGV4.

      LV_TEXT1 = LV_TEXT1 && LV_TEXT.
      CLEAR GS_MESSTAB.

    ENDLOOP.
    SY-SUBRC = 10.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EXE_FKJY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_EXE_FKJY .
  SELECT COUNT(*)
    FROM REGUH
   WHERE LAUFD = P_LAUFD
     AND LAUFI = P_LAUFI.
  IF SY-SUBRC = 0.
    "BDC执行收付任务
    PERFORM FRM_PAYMENT_RUN.

    "获取REGUP
    PERFORM FRM_GET_REGUP.


    IF GT_ALV IS NOT INITIAL.
      PERFORM FRM_DISPLAY_ALV.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PAYMENT_RUN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_PAYMENT_RUN .
  DATA: LX_AUTH_CHECK TYPE REF TO CX_SY_AUTHORIZATION_ERROR.
  DATA: LV_TEXT  TYPE STRING,
        LV_TEXT1 TYPE STRING.


  REFRESH: GT_BDCDATA,GT_MESSTAB.
  PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '0200'.
  PERFORM FRM_BDC_FIELD       USING 'F110V-LAUFD'
                                P_LAUFD.
  PERFORM FRM_BDC_FIELD       USING 'F110V-LAUFI'
                                P_LAUFI.
  PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM FRM_BDC_FIELD       USING 'BDC_OKCODE'
                                '=ZAEX'.
  PERFORM FRM_BDC_DYNPRO      USING 'SAPF110V' '1106'.
  PERFORM FRM_BDC_FIELD       USING 'F110V-STRDT'
                                P_LAUFD.
  PERFORM FRM_BDC_FIELD       USING 'F110V-XSTRF'
                                GV_X.

  REFRESH GT_MESSTAB.


  TRY.

      CALL TRANSACTION 'F110' WITH AUTHORITY-CHECK USING GT_BDCDATA
                       MODE   'N'"P_MODE
                       UPDATE 'S'
                       MESSAGES INTO GT_MESSTAB.
    CATCH CX_SY_AUTHORIZATION_ERROR INTO LX_AUTH_CHECK.
*     Authorization missing for user when executing transaction
      LV_TEXT = LX_AUTH_CHECK->GET_TEXT( ).
      DATA(LV_SUBRC) = 99.
  ENDTRY.
*  FREE MEMORY ID 'ZFE029_F110'.

  IF LV_SUBRC = 99.
    MESSAGE S001 WITH LV_TEXT DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  CLEAR GS_MESSTAB.
  READ TABLE GT_MESSTAB INTO GS_MESSTAB WITH KEY MSGID = 'F0' MSGNR = '083'.
  IF SY-SUBRC = 0.
    MESSAGE ID     GS_MESSTAB-MSGID
            TYPE   GS_MESSTAB-MSGTYP
            NUMBER GS_MESSTAB-MSGNR
            INTO LV_TEXT
            WITH GS_MESSTAB-MSGV1
                 GS_MESSTAB-MSGV2
                 GS_MESSTAB-MSGV3
                 GS_MESSTAB-MSGV4.
    MESSAGE S001 WITH LV_TEXT.
    SY-SUBRC = 0.

    WAIT UP TO 10 SECONDS.

  ELSE.
    LOOP AT GT_MESSTAB INTO GS_MESSTAB.
      MESSAGE ID     GS_MESSTAB-MSGID
              TYPE   GS_MESSTAB-MSGTYP
              NUMBER GS_MESSTAB-MSGNR
              INTO LV_TEXT
              WITH GS_MESSTAB-MSGV1
                   GS_MESSTAB-MSGV2
                   GS_MESSTAB-MSGV3
                   GS_MESSTAB-MSGV4.

      LV_TEXT1 = LV_TEXT1 && LV_TEXT.
      CLEAR GS_MESSTAB.

    ENDLOOP.
    SY-SUBRC = 10.
    MESSAGE S001 WITH LV_TEXT1 DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_REGUP
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_GET_REGUP .
  WAIT UP TO 10 SECONDS.
  DATA: LV_MSGNR    TYPE MSGNR.
  DATA: LV_TEXT     LIKE T100-TEXT.

  DO 20 TIMES.
    SELECT *
      FROM REGUP
      INTO CORRESPONDING FIELDS OF TABLE GT_ALV
     WHERE LAUFD = P_LAUFD
       AND LAUFI = P_LAUFI.

    DATA(LT_ALV) = GT_ALV[].

    DELETE LT_ALV WHERE POKEN IS NOT INITIAL.
    IF LT_ALV[] IS INITIAL.  "全部报错直接返回
      EXIT.
    ELSE.  "不是全部报错的,则判断是否产生了清账凭证
      REFRESH LT_ALV.
      LT_ALV = GT_ALV[].
      DELETE LT_ALV WHERE XVORL NE '' .
      DELETE LT_ALV WHERE VBLNR = '' .
      IF LT_ALV[] IS NOT INITIAL.
        EXIT.
      ELSE.
        WAIT UP TO 1 SECONDS.
        REFRESH: GT_ALV, LT_ALV.
      ENDIF.
    ENDIF.
  ENDDO.

  SORT LT_ALV BY LAUFD LAUFI BUKRS BELNR GJAHR BUZEI.
  LOOP AT GT_ALV INTO DATA(LS_ALV).
    IF LS_ALV-POKEN IS NOT INITIAL.
      CLEAR LV_MSGNR.
      LV_MSGNR = '5'.
      LV_MSGNR+1(2) = LS_ALV-POKEN+1(2).
      CLEAR LV_TEXT.
      SELECT SINGLE TEXT
        FROM T100
        INTO LV_TEXT
       WHERE SPRSL EQ SY-LANGU
         AND ARBGB EQ 'FZ'
         AND MSGNR EQ LV_MSGNR.
      LS_ALV-TYPE = 'E'.
      LS_ALV-MESS = LV_TEXT.

    ELSE.
      READ TABLE LT_ALV TRANSPORTING NO FIELDS WITH KEY
                                   LAUFD = LS_ALV-LAUFD
                                   LAUFI = LS_ALV-LAUFI
                                   BUKRS = LS_ALV-BUKRS
                                   BELNR = LS_ALV-BELNR
                                   GJAHR = LS_ALV-GJAHR
                                   BUZEI = LS_ALV-BUZEI
                                   BINARY SEARCH.
      IF SY-SUBRC = 0.
        LS_ALV-TYPE = 'S'.
        LS_ALV-MESS = '执行成功'.
      ENDIF.
    ENDIF.

    MODIFY GT_ALV FROM LS_ALV.
    CLEAR LS_ALV.

  ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
  DATA: LT_FIELDCAT TYPE LVC_T_FCAT,
        LS_FIELDCAT TYPE LVC_S_FCAT.
  DATA: LS_LAYO TYPE LVC_S_LAYO.
  GV_REPID = SY-REPID.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      I_BUFFER_ACTIVE        = GV_X
      I_STRUCTURE_NAME       = 'REGUP'
      I_CLIENT_NEVER_DISPLAY = GV_X
*     I_BYPASSING_BUFFER     =
*     I_INTERNAL_TABNAME     = 'GT_ALV'
    CHANGING
      CT_FIELDCAT            = LT_FIELDCAT
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME = 'TYPE' .
  LS_FIELDCAT-SCRTEXT_L =
  LS_FIELDCAT-SCRTEXT_M =
  LS_FIELDCAT-SCRTEXT_S = '状态'.
  APPEND LS_FIELDCAT TO LT_FIELDCAT.
  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-FIELDNAME = 'MESS' .
  LS_FIELDCAT-SCRTEXT_L =
  LS_FIELDCAT-SCRTEXT_M =
  LS_FIELDCAT-SCRTEXT_S = '消息'.
  APPEND LS_FIELDCAT TO LT_FIELDCAT.



  LS_LAYO-ZEBRA = GV_X.
  LS_LAYO-CWIDTH_OPT = GV_X.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM = GV_REPID
      IS_LAYOUT_LVC      = LS_LAYO
      IT_FIELDCAT_LVC    = LT_FIELDCAT
*     I_DEFAULT          = 'X'
*     I_SAVE             = ' '
    TABLES
      T_OUTTAB           = GT_ALV
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP程序中的BDC(Batch Data Communication)代码开发主要是为了处理大批量数据的输入或修改。下面是BDC代码开发的全过程: 1. 定义BDC数据结构:首先需要定义一个数据结构,用于存储要导入或修改的数据。这个结构通常是一个内表,包含了程序需要处理的字段。 2. 读取数据源:接下来,从数据源中读取数据。数据源可以是数据库表、Excel文件或其他外部系统。 3. 编写转换逻辑:在BDC开发中,通常需要进行数据转换,将数据源中的数据映射到ABAP程序的数据结构中。这个过程中,需要根据业务需求对数据进行一些处理,比如日期格式转换、数值转换等。 4. 创建BDC会话:接下来,需要创建一个BDC会话。BDC会话是ABAP程序与事务处理之间的桥梁,用于处理事务数据的导入或修改。 5. 输入或修改数据:通过BDC会话,将转换后的数据导入到SAP系统中。如果是数据导入,可以使用BDC方法CALL TRANSACTION来执行事务代码。如果是数据修改,可以使用BDC方法CALL TRANSACTION USING来执行事务代码。 6. 错误处理:在BDC开发中,由于可能存在各种错误,如数据格式错误、字段缺失等,所以需要对错误进行处理。可以使用BDC方法SESSION_SET_BIG_INTERVAL来设置一个长时间间隔,然后检查和处理错误信息。 7. 提交和确认:在数据导入或修改完成后,需要使用BDC方法SESSION_CLOSE来提交事务,并通过BDC方法SESSION_PROCESSING提交数据更改。然后,可以检查和处理事务的结果。 8. 清除会话:在处理完BDC会话后,需要使用BDC方法SESSION_CLOSE来清除会话,以释放相关的资源。 以上是ABAP程序BDC代码开发的全过程。通过合理的数据结构定义、数据源读取、转换逻辑编写、BDC会话创建和数据处理,可以实现大批量数据的输入或修改。同时,错误处理和会话清除也是不可忽视的步骤,以确保数据的完整性和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值