ABAP程序BDC调用F110的功能Demo

编程入门 行业动态 更新时间:2024-10-08 22:19:31

ABAP程序BDC调用F110的<a href=https://www.elefans.com/category/jswz/34/1771378.html style=功能Demo"/>

ABAP程序BDC调用F110的功能Demo

本程序是通过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' ORSCREEN-GROUP1 = 'OP2' ORSCREEN-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' ORSCREEN-GROUP1 = 'OP1' ORSCREEN-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'EXPORTINGF1TYP            = 'D'F2NME            = 'F110V-LAUFI'IMPORTINGLAUFD            = P_LAUFDLAUFI            = P_LAUFINOTHING_SELECTED = LV_XF4_C1TABLESLAUFK            = 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'EXPORTINGF1TYP            = 'D'F2NME            = 'F110V-LAUFI'IMPORTINGLAUFD            = P_LAUFDLAUFI            = P_LAUFINOTHING_SELECTED = LV_XF4_C1TABLESLAUFK            = 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,WAERSFROM T001INTO TABLE @GT_T001WHERE BUKRS IN @S_ZBUKRAND 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(IMPORTINGR_SALV_TABLE = GR_TABLECHANGINGT_TABLE      = GT_BAPIRET ).CATCH CX_SALV_MSG .                               "#EC NO_HANDLERENDTRY .DATA : LR_COLUMNS  TYPE  REF  TO CL_SALV_COLUMNS . "All Column ObjectsLR_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,ZLSCHFROM T042ZINTO TABLE @DATA(LT_T042)FOR ALL ENTRIES IN @GT_T001WHERE LAND1 = @GT_T001-LAND1AND ZLSCH IN @S_ZWELS.ENDIF.
* 获取供应商IF S_LIFNR[] IS NOT INITIAL OR S_KTOKK[] IS NOT INITIAL.SELECT LIFNRFROM LFA1INTO TABLE @DATA(LT_LFA1)WHERE LIFNR IN @S_LIFNRAND KTOKK IN @S_KTOKK.ENDIF.
* 获取客户IF S_KUNNR[] IS NOT INITIAL OR S_KTOKD[] IS NOT INITIAL.SELECT KUNNRFROM KNA1INTO TABLE @DATA(LT_KNA1)WHERE KUNNR IN @S_KUNNRAND 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 REGUVINTO @DATA(LV_LAUFI)WHERE LAUFD = @SY-DATUMAND 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_FIELDLV_BUKLS.  "公司代码CLEAR:LV_FIELD.LV_FIELD = 'F110V-ZWELS(' && LV_IND && ')'.PERFORM FRM_BDC_FIELD       USING LV_FIELDLV_ZWELS.  "付款方式CLEAR:LV_FIELD.LV_FIELD = 'F110V-NEDAT(' && LV_IND && ')'.PERFORM FRM_BDC_FIELD       USING LV_FIELDLV_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_EXPORTEXPORTINGNO_AUTH_CHECK        = GV_XIMPORTINGDATA                 = LT_LFA1CHANGINGRC                   = LV_RCEXCEPTIONSCNTL_ERROR           = 1ERROR_NO_GUI         = 2NOT_SUPPORTED_BY_GUI = 3NO_AUTHORITY         = 4OTHERS               = 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_EXPORTEXPORTINGNO_AUTH_CHECK        = GV_XIMPORTINGDATA                 = LT_KNA1CHANGINGRC                   = LV_RCEXCEPTIONSCNTL_ERROR           = 1ERROR_NO_GUI         = 2NOT_SUPPORTED_BY_GUI = 3NO_AUTHORITY         = 4OTHERS               = 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_BDCDATAMODE   'N'"P_MODEUPDATE 'S'MESSAGES INTO GT_MESSTAB.CATCH CX_SY_AUTHORIZATION_ERROR INTO LX_AUTH_CHECK.
*     Authorization missing for user when executing transactionLV_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-MSGIDTYPE   GS_MESSTAB-MSGTYPNUMBER GS_MESSTAB-MSGNRINTO LV_TEXTWITH GS_MESSTAB-MSGV1GS_MESSTAB-MSGV2GS_MESSTAB-MSGV3GS_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-MSGIDTYPE   GS_MESSTAB-MSGTYPNUMBER GS_MESSTAB-MSGNRINTO LV_TEXTWITH GS_MESSTAB-MSGV1GS_MESSTAB-MSGV2GS_MESSTAB-MSGV3GS_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 REGUVWHERE LAUFD = PV_LAUFDAND 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_BDCDATAMODE   'N'"P_MODEUPDATE 'S'MESSAGES INTO GT_MESSTAB.CATCH CX_SY_AUTHORIZATION_ERROR INTO LX_AUTH_CHECK.
*     Authorization missing for user when executing transactionLV_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-MSGIDTYPE   GS_MESSTAB-MSGTYPNUMBER GS_MESSTAB-MSGNRINTO LV_TEXTWITH GS_MESSTAB-MSGV1GS_MESSTAB-MSGV2GS_MESSTAB-MSGV3GS_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-MSGIDTYPE   GS_MESSTAB-MSGTYPNUMBER GS_MESSTAB-MSGNRINTO LV_TEXTWITH GS_MESSTAB-MSGV1GS_MESSTAB-MSGV2GS_MESSTAB-MSGV3GS_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_BDCDATAMODE   'N'UPDATE 'S'MESSAGES INTO GT_MESSTAB.CATCH CX_SY_AUTHORIZATION_ERROR INTO LX_AUTH_CHECK.
*     Authorization missing for user when executing transactionLV_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-MSGIDTYPE   GS_MESSTAB-MSGTYPNUMBER GS_MESSTAB-MSGNRINTO LV_TEXTWITH GS_MESSTAB-MSGV1GS_MESSTAB-MSGV2GS_MESSTAB-MSGV3GS_MESSTAB-MSGV4.MESSAGE S001 WITH LV_TEXT.SY-SUBRC = 0.ELSE.LOOP AT GT_MESSTAB INTO GS_MESSTAB.MESSAGE ID     GS_MESSTAB-MSGIDTYPE   GS_MESSTAB-MSGTYPNUMBER GS_MESSTAB-MSGNRINTO LV_TEXTWITH GS_MESSTAB-MSGV1GS_MESSTAB-MSGV2GS_MESSTAB-MSGV3GS_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 REGUHWHERE LAUFD = P_LAUFDAND LAUFI = P_LAUFI.IF SY-SUBRC = 0."BDC执行收付任务PERFORM FRM_PAYMENT_RUN."获取REGUPPERFORM 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_BDCDATAMODE   'N'"P_MODEUPDATE 'S'MESSAGES INTO GT_MESSTAB.CATCH CX_SY_AUTHORIZATION_ERROR INTO LX_AUTH_CHECK.
*     Authorization missing for user when executing transactionLV_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-MSGIDTYPE   GS_MESSTAB-MSGTYPNUMBER GS_MESSTAB-MSGNRINTO LV_TEXTWITH GS_MESSTAB-MSGV1GS_MESSTAB-MSGV2GS_MESSTAB-MSGV3GS_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-MSGIDTYPE   GS_MESSTAB-MSGTYPNUMBER GS_MESSTAB-MSGNRINTO LV_TEXTWITH GS_MESSTAB-MSGV1GS_MESSTAB-MSGV2GS_MESSTAB-MSGV3GS_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 REGUPINTO CORRESPONDING FIELDS OF TABLE GT_ALVWHERE LAUFD = P_LAUFDAND 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 TEXTFROM T100INTO LV_TEXTWHERE SPRSL EQ SY-LANGUAND 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 KEYLAUFD = LS_ALV-LAUFDLAUFI = LS_ALV-LAUFIBUKRS = LS_ALV-BUKRSBELNR = LS_ALV-BELNRGJAHR = LS_ALV-GJAHRBUZEI = LS_ALV-BUZEIBINARY 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'EXPORTINGI_BUFFER_ACTIVE        = GV_XI_STRUCTURE_NAME       = 'REGUP'I_CLIENT_NEVER_DISPLAY = GV_X
*     I_BYPASSING_BUFFER     =
*     I_INTERNAL_TABNAME     = 'GT_ALV'CHANGINGCT_FIELDCAT            = LT_FIELDCATEXCEPTIONSINCONSISTENT_INTERFACE = 1PROGRAM_ERROR          = 2OTHERS                 = 3.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.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'EXPORTINGI_CALLBACK_PROGRAM = GV_REPIDIS_LAYOUT_LVC      = LS_LAYOIT_FIELDCAT_LVC    = LT_FIELDCAT
*     I_DEFAULT          = 'X'
*     I_SAVE             = ' 'TABLEST_OUTTAB           = GT_ALVEXCEPTIONSPROGRAM_ERROR      = 1OTHERS             = 2.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.

 

更多推荐

ABAP程序BDC调用F110的功能Demo

本文发布于:2024-02-14 11:26:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1763005.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:功能   程序   ABAP   BDC   Demo

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!