SAP OO ALV应用1

”alv对象
cl_gui_alv_grid
cl_gui_custom_container
cl_gui_splitter_container
cl_gui_container
lcl_event_receiver

"oo alv事件对象
handle_toolbar
handle_user_command
handle_data_changed_finished
on_f4
set_drop_down_table


cl_gui_textedit  “长文本编辑器

*&---------------------------------------------------------------------*
*& Report ZFID114
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfid114.

INCLUDE zfid114_top.
INCLUDE zfid114_scr.
INCLUDE zfid114_o01.
INCLUDE zfid114_c01.
INCLUDE zfid114_f01.
INCLUDE zfi_authority_check.

AT SELECTION-SCREEN OUTPUT.

  PERFORM frm_drop_fktyp USING 'P_FKTYP'.

AT SELECTION-SCREEN.

* 权限检查
  PERFORM frm_check_bukrs_t TABLES   s_xmgs[]
                            CHANGING gv_message.

  IF gv_message IS NOT INITIAL.
    SET CURSOR FIELD 'S_XMGS-LOW'.
    MESSAGE gv_message TYPE 'E'.
  ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_xmgs-low.
  PERFORM f4_bukrs USING 'S_XMGS-LOW'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_xmgs-high.
  PERFORM f4_bukrs USING 'S_XMGS-HIGH'.

START-OF-SELECTION.

  CALL SCREEN 100.
 

*&---------------------------------------------------------------------*
*&  包含                ZFID114_TOP
*&---------------------------------------------------------------------*
TABLES:ztpo0019,zsfi0277,faglflext.

CLASS lcl_event_receiver DEFINITION DEFERRED.

TYPES:
  BEGIN OF ty_text,
    line TYPE c LENGTH 100,
  END OF ty_text.

TYPES:BEGIN OF typ_153.
    INCLUDE STRUCTURE ztfi0153.
TYPES:
  zkxnr_txt TYPE val_text,
  swbmt_txt TYPE val_text,
  END OF typ_153.

TYPES: BEGIN OF typ_154,
         upload TYPE string,
         down   TYPE string,
         delete TYPE string.
    INCLUDE STRUCTURE ztfi0154.
TYPES: END OF typ_154.

TYPES:BEGIN OF ty_search.
        INCLUDE STRUCTURE ztpo0019.
TYPES:
        djstat_txt TYPE val_text,
      END   OF ty_search.

* 变量
DATA:
  gv_message TYPE char200,
  gt_fktyp   TYPE RANGE OF ztpo0019-fktyp,
  gt_alv     TYPE TABLE OF typ_153,     "行明细ALV
  gs_alv     LIKE LINE  OF gt_alv,
  gt_alv2    TYPE TABLE OF typ_154,     "附件ALV
  gs_alv2    LIKE LINE  OF gt_alv2,
  gt_log     TYPE TABLE OF bapiret2,
  gs_log     TYPE bapiret2,
  gt_s_h     TYPE TABLE OF ztpo0019,    "查询
  gs_s_h     LIKE LINE OF  gt_s_h,
  gt_s_i     TYPE TABLE OF ztfi0153,    "查询行明细
  gs_s_i     LIKE LINE OF  gt_s_i,
  gt_s_i2    TYPE TABLE OF ztfi0154,    "查询附件明细
  gs_s_i2    LIKE LINE OF  gt_s_i2,
  gt_search  TYPE TABLE OF ty_search,   "查询展示alv 内表
  gs_search  LIKE LINE  OF gt_search.

* 标识
DATA:
  gv_init         TYPE char1,
  gv_init0200     TYPE char1,
  gv_only_display TYPE char1.

* alv
DATA:
  gs_layout           TYPE lvc_s_layo,
  gt_fieldcat         TYPE lvc_t_fcat,
  gt_fieldcat2        TYPE lvc_t_fcat,
  gt_fieldcat_s       TYPE lvc_t_fcat,
  go_grid             TYPE REF TO cl_gui_alv_grid,
  go_grid2            TYPE REF TO cl_gui_alv_grid,
  go_grid_s           TYPE REF TO cl_gui_alv_grid,
  go_custom_container TYPE REF TO cl_gui_custom_container,
  go_splitter         TYPE REF TO cl_gui_splitter_container,
  go_container1       TYPE REF TO cl_gui_container,
  go_container2       TYPE REF TO cl_gui_container,
  go_container_s      TYPE REF TO cl_gui_custom_container,
  o_event_receiver    TYPE REF TO lcl_event_receiver.

* 长文本编辑器
DATA:
  gt_comment TYPE TABLE OF ty_text,
  gs_comment LIKE LINE  OF gt_comment,
  container  TYPE REF TO cl_gui_custom_container,
  editor     TYPE REF TO cl_gui_textedit.

DATA:
  ok_code TYPE sy-ucomm.
DATA: gv_fktyp TYPE ztpo0019-fktyp.

* 常量
CONSTANTS:
  gc_upload TYPE string VALUE 'ICON_CREATE',
  gc_delete TYPE string VALUE 'ICON_DELETE',
  gc_down   TYPE string VALUE 'ICON_EXPORT',
  gc_submit TYPE string VALUE '20',
  gc_save   TYPE string VALUE '10'.

* 宏定义
DEFINE m_log.
  CLEAR gs_log.

  gs_log-type = &1.
  gs_log-id = &2.
  gs_log-number = &3.
  gs_log-message_v1 = &4.
  gs_log-message_v2 = &5.
  gs_log-message_v3 = &6.
  gs_log-message_v4 = &7.
  CONDENSE gs_log-message_v1 NO-GAPS.
  APPEND gs_log TO gt_log.

END-OF-DEFINITION.
 

*&---------------------------------------------------------------------*
*&  包含                ZFID114_SCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF SCREEN 0201 as SUBSCREEN.

SELECT-OPTIONS:
  s_xmgs   FOR ztpo0019-xmgs OBLIGATORY.

PARAMETERS:
  p_fktyp TYPE ztpo0019-fktyp AS LISTBOX VISIBLE LENGTH 15.

SELECT-OPTIONS:
  s_sqdate FOR ztpo0019-sqdate,
  s_fksqnr FOR ztpo0019-fksqnr,
  s_k2spnr FOR ztpo0019-k2spnr  NO-EXTENSION NO INTERVALS,
  s_stat   FOR ztpo0019-djstat  NO INTERVALS,
  s_sqfk   FOR ztpo0019-sqfk_amt,
  s_bname  FOR ztpo0019-bname   NO INTERVALS.

SELECTION-SCREEN END   OF SCREEN 0201.

* 公司代码帮助专用
SELECT-OPTIONS:
  s_accgrp  FOR zsfi0277-parentaccgroup NO-DISPLAY,
  s_acc     FOR faglflext-racct NO-DISPLAY.
 

  *&---------------------------------------------------------------------*
*&  包含                ZFID114_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.

  DATA:
    lt_ucomm  TYPE TABLE OF sy-ucomm,
    ls_ucomm  LIKE LINE  OF lt_ucomm.

  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI136A'.
    ls_ucomm = 'SCAN'."查看影像
    APPEND ls_ucomm TO lt_ucomm.
    ls_ucomm = 'PRT'. "打印
    APPEND ls_ucomm TO lt_ucomm.
    ls_ucomm = 'COPY'."复制
    APPEND ls_ucomm TO lt_ucomm.
  ENDIF.
  "功能按钮隐藏
  IF sy-tcode = 'ZFI135B' OR sy-tcode = 'ZFI136B'.
    ls_ucomm = 'SAVE'."保存
    APPEND ls_ucomm TO lt_ucomm.
    ls_ucomm = 'SUBMIT'. "提交
    APPEND ls_ucomm TO lt_ucomm.
    ls_ucomm = 'COPY'."复制
    APPEND ls_ucomm TO lt_ucomm.
  ENDIF.

* 非内部划转
  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.
    SET PF-STATUS 'S0100' EXCLUDING lt_ucomm.
    SET TITLEBAR 'T0101'.
* 内部划转
  ELSEIF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.
    SET PF-STATUS 'S0100' EXCLUDING lt_ucomm.
    SET TITLEBAR 'T0102'.
  ENDIF.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  EXIT_COMMAND  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit_command INPUT.
  CASE ok_code.
    WHEN 'BACK'.
*     解锁
      PERFORM frm_unlock_proc.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANCEL'.
*     解锁
      PERFORM frm_unlock_proc.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  INIT_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE init_0100 OUTPUT.
  PERFORM frm_init_0100.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_ALV  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_alv OUTPUT.

  PERFORM frm_set_alv.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_RMBNAME  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_rmbname INPUT.

  ztpo0019-rmbname = ztpo0019-sqfk_amt * ztpo0019-ukurs.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_GSBE1  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_gsbe1 INPUT.

  CHECK ztpo0019-xmgs IS NOT INITIAL.

* 权限检查
  PERFORM frm_check_bukrs USING    ztpo0019-xmgs
                          CHANGING gv_message.

  IF gv_message IS NOT INITIAL.
    SET CURSOR FIELD 'ZTPO0019-XMGS'.
    MESSAGE gv_message TYPE 'E'.
  ENDIF.

  SELECT SINGLE ywlx1
    FROM ztfi0005_1
    INTO ztpo0019-gsbe1
   WHERE bukrs = ztpo0019-xmgs.

  CLEAR:
    gt_alv[],
    ztpo0019-pay_fs,
    ztpo0019-banka,
    ztpo0019-bankn.

  PERFORM frm_init_screen_data.

  SET PARAMETER ID 'BUK' FIELD ztpo0019-xmgs.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  GET_HUILV  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE get_huilv INPUT.

* 取得汇率
  PERFORM frm_get_huilv.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  DATA: lv_error TYPE c.

  CALL METHOD go_grid->check_changed_data( ).
  CALL METHOD go_grid2->check_changed_data( ).

* 获取款项说明
  CALL METHOD editor->get_text_as_r3table
    IMPORTING
      table = gt_comment.

  CLEAR:lv_error.

  CASE ok_code.
    WHEN 'SAVE'.
      PERFORM frm_check USING lv_error gc_save.
      IF lv_error = ''.
        PERFORM frm_save.
      ENDIF.

    WHEN 'SUBMIT'.
      PERFORM frm_check USING lv_error gc_submit.
      IF lv_error = ''.
        PERFORM frm_save.
      ENDIF.

    WHEN 'PAYFS'.
      PERFORM frm_change_payfs.

    WHEN 'SCAN'.
      "查看影像
      PERFORM frm_get_image.
    WHEN 'PRT'.
      "打印
      PERFORM frm_print_proc.
    WHEN 'COPY'.
*     复制
      PERFORM frm_copy_proc.

  ENDCASE.


  CLEAR:ok_code.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  CHECK_FKTYP  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE check_fktyp INPUT.

  IF ztpo0019-fktyp IS INITIAL AND
     ok_code <> 'FKTYP' AND
     ok_code <> 'PAYFS'.
    SET CURSOR FIELD 'ZTPO0019-FKTYP'.
    MESSAGE e000(zmsg_fi) WITH '付款分类不能为空'.
  ENDIF.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  CHECK_PAY_FS  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE check_pay_fs INPUT.

  IF ztpo0019-pay_fs IS INITIAL AND
     ok_code <> 'FKTYP' AND
     ok_code <> 'PAYFS'.
    SET CURSOR FIELD 'ZTPO0019-PAY_FS'.
    MESSAGE e000(zmsg_fi) WITH '支付方式不能为空'.
  ENDIF.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0200 OUTPUT.
  SET PF-STATUS 'S0200'.

* 非内部划转
  IF sy-tcode = 'ZFI135B'.
    SET TITLEBAR 'T0201'.
* 内部划转
  ELSEIF sy-tcode = 'ZFI136B'.
    SET TITLEBAR 'T0202'.
  ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SET_ALV_S  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_alv_s OUTPUT.

  PERFORM frm_alv_s.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.

  CASE ok_code.
    WHEN 'EXECU_S'.
      PERFORM frm_get_data.
      PERFORM frm_prepare_search_data.
      IF gt_search[] IS INITIAL.
        MESSAGE '没有数据' TYPE 'S' DISPLAY LIKE 'E'.
      ENDIF.
  ENDCASE.
  CLEAR: ok_code.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  INIT_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE init_0200 OUTPUT.
  PERFORM frm_init_0200.
ENDMODULE.

*&---------------------------------------------------------------------*
*&  包含                ZFID114_C01
*&---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING
            e_object e_interactive,

      handle_toolbar2 FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING
            e_object e_interactive,

      handle_toolbar3 FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING
            e_object e_interactive,

      handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm,

      handle_user_command_s FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm,

****************************************以下定义的方法必要的时候可激活
*Hotspot click control
      handle_hotspot_click
                    FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING e_row_id e_column_id es_row_no ,

*Hotspot click control
      handle_hotspot_click2
                    FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING e_row_id e_column_id es_row_no ,

*Double-click control
      handle_double_click
                    FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column es_row_no,

      handle_double_click_s
                    FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column es_row_no,

*To be triggered before user commands
      handle_before_user_command
                    FOR EVENT before_user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm,


*Controlling data changes when ALV Grid is editable
      handle_data_changed
                    FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed ,
      handle_data_changed_fz
                    FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed ,

*To be triggered after data changing is finished
      handle_data_changed_finished
                    FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING e_modified et_good_cells,

      handle_data_changed_finished2
                    FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING e_modified et_good_cells,

      handle_data_changed_finish_fz
                    FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING e_modified et_good_cells,

*To control menu buttons
      handle_menu_button
                    FOR EVENT menu_button OF cl_gui_alv_grid
        IMPORTING e_object e_ucomm ,


      on_f4 FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING e_fieldname
                    es_row_no
                    er_event_data
                    et_bad_cells
                    e_display.

ENDCLASS.

CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_toolbar.
    PERFORM set_toolbar CHANGING e_object." e_interactive.
  ENDMETHOD.

  METHOD handle_toolbar2.
    PERFORM set_toolbar2 CHANGING e_object." e_interactive.
  ENDMETHOD.

  METHOD handle_toolbar3.
    PERFORM set_toolbar3 CHANGING e_object." e_interactive.
  ENDMETHOD.

  METHOD handle_user_command.
    PERFORM handle_user_command_alv USING  e_ucomm.
  ENDMETHOD.

  METHOD handle_user_command_s.
    PERFORM handle_user_command_alv_s USING  e_ucomm.
  ENDMETHOD.

*Handle Hotspot Click
  METHOD handle_hotspot_click .
*    PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no .
  ENDMETHOD .

*Handle Hotspot Click
  METHOD handle_hotspot_click2 .
    PERFORM handle_hotspot_click2 USING e_row_id e_column_id es_row_no .
  ENDMETHOD .

*Handle Double Click
  METHOD handle_double_click .
*    PERFORM handle_double_click using e_row e_column es_row_no .
  ENDMETHOD .

  METHOD handle_double_click_s.
    PERFORM handle_double_click_s using e_row e_column es_row_no .
  ENDMETHOD .

*Handle Before User Command
  METHOD handle_before_user_command .
*PERFORM handle_before_user_command USING e_ucomm .
  ENDMETHOD .

*Handle Data Changed
  METHOD handle_data_changed .
*   PERFORM handle_data_changed USING er_data_changed .
  ENDMETHOD.

*Handle Data Changed
  METHOD handle_data_changed_fz .
*    PERFORM handle_data_changed_fz USING er_data_changed .
  ENDMETHOD.

*Handle Data Changed Finished
  METHOD handle_data_changed_finished .
    PERFORM handle_data_changed_finished TABLES et_good_cells USING e_modified .
  ENDMETHOD .
*Handle Data Changed Finished
  METHOD handle_data_changed_finished2 .
*    PERFORM handle_data_changed_finished2 tables et_good_cells USING e_modified .
  ENDMETHOD .

*Handle Data Changed Finished
  METHOD handle_data_changed_finish_fz .
*    PERFORM handle_data_changed_finish_fz tables et_good_cells USING e_modified .
  ENDMETHOD .

*Handle Menu Buttons
  METHOD handle_menu_button .
*PERFORM handle_menu_button USING e_object e_ucomm .
  ENDMETHOD .

  METHOD on_f4.
    PERFORM frm_on_f4 USING e_fieldname es_row_no er_event_data.
  ENDMETHOD.
ENDCLASS.               "lcl_event_receiver
 

  *&---------------------------------------------------------------------*
*&  包含                ZFID114_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_0100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_init_0100 .

* 长文本编辑器
  IF container IS INITIAL.
    CREATE OBJECT: container EXPORTING container_name = 'CON_1'.
  ENDIF.

  IF editor IS INITIAL.
    CREATE OBJECT editor
      EXPORTING
        parent                     = container
        wordwrap_mode              = cl_gui_textedit=>wordwrap_at_fixed_position
        wordwrap_position          = 100
        wordwrap_to_linebreak_mode = cl_gui_textedit=>true.
  ENDIF.

  CALL METHOD editor->set_text_as_r3table
    EXPORTING
      table = gt_comment.

  CALL METHOD editor->set_toolbar_mode
    EXPORTING
      toolbar_mode           = 0
    EXCEPTIONS
      error_cntl_call_method = 0
      invalid_parameter      = 0
      OTHERS                 = 0.

* 初期值
  IF gv_init IS INITIAL.

    gv_init = 'X'.

    ztpo0019-bname  = sy-uname.
    ztpo0019-sqdate = sy-datum.
    ztpo0019-waers  = 'CNY'.
    ztpo0019-ukurs  = 1.

    PERFORM frm_init_screen_data.

  ENDIF.

* 下拉菜单
* 利润中心下拉菜单
  PERFORM frm_drop_prct1.

* 款项类型下拉菜单
  PERFORM frm_drop_fktyp USING 'ZTPO0019-FKTYP'.

* 支付方式下拉菜单
  PERFORM frm_drop_payfs.

