”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.