技术点提示
- sap调用http接口
- sap调用webservice传输pdf文件
- sap生成pdf文件
- binary转base64
- sap文件下载、上传
REPORT zzsd0029.
TYPE-POOLS:icon, slis.
TYPES: BEGIN OF ty_bank,
zz100 TYPE ztfi_zz002-zz100,
zz101 TYPE ztfi_zz002-zz101,
zz002 TYPE ztfi_zz002-zz002,
zz001 TYPE ztfi_zz002-zz001,
zz001t TYPE ztfi_zz002-zz001t,
bukrs TYPE ztfi_zz002-bukrs,
butxt TYPE ztfi_zz002-butxt,
zz102 TYPE ztfi_zz002-zz102,
waers TYPE ztfi_zz002-waers,
zjdkmh TYPE ztfi_zz002-zjdkmh,
END OF ty_bank.
*----------------------------------------------------------------------*
* TABLES
*----------------------------------------------------------------------*
TABLES: sscrfields,likp,ztsd_ds_bzj,ztsd_023.
*----------------------------------------------------------------------*
* 常量 *
*----------------------------------------------------------------------*
CONSTANTS:
c_x TYPE char01 VALUE 'X',
c_e TYPE char01 VALUE 'E',
c_s TYPE char01 VALUE 'S',
c_file TYPE char4 VALUE 'C:\',
c_exit TYPE char4 VALUE 'EXIT',
c_cancel TYPE char6 VALUE 'CANCEL',
c_back TYPE char4 VALUE 'BACK'.
DATA wa_functxt TYPE smp_dyntxt.
***定义
DATA gt_fieldcat TYPE TABLE OF lvc_s_fcat."定义列属性内表
DATA wa_layout TYPE lvc_s_layo."定义布局结构
DATA:BEGIN OF wa_data,
bukrs TYPE bukrs, "公司代码
kunnr TYPE kunnr, "客户编号
name1 TYPE name1_gp, "名称
budat TYPE budat, "日期
zje TYPE zeje,
zskfs TYPE zeskfs1,
zskyh TYPE zeskyh,
vbeln TYPE vbeln_va,
zbz TYPE zebz01,
zz101 TYPE ztfi_zz002-zz101,
zz002 TYPE ztfi_zz002-zz002,
zz001 TYPE ztfi_zz002-zz001,
zz001t TYPE ztfi_zz002-zz001t,
END OF wa_data.
DATA:gt_data LIKE TABLE OF wa_data WITH HEADER LINE.
DATA:BEGIN OF wa_out,
box TYPE c,
light(4),
bukrs TYPE bukrs, "公司代码
kunnr TYPE kunnr, "客户编号
name1 TYPE name1_gp, "名称
budat TYPE budat, "日期
zje TYPE zeje,
zskfs TYPE zeskfs1,
zskyh TYPE zeskyh,
vbeln TYPE vbeln_va,
zbz TYPE zebz01,
zz101 TYPE ztfi_zz002-zz101,
zz002 TYPE ztfi_zz002-zz002,
zz001 TYPE ztfi_zz002-zz001,
zz001t TYPE ztfi_zz002-zz001t,
belnr TYPE belnr_d, "会计科目
zdycs TYPE zedycs, "打印次数
mess TYPE bapi_msg,
guid TYPE guid_32,
zcrd_name TYPE uname,
jedx TYPE string,
*---------------INSERT--------20190525------SUNQI----BEGIN-------------*
djbh TYPE string,
*---------------INSERT--------20190525------SUNQI----END---------------*
uplerr TYPE c,
END OF wa_out.
DATA:gt_out LIKE TABLE OF wa_out WITH HEADER LINE.
DATA:gt_print LIKE TABLE OF wa_out WITH HEADER LINE,
wa_print LIKE wa_out.
DATA:BEGIN OF wa_kunnr,
kunnr TYPE kunnr,
name1 TYPE name1_gp,
END OF wa_kunnr.
DATA:gt_kunnr LIKE TABLE OF wa_kunnr WITH HEADER LINE.
DATA:BEGIN OF wa_bkpf,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
stblg TYPE stblg,
END OF wa_bkpf.
DATA:gt_bkpf LIKE TABLE OF wa_bkpf WITH HEADER LINE.
DATA:l_pdf TYPE xstring.
*-------------------------------------------------------------------------------------*
"接口定义
"合同创建接口
DATA: lc_do_clientproxy TYPE REF TO zqysco_ws_document_service,
lo_sys_exception TYPE REF TO cx_ai_system_fault.
*-------------------------------------------------------------------------------------*
"文件类型创建合同表
DATA: ls_filetype TYPE zcreatebyfiletype1,
ls_response TYPE zcreatebyfiletype_response1,
ls_document TYPE zws_document_by_file_request,
ls_return TYPE zwebservice_result.
DATA: lv_error_message TYPE string,
lo_uuid_error TYPE REF TO cx_uuid_error.
DATA: ev_sucessfully TYPE char01,
ev_message TYPE ze_message.
"结果字符串
DATA: lv_str TYPE string,
str1 TYPE string,
str2 TYPE string,
str3 TYPE string.
DATA docid TYPE string.
DATA contid TYPE string.
DATA url TYPE string.
*-------------------------------------------------------------------------------------*
*浏览打印接口
DATA: lc_ct_clientproxy TYPE REF TO zqysco_ws_contract_service.
*-------------------------------------------------------------------------------------*
"文件类型创建合同表
DATA: ls_eprinturl TYPE zqysefprinturl1,
ls_ep_response TYPE zqysefprinturl_response1,
ls_url TYPE zqysws_efp_url_request.
*-------------------------------------------------------------------------------------*
"搜索帮助内表
DATA:BEGIN OF lt_hitlist OCCURS 0,
hit_field TYPE bukrs,
hit_field2 TYPE zeskyh,
END OF lt_hitlist.
*----------------------------------------------------------------------*
* CLASS lcl_alv_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm,
"自定义搜索帮助
handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname es_row_no er_event_data.
ENDCLASS. "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_alv_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv_receiver IMPLEMENTATION.
METHOD handle_data_changed.
PERFORM handle_data_changed USING er_data_changed.
ENDMETHOD. "handle_data_changed
"自定义搜索帮助
METHOD handle_onf4.
PERFORM handle_onf4 USING e_fieldname es_row_no er_event_data.
ENDMETHOD.
ENDCLASS. "lcl_ALV_event_receiver
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS :s_vkorg FOR likp-vkorg OBLIGATORY MEMORY ID vko.
PARAMETER:p_file TYPE rlgrap-filename MODIF ID g1 ."OBLIGATORY
SELECT-OPTIONS:s_budat FOR ztsd_ds_bzj-budat MODIF ID g2.
SELECT-OPTIONS :s_kunnr FOR ztsd_023-kunnr MODIF ID g2,
s_zskyh FOR ztsd_023-zskyh MODIF ID g2.
* S_DJBH FOR ZTSD_023-ZDYCS MODIF ID G2.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS: r_a RADIOBUTTON GROUP r1 DEFAULT 'X' USER-COMMAND us1,
r_b RADIOBUTTON GROUP r1,
r_c RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-002.
PARAMETERS: r_sk RADIOBUTTON GROUP r2 DEFAULT 'X' USER-COMMAND us2,
r_tk RADIOBUTTON GROUP r2.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN: FUNCTION KEY 1.
*----------------------------------------------------------------------*
* 选择文件路径-F4帮助 *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* 选择屏幕【文件路径】检索帮助
PERFORM frm_get_filename.
AT SELECTION-SCREEN.
* 按钮事件
PERFORM frm_func.
DATA:BEGIN OF gs_vkorg,
vkorg LIKE vbak-vkorg,
END OF gs_vkorg.
DATA:gt_vkorg LIKE TABLE OF gs_vkorg WITH HEADER LINE.
CLEAR:gs_vkorg,gt_vkorg[].
SELECT
vkorg
INTO CORRESPONDING FIELDS OF TABLE gt_vkorg
FROM tvko
WHERE vkorg IN s_vkorg.
SORT gt_vkorg.
DELETE ADJACENT DUPLICATES FROM gt_vkorg.
DATA:lv_mess TYPE string.
CLEAR:lv_mess.
LOOP AT gt_vkorg INTO gs_vkorg.
AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
ID 'VKORG' FIELD gs_vkorg-vkorg.
IF sy-subrc <> 0.
lv_mess = lv_mess && '|' && '无权限对' && gs_vkorg-vkorg && '进行操作'.
ENDIF.
CLEAR:gs_vkorg.
ENDLOOP.
IF lv_mess IS NOT INITIAL.
MESSAGE lv_mess TYPE 'E'.
ENDIF.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF r_a EQ 'X'.
IF screen-group1 EQ 'G2'.
screen-active = 0 .
ELSEIF screen-group1 EQ 'G1'.
screen-active = 0.
ENDIF.
MODIFY SCREEN.
ENDIF.
IF r_b EQ 'X'.
IF screen-group1 EQ 'G1'.
screen-active = 1 .
ELSEIF screen-group1 EQ 'G2'.
screen-active = 0.
ENDIF.
MODIFY SCREEN.
ENDIF.
IF r_c EQ 'X'.
IF screen-group1 EQ 'G1'.
screen-active = 0 .
ELSEIF screen-group1 EQ 'G2'.
screen-active = 1.
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
* 按钮追加
PERFORM frm_add_button.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
IF r_a EQ 'X'.
CLEAR:wa_out.
wa_out-budat = sy-datum.
"wa_out-bukrs = S_VKORG-low.
wa_out-zskfs = '转账'.
CALL FUNCTION 'ZFGET_USERNAME'
EXPORTING
i_uname = sy-uname
IMPORTING
e_uname = wa_out-zcrd_name. "= ."凭证创建人
APPEND wa_out TO gt_out.
ENDIF.
IF r_b EQ 'X'.
PERFORM frm_upload_file.
ENDIF.
IF r_c EQ 'X'.
DATA:lv_flag.
CLEAR:lv_flag.
IF r_sk EQ 'X'.
lv_flag = 'A'.
ENDIF.
IF r_tk EQ 'X'.
lv_flag = 'B'.
ENDIF.
SELECT
*
INTO CORRESPONDING FIELDS OF TABLE gt_out
FROM ztsd_023
WHERE bukrs IN s_vkorg
AND budat IN s_budat
AND kunnr IN s_kunnr
AND zskyh IN s_zskyh
AND zflag = lv_flag.
.
IF gt_out[] IS NOT INITIAL.
SELECT
kunnr
name2 AS name1
INTO CORRESPONDING FIELDS OF TABLE gt_kunnr
FROM kna1
FOR ALL ENTRIES IN gt_out
WHERE kunnr = gt_out-kunnr
.
SELECT
bukrs
belnr
gjahr
stblg
INTO CORRESPONDING FIELDS OF TABLE gt_bkpf
FROM bkpf
FOR ALL ENTRIES IN gt_out
WHERE bukrs = gt_out-bukrs
AND belnr = gt_out-belnr
AND gjahr = gt_out-budat+0(4)
AND stblg NE ''.
DATA:lv_tabix TYPE sy-tabix.
CLEAR:lv_tabix.
LOOP AT gt_out INTO wa_out.
CLEAR:lv_tabix.
lv_tabix = sy-tabix.
READ TABLE gt_kunnr INTO wa_kunnr WITH KEY kunnr = wa_out-kunnr.
IF sy-subrc = 0.
wa_out-name1 = wa_kunnr-name1.
CLEAR:wa_kunnr.
ENDIF.
READ TABLE gt_bkpf INTO wa_bkpf WITH KEY belnr = wa_out-belnr bukrs = wa_out-bukrs
gjahr = wa_out-budat+0(4).
IF sy-subrc = 0.
DELETE gt_out INDEX lv_tabix.
CLEAR:wa_bkpf.
ELSE.
DATA:lv_dmbtr TYPE dmbtr.
CLEAR:lv_dmbtr.
lv_dmbtr = wa_out-zje.
CALL FUNCTION 'ZF_CONVERT_TO_CAPITALIZATION'
EXPORTING
p_amount = lv_dmbtr
IMPORTING
p_capitalization = wa_out-jedx. "= ."金额大写
MODIFY gt_out FROM wa_out INDEX lv_tabix.
ENDIF.
CLEAR:wa_out.
ENDLOOP.
ENDIF.
SORT gt_out BY guid..
ENDIF.
PERFORM f_alv_out.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& 包含 ZMMN0001_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_FILENAME
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_filename .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = '*.xls'
def_path = c_file
mask = ',*.xls ,*.xls.'
title = '选择文件'
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
*
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FUNC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_func .
CASE sscrfields-ucomm.
WHEN 'FC01'.
* 下载模板操作
PERFORM frm_download_excel.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_download_excel .
DATA: lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lv_user_action TYPE i.
DATA: lv_filepath LIKE rlgrap-filename.
DATA: lv_def_file_name TYPE string.
CONCATENATE '客户收款退款模板' sy-datum '.xls'
INTO lv_def_file_name.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '保存模板文件'
default_extension =
',Excel Files,*.xls,All Files,*.*.' "#EC NOTEXT
default_file_name = lv_def_file_name
file_filter =
'Excel(*.xls , *.xlsx)|*.xls*|' "#EC NOTEXT
prompt_on_overwrite = 'X'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_user_action
* file_encoding =
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
CHECK sy-subrc = 0.
* 取消
IF lv_user_action <> 0.
RETURN.
* 确定
ELSE.
lv_filepath = lv_fullpath.
* 下载文件模板
PERFORM frm_download_fileexcel USING lv_filepath.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_FILEEXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_FILEPATH
*&---------------------------------------------------------------------*
FORM frm_download_fileexcel USING p_file.
DATA: l_string TYPE string.
DATA: objdata LIKE wwwdatatab,
lv_rc LIKE sy-subrc.
DATA: lv_objid TYPE wwwdatatab-objid. "对象
lv_objid = 'ZSDR0023'.
SELECT SINGLE relid
objid
INTO CORRESPONDING FIELDS OF objdata
FROM wwwdata
WHERE srtf2 = 0
AND relid = 'MI'
AND objid = lv_objid.
IF sy-subrc <> 0.
CONCATENATE '模板文件:' lv_objid '不存在,请用TCODE:SMW0进行加载'
INTO l_string.
MESSAGE l_string TYPE 'E'.
EXIT.
ENDIF.
IF objdata-objid = space .
CONCATENATE '模板文件:' lv_objid '不存在,请用TCODE:SMW0进行加载'
INTO l_string.
MESSAGE l_string TYPE 'E'.
EXIT.
ENDIF.
CONDENSE p_file.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = objdata
destination = p_file
IMPORTING
rc = lv_rc.
IF lv_rc <> 0.
CONCATENATE '模板文件:' lv_objid '下载失败,请与开发人员联系'
INTO l_string.
MESSAGE l_string TYPE 'E'.
EXIT.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_BUTTON
*&---------------------------------------------------------------------*
*& text
*<