* 业务类型下拉菜单
  PERFORM frm_drop_gsbe1.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_SCREEN_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_init_screen_data .

  CLEAR: gs_alv.

  DO 8 TIMES.
    gs_alv-waers = 'CNY'.
    APPEND gs_alv TO gt_alv.
  ENDDO.

  PERFORM frm_refresh_buzei.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_REFRESH_BUZEI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_refresh_buzei .

  DATA:
    lv_num TYPE i.

  LOOP AT gt_alv INTO gs_alv.
    lv_num = lv_num + 1.
    gs_alv-buzei = lv_num.
    MODIFY gt_alv FROM gs_alv TRANSPORTING buzei.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_set_alv .

  IF go_custom_container IS INITIAL.
    CREATE OBJECT go_custom_container
      EXPORTING
        container_name = 'CON_SPLIT'.

    CREATE OBJECT go_splitter
      EXPORTING
        parent            = go_custom_container
        rows              = 2
        columns           = 1
      EXCEPTIONS
        cntl_error        = 1
        cntl_system_error = 2
        OTHERS            = 3.

    CALL METHOD go_splitter->set_row_height
      EXPORTING
        id                = 1
        height            = 50
      EXCEPTIONS
        cntl_error        = 0
        cntl_system_error = 0
        OTHERS            = 0.

    go_splitter->get_container( EXPORTING row = 1 column = 1 RECEIVING container = go_container1 ).

    CREATE OBJECT go_grid
      EXPORTING
        i_parent = go_container1.

    go_splitter->get_container( EXPORTING row = 2 column = 1 RECEIVING container = go_container2 ).

    CREATE OBJECT go_grid2
      EXPORTING
        i_parent = go_container2.

    PERFORM  prepare_field_catalog.

    PERFORM frm_alv_display.

    CREATE OBJECT o_event_receiver."创造事件对象

    SET HANDLER o_event_receiver->handle_toolbar FOR go_grid.
    SET HANDLER o_event_receiver->handle_user_command FOR go_grid.
    SET HANDLER o_event_receiver->handle_data_changed_finished FOR go_grid.
    SET HANDLER o_event_receiver->on_f4 FOR go_grid .
    CALL METHOD go_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.
    CALL METHOD go_grid->set_toolbar_interactive.

**  注册附件上传alv事件
    SET HANDLER o_event_receiver->handle_toolbar2 FOR go_grid2.
    SET HANDLER o_event_receiver->handle_user_command FOR go_grid2.
    SET HANDLER o_event_receiver->handle_hotspot_click2 FOR go_grid2 .
    CALL METHOD go_grid2->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.
    CALL METHOD go_grid2->set_toolbar_interactive.

  ENDIF.

  PERFORM  prepare_drilldown_values.

  PERFORM frm_only_display.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM prepare_field_catalog .

  DATA:
    ls_fcat TYPE lvc_s_fcat .

* 行明细ALV
  DEFINE add_fcat.
    CLEAR ls_fcat.
    ls_fcat-fieldname = &1.
    ls_fcat-outputlen = &2.
    ls_fcat-ref_field = &3.
    ls_fcat-ref_table = &4.
    ls_fcat-coltext   = &5.
    ls_fcat-just      = 'L'.

*   帮助按钮
    IF ls_fcat-fieldname = 'ZXMFQ' OR
       ls_fcat-fieldname = 'ZSKBH' OR
       ls_fcat-fieldname = 'CTTNR' OR
       ls_fcat-fieldname = 'ZSKYH' OR
       ls_fcat-fieldname = 'ZSKZH'.
      ls_fcat-f4availabl = 'X'.
    ENDIF.
    IF ls_fcat-fieldname = 'ZSKZH'.
      ls_fcat-lowercase = 'X'.
    ENDIF.
    IF ls_fcat-fieldname = 'ZSKYH'.
      ls_fcat-domname = 'ZD_ZSKYH'.
    ENDIF.

*   显示前0
    IF ls_fcat-fieldname = 'ZXMFQ'.
      ls_fcat-no_zero   = space.
    ENDIF.

*   复选框
    IF ls_fcat-fieldname = 'ZGDFLG'.
      ls_fcat-checkbox  = 'X'.
    ENDIF.

*   下拉菜单
    IF ls_fcat-fieldname = 'ZKXNR_TXT'.
      ls_fcat-drdn_hndl = '1'.
    ENDIF.
    IF ls_fcat-fieldname = 'SWBMT_TXT'.
      ls_fcat-drdn_hndl = '2'.
    ENDIF.

*   金额参照单位
    IF ls_fcat-fieldname = 'WRBTR' OR
       ls_fcat-fieldname = 'DMBTR'.
      ls_fcat-cfieldname = 'WAERS'.
    ENDIF.

*   非表示
    IF ls_fcat-fieldname = 'WAERS'.
      ls_fcat-tech = 'X'.
    ENDIF.

    APPEND ls_fcat TO gt_fieldcat.
  END-OF-DEFINITION.

  add_fcat 'BUZEI'      '6'  'BUZEI'  'ZTFI0153' '行项目'.
*  add_fcat 'ZXMFQ'      '10' 'ZXMFQ'  'ZTFI0153' '项目分期'.
  add_fcat 'ZKXNR_TXT'  '25' ''         ''        '付款类型'.
  add_fcat 'ZSKBH'      '15' 'ZSKBH'  'ZTFI0153' '收款人编号'.
  add_fcat 'ZSKNA'      '15' 'ZSKNA'  'ZTFI0153' '收款人名称'.
  add_fcat 'ZSKYH'      '15' 'ZSKYH'  'ZTFI0153' '收款银行'.
*  ADD_FCAT 'ZSKZH'      '15' 'ZSKZH'  'ZTFI0153' '收款账号'.
  add_fcat 'ZSKZH'      '15' ''  '' '收款账号'.
  add_fcat 'WRBTR'      '10' 'WRBTR'  'ZTFI0153' '凭证货币金额'.
  add_fcat 'DMBTR'      '10' 'DMBTR'  'ZTFI0153' '按本位币计的金额'.
  add_fcat 'WAERS'      '10' 'WAERS'  'ZTFI0153' '币别'. "非表示

* 非内部划转
  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.
*    add_fcat 'CTTNR'      '10' 'CTTNR'  'ZTFI0153' '合同'.
*    add_fcat 'SWBMT_TXT'  '25' ''       ''         '税码'.
    add_fcat 'ZGDFLG'     '12' 'ZGDFLG' 'ZTFI0153' '是否内部股东'.
    add_fcat 'ZGQBL'      '11' 'ZGQBL'  'ZTFI0153' '股权比例(%)'.
  ENDIF.
  add_fcat 'TXT50'      '10' 'TXT50'  'ZTFI0153' '备注'.

* 附件ALV
  DEFINE add_fcat2.
    CLEAR ls_fcat.
    ls_fcat-fieldname = &1.
    ls_fcat-outputlen = &2.
    ls_fcat-ref_field = &3.
    ls_fcat-ref_table = &4.
    ls_fcat-coltext   = &5.
    ls_fcat-no_zero   = 'X'.
    ls_fcat-just      = 'L'.

    IF ls_fcat-fieldname   = 'UPLOAD'
      OR ls_fcat-fieldname = 'DOWN'
      OR ls_fcat-fieldname = 'DELETE'.

      ls_fcat-icon = 'X'.
      ls_fcat-hotspot = 'X'.
      ls_fcat-edit = ''.
    ENDIF.

    APPEND ls_fcat TO gt_fieldcat2.
  END-OF-DEFINITION.

  add_fcat2 'BUZEI'   '6'   'BUZEI' 'ZTFI0154'  '行项目'.
  add_fcat2 'ZFJMC'   '30'  'ZFJMC' 'ZTFI0154'  '附件名称'.
  add_fcat2 'ERDAT'   '10'  'ERDAT' 'ZTFI0154'  '申请日期'.
  add_fcat2 'UPLOAD'  '10'  ''      ''          '上传'.
  add_fcat2 'DOWN'    '10'  ''      ''          '下载'.
  add_fcat2 'DELETE'  '10'  ''      ''          '删除'.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_alv_display .

  DATA:
    lt_f4 TYPE lvc_t_f4,
    ls_f4 LIKE LINE OF lt_f4.

* 布局设置
  gs_layout-zebra = 'X' .
  gs_layout-sel_mode = 'A'.

