一、功能逻辑










二、功能界面


三、功能代码
*&---------------------------------------------------------------------*
*& 程序名: ZRPFI_IMPORT_ACC_DOCUMENT
*& 创建者(公司)/日期:
*& 程序描述:
*& 1. 会计凭证批量导入功能
*&---------------------------------------------------------------------*
*& 版本/修改者(公司)/日期//修改描述
*&
*&*&会计凭证批量导入功能增加字段FKBER职能范围-2022.5.7 ZHANGYJ
*&---------------------------------------------------------------------*
REPORT zrpfi_import_acc_document MESSAGE-ID 00.
************************************************************************
* INCLUDES
************************************************************************
INCLUDE zrpfi_import_acc_document_top.
INCLUDE zrpfi_import_acc_document_scr.
INCLUDE zrpfi_import_acc_document_f01.
INCLUDE zrpfi_import_acc_document_f02.
************************************************************************
* INITIALIZATION
************************************************************************
INITIALIZATION.
PERFORM frm_init_screen.
************************************************************************
* AT SELECTION-SCREEN on value-request
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.
PERFORM frm_get_filepath CHANGING p_fpath.
************************************************************************
* AT SELECTION-SCREEN
************************************************************************
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
PERFORM frm_download_temp USING 'ZFICO_ACCDOC_IMPORT' TEXT-004.
ENDCASE.
************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
*--- Main process
"获取上传的数据—>
"检查 & 整合数据到ALV【红绿灯、勾选框】—>
"GUI添加按钮,过账—>
PERFORM frm_upload_file USING p_fpath.
CHECK flg_err IS INITIAL .
PERFORM frm_check_data.
PERFORM frm_dispaly_data.
*&---------------------------------------------------------------------*
*& 包含 ZRPFI_IMPORT_ACC_DOCUMENT_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS icon.
TABLES sscrfields.
DATA: functxt TYPE smp_dyntxt.
DATA: BEGIN OF gt_file OCCURS 0, "仅用来存储上传内容,不做其他处理
str1 TYPE n LENGTH 4,
str2 TYPE bkpf-bukrs,
str3 TYPE bkpf-blart,
str4 TYPE bkpf-bldat,
str5 TYPE bkpf-budat,
str31 TYPE bkpf-monat,
str6 TYPE bkpf-waers,
str7 TYPE bkpf-kursf,
str8 TYPE bkpf-xblnr,
str9 TYPE bkpf-bktxt,
str10 TYPE bseg-bschl,
str11 TYPE bseg-hkont,
str12 TYPE lfa1-lifnr,
str13 TYPE kna1-kunnr,
str14 TYPE anla-anln1,
str15 TYPE bseg-anbwa,
str16 TYPE bseg-umskz,
str17 TYPE bseg-dmbtr,
str18 TYPE bseg-wrbtr,
str19 TYPE bseg-xnegp,
str20 TYPE bseg-prctr,
str21 TYPE cskt-kostl,
str22 TYPE aufk-aufnr,
str23 TYPE bseg-kidno,
str24 TYPE bseg-zterm,
str25 TYPE bseg-zfbdt,
str26 TYPE bseg-xref1,
str27 TYPE bseg-xref2,
str28 TYPE bseg-zuonr,
str29 TYPE bseg-sgtxt,
str30 TYPE bseg-rstgr,
str32 TYPE bseg-kkber,
str33 TYPE csks-func_area, " 职能范围 "*---会计凭证批量导入功能增加字段FKBER职能范围-2022.5.7 ZHANGYJ
str34 TYPE char10,
str35 TYPE bseg-vbund,
str36 TYPE bseg-bewar,
END OF gt_file.
TYPES: BEGIN OF ty_alv,
box TYPE c, "勾选框
light TYPE c LENGTH 20, "红绿灯
zmes TYPE string, "消息
belnr TYPE bkpf-belnr, "会计凭证
gjahr TYPE bkpf-gjahr, "会计凭证
buzei TYPE bseg-buzei, "会计凭证行号
zid TYPE n LENGTH 4, "凭证组号
bukrs TYPE bkpf-bukrs, "公司代码
blart TYPE bkpf-blart, "凭证类型
bldat TYPE bkpf-bldat, "凭证日期
budat TYPE bkpf-budat, "过账日期
monat TYPE bkpf-monat, "过账期间
waers TYPE bkpf-waers, "币别
kursf TYPE bkpf-kursf, "汇率
k_sfcy TYPE c, "汇率是否参与BAPI【不显示】
xblnr TYPE bkpf-xblnr, "参照
bktxt TYPE bkpf-bktxt, "抬头文本
bschl TYPE bseg-bschl, "记账码
hkont TYPE bseg-hkont, "总账科目
txt20 TYPE skat-txt20, "总账科目描述
rstgr TYPE bseg-rstgr, "付款原因代码
lifnr TYPE bseg-lifnr, "供应商
lname TYPE lfa1-name1, "供应商名称
kunnr TYPE bseg-kunnr, "客户
kname TYPE kna1-name1, "客户名称
anln1 TYPE bseg-anln1, "资产
txt50 TYPE anla-txt50, "资产描述
anbwa TYPE bseg-anbwa, "资产业务类型
umskz TYPE bseg-umskz, "特别总账标识
shkzg TYPE bseg-shkzg, "借贷标志【不显示】
dmbtr TYPE bseg-dmbtr, "本位币金额
wrbtr TYPE bseg-wrbtr, "原币金额
xnegp TYPE bseg-xnegp, "反记账
prctr TYPE bseg-prctr, "利润中心
kostl TYPE bseg-kostl, "成本中心
ktext TYPE cskt-ktext, "成本中心描述
aufnr TYPE bseg-aufnr, "内部订单
atext TYPE aufk-ktext, "内部订单描述
kidno TYPE bseg-kidno, "付款参考
zterm TYPE bseg-zterm, "付款条件
zfbdt TYPE bseg-zfbdt, "基准日期
xref1 TYPE bseg-xref1, "参考代码1
xref2 TYPE bseg-xref2, "参考代码2
zuonr TYPE bseg-zuonr, "分配
sgtxt TYPE bseg-sgtxt, "行项目文本
kkber TYPE bseg-kkber, "信用控制范围
fkber_long TYPE bseg-fkber_long,
* FKBER TYPE CSKS-FUNC_AREA," 职能范围 "*---会计凭证批量导入功能增加字段FKBER职能范围-2022.5.7 ZHANGYJ
field_style TYPE lvc_t_styl, "【控制单元格】
fund TYPE char10,
zsort TYPE i,
vbund TYPE bseg-vbund,
bewar TYPE bseg-bewar,
END OF ty_alv.
DATA: gs_alv TYPE ty_alv,
gt_alv TYPE TABLE OF ty_alv,
gs_alv_group TYPE ty_alv.
DATA: gt_fcat TYPE lvc_t_fcat,
gs_fcat TYPE lvc_s_fcat,
gs_layo TYPE lvc_s_layo,
gs_stylerow TYPE lvc_s_styl, "控制单元格style
gt_stylerow TYPE lvc_t_styl.
DATA:gt_log TYPE TABLE OF ztfi003_log .
DATA:flg_err TYPE c .
DEFINE set_field.
gs_fcat-fieldname = &1. "字段名
gs_fcat-scrtext_s = &2. "字段名文本
gs_fcat-scrtext_m = &2.
gs_fcat-scrtext_l = &2.
gs_fcat-outputlen = &3. "输出长度
* gs_fcat-no_zero = 'X'. "注释掉 20221012
* gs_fcat-just = 'C'. "i_just. "对齐方式
IF gs_fcat-fieldname = 'BOX'.
gs_fcat-checkbox = 'X'.
gs_fcat-edit = 'X'.
ENDIF.
IF gs_fcat-fieldname = 'LIGHT'.
gs_fcat-icon = 'X'.
ENDIF.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& 包含 ZRPFI_IMPORT_ACC_DOCUMENT_SCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b_01 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_fpath TYPE rlgrap-filename. "string
* PARAMETERS: c_test TYPE c AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b_01.
*---Active default function key1&2
SELECTION-SCREEN: FUNCTION KEY 1.
*&---------------------------------------------------------------------*
*& 包含 ZRPFI_IMPORT_ACC_DOCUMENT_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_init_screen
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_init_screen .
functxt-icon_id = icon_export.
functxt-icon_text = TEXT-002.
sscrfields-functxt_01 = functxt.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_filepath
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- P_FPATH
*&---------------------------------------------------------------------*
FORM frm_get_filepath CHANGING c_path.
FIELD-SYMBOLS: <fs_file_table> TYPE file_table.
DATA: lt_file_table TYPE filetable,
l_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
CHANGING
file_table = lt_file_table
rc = l_rc.
IF lt_file_table IS INITIAL.
MESSAGE s001 WITH TEXT-m01 DISPLAY LIKE 'E'.
RETURN.
ENDIF.
LOOP AT lt_file_table ASSIGNING <fs_file_table>.
CONCATENATE c_path <fs_file_table>-filename INTO c_path.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_temp
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> TEXT_004
*&---------------------------------------------------------------------*
FORM frm_download_temp USING p_template
p_text.
DATA: lv_fname TYPE string,
lv_title TYPE string,
lv_path TYPE string VALUE 'D:/',
lv_fpath TYPE string VALUE 'D:/',
lv_file TYPE rlgrap-filename.
DATA: ls_wdatb LIKE wwwdatatab.
DATA: lv_subrc TYPE sy-subrc.
lv_fname = p_text.
CONCATENATE p_text '下载' INTO lv_title.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = lv_title
default_extension = 'xls'
default_file_name = lv_fname
initial_directory = 'D:\'
file_filter = 'Excel文件(*.xls)|*.xls|全部文件 (*.*)|*.*|'
prompt_on_overwrite = 'X'
CHANGING
filename = lv_fname
path = lv_path
fullpath = lv_fpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 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.
ELSE.
SELECT SINGLE relid objid
FROM wwwdata
INTO CORRESPONDING FIELDS OF ls_wdatb
WHERE srtf2 = 0
AND relid = 'MI'
AND objid = p_template.
IF ls_wdatb IS INITIAL.
MESSAGE e398(00) WITH '模板文件不存在!'.
ELSE.
lv_file = lv_fpath.
IF lv_file IS NOT INITIAL.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_wdatb
destination = lv_file
IMPORTING
rc = lv_subrc.
IF lv_subrc NE 0.
MESSAGE e398(00) WITH '模板下载失败!'.
ELSE.
MESSAGE s398(00) WITH '下载成功'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZRPFI_IMPORT_ACC_DOCUMENT_F02
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_upload_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_FPATH
*&---------------------------------------------------------------------*
FORM frm_upload_file USING i_file.
DATA: wa_raw TYPE truxs_t_text_data,
lv_str_file TYPE rlgrap-filename.
DATA: lc_str TYPE c LENGTH 10.
CLEAR flg_err .
CLEAR: lv_str_file.
lv_str_file = i_file.
IF i_file IS INITIAL.
MESSAGE s010(2b) WITH '请输入导入文件地址!' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
* CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
* EXPORTING
* i_line_header = 'X'
* i_tab_raw_data = wa_raw
* i_filename = lv_str_file
* TABLES
* i_tab_converted_data = gt_file
* EXCEPTIONS
* conversion_failed = 1
* OTHERS = 2.
* IF gt_file[] IS INITIAL.
* lc_str = '没有数据!请检查文件是否被打开。'.
* MESSAGE s398(00) WITH lc_str DISPLAY LIKE'E'.
* LEAVE LIST-PROCESSING.
* ENDIF.
DATA: lt_alsmex_tabline TYPE TABLE OF zalsmex_tabline.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = lv_str_file
i_begin_col = 1
i_begin_row = 3
i_end_col = 36 "列数,如果新增了字段,一定要加!!!
i_end_row = 9999
TABLES
intern = lt_alsmex_tabline
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc = 1.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
MESSAGE '数据读取异常,请联系管理员' TYPE 'E'.
ELSEIF sy-subrc = 2.
MESSAGE '打开文件出错,请检查文档' TYPE 'E'.
ELSEIF sy-subrc = 3.
MESSAGE '未知错误,请联系管理员' TYPE 'E'.
ENDIF.
IF lt_alsmex_tabline[] IS NOT INITIAL.
DATA:
4936




被折叠的 条评论
为什么被折叠?



