本程序是通过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.