* 帮助按钮
  ls_f4-register = 'X'.
  ls_f4-chngeafter = 'X'.
  ls_f4-fieldname = 'ZSKYH'.
  INSERT ls_f4 INTO TABLE lt_f4.
  ls_f4-fieldname = 'ZSKZH'.
  INSERT ls_f4 INTO TABLE lt_f4.
  ls_f4-fieldname = 'ZXMFQ'.
  INSERT ls_f4 INTO TABLE lt_f4.
  ls_f4-fieldname = 'CTTNR'.
  INSERT ls_f4 INTO TABLE lt_f4.

  CALL METHOD go_grid->register_f4_for_fields
    EXPORTING
      it_f4 = lt_f4.

  go_grid->set_table_for_first_display(
      EXPORTING
        i_save                        = 'X'
        is_layout                     = gs_layout
      CHANGING
        it_outtab                     = gt_alv
        it_fieldcatalog               = gt_fieldcat ).

  go_grid2->set_table_for_first_display(
      EXPORTING
        i_save                        = 'X'
        is_layout                     = gs_layout
      CHANGING
        it_outtab                     = gt_alv2
        it_fieldcatalog               = gt_fieldcat2 ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DROP_PRCT1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_drop_prct1 .

  TYPES:
    BEGIN OF ty_prct1,
      prctr TYPE cepc_bukrs-prctr,
      ktext TYPE cepct-ktext,
    END   OF ty_prct1.

  DATA:
    lt_values TYPE vrm_values,
    lt_prct1  TYPE TABLE OF ty_prct1,
    ls_values LIKE LINE  OF lt_values,
    ls_prct1  LIKE LINE  OF lt_prct1.

  CHECK ztpo0019-xmgs IS NOT INITIAL.

  SELECT cepc_bukrs~prctr
         cepct~ktext
    FROM cepc_bukrs
   INNER JOIN cepct
      ON cepc_bukrs~prctr = cepct~prctr
    INTO TABLE lt_prct1
   WHERE cepc_bukrs~bukrs =  ztpo0019-xmgs.

  LOOP AT lt_prct1 INTO ls_prct1.

*   利润中心初始值
*    IF SY-TABIX = 1 AND
*       ZTPO0019-PRCT1 IS INITIAL.
*      ZTPO0019-PRCT1 = LS_PRCT1-PRCTR.
*    ENDIF.
    IF sy-tabix = 1 AND
       ztpo0019-prct1 IS INITIAL.
      CALL FUNCTION 'ZFIFM_0132'
        EXPORTING
          iv_bukrs = ztpo0019-xmgs+0(4)
        IMPORTING
          ev_prctr = ztpo0019-prct1.
    ENDIF.


    ls_values-key  = ls_prct1-prctr.
    ls_values-text = ls_prct1-ktext.
    APPEND ls_values TO lt_values.

  ENDLOOP.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'ZTPO0019-PRCT1'
      values          = lt_values
    EXCEPTIONS
      id_illegal_name = 0.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DROP_FKTYP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_drop_fktyp  USING    iv_id TYPE c.

  TYPES:
    BEGIN OF ty_fktyp,
      seqno TYPE ztpo0070-seqno,
      descr TYPE ztpo0070-descr,
    END   OF ty_fktyp.

  DATA:
    lv_cwsy   TYPE ztpo0070-cwsy,
    lt_values TYPE vrm_values,
    lt_fktyp  TYPE TABLE OF ty_fktyp,
    ls_values LIKE LINE  OF lt_values,
    ls_fktyp  LIKE LINE  OF lt_fktyp,
    rs_fktyp  LIKE LINE  OF gt_fktyp.

  CLEAR:gt_fktyp[].

* 非内部划转
  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.
    lv_cwsy = 'Y'.
* 内部划转
  ELSEIF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.
    lv_cwsy = 'Z'.
  ENDIF.

  SELECT seqno
         descr
    FROM ztpo0070
    INTO TABLE lt_fktyp
   WHERE leve = '1'
     AND cwsy = lv_cwsy.

  CHECK sy-subrc = 0.

  LOOP AT lt_fktyp INTO ls_fktyp.

    rs_fktyp-sign = 'I'.
    rs_fktyp-option = 'EQ'.
    rs_fktyp-low = ls_fktyp-seqno.
    APPEND rs_fktyp TO gt_fktyp.

    ls_values-key  = ls_fktyp-seqno.
    ls_values-text = ls_fktyp-descr.
    APPEND ls_values TO lt_values.

  ENDLOOP.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = iv_id
      values          = lt_values
    EXCEPTIONS
      id_illegal_name = 0.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DROP_PAYFS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_drop_payfs .

  TYPES:
    BEGIN OF ty_payfs,
      seqno     TYPE ztpo0074-seqno,
      zffs_name TYPE ztpo0074-zffs_name,
    END   OF ty_payfs.

  DATA:
    lt_values TYPE vrm_values,
    lt_payfs  TYPE TABLE OF ty_payfs,
    ls_values LIKE LINE  OF lt_values,
    ls_payfs  LIKE LINE  OF lt_payfs.

  CHECK ztpo0019-xmgs IS NOT INITIAL.

  SELECT seqno
         zffs_name
    FROM ztpo0074
    INTO TABLE lt_payfs
   WHERE xmgs = ztpo0019-xmgs
     AND zxhbj = space.

  IF sy-subrc = 0.

    LOOP AT lt_payfs INTO ls_payfs.

      ls_values-key  = ls_payfs-seqno.
      ls_values-text = ls_payfs-zffs_name.
      APPEND ls_values TO lt_values.

    ENDLOOP.

  ENDIF.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'ZTPO0019-PAY_FS'
      values          = lt_values
    EXCEPTIONS
      id_illegal_name = 0.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SET_TOOLBAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_toolbar  CHANGING prf_object TYPE REF TO cl_alv_event_toolbar_set.

  DATA: ls_toolbar TYPE stb_button.
  DATA: lt_toolbar TYPE TABLE OF stb_button.

  CLEAR prf_object->mt_toolbar.

  CLEAR  ls_toolbar.
  MOVE   'INS'            TO   ls_toolbar-function.
  MOVE   '插入'           TO   ls_toolbar-quickinfo.
  MOVE   icon_insert_row  TO   ls_toolbar-icon.
  MOVE    ''              TO   ls_toolbar-disabled.
  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 1.

  CLEAR  ls_toolbar.
  MOVE   'DEL'            TO   ls_toolbar-function.
  MOVE   '删除'           TO   ls_toolbar-quickinfo.
  MOVE   icon_delete_row  TO   ls_toolbar-icon.
  MOVE    ''              TO   ls_toolbar-disabled.
  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 2.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HANDLE_USER_COMMAND_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM handle_user_command_alv  USING    e_ucomm.

  DATA:
    lv_error      TYPE c,
    lv_num        TYPE i,
    et_index_rows TYPE  lvc_t_row,
    et_row_no     TYPE lvc_t_roid,
    es_row_no     LIKE LINE OF et_row_no,
    et_row_no2    TYPE lvc_t_roid,
    es_row_no2    LIKE LINE OF et_row_no,
    lv_row_line   TYPE i,
    lv_line       TYPE i,
    lv_prctr      TYPE prctr.

  " 获取明细alv 的选中行
  CALL METHOD go_grid->get_selected_rows( IMPORTING et_index_rows = et_index_rows et_row_no = et_row_no ).

  IF et_row_no[] IS INITIAL.
    go_grid->get_current_cell( IMPORTING e_row = lv_line ).
    IF lv_line IS NOT INITIAL.
      es_row_no-row_id = lv_line.
      APPEND es_row_no TO et_row_no.
    ENDIF.
  ENDIF.

  " 获取附件alv2 的选中行
  CALL METHOD go_grid2->get_selected_rows( IMPORTING et_row_no = et_row_no2 ).

  IF et_row_no2[] IS INITIAL.
    CLEAR: lv_line.
    go_grid2->get_current_cell( IMPORTING e_row = lv_line ).
    IF lv_line IS NOT INITIAL.
      es_row_no2-row_id = lv_line.
      APPEND es_row_no2 TO et_row_no2.
    ENDIF.
  ENDIF.

  CASE e_ucomm.

    WHEN 'INS'.
      IF et_row_no[] IS NOT INITIAL.
        LOOP AT et_row_no INTO es_row_no.
          CLEAR: gs_alv.
          lv_line = es_row_no-row_id + 1.
          gs_alv-waers = ztpo0019-waers.
          INSERT gs_alv INTO gt_alv INDEX lv_line."es_row_no-row_id.
          IF sy-subrc <> 0.
            APPEND gs_alv TO gt_alv.
          ENDIF.
          EXIT.
        ENDLOOP.
      ELSE.
        CLEAR: gs_alv.
        gs_alv-waers = ztpo0019-waers.
        APPEND gs_alv TO gt_alv.
      ENDIF.

      " 刷新行项目号
      PERFORM frm_refresh_buzei.

    WHEN 'DEL'.
      CLEAR: gs_alv.
      LOOP AT et_row_no INTO es_row_no.
        DELETE gt_alv WHERE buzei = es_row_no-row_id.
      ENDLOOP.

      " 刷新行项目号
      PERFORM frm_refresh_buzei.

    WHEN 'INS2'.
      IF et_row_no2[] IS NOT INITIAL.

        LOOP AT et_row_no2 INTO es_row_no2.
          CLEAR: gs_alv2.
          lv_line = es_row_no2-row_id + 1.
          PERFORM icon_create_alv2 USING gs_alv2.
          INSERT gs_alv2 INTO gt_alv2 INDEX lv_line."es_row_no-row_id.
          IF sy-subrc <> 0.
            APPEND gs_alv2 TO gt_alv2.
          ENDIF.
          EXIT.
        ENDLOOP.
      ELSE.
        CLEAR: gs_alv2.

        PERFORM icon_create_alv2 USING gs_alv2.
        APPEND gs_alv2 TO gt_alv2.
      ENDIF.

      " 刷新行项目号
      PERFORM frm_refresh_buzei2.

    WHEN 'DEL2'.
      LOOP AT et_row_no2 INTO es_row_no2.
        READ TABLE gt_alv2 INTO gs_alv2 WITH KEY buzei = es_row_no2-row_id.
*       删除文件
        PERFORM frm_delete_file USING gs_alv2-docid.
        DELETE gt_alv2 WHERE buzei = es_row_no2-row_id.
      ENDLOOP.

      " 刷新行项目号
      PERFORM frm_refresh_buzei2.
  ENDCASE.

  go_grid->refresh_table_display( ).

  go_grid2->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_REFRESH_BUZEI2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_refresh_buzei2 .

  DATA: lv_num TYPE i.

  LOOP AT gt_alv2 INTO gs_alv2.
    lv_num = lv_num + 1.
    gs_alv2-buzei = lv_num.
    MODIFY gt_alv2 FROM gs_alv2 INDEX sy-tabix TRANSPORTING buzei.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DELETE_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_delete_file  USING    iv_docid TYPE ze_docid.

  DATA:
    lt_docs TYPE ztdoc010,
    ls_docs LIKE LINE OF lt_docs.

  CHECK iv_docid IS NOT INITIAL.

  ls_docs-docid = iv_docid.
  APPEND ls_docs TO lt_docs.

  CALL METHOD zcl_wd_json=>delete_files_for_json
    EXPORTING
      it_docs = lt_docs.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ICON_CREATE_ALV2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM icon_create_alv2  USING    is_alv2 LIKE gs_alv2.

  PERFORM icon_create USING is_alv2-upload gc_upload.
  PERFORM icon_create USING is_alv2-delete gc_delete.
  PERFORM icon_create USING is_alv2-down   gc_down  .

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ICON_CREATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM icon_create  USING    iv_icon
                           iv_name.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name                  = iv_name
      add_stdinf            = 'X'
    IMPORTING
      result                = iv_icon
    EXCEPTIONS
      icon_not_found        = 1
      outputfield_too_short = 2
      OTHERS                = 3.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HANDLE_DATA_CHANGED_FINISHED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM handle_data_changed_finished  TABLES   et_good_cells
                                   USING    e_modified.

  DATA:
    ls_cells  TYPE lvc_s_modi.

  READ TABLE et_good_cells INTO ls_cells INDEX 1.

  CASE ls_cells-fieldname.
    WHEN 'ZSKBH'.
*     检查收款人
      PERFORM frm_check_zskbh USING ls_cells-row_id.
    WHEN 'ZKXNR_TXT'.
*     编辑付款类型
      PERFORM frm_edit_zkxnr USING ls_cells-row_id.
    WHEN 'SWBMT_TXT'.
*     编辑税码
      PERFORM frm_edit_swbmt USING ls_cells-row_id.
    WHEN 'WRBTR'.
*     编辑本位币
      PERFORM frm_edit_dmbtr USING ls_cells-row_id.
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_ZSKBH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_check_zskbh  USING iv_tabix.

  DATA:
    ls_alv   LIKE LINE  OF gt_alv.

  READ TABLE gt_alv INTO ls_alv INDEX iv_tabix.

  CHECK sy-subrc = 0.

  CLEAR:ls_alv-zskna.

* 收款人名称
  SELECT SINGLE
         name1
    FROM lfa1
    INTO ls_alv-zskna
   WHERE lifnr = ls_alv-zskbh.

  CLEAR:
    ls_alv-zskyh,
    ls_alv-zskzh.

  MODIFY gt_alv FROM ls_alv INDEX iv_tabix
                            TRANSPORTING zskna zskyh zskzh.

  go_grid->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_EDIT_ZKXNR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_edit_zkxnr  USING    iv_tabix.

  DATA:
    lv_eas_code TYPE ztpo0070-eas_code,
    ls_fieldcat TYPE lvc_s_fcat,
    ls_alv      LIKE LINE OF gt_alv.

  READ TABLE gt_alv INTO ls_alv INDEX iv_tabix.

  ls_alv-zkxnr = ls_alv-zkxnr_txt(10).

  SELECT SINGLE eas_code
    FROM ztpo0070
    INTO lv_eas_code
   WHERE seqno = ls_alv-zkxnr.

  ls_alv-sflnr = lv_eas_code.

  MODIFY gt_alv FROM ls_alv INDEX iv_tabix TRANSPORTING zkxnr sflnr.

  IF ls_alv-zkxnr = '6602'.

    SELECT SINGLE
           butxt
      FROM t001
      INTO ls_alv-zskna
     WHERE bukrs =  ztpo0019-xmgs.

    ls_alv-zskbh = ztpo0019-xmgs.
    CLEAR:ls_alv-zgdflg,ls_alv-zgqbl.
    MODIFY gt_alv FROM ls_alv INDEX iv_tabix TRANSPORTING zskbh zskna zgdflg zgqbl.

    ls_fieldcat-edit = ''.
    MODIFY gt_fieldcat FROM ls_fieldcat TRANSPORTING edit
                                        WHERE fieldname = 'ZSKBH'
                                           OR fieldname = 'ZGDFLG'
                                           OR fieldname = 'ZGQBL'.

  ELSE.

    ls_fieldcat-edit = 'X'.
    MODIFY gt_fieldcat FROM ls_fieldcat TRANSPORTING edit
                                        WHERE fieldname = 'ZSKBH'
                                           OR fieldname = 'ZGDFLG'
                                           OR fieldname = 'ZGQBL'.

  ENDIF.

  IF ls_alv-zkxnr = '6601'.

    ls_alv-zgqbl = 100.
    MODIFY gt_alv FROM ls_alv INDEX iv_tabix TRANSPORTING zgqbl.

  ENDIF.

  go_grid->set_frontend_fieldcatalog( EXPORTING it_fieldcatalog = gt_fieldcat ).
  go_grid->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_EDIT_SWBMT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_edit_swbmt  USING    iv_tabix.

  DATA:
    ls_alv    LIKE LINE OF gt_alv.

  READ TABLE gt_alv INTO ls_alv INDEX iv_tabix.

  ls_alv-swbmt = ls_alv-swbmt_txt(2).
  MODIFY gt_alv FROM ls_alv INDEX iv_tabix TRANSPORTING swbmt.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_EDIT_DMBTR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_edit_dmbtr  USING    iv_tabix.

  DATA:
    ls_alv    LIKE LINE OF gt_alv.

  READ TABLE gt_alv INTO ls_alv INDEX iv_tabix.

  ls_alv-dmbtr = ls_alv-wrbtr * ztpo0019-ukurs.
  MODIFY gt_alv FROM ls_alv INDEX iv_tabix TRANSPORTING dmbtr.

  go_grid->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ON_F4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_on_f4  USING    iv_fieldname   TYPE c
                         is_row_no      TYPE lvc_s_roid
                         er_event_data  TYPE REF TO cl_alv_event_data.

  TYPES:
*   收款银行
    BEGIN OF ty_banka,
      banka TYPE bnka-banka,
    END   OF ty_banka,

*   收款账号
    BEGIN OF ty_bankn,
      bankn TYPE lfbk-zbank,
      bkref TYPE lfbk-bkref,
    END   OF ty_bankn,

    BEGIN OF ty_zskzh,
      zskzh TYPE ztfi0153-zskzh,
    END   OF ty_zskzh.

  DATA:
    lt_banka  TYPE TABLE OF ty_banka,       "收款银行
    lt_bankn  TYPE TABLE OF ty_bankn,       "收款账号
    lt_zskzh  TYPE TABLE OF ty_zskzh,       "收款账号
    lt_return TYPE TABLE OF ddshretval,     "返回值
    ls_banka  LIKE LINE  OF lt_banka,       "收款银行
    ls_bankn  LIKE LINE  OF lt_bankn,       "收款账号
    ls_zskzh  LIKE LINE  OF lt_zskzh,       "收款账号
    ls_return LIKE LINE  OF lt_return,      "返回值
    ls_modi   TYPE lvc_s_modi,
    ls_alv    LIKE LINE  OF gt_alv.

  FIELD-SYMBOLS:
    <lt_modi> TYPE lvc_t_modi.

* 项目分期
  TYPES:
    BEGIN OF ty_zxmfq,
      zxmfq TYPE ztfi0153-zxmfq,
      post1 TYPE prps-post1,
      stufe TYPE prps-stufe,
    END   OF ty_zxmfq,

    BEGIN OF ty_xmlnr,
      xmlnr TYPE ztfi0017-xmlnr,
      xmnma TYPE ztfi0017-xmnma,
    END   OF ty_xmlnr.

  DATA:
    lt_zxmfq TYPE TABLE OF ty_zxmfq,
    lt_xmlnr TYPE TABLE OF ty_xmlnr,
    lt_prps  TYPE TABLE OF prps,
    ls_prps  LIKE LINE  OF lt_prps,
    ls_zxmfq LIKE LINE  OF lt_zxmfq,
    ls_xmlnr LIKE LINE  OF lt_xmlnr.

* 合同
  TYPES:
    BEGIN OF ty_cttnr,
      ctsynr TYPE ztpo0041-ctsynr,
      cgjhx  TYPE ztpo0041-cgjhx,
    END   OF ty_cttnr.

  DATA:
    lt_cttnr  TYPE TABLE OF ty_cttnr.

  CHECK is_row_no-row_id IS NOT INITIAL.

  READ TABLE gt_alv INTO ls_alv INDEX is_row_no-row_id.

* 收款银行
  IF iv_fieldname = 'ZSKYH'.

    IF ls_alv-zkxnr = '6602'.

      SELECT bnka~banka
        FROM t012
       INNER JOIN bnka
          ON t012~bankl = bnka~bankl
        INTO TABLE lt_banka
       WHERE t012~bukrs = ls_alv-zskbh.   "收款人编号为公司代码

    ELSE.

*     收款银行
      SELECT bnka~banka
        FROM lfbk
       INNER JOIN bnka
          ON lfbk~banks = bnka~banks
         AND lfbk~bankl = bnka~bankl
        INTO TABLE lt_banka
       WHERE lfbk~lifnr = ls_alv-zskbh.
*         AND LFBK~BANKS = 'CN'.

    ENDIF.

    SORT lt_banka BY banka ASCENDING.
    DELETE ADJACENT DUPLICATES FROM lt_banka COMPARING banka.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'BANKA'
        dynpprog        = sy-repid
        dynpnr          = sy-dynnr
        value_org       = 'S'
      TABLES
        value_tab       = lt_banka
        return_tab      = lt_return
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2.

    IF sy-subrc = 0.
      READ TABLE lt_return INTO ls_return INDEX 1.
      ls_modi-row_id    = is_row_no-row_id.
      ls_modi-fieldname = iv_fieldname.
      ls_modi-value     = ls_return-fieldval.
      ASSIGN er_event_data->m_data->* TO <lt_modi>.
      APPEND ls_modi TO <lt_modi>.
    ENDIF.

* 收款账户
  ELSEIF iv_fieldname = 'ZSKZH'.

    IF ls_alv-zkxnr = '6602'.

      " TRANSLATE LS_ALV-ZSKYH TO LOWER  CASE.
      SELECT t012k~bankn
             t012k~bnkn2
        FROM t012k
       INNER JOIN t012
          ON t012k~bukrs = t012~bukrs
         AND t012k~hbkid = t012~hbkid
       INNER JOIN bnka
          ON t012~banks = bnka~banks
         AND t012~bankl = bnka~bankl
        INTO TABLE lt_bankn
       WHERE t012k~bukrs = ls_alv-zskbh    "收款人编号为公司代码
         AND bnka~banka  = ls_alv-zskyh.

    ELSE.
      "TRANSLATE LS_ALV-ZSKYH TO LOWER  CASE.
*     收款账户
      SELECT lfbk~zbank
*             lfbk~bkref
        FROM bnka
       INNER JOIN lfbk
          ON bnka~banks = lfbk~banks
         AND bnka~bankl = lfbk~bankl
        INTO TABLE lt_bankn
       WHERE lfbk~lifnr = ls_alv-zskbh
         AND bnka~banka = ls_alv-zskyh.

    ENDIF.

    LOOP AT lt_bankn INTO ls_bankn.
      CONCATENATE ls_bankn-bankn ls_bankn-bkref INTO ls_zskzh-zskzh.
      APPEND ls_zskzh TO lt_zskzh.
    ENDLOOP.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'ZSKZH'
        dynpprog        = sy-repid
        dynpnr          = sy-dynnr
        value_org       = 'S'
      TABLES
        value_tab       = lt_zskzh
        return_tab      = lt_return
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2.

    IF sy-subrc = 0.
      READ TABLE lt_return INTO ls_return INDEX 1.
      ls_modi-row_id    = is_row_no-row_id.
      ls_modi-fieldname = iv_fieldname.
      ls_modi-value     = ls_return-fieldval.
      ASSIGN er_event_data->m_data->* TO <lt_modi>.
      APPEND ls_modi TO <lt_modi>.
    ENDIF.

  ELSEIF iv_fieldname = 'ZXMFQ'.

    SELECT *
      FROM prps
      INTO TABLE lt_prps
     WHERE pbukr = ztpo0019-xmgs
       AND stufe = '2'.                       "仅分期

    LOOP AT lt_prps INTO ls_prps.

      ls_zxmfq-zxmfq = ls_prps-posid.
      ls_zxmfq-post1 = ls_prps-name_long.
      IF ls_zxmfq-post1 IS INITIAL.
        ls_zxmfq-post1 = ls_prps-post1.
      ENDIF.
      ls_zxmfq-stufe = ls_prps-stufe.
      APPEND ls_zxmfq TO lt_zxmfq.

    ENDLOOP.

    SELECT xmlnr
           xmnma
      FROM ztfi0017
      INTO TABLE lt_xmlnr
     WHERE bukrs = ztpo0019-xmgs.

    LOOP AT lt_xmlnr INTO ls_xmlnr.

      ls_zxmfq-zxmfq = ls_xmlnr-xmlnr.
      ls_zxmfq-post1 = ls_xmlnr-xmnma.
      ls_zxmfq-stufe = '1'.
      APPEND ls_zxmfq TO lt_zxmfq.

    ENDLOOP.

    ls_zxmfq-zxmfq = '000999'.
    ls_zxmfq-post1 = '项目-公司整体'.
    ls_zxmfq-stufe = '1'.
    APPEND ls_zxmfq TO lt_zxmfq.

    SORT lt_zxmfq BY stufe DESCENDING
                     zxmfq ASCENDING.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'ZXMFQ'
        dynpprog        = sy-repid
        dynpnr          = sy-dynnr
        value_org       = 'S'
      TABLES
        value_tab       = lt_zxmfq
        return_tab      = lt_return
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2.

    IF sy-subrc = 0.
      READ TABLE lt_return INTO ls_return INDEX 1.
      ls_modi-row_id    = is_row_no-row_id.
      ls_modi-fieldname = iv_fieldname.
      ls_modi-value     = ls_return-fieldval.
      ASSIGN er_event_data->m_data->* TO <lt_modi>.
      APPEND ls_modi TO <lt_modi>.
    ENDIF.

  ELSEIF iv_fieldname = 'CTTNR'.

    SELECT ctsynr
           cgjhx
      FROM ztpo0041
      INTO TABLE lt_cttnr
     WHERE ctwbs   = ls_alv-zxmfq
        OR ctclwbs = ls_alv-zxmfq.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'CTSYNR'
        dynpprog        = sy-repid
        dynpnr          = sy-dynnr
        value_org       = 'S'
      TABLES
        value_tab       = lt_cttnr
        return_tab      = lt_return
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2.

    IF sy-subrc = 0.
      READ TABLE lt_return INTO ls_return INDEX 1.
      ls_modi-row_id    = is_row_no-row_id.
      ls_modi-fieldname = iv_fieldname.
      ls_modi-value     = ls_return-fieldval.
      ASSIGN er_event_data->m_data->* TO <lt_modi>.
      APPEND ls_modi TO <lt_modi>.
    ENDIF.

  ENDIF.

  er_event_data->m_event_handled = 'X'.
  go_grid->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SET_TOOLBAR2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_toolbar2  CHANGING prf_object TYPE REF TO cl_alv_event_toolbar_set.

  DATA:
    ls_toolbar TYPE stb_button,
    lt_toolbar TYPE TABLE OF stb_button.

  CLEAR prf_object->mt_toolbar[].

  CLEAR  ls_toolbar.
  MOVE   'INS2'            TO   ls_toolbar-function.
  MOVE   '插入'           TO   ls_toolbar-quickinfo.
  MOVE   icon_insert_row  TO   ls_toolbar-icon.
  MOVE    ''              TO   ls_toolbar-disabled.
  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 1.

  CLEAR  ls_toolbar.
  MOVE   'DEL2'            TO   ls_toolbar-function.
  MOVE   '删除'           TO   ls_toolbar-quickinfo.
  MOVE   icon_delete_row  TO   ls_toolbar-icon.
  MOVE    ''              TO   ls_toolbar-disabled.
  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 2.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HANDLE_HOTSPOT_CLICK2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM handle_hotspot_click2  USING    i_row     TYPE  lvc_s_row
                                     i_column  TYPE lvc_s_col
                                     is_row_no TYPE lvc_s_roid.

  READ TABLE gt_alv2 INTO gs_alv2 INDEX is_row_no-row_id .
  " 相应双击事件
  IF i_column-fieldname = 'UPLOAD'.
    PERFORM frm_attach_add.
  ELSEIF i_column-fieldname = 'DOWN'.
    PERFORM frm_attach_down.
  ELSEIF i_column-fieldname = 'DELETE'.
    PERFORM frm_attach_delete USING is_row_no-row_id.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ATTACH_ADD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_attach_add .

  DATA:
    lv_guid TYPE guid_32,
    ls_d003 TYPE zsdoc003,
    ls_alv2 LIKE gs_alv2,
    ls_d002 TYPE zsdoc002,
    lt_d002 TYPE ztdoc002,
    lv_row  TYPE i.

  CLEAR: lv_row, lv_guid.
  lv_guid = zcl_pubfm=>get_guid( ).
  CALL FUNCTION 'ZFIFM_0010'
    EXPORTING
      iv_guid = lv_guid
    IMPORTING
      ev_docs = ls_d003.
  CHECK ls_d003-rows IS NOT INITIAL.

  lt_d002 = ls_d003-rows.
  READ TABLE lt_d002 INTO ls_d002 INDEX 1.

* 更新 信息
  go_grid2->get_current_cell( IMPORTING e_row = lv_row ).
  READ TABLE gt_alv2 INTO ls_alv2 INDEX lv_row.
  ls_alv2-iguid = lv_guid.       " 文档主键GUID --
  ls_alv2-docid = ls_d002-id.    " JAVA文档ID流水号 --
  ls_alv2-zfjmc = ls_d002-name.  " 文档名称 --
  ls_alv2-erdat = sy-datum.      " 上传日期 --

  MODIFY gt_alv2 FROM ls_alv2 INDEX lv_row.
  CLEAR ls_d003.  FREE lt_d002.

  go_grid2->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ATTACH_DOWN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_attach_down .

  CHECK gs_alv2-iguid IS NOT INITIAL.

  CALL FUNCTION 'ZFIFM_0011'
    EXPORTING
      iv_guid  = gs_alv2-iguid
      iv_docid = gs_alv2-docid.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ATTACH_DELETE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_attach_delete  USING    iv_row.

* 删除文件
  PERFORM frm_delete_file USING gs_alv2-docid.
  DELETE gt_alv2 INDEX iv_row.
  PERFORM frm_refresh_buzei2.
  go_grid2->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PREPARE_DRILLDOWN_VALUES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM prepare_drilldown_values .

  DATA:
    lv_cwsy     TYPE ztpo0070-cwsy,
    lt_mwskz    TYPE TABLE OF t007s,
    ls_mwskz    LIKE LINE  OF lt_mwskz,
    lt_ddval    TYPE lvc_t_drop,
    ls_ddval    TYPE lvc_s_drop,
    lt_ztpo0070 TYPE TABLE OF ztpo0070,
    ls_ztpo0070 LIKE LINE  OF lt_ztpo0070.

* 非内部划转
  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.
    lv_cwsy = 'Y'.
* 内部划转
  ELSEIF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.
    lv_cwsy = 'Z'.
  ENDIF.

  SELECT *
    FROM ztpo0070
    INTO TABLE lt_ztpo0070
   WHERE p_level_code = ztpo0019-fktyp
     AND leve = '2'
     AND cwsy = lv_cwsy.

  LOOP AT lt_ztpo0070 INTO ls_ztpo0070.

    ls_ddval-handle = '1' .
    ls_ddval-value(10)    = ls_ztpo0070-seqno.
    ls_ddval-value+11(50) = ls_ztpo0070-descr.
    APPEND ls_ddval TO lt_ddval .

  ENDLOOP.

  SELECT *
    FROM t007s
    INTO TABLE lt_mwskz
   WHERE kalsm = 'TAXCN'
     AND spras = '1'.

  LOOP AT lt_mwskz INTO ls_mwskz.

    ls_ddval-handle = '2' .
    ls_ddval-value(4)    = ls_mwskz-mwskz.
    ls_ddval-value+5(50) = ls_mwskz-text1.
    APPEND ls_ddval TO lt_ddval .

  ENDLOOP.

  go_grid->set_drop_down_table( it_drop_down       = lt_ddval ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ONLY_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_only_display .

  DATA:
    ls_fieldcat TYPE lvc_s_fcat,
    ls_alv      LIKE LINE OF gt_alv.

  IF gv_only_display = 'X'.
    LOOP AT SCREEN.
      IF screen-name <> ''.
        screen-input = 0.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.

    LOOP AT gt_fieldcat INTO ls_fieldcat.
      ls_fieldcat-edit = ''.
      MODIFY gt_fieldcat FROM ls_fieldcat INDEX sy-tabix TRANSPORTING edit.
    ENDLOOP.

    LOOP AT gt_fieldcat2 INTO ls_fieldcat.
      ls_fieldcat-edit = ''.
      MODIFY gt_fieldcat2 FROM ls_fieldcat INDEX sy-tabix TRANSPORTING edit.
    ENDLOOP.

    editor->set_readonly_mode( 1 ).

  ELSE.

    IF ztpo0019-fktyp <> '62' AND ztpo0019-fktyp <> '63'.

      CLEAR:ztpo0019-zqxfp.
      LOOP AT SCREEN.
        IF screen-name = 'ZTPO0019-ZQXFP'.
          screen-input = 0.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.

    ENDIF.

    LOOP AT gt_fieldcat INTO ls_fieldcat.
      IF ls_fieldcat-fieldname = 'BUZEI' OR
         ls_fieldcat-fieldname = 'ZSKNA' OR
         ls_fieldcat-fieldname = 'DMBTR'.
        ls_fieldcat-edit = ''.
      ELSE.
        ls_fieldcat-edit = 'X'.
      ENDIF.
      MODIFY gt_fieldcat FROM ls_fieldcat INDEX sy-tabix TRANSPORTING edit.
    ENDLOOP.

    LOOP AT gt_fieldcat2 INTO ls_fieldcat.
      IF ls_fieldcat-fieldname = 'BUZEI'  OR
         ls_fieldcat-fieldname = 'UPLOAD' OR
         ls_fieldcat-fieldname = 'DELETE' OR
         ls_fieldcat-fieldname = 'DOWN'.
        ls_fieldcat-edit = ''.
      ELSE.
        ls_fieldcat-edit = 'X'.
      ENDIF.
      MODIFY gt_fieldcat2 FROM ls_fieldcat INDEX sy-tabix TRANSPORTING edit.
    ENDLOOP.

    READ TABLE gt_alv INTO ls_alv
                      WITH KEY zkxnr = '6602'.
    IF sy-subrc = 0.

      ls_fieldcat-edit = ''.
      MODIFY gt_fieldcat FROM ls_fieldcat TRANSPORTING edit
                                          WHERE fieldname = 'ZSKBH'
                                             OR fieldname = 'ZGDFLG'
                                             OR fieldname = 'ZGQBL'.

    ENDIF.

  ENDIF.

* 内部划转
  IF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.
    editor->set_readonly_mode( 1 ).
  ENDIF.

  go_grid->set_frontend_fieldcatalog( EXPORTING it_fieldcatalog = gt_fieldcat ).

  go_grid2->set_frontend_fieldcatalog( EXPORTING it_fieldcatalog = gt_fieldcat2 ).

  go_grid->refresh_table_display( ).

  go_grid2->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_HUILV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_get_huilv .

  IF ztpo0019-waers = 'CNY'.
    ztpo0019-ukurs = 1.
*   本位币
    ztpo0019-rmbname = ztpo0019-sqfk_amt.
  ELSE.

*   汇率
    CALL FUNCTION 'READ_EXCHANGE_RATE'
      EXPORTING
        date             = sy-datum       "汇率日期
        foreign_currency = ztpo0019-waers "外币
        local_currency   = 'CNY'          "本币
      IMPORTING
        exchange_rate    = ztpo0019-ukurs  "交换率
      EXCEPTIONS
        no_rate_found    = 1
        no_factors_found = 2
        no_spread_found  = 3
        derived_2_times  = 4
        overflow         = 5
        zero_rate        = 6
        OTHERS           = 7.

    IF sy-subrc = 0.
*     本位币
      ztpo0019-rmbname = ztpo0019-sqfk_amt * ztpo0019-ukurs.
    ELSE.
      CLEAR:ztpo0019-ukurs,ztpo0019-rmbname.
    ENDIF.

  ENDIF.

  LOOP AT gt_alv INTO gs_alv WHERE waers <> ztpo0019-waers.
    gs_alv-waers = ztpo0019-waers.
    gs_alv-dmbtr = gs_alv-wrbtr * ztpo0019-ukurs.
    MODIFY gt_alv FROM gs_alv TRANSPORTING waers dmbtr.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_check  USING    iv_error
                         iv_state.

  DATA:
    lv_sum   TYPE ztpo0019-sqfk_amt.
  DATA:lv_prctr TYPE prctr.
  CLEAR: gt_log[].

  DELETE gt_alv WHERE zkxnr IS INITIAL
                  AND wrbtr IS INITIAL.
  DELETE gt_alv2 WHERE iguid IS INITIAL.

*-----------------------------抬头:必须项目检查-----------------------------*
  IF ztpo0019-kxsm IS INITIAL.
    m_log: 'E' 'ZMSG_FI' '000' '主题不能为空' '' '' ''.
  ENDIF.
*** MOD START V_TANGT
  IF ztpo0019-prct1 IS INITIAL.
    m_log: 'E' 'ZMSG_FI' '000' '利润中心不能为空' '' '' ''.
  ELSE.
    CLEAR lv_prctr.
    SELECT SINGLE prctr INTO lv_prctr FROM cepc_bukrs WHERE prctr = ztpo0019-prct1 AND bukrs = ztpo0019-xmgs+0(4).
    IF lv_prctr IS INITIAL.
      m_log: 'E' 'ZMSG_FI' '000' '利润中心' ztpo0019-prct1  '不属于公司代码' ztpo0019-xmgs.
    ENDIF.
  ENDIF.


*** MOD END V_TANGT
*-----------------------------明细行数检查-----------------------------*
  IF gt_alv[] IS INITIAL .
    m_log: 'E' 'ZMSG_FI' '039' '' '' '' ''.   "请输入收款信息
  ENDIF.

* 内部划转只允许填一行
  IF ( sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B' ) AND lines( gt_alv ) > 1.
    m_log: 'E' 'ZMSG_FI' '000' '内部划转业务时,明细只允许填一行' space '' ''.
  ENDIF.

*-----------------------------明细检查-----------------------------*
  LOOP AT gt_alv INTO gs_alv.

    lv_sum = lv_sum + gs_alv-wrbtr.

    gs_alv-zxmfq = '000999'.
    MODIFY gt_alv FROM gs_alv TRANSPORTING zxmfq.

*-----------------------------明细:必须项目检查-----------------------------*
    IF gs_alv-zkxnr IS INITIAL.
      m_log: 'E' 'ZMSG_FI' '000' '付款类型不能为空' space '' ''.
    ENDIF.

*-----------------------------明细:收款人检查-----------------------------*
    IF gs_alv-zkxnr <> '6602'.

*     收款人编号检查
      SELECT COUNT(*)
        FROM lfb1
       WHERE lifnr = gs_alv-zskbh
         AND bukrs = ztpo0019-xmgs.

      IF sy-subrc <> 0.
        m_log: 'E' 'ZMSG_FI' '000' '收款人编号:' gs_alv-zskbh ',不属于项目公司:' ztpo0019-xmgs.
      ENDIF.

    ENDIF.

*   以下付款类型,收款人的贸易伙伴不能为空
    IF gs_alv-zkxnr = '6001' OR
       gs_alv-zkxnr = '6101' OR
       gs_alv-zkxnr = '6701' OR
       gs_alv-zkxnr = '6501' OR
       gs_alv-zkxnr = '6201' OR
       gs_alv-zkxnr = '6601'.

      SELECT COUNT(*)
        FROM lfa1
       WHERE lifnr = gs_alv-zskbh
         AND vbund <> space.

      IF sy-subrc <> 0.
        m_log: 'E' 'ZMSG_FI' '000' '收款人编号:' gs_alv-zskbh '没有维护合作伙伴,' '请检查'.
      ENDIF.

    ENDIF.

*-----------------------------明细:银行信息检查-----------------------------*
    IF gs_alv-zkxnr = '6602'.

      SELECT COUNT(*)
        FROM t012
       INNER JOIN bnka
          ON t012~bankl = bnka~bankl
       WHERE t012~bukrs = gs_alv-zskbh    "收款人编号为公司代码
         AND bnka~banka = gs_alv-zskyh.

      IF sy-subrc <> 0.
        m_log: 'E' 'ZMSG_FI' '000' '收款银行:' gs_alv-zskyh '不存在,' '请检查'.

      ELSE.

        SELECT COUNT(*)
          FROM t012k
         INNER JOIN t012
            ON t012k~bukrs = t012~bukrs
           AND t012k~hbkid = t012~hbkid
         INNER JOIN bnka
            ON t012~banks = bnka~banks
           AND t012~bankl = bnka~bankl
         WHERE t012k~bukrs = gs_alv-zskbh    "收款人编号为公司代码
           AND bnka~banka  = gs_alv-zskyh
           AND t012k~bankn = gs_alv-zskzh(18)
           AND t012k~bnkn2 = gs_alv-zskzh+18.

        IF sy-subrc <> 0.
          m_log: 'E' 'ZMSG_FI' '000' '收款账户:' gs_alv-zskzh '不存在,' '请检查'.
        ENDIF.

      ENDIF.

    ELSE.

      SELECT COUNT(*)
        FROM lfbk
       INNER JOIN bnka
          ON lfbk~banks = bnka~banks
         AND lfbk~bankl = bnka~bankl
       WHERE lfbk~lifnr = gs_alv-zskbh
*         AND LFBK~BANKS = 'CN'
         AND bnka~banka = gs_alv-zskyh.

      IF sy-subrc <> 0.
        m_log: 'E' 'ZMSG_FI' '000' '收款银行:' gs_alv-zskyh '不存在,' '请检查'.

      ELSE.

        SELECT COUNT(*)
          FROM bnka
         INNER JOIN lfbk
            ON bnka~banks = lfbk~banks
           AND bnka~bankl = lfbk~bankl
         WHERE lfbk~lifnr = gs_alv-zskbh
           AND bnka~banka = gs_alv-zskyh
           AND lfbk~zbank = gs_alv-zskzh.

        IF sy-subrc <> 0.
          m_log: 'E' 'ZMSG_FI' '000' '收款账户:' gs_alv-zskzh '不存在,' '请检查'.
        ENDIF.

      ENDIF.

    ENDIF.

  ENDLOOP.

*-----------------------------付款金额检查-----------------------------*
  IF ztpo0019-sqfk_amt IS INITIAL.
    m_log: 'E' 'ZMSG_FI' '000' '付款金额不能为空' '' '' ''.
  ELSEIF lv_sum <> ztpo0019-sqfk_amt.
    m_log: 'E' 'ZMSG_FI' '000' '明细的收款金额合计' '和抬头的付款金额不一致' '' ''.
  ENDIF.

  IF ok_code = 'SUBMIT'.
*   付款单检查
    PERFORM frm_check_fkdnr.
  ENDIF.

* 检查状态
  PERFORM frm_check_bstat2 USING iv_state.

  IF gt_log[] IS NOT INITIAL.
    PERFORM frm_log.
    iv_error = 'X'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_BSTAT2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_check_bstat2  USING    iv_state.

  DATA:
    lv_djstat TYPE ztpo0019-djstat,
    lv_k2pch  TYPE ztpo0019-k2pch,
    lv_str1   TYPE string,
    lv_str2   TYPE string.

  IF iv_state = '10'.
    lv_str2 = '已创建'.
  ELSEIF iv_state = '20'.
    lv_str2 = '已提交'.
  ENDIF.

  CHECK ztpo0019-fksqnr IS NOT INITIAL.

  SELECT SINGLE djstat k2pch
    FROM ztpo0019
    INTO (lv_djstat,lv_k2pch)
   WHERE fksqnr = ztpo0019-fksqnr.

  IF lv_djstat = '10'.
    lv_str1 = '已创建'.
  ELSEIF lv_djstat = '20'.
    lv_str1 = '已提交'.
  ELSEIF lv_djstat = '30'.
    lv_str1 = '已审核'.
  ELSEIF lv_djstat = '40'.
    lv_str1 = '已驳回'.
  ELSEIF lv_djstat = '50'.
    lv_str1 = '已生成'.
  ELSEIF lv_djstat = '60'.
    lv_str1 = '废弃'.
  ENDIF.

  IF lv_djstat IS NOT INITIAL AND lv_djstat <> '10' AND lv_djstat <> '40'.
    m_log: 'E' 'ZMSG_FI' '040' lv_str1 lv_str2 '' ''.
  ELSEIF lv_k2pch IS NOT INITIAL AND lv_djstat = '10'.
    m_log: 'E' 'ZMSG_FI' '000' '该单据已经提交过一次,' '无法保存' '' ''.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_LOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_log .
  LOOP AT gt_log INTO gs_log.
    gs_log-id = 'ZMSG_FI'.
    MODIFY gt_log FROM gs_log.
  ENDLOOP.
  CALL FUNCTION 'SUSR_DISPLAY_LOG'
    EXPORTING
      display_in_popup = 'X'
    TABLES
      it_log_bapiret2  = gt_log[]
    EXCEPTIONS
      parameter_error  = 1
      OTHERS           = 2.

  CLEAR:gt_log[].

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SAVE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_save .

  DATA:
    lv_fksqnr   TYPE ztpo0019-fksqnr,
    lt_ztfi0153 TYPE TABLE OF ztfi0153,
    ls_ztfi0153 LIKE LINE  OF lt_ztfi0153,
    lt_ztfi0154 TYPE TABLE OF ztfi0154,
    ls_ztfi0154 LIKE LINE  OF lt_ztfi0154,
    ls_zsab0001 TYPE zsab0001.

* 生成申请单流水号
  PERFORM frm_zsqdh USING ztpo0019-fksqnr.

* 生成失败退出
  IF ztpo0019-fksqnr IS INITIAL.
    RETURN.
  ENDIF.

  lv_fksqnr = ztpo0019-fksqnr.

* 获取屏幕输入长文本
  PERFORM frm_prepare_comment.

  IF ztpo0019-cname IS INITIAL.
    ls_zsab0001-cname = sy-uname.
    ls_zsab0001-datum = sy-datum.
    ls_zsab0001-uzeit = sy-uzeit.
    GET TIME STAMP FIELD ls_zsab0001-timestamp.
  ELSE.
    MOVE-CORRESPONDING ztpo0019 TO ls_zsab0001.
    ls_zsab0001-uname = sy-uname.
    ls_zsab0001-aedat = sy-datum.
    ls_zsab0001-aezet = sy-uzeit.
    GET TIME STAMP FIELD ls_zsab0001-timestamp_upd.
  ENDIF.

  LOOP AT gt_alv INTO gs_alv.

    gs_alv-zsqdh = ztpo0019-fksqnr.
    gs_alv-skrlx = 'H0001'.
    MODIFY gt_alv FROM gs_alv TRANSPORTING zsqdh skrlx.
    MOVE-CORRESPONDING gs_alv TO ls_ztfi0153.
    MOVE-CORRESPONDING ls_zsab0001 TO ls_ztfi0153.
    APPEND ls_ztfi0153 TO lt_ztfi0153.

  ENDLOOP.

  DELETE FROM ztfi0153 WHERE zsqdh = ztpo0019-fksqnr.
  MODIFY ztfi0153 FROM TABLE lt_ztfi0153.
  IF sy-subrc <> 0.
    ROLLBACK WORK.
    MESSAGE s000(zmsg_fi) WITH 'DB表更新失败' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  ztpo0019-docty  = 'FI12'.
  ztpo0019-djstat = '10'.
  ztpo0019-ctsynr = gs_alv-cttnr.
  ztpo0019-rmbname_tax = ztpo0019-rmbname.
  ztpo0019-sqfk_amt_tax = ztpo0019-sqfk_amt.
  "  IF ok_code = 'SUBMIT'.
  "    ztpo0019-k2pch = ztpo0019-fksqnr.  "逐条审批时,也要记录批次号
  "  ENDIF.
  MOVE-CORRESPONDING ls_zsab0001 TO ztpo0019.
  MODIFY ztpo0019 FROM ztpo0019.
  IF sy-subrc <> 0.
    ROLLBACK WORK.
    MESSAGE s000(zmsg_fi) WITH 'DB表更新失败' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  LOOP AT gt_alv2 INTO gs_alv2.
    MOVE-CORRESPONDING gs_alv2 TO ls_ztfi0154.
    ls_ztfi0154-zsqdh = ztpo0019-fksqnr.
    MOVE-CORRESPONDING ls_zsab0001 TO ls_ztfi0154.
    APPEND ls_ztfi0154 TO lt_ztfi0154.
  ENDLOOP.

  DELETE FROM ztfi0154 WHERE zsqdh = ztpo0019-fksqnr.
  MODIFY ztfi0154 FROM TABLE lt_ztfi0154.
  IF sy-subrc <> 0.
    ROLLBACK WORK.
    MESSAGE s000(zmsg_fi) WITH 'DB表更新失败' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  COMMIT WORK AND WAIT.

  PERFORM frm_set_image.

  IF ok_code = 'SUBMIT'.

*   内部划转
    IF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.

      PERFORM frm_submit_nbhz.

*   非内部划转
    ELSEIF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.

      PERFORM frm_submit USING ztpo0019-fksqnr
                               ztpo0019-xmgs
                               space.

    ENDIF.

  ENDIF.

* 刷新界面
  PERFORM frm_update_s.

  m_log: 'S' 'ZMSG_FI' '000' '付款申请单:' lv_fksqnr ',创建或更新成功' ''.
  PERFORM frm_log.

ENDFORM.
FORM frm_set_image .

  DATA:
    lv_mode          TYPE char1,
    lo_zcl_po_wdc016 TYPE REF TO zcl_po_wdc016,
    lt_return        TYPE bapiret2_t,
    ls_return        LIKE LINE OF lt_return.

  IF ztpo0019-istat IS INITIAL.
    lv_mode = 'I'.  "创建
  ELSE.
    lv_mode = 'C'.  "更新
  ENDIF.

  CREATE OBJECT lo_zcl_po_wdc016.

  CALL FUNCTION 'ZPOFM_PI1028'
    EXPORTING
      iv_flag   = 'F' " 产值单签收
      iv_nr     = ztpo0019-fksqnr
      iv_mode   = lv_mode  " 'Q' " 签收
    IMPORTING
      et_return = lt_return.
*
*  lo_zcl_po_wdc016->syc_fk_2_yx(
*    EXPORTING
*      iv_mode   = lv_mode
*    CHANGING
*      cs_header = ztpo0019
*      ct_return = lt_return
*  ).

  LOOP AT lt_return INTO ls_return WHERE type CA 'AEI'.
    m_log: ls_return-type ls_return-id ls_return-number
           ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4.
  ENDLOOP.

ENDFORM.
FORM frm_get_image .

  DATA:
    lv_url1       TYPE string,
    lv_url2       TYPE char255,
    lo_po_wdc0017 TYPE REF TO zcl_po_wdc0017.

  CHECK sy-tcode NE 'ZFI135A' AND sy-tcode NE 'ZFI136A' AND gv_only_display IS NOT INITIAL.

  CREATE OBJECT lo_po_wdc0017.
  lo_po_wdc0017->get_yx_url(
    EXPORTING
      iv_obj_id = ztpo0019-fksqnr
      iv_type   = 'FK'
    RECEIVING
      rv_url    = lv_url1
    EXCEPTIONS
      error     = 1
      OTHERS    = 2 ).

  lv_url2 = lv_url1.

  CALL FUNCTION 'CALL_BROWSER'
    EXPORTING
      url                    = lv_url2
    EXCEPTIONS
      frontend_not_supported = 0
      frontend_error         = 0
      prog_not_found         = 0
      no_batch               = 0
      unspecified_error      = 0.

ENDFORM.
FORM frm_print_proc .

  DATA:
    ls_po0019    TYPE ztpo0019,
    ls_fksq_info TYPE zspo_fksq_inf2,
    ls_ljfp_amt  TYPE zspo_ljfp_inf,
    ls_fkje_head TYPE zspo_fkje_head,
    lt_fkje_item TYPE TABLE OF zspo_fkje_item,
    lt_spd       TYPE TABLE OF zsps_spd,
    lt_ztfi0153  TYPE TABLE OF ztfi0153.

* 打印
  DATA:
    fm_name         TYPE rs38l_fnam,
    lv_sfname       TYPE tdsfname,
    ls_output_opt   TYPE ssfcompop,
    job_output_info TYPE ssfcrescl.

  CHECK sy-tcode NE 'ZFI135A' AND sy-tcode NE 'ZFI136A' AND gv_only_display IS NOT INITIAL.

  SELECT SINGLE * FROM ztpo0019
    INTO ls_po0019
    WHERE fksqnr = ztpo0019-fksqnr.
  IF sy-subrc <> 0.
    RETURN.
  ENDIF.

* 获取打印数据
  PERFORM frm_edit_printinfo USING    ztpo0019-fksqnr
                             CHANGING ls_fksq_info
                                      ls_ljfp_amt     "from中不编辑
                                      ls_fkje_head
                                      lt_fkje_item
                                      lt_spd .         "from中不编辑
  SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_ztfi0153
    FROM ztfi0153 WHERE zsqdh = ztpo0019-fksqnr.
* SPOOL PARAMETERS
  ls_output_opt-tdimmed = 'X'.
  ls_output_opt-tddelete = 'X'.
  ls_output_opt-tdlifetime = 'X'.
  ls_output_opt-tddest = 'LP01'.
  ls_output_opt-xsfformat = 'X'.
  IF  ztpo0019-docty EQ 'FI12' OR  ztpo0019-docty EQ 'FI11' .

    lv_sfname = 'ZSF_PO_FI_FKSQ'. "投融资类付款申请单打印
  ELSE
    .
    EXIT.
  ENDIF.


  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = lv_sfname
    IMPORTING
      fm_name            = fm_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.



  CALL FUNCTION fm_name "'/1BCDWB/SF00000006'   "/1BCDWB/SF00000009
    EXPORTING
      output_options   = ls_output_opt
      user_settings    = space
      i_fksq_inf       = ls_fksq_info
      i_ljfp_inf       = ls_ljfp_amt
      i_fkje_head      = ls_fkje_head
      i_docty          = ztpo0019-docty
    IMPORTING
      job_output_info  = job_output_info
    TABLES
      t_fkje_item      = lt_fkje_item
      t_spd            = lt_spd
      t_ztfi0153       = lt_ztfi0153
    EXCEPTIONS
      formatting_error = 1
      internal_error   = 2
      send_error       = 3
      user_canceled    = 4
      OTHERS           = 5.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
  ENDIF.

ENDFORM.
FORM frm_print_proc_s USING    it_row_no TYPE lvc_t_roid.

  DATA:
    ls_po0019    TYPE ztpo0019,
    ls_fksq_info TYPE zspo_fksq_inf2,
    ls_ljfp_amt  TYPE zspo_ljfp_inf,
    ls_fkje_head TYPE zspo_fkje_head,
    lt_fkje_item TYPE TABLE OF zspo_fkje_item,
    lt_spd       TYPE TABLE OF zsps_spd,
    lt_ztfi0153  TYPE TABLE OF ztfi0153,
    lt_search    TYPE TABLE OF ty_search,
    ls_search    LIKE LINE  OF gt_search,
    ls_row_no    LIKE LINE  OF it_row_no.


* 打印
  DATA:
    fm_name         TYPE rs38l_fnam,
    lv_sfname       TYPE tdsfname,
    ls_output_opt   TYPE ssfcompop,
    job_output_info TYPE ssfcrescl.
  DATA: lwa_prtctrl_param LIKE ssfctrlop.    "工作区: SMARTFORM 打印的控制变量
  CLEAR lwa_prtctrl_param.
  MOVE 'X' TO lwa_prtctrl_param-preview.  "打印可预览

  CHECK sy-tcode NE 'ZFI135A' AND sy-tcode NE 'ZFI136A'.

* SPOOL PARAMETERS
  ls_output_opt-tdimmed = 'X'.
  ls_output_opt-tddelete = 'X'.
  ls_output_opt-tdlifetime = 'X'.
  ls_output_opt-tddest = 'LP01'.
  ls_output_opt-xsfformat = 'X'.
  lv_sfname = 'ZSF_PO_FI_FKSQ'. "投融资类付款申请单打印


  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = lv_sfname
    IMPORTING
      fm_name            = fm_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.

  lwa_prtctrl_param-preview  = 'X'.                "打印可预览
  lwa_prtctrl_param-no_open  = 'X'.                "打印设备打开控制标识
  lwa_prtctrl_param-no_close = 'X'.                "打印设备关闭控制标识
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      control_parameters = lwa_prtctrl_param
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  LOOP AT it_row_no INTO ls_row_no.

    READ TABLE gt_search INTO ls_search INDEX ls_row_no-row_id.
    IF  ls_search-docty EQ 'FI12' OR  ls_search-docty EQ 'FI11'.
    ELSE.
      RETURN.
    ENDIF.

    CLEAR ls_po0019.
    SELECT SINGLE * FROM ztpo0019
     INTO ls_po0019
     WHERE fksqnr = ls_search-fksqnr.
    IF sy-subrc <> 0.
      RETURN.
    ENDIF.

* 获取打印数据
    PERFORM frm_edit_printinfo USING    ls_search-fksqnr
                               CHANGING ls_fksq_info
                                        ls_ljfp_amt     "from中不编辑
                                        ls_fkje_head
                                        lt_fkje_item
                                        lt_spd .         "from中不编辑
    CLEAR lt_ztfi0153.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_ztfi0153
      FROM ztfi0153 WHERE zsqdh = ls_search-fksqnr.


    CALL FUNCTION fm_name "'/1BCDWB/SF00000006'   "/1BCDWB/SF00000009
      EXPORTING
*       output_options     = ls_output_opt
*       user_settings      = space
        control_parameters = lwa_prtctrl_param  "工作区:打印控制参数 ------------
        i_fksq_inf         = ls_fksq_info
        i_ljfp_inf         = ls_ljfp_amt
        i_fkje_head        = ls_fkje_head
        i_docty            = ls_search-docty
      IMPORTING
        job_output_info    = job_output_info
      TABLES
        t_fkje_item        = lt_fkje_item
        t_spd              = lt_spd
        t_ztfi0153         = lt_ztfi0153
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
    ENDIF.
  ENDLOOP.
  CALL FUNCTION 'SSF_CLOSE'
    EXCEPTIONS
      formatting_error = 1
      internal_error   = 2
      send_error       = 3
      OTHERS           = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_EDIT_PRINTINFO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_edit_printinfo  USING    iv_fksqnr     TYPE ztpo0019-fksqnr
                         CHANGING es_fksq_info  TYPE zspo_fksq_inf2
                                  es_ljfp_amt   TYPE zspo_ljfp_inf
                                  es_fkje_head  TYPE zspo_fkje_head
                                  et_fkje_item  TYPE ztpo_fkje_item
                                  et_spd        TYPE ztps_spd .

  DATA:
    lv_ct_new_amt TYPE ze_amt_new,
    lo_po_wdc0017 TYPE REF TO zcl_po_wdc0017,
    ls_ztpo0019   TYPE ztpo0019,
    ls_ztpo0041   TYPE ztpo0041,
    ls_ztpo0077   TYPE ztpo0077,
    ls_fkje_item  LIKE LINE OF et_fkje_item.

* 付款申请基本信息
  SELECT SINGLE *
    FROM ztpo0019
    INTO ls_ztpo0019
    WHERE fksqnr = iv_fksqnr.

  IF sy-subrc <> 0.
    RETURN.
  ENDIF.

* 合同信息
  SELECT SINGLE *
    FROM ztpo0041
    INTO ls_ztpo0041
    WHERE ctsynr = ls_ztpo0019-ctsynr.

*-----------------基本信息数据-----------------
  es_fksq_info-docnm = ls_ztpo0019-fksqnr.            "单据编号
  es_fksq_info-wlkbs = ls_ztpo0019-wlkbs.             "往来款标识

* 支付方式
  es_fksq_info-pay_fs = zcl_po_common=>get_zffs_data( iv_pay_fs = ls_ztpo0019-pay_fs iv_xmgs = ls_ztpo0019-xmgs )-zffs_name.

  es_fksq_info-kxsm  = ls_ztpo0019-kxsm.              "款项说明
  es_fksq_info-banka = ls_ztpo0019-banka.             "收款银行
  es_fksq_info-bankn = ls_ztpo0019-bankn.             "收款账号

* 银行地址
  SELECT SINGLE ort01
    FROM bnka
    INTO es_fksq_info-bezei
   WHERE bankl = ls_ztpo0019-bankl
     AND banks = 'CN'.

  es_fksq_info-ctgdnr = ls_ztpo0041-ctgdnr.           "合同归档编号
  es_fksq_info-depat_text = '财务部'.                 "用款部门
  es_fksq_info-val_xx = ls_ztpo0019-rmbname.          "本位币金额

* 大写
  zcl_pubfm=>change_amt_to_chinese(
    EXPORTING
      iv_money = es_fksq_info-val_xx                  "本位币金额
    IMPORTING
      ev_money = es_fksq_info-val_dx                  "中文大写
  ).
  es_fksq_info-name = ls_ztpo0019-fksqnr.             "标题
  es_fksq_info-txm  = ls_ztpo0019-fksqnr.             "条形码

* 实际付款公司
  SELECT SINGLE hname
    FROM ztfi0005
    INTO es_fksq_info-actcp
   WHERE hcode = ls_ztpo0019-fkgs.

  es_fksq_info-waers = ls_ztpo0019-waers.             "币别
  es_fksq_info-ukurs = ls_ztpo0019-ukurs.             "汇率
  es_fksq_info-fktyp = ls_ztpo0019-fktyp.             "付款类别

* 实际付款金额
  SELECT SUM( bmamt )
    FROM ztfi0023
    INTO es_fksq_info-actval
   WHERE cttnr = ls_ztpo0019-ctsynr
     AND djstu = '07'.

* 影像URL地址 URLAD
  CREATE OBJECT lo_po_wdc0017.

  lo_po_wdc0017->get_yx_url(
    EXPORTING
      iv_obj_id = ls_ztpo0019-fksqnr                  "单号
      iv_type   = zcl_po_wdc0017=>cv_fks              "FKS--付款申请
    RECEIVING
      rv_url    = es_fksq_info-urlad
    EXCEPTIONS
      error     = 1
      OTHERS    = 2
  ).

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE    'S'
                        NUMBER  sy-msgno
                        WITH    sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  es_fksq_info-bname = ls_ztpo0019-bname.             "用户名sap
* 用户名描述
  es_fksq_info-bname_text = zcl_pubfm=>get_cnusr( iv_usnam = es_fksq_info-bname ).

* 申请人部门
  zcl_po_common=>get_ykdep_name(
    EXPORTING
      iv_bname = ls_ztpo0019-bname
    IMPORTING
      ev_stext = es_fksq_info-sqr_depat_text
  ).

* 影像编号
  es_fksq_info-imgno = |SAPFK{ ls_ztpo0019-fksqnr }|.

* 付款类别描述
  SELECT SINGLE descr
    FROM ztpo0070
    INTO es_fksq_info-fktyp_desc
   WHERE seqno = ls_ztpo0019-fktyp.

  es_fksq_info-sqdate = ls_ztpo0019-sqdate.           "填单日期

* 项目公司名称
  zcl_po_common=>get_org_name(
    EXPORTING
      iv_hcode = ls_ztpo0019-xmgs
    IMPORTING
      ev_hname = es_fksq_info-xmgsnm
  ).

  es_fksq_info-barcode = |SAPFK{ ls_ztpo0019-fksqnr }|. "条形码

* 付款流程
  SELECT SINGLE *
    FROM ztpo0077
    INTO ls_ztpo0077
   WHERE seqno = ls_ztpo0019-fktyp
     AND yxgs  = ls_ztpo0019-yxgs.

  es_fksq_info-pay_process = ls_ztpo0077-pay_process. "付款流程

* 付款公司
  IF ls_ztpo0019-fkgs IS NOT INITIAL.
    es_fksq_info-fkgs = ls_ztpo0019-fkgs.
  ELSE.
    es_fksq_info-fkgs = ls_ztpo0019-xmgs.
  ENDIF.

  es_fksq_info-qtsm = ls_ztpo0019-qtsm.               "其他说明

*-----------------抬头-----------------
  es_fkje_head-conam = ls_ztpo0041-cgjhx.             "合同名称
  es_fkje_head-totva = ls_ztpo0041-ct_amt.            "合同造价(原币)
  es_fkje_head-tot_org = ls_ztpo0041-ct_amt.          "合同造价(本币)

  CALL FUNCTION 'ZPOFM005'
    EXPORTING
      iv_ctsynr     = ls_ztpo0019-ctsynr
    IMPORTING
      ev_ct_new_amt = lv_ct_new_amt.

  es_fkje_head-newva = lv_ct_new_amt.                 "最新造价(原币)
  es_fkje_head-new_ort = lv_ct_new_amt.               "最新造价(本币)

* 付款次数
  SELECT COUNT(*)
    FROM ztpo0019
    INTO es_fkje_head-times
   WHERE ctsynr = ls_ztpo0019-ctsynr
     AND dstat  <> '7'
     AND dstat  <> '8'
     AND fksqnr <= ls_ztpo0019-fksqnr.

*-----------------付款情况-----------------
  ls_fkje_item-btype   = '计算项'.
  ls_fkje_item-stype   = '申请金额'.
  ls_fkje_item-cur_org = ls_ztpo0019-rmbname.         "本期发生(本币)
  APPEND ls_fkje_item TO et_fkje_item.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ZSQDH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_zsqdh  USING    iv_zsqdh.

  DATA:
    iv_obj TYPE inri-object,
    lv_str TYPE string.

  CHECK iv_zsqdh IS INITIAL.

  iv_obj = 'ZFI0114'.

  CALL FUNCTION 'NUMBER_GET_NEXT'
    EXPORTING
      nr_range_nr             = '01'
      object                  = iv_obj
    IMPORTING
      number                  = lv_str
    EXCEPTIONS
      interval_not_found      = 1
      number_range_not_intern = 2
      object_not_found        = 3
      quantity_is_0           = 4
      quantity_is_not_1       = 5
      interval_overflow       = 6
      buffer_overflow         = 7
      OTHERS                  = 8.

  IF lv_str IS INITIAL.
    MESSAGE s000(zmsg_fi) WITH '编码范围没有维护' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  iv_zsqdh = lv_str.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_PREPARE_COMMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_prepare_comment .

  DATA:
    lv_str TYPE string.

  REFRESH gt_comment.

  CALL METHOD editor->get_text_as_r3table
    IMPORTING
      table = gt_comment.

  LOOP AT gt_comment INTO gs_comment.
    CONDENSE gs_comment.
    CONCATENATE lv_str gs_comment INTO lv_str.
  ENDLOOP.

  ztpo0019-qtsm = lv_str.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SUBMIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_submit USING iv_bguid  TYPE c
                      iv_bukrs  TYPE c
                      lv_plflg  TYPE c.

  DATA:
    lv_k2url  TYPE string,
    lv_url    TYPE char255,
    lv_bguid  TYPE bbp_er_partner_guid,
    lv_aptyp  TYPE ze_aptyp,
    lv_bukrs  TYPE ze_bukrs,
    lt_epmt1  TYPE bvw_tab_ranges,
    ls_epmt1  TYPE bvw_f_ranges,
    ls_selopt TYPE rsdsselopt.

  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.

*   判断批量审批标识
    IF lv_plflg IS INITIAL.
      lv_aptyp = 'SAP_VFI_NONINTERNALTRANSFER'.
    ELSE.
      lv_aptyp = 'SAP_VFI_NONINTERNALTRANSFER_PL'.
    ENDIF.

    ls_epmt1-fieldname = 'FKTYP'.

    ls_selopt-sign   = 'I'.
    ls_selopt-option = 'EQ'.
    ls_selopt-low    = ztpo0019-fktyp.
    APPEND ls_selopt TO ls_epmt1-selopt_t.

    APPEND ls_epmt1 TO lt_epmt1.

    CLEAR:ls_epmt1.
    ls_epmt1-fieldname = 'ZQXFP'.

    ls_selopt-sign   = 'I'.
    ls_selopt-option = 'EQ'.
    ls_selopt-low    = ztpo0019-zqxfp.
    APPEND ls_selopt TO ls_epmt1-selopt_t.

    APPEND ls_epmt1 TO lt_epmt1.

  ELSEIF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.
    lv_aptyp = 'SAP_VFI_INTERNALTRANSFER'.

    ls_epmt1-fieldname = 'FKTYP'.

    ls_selopt-sign   = 'I'.
    ls_selopt-option = 'EQ'.
*    LS_SELOPT-LOW    = '66'.
*    IF ztpo0019-fksqnr IS NOT INITIAL.
    IF sy-dynnr = '0100'.
      SELECT SINGLE zkxnr FROM ztfi0153 INTO ls_selopt-low WHERE zsqdh = ztpo0019-fksqnr.
    ELSE.
      ls_selopt-low = gv_fktyp.
    ENDIF.
    APPEND ls_selopt TO ls_epmt1-selopt_t.

    APPEND ls_epmt1 TO lt_epmt1.
  ENDIF.

  lv_bguid = iv_bguid.

  CALL FUNCTION 'ZABK2I_0002'
    EXPORTING
      iv_aptyp                = lv_aptyp
      iv_bguid                = lv_bguid
      iv_bukrs                = lv_bukrs
      it_epmt1                = lt_epmt1
    IMPORTING
      ev_k2url                = lv_k2url
    EXCEPTIONS
      configuration_not_found = 0
      approval_created_failed = 0.

  IF lv_k2url IS NOT INITIAL.
    IF ztpo0019-k2pch IS NOT INITIAL.
      GET TIME STAMP FIELD DATA(lv_timestamp).
      UPDATE ztpo0019
          SET k2pch  = ztpo0019-k2pch
              uname = sy-uname
              aedat = sy-datum
              aezet = sy-uzeit
              timestamp_upd = lv_timestamp
        WHERE fksqnr = ztpo0019-fksqnr.
    ENDIF.
  ELSE.
    m_log: 'E' 'ZMSG_FI' '000' '申请单:' ztpo0019-fksqnr '流程ID获取失败,请重试' ''.
  ENDIF.

  CHECK lv_k2url IS NOT INITIAL.

  lv_url = lv_k2url.
  COMMIT WORK AND WAIT. " 防止出现K2PCH更新不及时的情况
  CALL FUNCTION 'CALL_BROWSER'
    EXPORTING
      url                    = lv_url
    EXCEPTIONS
      frontend_not_supported = 0
      frontend_error         = 0
      prog_not_found         = 0
      no_batch               = 0
      unspecified_error      = 0.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_S
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_update_s .

* 刷新查询画面
  READ TABLE gt_s_h INTO gs_s_h WITH KEY fksqnr = ztpo0019-fksqnr.
  IF sy-subrc = 0.
    DELETE gt_s_h WHERE fksqnr = ztpo0019-fksqnr.
    DELETE gt_s_i WHERE zsqdh = ztpo0019-fksqnr.
    DELETE gt_s_i2 WHERE zsqdh = ztpo0019-fksqnr.
    DELETE gt_search WHERE fksqnr = ztpo0019-fksqnr.

    CLEAR: gs_s_h, gs_search.
    APPEND ztpo0019 TO gt_s_h.
    APPEND LINES OF gt_alv TO gt_s_i.
    LOOP AT gt_alv2 INTO gs_alv2.
      CLEAR: gs_s_i2.
      MOVE-CORRESPONDING gs_alv2 TO gs_s_i2.
      gs_s_i2-zsqdh = ztpo0019-fksqnr.
      APPEND gs_s_i2 TO gt_s_i2.
    ENDLOOP.

    MOVE-CORRESPONDING ztpo0019 TO gs_search.
*   申请单状态文本
    PERFORM frm_get_djstat.
    APPEND gs_search TO gt_search.

    SORT gt_search BY fksqnr.

    IF go_grid_s IS NOT INITIAL.
      go_grid_s->refresh_table_display( ).
    ENDIF.

* 复制出一张新单据时,刷新查询结果alv
  ELSEIF go_grid_s IS NOT INITIAL.
    PERFORM frm_get_data.
    PERFORM frm_prepare_search_data.
    go_grid_s->set_frontend_layout( is_layout = gs_layout ).
    go_grid_s->refresh_table_display( ).
  ENDIF.

  CLEAR:
    ztpo0019,
    gt_comment[],
    gt_alv[],
    gt_alv2[],
    gv_init.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DJSTAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_get_djstat .

  DATA:
    lv_value TYPE dd07v-domvalue_l.

  CLEAR:
    gs_search-djstat_txt.

  CHECK gs_search-djstat IS NOT INITIAL.

  lv_value = gs_search-djstat.

  CALL FUNCTION 'DOMAIN_VALUE_GET'
    EXPORTING
      i_domname  = 'ZD_DJSTAT'
      i_domvalue = lv_value
    IMPORTING
      e_ddtext   = gs_search-djstat_txt
    EXCEPTIONS
      not_exist  = 1.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CHANGE_PAYFS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_change_payfs .

  CHECK ztpo0019-pay_fs IS NOT INITIAL.

  SELECT SINGLE banka,bankl
    FROM ztpo0074
    INTO (@ztpo0019-banka,@ztpo0019-bankn)
   WHERE seqno = @ztpo0019-pay_fs
    AND  xmgs  = @ztpo0019-xmgs.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_S
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_alv_s .

  IF go_container_s IS INITIAL.
    CREATE OBJECT go_container_s
      EXPORTING
        container_name = 'CON_S'.

    CREATE OBJECT go_grid_s
      EXPORTING
        i_parent = go_container_s.

    PERFORM  prepare_field_catalog_s.

    PERFORM frm_alv_display_s.

    IF o_event_receiver IS INITIAL.
      CREATE OBJECT o_event_receiver."创造事件对象
    ENDIF.

    SET HANDLER o_event_receiver->handle_toolbar3 FOR go_grid_s.
    SET HANDLER o_event_receiver->handle_user_command_s FOR go_grid_s.
    SET HANDLER o_event_receiver->handle_double_click_s FOR go_grid_s .
    CALL METHOD go_grid_s->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

  ENDIF.

  go_grid_s->set_frontend_layout( is_layout = gs_layout ).
  go_grid_s->refresh_table_display( ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FIELD_CATALOG_S
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM prepare_field_catalog_s .

  DATA ls_fcat TYPE lvc_s_fcat .

  DEFINE add_fcat.
    CLEAR ls_fcat.
    ls_fcat-fieldname = &1.
    ls_fcat-outputlen = &2.
    ls_fcat-ref_field = &3.
    ls_fcat-ref_table = &4.
    ls_fcat-coltext   = &5.
    ls_fcat-no_zero   = 'X'.
    ls_fcat-just      = 'L'.
    ls_fcat-edit      = ''.

    IF ls_fcat-fieldname = 'ZQXFP'.
      ls_fcat-checkbox  = 'X'.
    ENDIF.

    APPEND ls_fcat TO gt_fieldcat_s.
  END-OF-DEFINITION.

  REFRESH gt_fieldcat_s.

  add_fcat 'FKSQNR'     '10' 'FKSQNR'   'ZTPO0019' '申请单号'.
  add_fcat 'K2SPNR'     '10' 'K2SPNR'   'ZTPO0019' 'K2号'.
  add_fcat 'DJSTAT_TXT' '10' ''         ''         '状态'.
  add_fcat 'XMGS'       '10' 'XMGS'     'ZTPO0019' '公司代码'.
  add_fcat 'BNAME'      '10' 'BNAME'    'ZTPO0019' '申请人'.
  add_fcat 'SQDATE'     '10' 'SQDATE'   'ZTPO0019' '申请日期'.
  add_fcat 'CDATE'      '10' 'CDATE'    'ZTPO0019' '付款日期'.
  add_fcat 'FKTYP'      '10' 'FKTYP'    'ZTPO0019' '款项类型'.

* 非内部时显示
  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.
    add_fcat 'ZQXFP'      '2'  'ZQXFP'    'ZTPO0019' '是否倾斜分配'.
  ENDIF.

  add_fcat 'BANKN'      '10' 'BANKN'    'ZTPO0019' '付款账号'.
  add_fcat 'BANKA'      '10' 'BANKA'    'ZTPO0019' '付款银行'.
  add_fcat 'SQFK_AMT'   '10' 'SQFK_AMT' 'ZTPO0019' '付款金额'.
  add_fcat 'WAERS'      '10' 'WAERS'    'ZTPO0019' '付款币别'.
  add_fcat 'UKURS'      '10' 'UKURS'    'ZTPO0019' '汇率'.
  add_fcat 'RMBNAME'    '10' 'RMBNAME'  'ZTPO0019' '本位币金额'.
  add_fcat 'K2MSG'      '50' 'K2MSG'    'ZTPO0019' 'K2返回消息'.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_DISPLAY_S
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_alv_display_s .

* 布局设置
  gs_layout-zebra = 'X' .
  gs_layout-sel_mode = 'A'.
  gs_layout-cwidth_opt = 'X'.

  go_grid_s->set_table_for_first_display(
      EXPORTING
        i_save                        = 'X'
        is_layout                     = gs_layout
      CHANGING
        it_outtab                     = gt_search
        it_fieldcatalog               = gt_fieldcat_s ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SET_TOOLBAR3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_toolbar3  CHANGING prf_object TYPE REF TO cl_alv_event_toolbar_set.

  DATA:
    ls_toolbar TYPE stb_button,
    lt_toolbar TYPE TABLE OF stb_button.

  CLEAR prf_object->mt_toolbar[].
  "功能按钮隐藏
*  CLEAR  ls_toolbar.
*  MOVE   'EDIT'           TO   ls_toolbar-function.
*  MOVE   '修改'           TO   ls_toolbar-text.
*  MOVE   '修改'           TO   ls_toolbar-quickinfo.
*  MOVE    ''              TO   ls_toolbar-disabled.
*  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 1.
*
*  CLEAR  ls_toolbar.
*  MOVE   'DELE'           TO   ls_toolbar-function.
*  MOVE   '废弃单据'       TO   ls_toolbar-text.
*  MOVE   '废弃单据'       TO   ls_toolbar-quickinfo.
*  MOVE    ''              TO   ls_toolbar-disabled.
*  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 2.
*
*  CLEAR  ls_toolbar.
*  MOVE   'SUBMIT'         TO   ls_toolbar-function.
*  MOVE   '提交'           TO   ls_toolbar-text.
*  MOVE   '提交'           TO   ls_toolbar-quickinfo.
*  MOVE    ''              TO   ls_toolbar-disabled.
*  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 2.

  CLEAR  ls_toolbar.
  MOVE   'PRT'         TO   ls_toolbar-function.
  MOVE   '打印'           TO   ls_toolbar-text.
  MOVE   '打印'           TO   ls_toolbar-quickinfo.
  MOVE    ''              TO   ls_toolbar-disabled.
  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 1.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HANDLE_USER_COMMAND_ALV_S
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM handle_user_command_alv_s  USING    e_ucomm.

  DATA:
    et_row_no TYPE lvc_t_roid,
    es_row_no LIKE LINE OF et_row_no,
    ls_row    TYPE lvc_s_row,
    ls_column TYPE lvc_s_col,
    lv_line   TYPE i.

  CALL METHOD go_grid_s->get_selected_rows( IMPORTING et_row_no = et_row_no ).

  IF et_row_no[] IS INITIAL.
    go_grid_s->get_current_cell( IMPORTING e_row = lv_line ).
    IF lv_line IS NOT INITIAL.
      es_row_no-row_id = lv_line.
      APPEND es_row_no TO et_row_no.
    ENDIF.
  ELSE.
    READ TABLE et_row_no INTO es_row_no INDEX 1.
  ENDIF.

  CASE e_ucomm.
    WHEN 'EDIT'.
      PERFORM handle_double_click_s USING ls_row ls_column es_row_no .
    WHEN 'DELE'.
      PERFORM frm_delete_proc USING es_row_no.
    WHEN 'SUBMIT'.
      PERFORM frm_submit_batch USING et_row_no.
    WHEN 'PRT'.
      PERFORM frm_print_proc_s USING et_row_no.
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HANDLE_DOUBLE_CLICK_S
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM handle_double_click_s  USING    i_row      TYPE lvc_s_row
                                     i_column   TYPE lvc_s_col
                                     is_row_no  TYPE lvc_s_roid.

  DATA:
    lv_url    TYPE char255,
    lv_djstat TYPE ztpo0019-djstat,
    lv_k2pch  TYPE ztpo0019-k2pch,
    lv_index  TYPE p LENGTH 5 DECIMALS 2,
    lv_start  TYPE i.

  READ TABLE gt_search INTO gs_search INDEX is_row_no-row_id.
  IF sy-subrc = 0.

    CASE i_column-fieldname.
      WHEN 'K2SPNR'.

        SELECT SINGLE k2url
          FROM ztab0005
          INTO lv_url
         WHERE prcit = gs_search-k2spnr.

        CHECK gs_search-k2spnr IS NOT INITIAL AND lv_url IS NOT INITIAL.

        CALL FUNCTION 'CALL_BROWSER'
          EXPORTING
            url                    = lv_url
          EXCEPTIONS
            frontend_not_supported = 0
            frontend_error         = 0
            prog_not_found         = 0
            no_batch               = 0
            unspecified_error      = 0.

      WHEN OTHERS.


        CLEAR: ztpo0019, gt_alv[], gt_alv2[],gt_comment[].

        READ TABLE gt_s_h INTO gs_s_h WITH KEY fksqnr = gs_search-fksqnr.
        MOVE-CORRESPONDING gs_s_h TO ztpo0019.

*       即时状态为准
        SELECT SINGLE djstat k2pch
          FROM ztpo0019
          INTO (lv_djstat,lv_k2pch)
         WHERE fksqnr = ztpo0019-fksqnr.

        lv_index = strlen( ztpo0019-qtsm ) / 100.
        DO ceil( lv_index ) TIMES.

          lv_start = ( sy-index - 1 ) * 100.
          gs_comment-line = ztpo0019-qtsm+lv_start(100).
          APPEND gs_comment TO gt_comment.

        ENDDO.

        LOOP AT gt_s_i INTO gs_s_i WHERE zsqdh = gs_search-fksqnr.
          CLEAR: gs_alv.
          MOVE-CORRESPONDING gs_s_i TO gs_alv.
*         付款类型,收款人类型文本取得
          PERFORM frm_get_txt.
          APPEND gs_alv TO gt_alv.
        ENDLOOP.

        LOOP AT gt_s_i2 INTO gs_s_i2 WHERE zsqdh = gs_search-fksqnr.
          CLEAR: gs_alv2.
          MOVE-CORRESPONDING gs_s_i2 TO gs_alv2.
          PERFORM icon_create_alv2 USING gs_alv2.

          APPEND gs_alv2 TO gt_alv2.
        ENDLOOP.

        IF lv_djstat = '10' OR lv_djstat = '40'.

          IF lv_djstat = '10' AND lv_k2pch IS NOT INITIAL.
            gv_only_display = 'X'.
            MESSAGE s000(zmsg_fi) WITH '该申请单已提交过一次,无法修改'.
          ELSE.
            CLEAR:gv_only_display.
          ENDIF.

        ELSE.
          gv_only_display = 'X'.
          MESSAGE s000(zmsg_fi) WITH '只有状态是“已创建”或“已驳回”才可以修改'.
        ENDIF.

        gv_init = 'X'.
        CALL SCREEN 100.

    ENDCASE.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_TXT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_get_txt .

  DATA:
    lv_value  TYPE dd07v-domvalue_l.

  SELECT SINGLE
         descr
    FROM ztpo0070
    INTO gs_alv-zkxnr_txt
   WHERE seqno = gs_alv-zkxnr.

  gs_alv-zkxnr_txt+10(45) = gs_alv-zkxnr_txt.
  gs_alv-zkxnr_txt(10)    = gs_alv-zkxnr.

  SELECT SINGLE
         text1
    FROM t007s
    INTO gs_alv-swbmt_txt
   WHERE kalsm = 'TAXCN'
     AND spras = '1'
     AND mwskz = gs_alv-swbmt.

  gs_alv-swbmt_txt+5(50) = gs_alv-swbmt_txt.
  gs_alv-swbmt_txt(5)    = gs_alv-swbmt.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DELETE_PROC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_delete_proc  USING    is_row_no TYPE lvc_s_roid.

  DATA:
    ls_search LIKE LINE OF gt_search,       "旧的付款申请单
    lv_djstat TYPE ztpo0019-djstat,         "即时状态
    lv_msgv1  TYPE sy-msgv1,
    lv_answer TYPE char1,
    lt_s_h    TYPE TABLE OF ztpo0019,
    lt_s_i    TYPE TABLE OF ztfi0153,
    lt_s_i2   TYPE TABLE OF ztfi0154.

  READ TABLE gt_search INTO gs_search INDEX is_row_no-row_id.
  CHECK sy-subrc = 0.
  ls_search = gs_search.

* 取得申请单的即时状态
  SELECT SINGLE djstat
    FROM ztpo0019
    INTO lv_djstat
   WHERE fksqnr = gs_search-fksqnr.

* 状态检查
  IF lv_djstat <> '10' AND lv_djstat <> '40'.
    MESSAGE s000(zmsg_fi) WITH '只有状态是“已创建”或“已驳回”时才可以废弃' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      titlebar       = '提示'
      text_question  = '是否复制并重新生成付款申请单?'
    IMPORTING
      answer         = lv_answer
    EXCEPTIONS
      text_not_found = 1.

* 取消 按钮
  IF lv_answer = 'A'.
    RETURN.
  ENDIF.
  GET TIME STAMP FIELD DATA(lv_timestamp).
  UPDATE ztpo0019
     SET djstat = '60'
         uname = sy-uname
         aedat = sy-datum
         aezet = sy-uzeit
         timestamp_upd = lv_timestamp
   WHERE fksqnr = gs_search-fksqnr.

  IF sy-subrc <> 0.
    ROLLBACK WORK.
    MESSAGE s000(zmsg_fi) WITH '废弃失败' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  lv_msgv1 = '订单已经废弃'.

* 是 按钮
  IF lv_answer = '1'.

    CLEAR:
      gs_search-fksqnr,
      gs_search-fkdnr,
      gs_search-istat,
      gs_search-k2spnr,
      gs_search-k2pch,
      gs_search-k2msg.

*   生成新的申请单流水号
    PERFORM frm_zsqdh USING gs_search-fksqnr.
    IF gs_search-fksqnr IS INITIAL.
      ROLLBACK WORK.
      RETURN.
    ENDIF.

*   取得原数据
    lt_s_h[]  =  gt_s_h[].
    lt_s_i[]  =  gt_s_i[].
    lt_s_i2[] =  gt_s_i2[].
    DELETE lt_s_h  WHERE fksqnr <> ls_search-fksqnr.
    DELETE lt_s_i  WHERE zsqdh <> ls_search-fksqnr.
    DELETE lt_s_i2 WHERE zsqdh <> ls_search-fksqnr.

*   新的付款申请单编号覆盖旧的
    gs_s_h-fksqnr = gs_search-fksqnr.
    gs_s_h-fkdnr  = gs_search-fkdnr.
    gs_s_h-istat  = gs_search-istat.
    gs_s_h-k2spnr = gs_search-k2spnr.
    gs_s_h-k2pch  = gs_search-k2pch.
    gs_s_h-k2msg  = gs_search-k2msg.
    gs_s_h-bname  = sy-uname.
    gs_s_h-sqdate = sy-datum.
    gs_s_h-cname  = sy-uname.
    gs_s_h-datum  = sy-datum.
    gs_s_h-uzeit  = sy-uzeit.
    GET TIME STAMP FIELD gs_s_h-timestamp.
    gs_s_h-djstat = '10'.
    gs_search-djstat = '10'.
    MODIFY lt_s_h FROM gs_s_h
           TRANSPORTING fksqnr fkdnr istat k2spnr k2pch k2msg djstat bname sqdate cname datum uzeit timestamp
           WHERE fksqnr <> gs_search-fksqnr.

    gs_s_i-zsqdh = gs_search-fksqnr.
    gs_s_i-zfkdh = gs_search-fkdnr.
    MODIFY lt_s_i FROM gs_s_i TRANSPORTING zsqdh zfkdh
                              WHERE zsqdh <> gs_search-fksqnr.

    gs_s_i2-zsqdh = gs_search-fksqnr.
    MODIFY lt_s_i2 FROM gs_s_i2 TRANSPORTING zsqdh
                                WHERE zsqdh <> gs_search-fksqnr.

*   重新生成付款申请单
    INSERT ztpo0019 FROM TABLE lt_s_h ACCEPTING DUPLICATE KEYS.
    IF sy-subrc <> 0.
      ROLLBACK WORK.
      MESSAGE s000(zmsg_fi) WITH '重新生成付款申请单失败,已保留废弃单据' DISPLAY LIKE 'E'.
      RETURN.
    ENDIF.

    INSERT ztfi0153 FROM TABLE lt_s_i ACCEPTING DUPLICATE KEYS.
    IF sy-subrc <> 0.
      ROLLBACK WORK.
      MESSAGE s000(zmsg_fi) WITH '重新生成付款申请单失败,已保留废弃单据' DISPLAY LIKE 'E'.
      RETURN.
    ENDIF.

    INSERT ztfi0154 FROM TABLE lt_s_i2 ACCEPTING DUPLICATE KEYS.
    IF sy-subrc <> 0.
      ROLLBACK WORK.
      MESSAGE s000(zmsg_fi) WITH '重新生成付款申请单失败,已保留废弃单据' DISPLAY LIKE 'E'.
      RETURN.
    ENDIF.

    CONCATENATE lv_msgv1 ',并重新生成付款申请单' INTO lv_msgv1.

*   重新生成的付款申请单数据添加到查询结果
    APPEND LINES OF lt_s_h TO gt_s_h.
    APPEND LINES OF lt_s_i TO gt_s_i.
    APPEND LINES OF lt_s_i2 TO gt_s_i2.
*   财务类申请单状态文本
    PERFORM frm_get_djstat.
    APPEND gs_search TO gt_search.

  ENDIF.

  COMMIT WORK AND WAIT.

  gs_search = ls_search.
  gs_search-djstat = '60'.
* 财务类申请单状态文本
  PERFORM frm_get_djstat.
  MODIFY gt_search FROM gs_search INDEX is_row_no-row_id TRANSPORTING djstat djstat_txt.

* 刷新画面
  go_grid_s->refresh_table_display( ).

  MESSAGE s000(zmsg_fi) WITH lv_msgv1.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_get_data .

  DATA:
    lt_019   TYPE TABLE OF ztpo0019,
    ls_019   TYPE ztpo0019,
    lt_153   TYPE TABLE OF ztfi0153,
    ls_153   TYPE ztfi0153,
    lt_154   TYPE TABLE OF ztfi0154,
    ls_154   TYPE ztfi0154,
    ls_fktyp LIKE LINE  OF gt_fktyp.

  IF p_fktyp IS NOT INITIAL.

    CLEAR:gt_fktyp[].
    ls_fktyp-sign = 'I'.
    ls_fktyp-option = 'EQ'.
    ls_fktyp-low = p_fktyp.
    APPEND ls_fktyp TO gt_fktyp.

  ENDIF.

* 解锁
  PERFORM frm_unlock_proc.

  SELECT *
    FROM ztpo0019
    INTO TABLE gt_s_h
   WHERE xmgs     IN s_xmgs
     AND fktyp    IN gt_fktyp
     AND sqdate   IN s_sqdate
     AND fksqnr   IN s_fksqnr
     AND k2spnr   IN s_k2spnr
     AND djstat   IN s_stat
     AND sqfk_amt IN s_sqfk
     AND bname    IN s_bname
     AND docty    =  'FI12'.

* 上锁
  PERFORM frm_lock_proc.

  IF gt_s_h IS NOT INITIAL.

    SELECT *
      FROM ztfi0153
      INTO TABLE gt_s_i
       FOR ALL ENTRIES IN gt_s_h
     WHERE zsqdh = gt_s_h-fksqnr.

    SELECT *
      FROM ztfi0154
      INTO TABLE gt_s_i2
       FOR ALL ENTRIES IN gt_s_h
     WHERE zsqdh = gt_s_h-fksqnr.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_PREPARE_SEARCH_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_prepare_search_data .

  CLEAR:gt_search[].
  LOOP AT gt_s_h INTO gs_s_h.
    CLEAR: gs_search.
    MOVE-CORRESPONDING gs_s_h TO gs_search.
*   财务类申请单状态文本
    PERFORM frm_get_djstat.
    APPEND gs_search TO gt_search.
  ENDLOOP.

  SORT gt_search BY fksqnr.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_FKDNR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_check_fkdnr .

  DATA:
    ls_para TYPE zsfi0006,
    ls_lfa1 TYPE lfa1,
    lt_alv  TYPE TABLE OF typ_153,
    ls_alv  LIKE LINE  OF lt_alv,
    lv_iret TYPE syst_subrc.

  ls_para-mdnam = 'FI'.                                      "模块
  ls_para-bukrs = ztpo0019-xmgs.                             "公司代码
  ls_para-djtyp = 'FI3100000'.                               "付款单据类型
  ls_para-sqdnr = ztpo0019-fksqnr.                           "申请单号
  ls_para-fxmnr = ztpo0019-posid.                            "项目编号
  ls_para-fxmfq = ztpo0019-fqposid.                          "项目分期
  ls_para-cttnr = ztpo0019-ctsynr.                           "合同编码
  ls_para-waers = ztpo0019-waers.                            "货币码
  ls_para-hlrat = ztpo0019-ukurs.                            "汇率
  ls_para-sjfhl = ztpo0019-ukurs.                            "汇率
  ls_para-fkbnk = ztpo0019-bankl.                            "付款银行
  ls_para-fkacc = ztpo0019-bankn.                            "付款账户
  ls_para-zffst = ztpo0019-pay_fs.                           "支付方式
  ls_para-fkcom = ztpo0019-fkgs.                             "付款公司代码
  ls_para-kxytx = ztpo0019-kxsm.                             "款项说明
  ls_para-k2sph = ztpo0019-k2spnr.                           "K2审批号
  ls_para-k2pch = ztpo0019-k2pch.                            "k2批量审批批次号
  ls_para-ywjbr = ztpo0019-bname.                            "业务经办人
  ls_para-wlkbs = ztpo0019-wlkbs.                            "往来款标识
  ls_para-yjsdt = ztpo0019-expredat.                         "预计收回日期
  ls_para-ywjdt = ztpo0019-sqdate.                           "业务经办日期
  ls_para-prct1 = ztpo0019-prct1.                            "业务公司利润中心
  ls_para-gsbe1 = ztpo0019-gsbe1.                            "业务公司业务类型
  ls_para-prct2 = ztpo0019-prct2.                            "付款公司利润中心
  ls_para-gsbe2 = ztpo0019-gsbe2.                            "付款公司业务类型

  lt_alv[] = gt_alv[].
  SORT lt_alv BY zskbh ASCENDING.
  DELETE ADJACENT DUPLICATES FROM lt_alv COMPARING zskbh.

  LOOP AT lt_alv INTO ls_alv.

    CLEAR:
      ls_para-fkamt,ls_para-zgqbl.

    SELECT SINGLE *
      FROM lfa1
      INTO ls_lfa1
     WHERE lifnr = ls_alv-zskbh.

    ls_para-fktyp  = ls_alv-zkxnr.                              "付款类型
    ls_para-fxmfq  = ls_alv-zxmfq.                              "项目分期
    ls_para-lifnr  = ls_alv-zskbh.                              "供应商或债权人的帐号

*   非内部划转
    IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.
      ls_para-skrlx  = 'H0001'.                                 "收款人类型
*   内部划转
    ELSEIF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.
      ls_para-skrlx  = 'OTHER'.                                 "收款人类型
    ENDIF.

    ls_para-sknam  = ls_alv-zskna.                              "收款人名称
    ls_para-skbnk  = ls_alv-zskyh.                              "收款银行
    ls_para-skacc  = ls_alv-zskzh.                              "收款账号
    ls_para-skfsf  = ls_lfa1-regio.                             "收款方省份
    ls_para-skfsx  = ls_lfa1-ort01.                             "收款方市县
    ls_para-zgdflg = ls_alv-zgdflg.                             "是否内部股东

*   付款金额取得
    LOOP AT gt_alv INTO gs_alv WHERE zskbh = ls_alv-zskbh.

      ls_para-fkamt = ls_para-fkamt + gs_alv-wrbtr.             "付款金额
      ls_para-zgqbl = ls_para-zgqbl + gs_alv-zgqbl.             "股权比例

    ENDLOOP.

    ls_para-bwamt = ls_para-fkamt * ztpo0019-ukurs.             "按本位币计的付款金额
    ls_para-smamt = ls_para-fkamt.                              "实付金额
    ls_para-bmamt = ls_para-bwamt.                              "按本位币计的实付金额

    CALL FUNCTION 'ZFIFM_0002'
      EXPORTING
        iv_para           = ls_para
        if_chck           = 'X'
      IMPORTING
        ev_iret           = lv_iret
      EXCEPTIONS
        call_input_failed = 0.

*   1表示成功,0表示失败
    IF lv_iret = 0.
      m_log: 'E' sy-msgid sy-msgno sy-msgv1 sy-msgv2 '' ''.
    ENDIF.

  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SUBMIT_BATCH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_submit_batch  USING    it_row_no TYPE lvc_t_roid.

  DATA:
    lv_plflg    TYPE char1,
    lv_k2pch    TYPE ztpo0019-k2pch,
    lt_search   TYPE TABLE OF ty_search,
    lt_temp     TYPE TABLE OF ty_search,
    lt_ztfi0379 TYPE TABLE OF ztfi0379,
    ls_ztfi0379 LIKE LINE  OF lt_ztfi0379,
    ls_temp     LIKE LINE  OF lt_temp,
    ls_search   LIKE LINE  OF gt_search,
    ls_row_no   LIKE LINE  OF it_row_no.
  RANGES lr_fksqnr FOR ztpo0019-fksqnr.

  CLEAR gv_fktyp.

  CONCATENATE sy-datum sy-uzeit INTO lv_k2pch.

  lr_fksqnr+0(3) = 'IEQ'.

  LOOP AT it_row_no INTO ls_row_no.

    READ TABLE gt_search INTO ls_search INDEX ls_row_no-row_id.

*   即时状态为准
    SELECT SINGLE djstat k2pch
      FROM ztpo0019
      INTO (ls_search-djstat,ls_search-k2pch)
     WHERE fksqnr = ls_search-fksqnr.

    IF ls_search-djstat <> '10' AND ls_search-djstat <> '40'.
      m_log: 'E' 'ZMSG_FI' '000' '申请单:' ls_search-fksqnr '的状态不是“已创建”' '或“已驳回”,无法提交'.
    ELSEIF ls_search-k2pch IS NOT INITIAL.
      m_log: 'E' 'ZMSG_FI' '000' '申请单:' ls_search-fksqnr '已提交过一次,无法再次提交。' '可通过废弃按钮废弃该单据,并复制出相同的单据继续提交'.
    ENDIF.

    CONCATENATE ls_search-xmgs lv_k2pch INTO ls_search-k2pch.
    APPEND ls_search TO lt_search.
    MODIFY gt_search FROM ls_search INDEX ls_row_no-row_id TRANSPORTING k2pch.

    lr_fksqnr-low = ls_search-fksqnr.
    COLLECT lr_fksqnr.
  ENDLOOP.

  CHECK lt_search IS NOT INITIAL.

  IF lr_fksqnr[] IS NOT INITIAL.
    SELECT zsqdh, buzei, zkxnr
      FROM ztfi0153
      INTO TABLE @DATA(lt_ztfi0153)
      WHERE zsqdh IN @lr_fksqnr.

    SORT lt_ztfi0153 BY zkxnr.
    DELETE ADJACENT DUPLICATES FROM lt_ztfi0153 COMPARING zkxnr.
    IF lines( lt_ztfi0153[] ) > 1.
      m_log: 'E' 'ZMSG_FI' '000' '选中的申请单付款类型不唯一,无法批量提交' '' '' ''.
    ELSE.
      READ TABLE lt_ztfi0153 INTO DATA(ls_ztfi0153) INDEX 1.
      gv_fktyp = ls_ztfi0153-zkxnr.
    ENDIF.
  ENDIF.
  lt_temp[] = lt_search[].

  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.

    SORT lt_temp BY xmgs fktyp zqxfp.
    DELETE ADJACENT DUPLICATES FROM lt_temp COMPARING xmgs fktyp zqxfp.

    IF lines( lt_temp ) > 1.
      m_log: 'E' 'ZMSG_FI' '000' '只有公司代码,' '款项类型和是否倾斜分配' '完全相同的数据' '才可以批量提交'.
    ENDIF.

  ELSEIF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.

    SORT lt_temp BY xmgs ASCENDING.
    DELETE ADJACENT DUPLICATES FROM lt_temp COMPARING xmgs.

    IF lines( lt_temp ) > 1.
      m_log: 'E' 'ZMSG_FI' '000' '选中数据的公司代码不唯一,' '无法批量审批' '' ''.
    ENDIF.

  ENDIF.

  IF gt_log[] IS NOT INITIAL.
    PERFORM frm_log.
    RETURN.
  ENDIF.

  LOOP AT lt_search INTO ls_search.

    PERFORM frm_check_batch_fkdnr USING ls_search.

    CHECK gt_log IS INITIAL.

    lv_k2pch = ls_search-k2pch.
*** MOD START V_TANGT
    DATA: lv_url    TYPE char255.
    CLEAR lv_url.

    ztpo0019-fktyp = ls_search-fktyp.
    ztpo0019-zqxfp = ls_search-zqxfp.

    PERFORM frm_submit_s USING lv_k2pch
                               ls_search-xmgs
                               space
                               lv_url.
    IF lv_url IS NOT INITIAL.
      GET TIME STAMP FIELD DATA(lv_timestamp).
      UPDATE ztpo0019
         SET k2pch = ls_search-k2pch
             uname = sy-uname
             aedat = sy-datum
             aezet = sy-uzeit
             timestamp_upd = lv_timestamp
       WHERE fksqnr = ls_search-fksqnr.

      IF sy-subrc <> 0.
        m_log: 'E' 'ZMSG_FI' '000' '申请单:' ls_search-fksqnr '批次号更新失败,请重试' ''.
      ENDIF.
    ELSE.
      m_log: 'E' 'ZMSG_FI' '000' '申请单:' ztpo0019-fksqnr '流程ID获取失败,请重试' ''.
    ENDIF.

*   编辑日志
    ls_ztfi0379-bname = sy-uname.
    ls_ztfi0379-bukrs = ls_search-xmgs.
    ls_ztfi0379-k2pch = ls_search-k2pch.
    ls_ztfi0379-fksqnr = ls_search-fksqnr.
    ls_ztfi0379-ztype = TEXT-t01. "提交申请
    ls_ztfi0379-cname = sy-uname.
    ls_ztfi0379-datum = sy-datum.
    ls_ztfi0379-uzeit = sy-uzeit.
    APPEND ls_ztfi0379 TO lt_ztfi0379.

  ENDLOOP.

  IF gt_log[] IS NOT INITIAL.
    ROLLBACK WORK.
    PERFORM frm_log.
    RETURN.
  ELSE.
*   插入日志
    INSERT ztfi0379 FROM TABLE lt_ztfi0379 ACCEPTING DUPLICATE KEYS.
  ENDIF.

  COMMIT WORK AND WAIT.

  LOOP AT it_row_no INTO ls_row_no.

    READ TABLE gt_search INTO gs_search INDEX ls_row_no-row_id.

    gs_search-k2pch = lv_k2pch.
    gs_search-djstat = '20'.
*   申请单状态文本
    PERFORM frm_get_djstat.
    MODIFY gt_search FROM gs_search INDEX ls_row_no-row_id TRANSPORTING k2pch djstat djstat_txt.

  ENDLOOP.

* 非内部划转
  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.

*   审批接口参数赋值
    ztpo0019-fktyp = ls_search-fktyp.
    ztpo0019-zqxfp = ls_search-zqxfp.
    lv_plflg = 'X'.     "批量审批标识

  ENDIF.

  PERFORM frm_submit USING lv_k2pch
                           ls_search-xmgs
                           lv_plflg.

  go_grid_s->set_frontend_layout( is_layout = gs_layout ).
  go_grid_s->refresh_table_display( ).

  CALL METHOD go_grid_s->set_selected_rows( EXPORTING it_row_no = it_row_no ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_BATCH_FKDNR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_check_batch_fkdnr  USING    is_search TYPE ty_search.

  DATA:
    ls_para TYPE zsfi0006,
    ls_lfa1 TYPE lfa1,
    lt_s_i  TYPE TABLE OF ztfi0153,
    ls_s_i  LIKE LINE  OF lt_s_i,
    lv_iret TYPE syst_subrc.

  lt_s_i[] = gt_s_i[].
  DELETE lt_s_i WHERE zsqdh <> is_search-fksqnr.
  SORT lt_s_i BY zskbh ASCENDING.
  DELETE ADJACENT DUPLICATES FROM lt_s_i COMPARING zskbh.

  SORT gt_s_i BY zsqdh ASCENDING
                 zskbh ASCENDING.

  ls_para-mdnam = 'FI'.                                      "模块
  ls_para-bukrs = is_search-xmgs.                            "公司代码
  ls_para-djtyp = 'FI3100000'.                               "付款单据类型
  ls_para-sqdnr = is_search-fksqnr.                          "申请单号
  ls_para-fxmnr = is_search-posid.                           "项目编号
  ls_para-fxmfq = is_search-fqposid.                         "项目分期
  ls_para-cttnr = is_search-ctsynr.                          "合同编码
  ls_para-waers = is_search-waers.                           "货币码
  ls_para-hlrat = is_search-ukurs.                           "汇率
  ls_para-fkbnk = is_search-bankl.                           "付款银行
  ls_para-fkacc = is_search-bankn.                           "付款账户
  ls_para-zffst = is_search-pay_fs.                          "支付方式
  ls_para-fkcom = is_search-fkgs.                            "付款公司代码
  ls_para-kxytx = is_search-kxsm.                            "款项说明
  ls_para-k2sph = is_search-k2spnr.                          "K2审批号
  ls_para-ywjbr = is_search-bname.                           "业务经办人
  ls_para-wlkbs = is_search-wlkbs.                           "往来款标识
  ls_para-yjsdt = is_search-expredat.                        "预计收回日期
  ls_para-ywjdt = is_search-sqdate.                          "业务经办日期
  ls_para-prct1 = is_search-prct1.                           "业务公司利润中心
  ls_para-gsbe1 = is_search-gsbe1.                           "业务公司业务类型
  ls_para-prct2 = is_search-prct2.                           "付款公司利润中心
  ls_para-gsbe2 = is_search-gsbe2.                           "付款公司业务类型

  LOOP AT lt_s_i INTO ls_s_i.

    CLEAR:
      ls_para-fkamt,ls_para-zgqbl.

    SELECT SINGLE *
      FROM lfa1
      INTO ls_lfa1
     WHERE lifnr = ls_s_i-zskbh.

    IF ls_para-wlkbs = 'X' OR lines( lt_s_i ) > 1.
      ls_para-fktyp = ls_s_i-zkxnr.                             "付款类型
    ELSE.
      ls_para-fktyp = is_search-fktyp.                          "付款类型
    ENDIF.

    ls_para-fxmfq  = ls_s_i-zxmfq.                              "项目分期
    ls_para-lifnr  = ls_s_i-zskbh.                              "供应商或债权人的帐号
    ls_para-skrlx  = 'H0001'.                                   "收款人类型
    ls_para-sknam  = ls_s_i-zskna.                              "收款人名称
    ls_para-skbnk  = ls_s_i-zskyh.                              "收款银行
    ls_para-skacc  = ls_s_i-zskzh.                              "收款账号
    ls_para-skfsf  = ls_lfa1-regio.                             "收款方省份
    ls_para-skfsx  = ls_lfa1-ort01.                             "收款方市县
    ls_para-zgdflg = ls_s_i-zgdflg.                             "是否内部股东

    READ TABLE gt_s_i TRANSPORTING NO FIELDS
                      WITH KEY zsqdh = ls_s_i-zsqdh
                               zskbh = ls_s_i-zskbh
                      BINARY SEARCH.

*   付款金额取得
    LOOP AT gt_s_i INTO gs_s_i FROM sy-tabix.

      IF gs_s_i-zsqdh <> ls_s_i-zsqdh OR
         gs_s_i-zskbh <> ls_s_i-zskbh.
        EXIT.
      ENDIF.

      ls_para-fkamt = ls_para-fkamt + gs_s_i-wrbtr.             "付款金额
      ls_para-zgqbl = ls_para-zgqbl + gs_s_i-zgqbl.             "股权比例

    ENDLOOP.

    ls_para-bwamt = ls_para-fkamt * is_search-ukurs.            "按本位币计的付款金额
    ls_para-smamt = ls_para-fkamt.                              "实付金额
    ls_para-bmamt = ls_para-bwamt.                              "按本位币计的实付金额

    CALL FUNCTION 'ZFIFM_0002'
      EXPORTING
        iv_para           = ls_para
        if_chck           = 'X'
      IMPORTING
        ev_iret           = lv_iret
      EXCEPTIONS
        call_input_failed = 0.

*   1表示成功,0表示失败
    IF lv_iret = 0.
      m_log: 'E' sy-msgid sy-msgno sy-msgv1 sy-msgv2 ' 申请单' is_search-fksqnr.
    ENDIF.

  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DROP_GSBE1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_drop_gsbe1 .

  TYPES:
    BEGIN OF ty_gsbe1,
      gsber TYPE tgsb-gsber,
      gtext TYPE tgsbt-gtext,
    END   OF ty_gsbe1.

  DATA:
    lt_values TYPE vrm_values,
    lt_gsbe1  TYPE TABLE OF ty_gsbe1,
    ls_values LIKE LINE  OF lt_values,
    ls_gsbe1  LIKE LINE  OF lt_gsbe1.

  SELECT tgsb~gsber
         tgsbt~gtext
    FROM tgsb
   INNER JOIN tgsbt
      ON tgsb~gsber = tgsbt~gsber
    INTO TABLE lt_gsbe1
   WHERE tgsbt~spras = sy-langu.

  IF sy-subrc = 0.

    LOOP AT lt_gsbe1 INTO ls_gsbe1.

      ls_values-key  = ls_gsbe1-gsber.
      ls_values-text = ls_gsbe1-gtext.
      APPEND ls_values TO lt_values.

    ENDLOOP.

  ENDIF.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'ZTPO0019-GSBE1'
      values          = lt_values
    EXCEPTIONS
      id_illegal_name = 0.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_LOCK_PROC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_lock_proc .

  DATA:
    lv_msgv1 TYPE sy-msgv1,
    lt_temp  TYPE TABLE OF ztpo0019,
    ls_temp  LIKE LINE  OF lt_temp.

  IF gt_s_h IS NOT INITIAL.

    lt_temp[] = gt_s_h[].
    SORT lt_temp BY xmgs ASCENDING.
    DELETE ADJACENT DUPLICATES FROM lt_temp COMPARING xmgs.

    LOOP AT lt_temp INTO ls_temp.
      CALL FUNCTION 'ENQUEUE_EZ_ZSFI0369'
        EXPORTING
          bukrs          = ls_temp-xmgs
          cprog          = sy-cprog
        EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.

      IF sy-subrc <> 0.
        lv_msgv1 = sy-msgv1.
        MESSAGE e000(zmsg_fi) WITH ls_temp-xmgs '已经被用户' lv_msgv1 '锁住'.
      ENDIF.

    ENDLOOP.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_UNLOCK_PROC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_unlock_proc .

  DATA:
    lt_temp TYPE TABLE OF ztpo0019,
    ls_temp LIKE LINE  OF lt_temp.

  IF gt_s_h IS NOT INITIAL.

    lt_temp[] = gt_s_h[].
    SORT lt_temp BY xmgs ASCENDING.
    DELETE ADJACENT DUPLICATES FROM lt_temp COMPARING xmgs.

    LOOP AT lt_temp INTO ls_temp.

      CALL FUNCTION 'DEQUEUE_EZ_ZSFI0369'
        EXPORTING
          bukrs = ls_temp-xmgs
          cprog = sy-cprog.

    ENDLOOP.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_COPY_PROC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_copy_proc .

  DATA:
    ls_alv LIKE LINE OF gt_alv.

  IF ztpo0019-fksqnr IS INITIAL.
    MESSAGE '请先保存单据' TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  CLEAR gv_only_display  .
  CLEAR ztpo0019-fksqnr.
  CLEAR ztpo0019-k2spnr.
  CLEAR ztpo0019-k2pch.
  CLEAR ztpo0019-k2msg.
  CLEAR ztpo0019-hx_stat.
  CLEAR ztpo0019-djstat."单据状态
  CLEAR ztpo0019-ctsynr."合同系统编号
  CLEAR ztpo0019-fkdnr. "付款单号
  CLEAR ztpo0019-zywdj. "业务单据编号
  CLEAR ztpo0019-dstat. "付款申请状态
  CLEAR ztpo0019-istat. "影像状态
  CLEAR ztpo0019-cname.
  CLEAR ztpo0019-datum.
  CLEAR ztpo0019-uzeit.
  CLEAR ztpo0019-timestamp.
  CLEAR gt_alv2[].

  ztpo0019-bname = sy-uname.
  ztpo0019-sqdate = sy-datum.

  MODIFY gt_alv FROM ls_alv TRANSPORTING zsqdh zfkdh WHERE zsqdh IS NOT INITIAL.

  MESSAGE '复制成功' TYPE 'S'.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SUBMIT_NBHZ
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_submit_nbhz .

  DATA:
    ls_ztfi0379 TYPE ztfi0379.
*** MOD START V_TANGT
  DATA: lv_url    TYPE char255.
  CLEAR lv_url.
  PERFORM frm_submit_s USING ztpo0019-k2pch
                             ztpo0019-xmgs
                             space
                             lv_url.
  IF lv_url IS NOT INITIAL.

    CONCATENATE ztpo0019-xmgs sy-datum sy-uzeit INTO ztpo0019-k2pch.
    GET TIME STAMP FIELD DATA(lv_timestamp).
    UPDATE ztpo0019
       SET k2pch  = ztpo0019-k2pch
           uname = sy-uname
           aedat = sy-datum
           aezet = sy-uzeit
           timestamp_upd = lv_timestamp
     WHERE fksqnr = ztpo0019-fksqnr.

    IF sy-subrc <> 0.
      m_log: 'E' 'ZMSG_FI' '000' '申请单:' ztpo0019-fksqnr '批次号更新失败,请重试' ''.
    ENDIF.
  ELSE.
    m_log: 'E' 'ZMSG_FI' '000' '申请单:' ztpo0019-fksqnr '流程ID获取失败,请重试' ''.
  ENDIF.
*** MOD END V_TANGT
* 编辑日志
  ls_ztfi0379-bname = sy-uname.
  ls_ztfi0379-bukrs = ztpo0019-xmgs.
  ls_ztfi0379-k2pch = ztpo0019-k2pch.
  ls_ztfi0379-fksqnr = ztpo0019-fksqnr.
  ls_ztfi0379-ztype = TEXT-t01. "提交申请
  ls_ztfi0379-cname = sy-uname.
  ls_ztfi0379-datum = sy-datum.
  ls_ztfi0379-uzeit = sy-uzeit.

  IF gt_log[] IS NOT INITIAL.
    ROLLBACK WORK.
    PERFORM frm_log.
    RETURN.
  ELSE.
*   插入日志
    INSERT ztfi0379 FROM ls_ztfi0379.
  ENDIF.

  COMMIT WORK AND WAIT.

  PERFORM frm_submit USING ztpo0019-k2pch
                           ztpo0019-xmgs
                           space.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  F4_BUKRS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f4_bukrs  USING    iv_field.

  DATA: lv_flag    TYPE c,
        lv_fd(132) TYPE c.

  DATA: ls_accgrp LIKE LINE OF s_accgrp,
        ls_acc    LIKE LINE OF s_acc.

  DATA: lt_tree          TYPE zfi_t_account_tree_alv,
        lt_tree_selected LIKE lt_tree,
        ls_tree          LIKE LINE OF lt_tree.

  DATA  ls_bukrs LIKE LINE OF s_xmgs.

  DATA: lv_dyname     TYPE d020s-prog,
        lv_dynumb     TYPE d020s-dnum,
        lt_dynpfields TYPE STANDARD TABLE OF dynpread,
        ls_dynpfields LIKE LINE OF lt_dynpfields.

  CONSTANTS lc_dynnr_sel TYPE sy-dynnr VALUE '1000'.

  CONSTANTS lc_group TYPE ktopl VALUE 'VK00'.

  CONSTANTS: lc_sign   LIKE ls_bukrs-sign VALUE 'I',
             lc_option LIKE ls_bukrs-option VALUE 'EQ'.

* Get old select from selection screen other elements
  ls_tree-finalflag = abap_true.
  LOOP AT s_accgrp INTO ls_accgrp.

    ls_tree-accgroup = ls_accgrp-low.
    APPEND ls_tree TO lt_tree_selected.

  ENDLOOP.

  CLEAR ls_tree-finalflag.
  LOOP AT s_acc INTO ls_acc.

    ls_tree-accgroup = ls_acc-low.
    APPEND ls_tree TO lt_tree_selected.

  ENDLOOP.

  REFRESH: s_accgrp,
           s_acc.

  CALL FUNCTION 'ZFI_BUKRS_TREE_HELP'
    EXPORTING
      iv_group        = lc_group
      iv_sub          = abap_true
      it_selected_acc = lt_tree_selected
    IMPORTING
      ct_acc_tree     = lt_tree
      cv_exit         = lv_flag.
  IF lv_flag IS NOT INITIAL.
    EXIT.
  ELSE.
    REFRESH s_xmgs.
  ENDIF.

  IF NOT lt_tree IS INITIAL.

    ls_bukrs-sign = lc_sign.
    ls_bukrs-option = lc_option.

    LOOP AT lt_tree INTO ls_tree
         WHERE finalflag IS INITIAL.

      ls_bukrs-low = ls_tree-accgroup.
      APPEND ls_bukrs TO s_xmgs.

    ENDLOOP.
*   Update selection screen backup elements
    ls_accgrp-sign = lc_sign.
    ls_accgrp-option = lc_option.

    ls_acc-sign = lc_sign.
    ls_acc-option = lc_option.

    LOOP AT lt_tree INTO ls_tree.

      IF ls_tree-finalflag = abap_true.

        ls_accgrp-low = ls_tree-accgroup.
        APPEND ls_accgrp TO s_accgrp.

      ELSE.

        ls_acc-low = ls_tree-accgroup.
        APPEND ls_acc TO s_acc.

      ENDIF.

    ENDLOOP.

  ENDIF.

* Sychronize S_HKONT-LOW with first account
  lv_dyname = sy-repid.
  lv_dynumb = sy-dynnr.

  ls_dynpfields-fieldname = iv_field.
  READ TABLE s_xmgs INDEX 1 INTO ls_bukrs.
  IF sy-subrc = 0.

    ls_dynpfields-fieldvalue = ls_bukrs-low.

  ENDIF.
  APPEND ls_dynpfields TO lt_dynpfields.

  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      dyname               = lv_dyname
      dynumb               = lv_dynumb
    TABLES
      dynpfields           = lt_dynpfields
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      undefind_error       = 7
      OTHERS               = 8.
  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_0200
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_init_0200 .

  TYPES:
    BEGIN OF ty_fktyp,
      seqno TYPE ztpo0070-seqno,
      descr TYPE ztpo0070-descr,
    END   OF ty_fktyp.

  DATA:
    lv_cwsy  TYPE ztpo0070-cwsy,
    lt_fktyp TYPE TABLE OF ty_fktyp,
    ls_fktyp LIKE LINE  OF lt_fktyp,
    rs_fktyp LIKE LINE  OF gt_fktyp.

  CHECK gv_init0200 IS INITIAL.
  gv_init0200 = 'X'.

  CALL METHOD zcl_org_common=>load( iv_uname = sy-uname ).

  s_bname-sign = 'I'.
  s_bname-option = 'EQ'.
  s_bname-low = sy-uname.
  APPEND s_bname.

  CLEAR:gt_fktyp[].

* 非内部划转
  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.
    lv_cwsy = 'Y'.
* 内部划转
  ELSEIF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.
    lv_cwsy = 'Z'.
  ENDIF.

  SELECT seqno
         descr
    FROM ztpo0070
    INTO TABLE lt_fktyp
   WHERE leve = '1'
     AND cwsy = lv_cwsy.

  CHECK sy-subrc = 0.

  LOOP AT lt_fktyp INTO ls_fktyp.

    rs_fktyp-sign = 'I'.
    rs_fktyp-option = 'EQ'.
    rs_fktyp-low = ls_fktyp-seqno.
    APPEND rs_fktyp TO gt_fktyp.

  ENDLOOP.

  SELECT *
    FROM ztpo0019
    INTO TABLE gt_s_h
   WHERE bname IN s_bname
     AND xmgs  IN zcl_org_common=>gr_xmgs
     AND fktyp IN gt_fktyp
     AND docty =  'FI12'.

* 上锁
  PERFORM frm_lock_proc.

  IF gt_s_h IS NOT INITIAL.

    SELECT *
      FROM ztfi0153
      INTO TABLE gt_s_i
       FOR ALL ENTRIES IN gt_s_h
     WHERE zsqdh = gt_s_h-fksqnr.

    SELECT *
      FROM ztfi0154
      INTO TABLE gt_s_i2
       FOR ALL ENTRIES IN gt_s_h
     WHERE zsqdh = gt_s_h-fksqnr.

  ENDIF.

  PERFORM frm_prepare_search_data.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SUBMIT_S
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ZTPO0019_K2PCH  text
*      -->P_ZTPO0019_XMGS  text
*      -->P_SPACE  text
*      -->P_LV_URL  text
*----------------------------------------------------------------------*
FORM frm_submit_s USING iv_bguid   TYPE c
                        iv_bukrs   TYPE c
                        lv_plflg   TYPE c
                        iv_url     TYPE c.

  DATA:
    lv_k2url  TYPE string,
    lv_bguid  TYPE bbp_er_partner_guid,
    lv_aptyp  TYPE ze_aptyp,
    lv_bukrs  TYPE ze_bukrs,
    lt_epmt1  TYPE bvw_tab_ranges,
    ls_epmt1  TYPE bvw_f_ranges,
    ls_selopt TYPE rsdsselopt.

  IF sy-tcode = 'ZFI135A' OR sy-tcode = 'ZFI135B'.

*   判断批量审批标识
    IF lv_plflg IS INITIAL.
      lv_aptyp = 'SAP_VFI_NONINTERNALTRANSFER'.
    ELSE.
      lv_aptyp = 'SAP_VFI_NONINTERNALTRANSFER_PL'.
    ENDIF.

    ls_epmt1-fieldname = 'FKTYP'.

    ls_selopt-sign   = 'I'.
    ls_selopt-option = 'EQ'.
    ls_selopt-low    = ztpo0019-fktyp.
    APPEND ls_selopt TO ls_epmt1-selopt_t.

    APPEND ls_epmt1 TO lt_epmt1.

    CLEAR:ls_epmt1.
    ls_epmt1-fieldname = 'ZQXFP'.

    ls_selopt-sign   = 'I'.
    ls_selopt-option = 'EQ'.
    ls_selopt-low    = ztpo0019-zqxfp.
    APPEND ls_selopt TO ls_epmt1-selopt_t.

    APPEND ls_epmt1 TO lt_epmt1.

  ELSEIF sy-tcode = 'ZFI136A' OR sy-tcode = 'ZFI136B'.
    lv_aptyp = 'SAP_VFI_INTERNALTRANSFER'.

    ls_epmt1-fieldname = 'FKTYP'.

    ls_selopt-sign   = 'I'.
    ls_selopt-option = 'EQ'.
*    LS_SELOPT-LOW    = '66'.
*    IF ztpo0019-fksqnr IS NOT INITIAL.
    IF sy-dynnr = '0100'.
      SELECT SINGLE zkxnr FROM ztfi0153 INTO ls_selopt-low WHERE zsqdh = ztpo0019-fksqnr.
    ELSE.
      ls_selopt-low = gv_fktyp.
    ENDIF.
    APPEND ls_selopt TO ls_epmt1-selopt_t.

    APPEND ls_epmt1 TO lt_epmt1.
  ENDIF.

  lv_bguid = iv_bguid.

  CALL FUNCTION 'ZABK2I_0002'
    EXPORTING
      iv_aptyp                = lv_aptyp
      iv_bguid                = lv_bguid
      iv_bukrs                = lv_bukrs
      it_epmt1                = lt_epmt1
    IMPORTING
      ev_k2url                = lv_k2url
    EXCEPTIONS
      configuration_not_found = 0
      approval_created_failed = 0.

  CHECK lv_k2url IS NOT INITIAL.

  iv_url = lv_k2url.



ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值