ABAP快速开始之批导模板-会计凭证


REPORT ZFIXXXXXX.

TABLES: SSCRFIELDS,BSEG.
*&---------------------------------------------------------------------*
*& 结构和内表定义
*&---------------------------------------------------------------------*
TYPES: BEGIN OF TY_UPLOAD,
NUMBER(4) TYPE C , " 凭证行关联
BUKRS TYPE BKPF-BUKRS, " 公司代码
BUDAT TYPE BKPF-BUDAT, " 过账日期
BLDAT TYPE BKPF-BLDAT, " 凭证日期
BLART TYPE BKPF-BLART, " 凭证类型
XBLNR TYPE BKPF-XBLNR, " 参照
BKTXT TYPE BKPF-BKTXT, " 凭证抬头摘要
NUMPG TYPE BKPF-NUMPG, " 页数
WAERS TYPE BKPF-WAERS, " 货币代码
BSCHL TYPE BSEG-BSCHL, " 记账码
UMSKZ TYPE RF05A-UMSKZ, "特别总账标识
HKONT TYPE BSEG-HKONT, "总账科目
KUNNR TYPE BSEG-KUNNR, "客户编号
LIFNR TYPE BSEG-LIFNR, "供应商编号
WRBTR TYPE BSEG-WRBTR, " 本位币金额
MWSKZ TYPE BSEG-MWSKZ, "税码
ZFBDT TYPE BSEG-ZFBDT , " 付款起算日期
ZTERM TYPE BSEG-ZTERM, "付款条件
EBELN TYPE BSEG-EBELN, " 采购凭证
EBELP TYPE BSEG-EBELP, " 采购凭证行号
KOSTL TYPE BSEG-KOSTL, " 成本中心
AUFNR TYPE BSEG-AUFNR, " 订单号
ZUONR TYPE BSEG-ZUONR, "分配
SGTXT TYPE BSEG-SGTXT, " 行项目文本
ZZ001 TYPE BSEG-ZZ001, " 金融机构
ZZ002 TYPE BSEG-ZZ002, " 银行账户
ZZ003 TYPE BSEG-ZZ003, " 附加:供应商
ZZ004 TYPE BSEG-ZZ004, " 附加:客户
XNEGP TYPE BSEG-XNEGP, "反记账
XREF1 TYPE BSEG-XREF1, " 业务伙伴参考码1
XREF2 TYPE BSEG-XREF2, " 业务伙伴参考码2
XREF3 TYPE BSEG-XREF3, " 业务伙伴参考码3
ZZ005 TYPE BSEG-ZZ005, " 三方收款标识


* KURSF TYPE BKPF-KURSF, " 汇率
* SHKZG TYPE BSEG-SHKZG, "借贷方
* RSTGR TYPE BSEG-RSTGR, " 原因代码
* KIDNO TYPE BSEG-KIDNO, " 付款参考
*&---用来显示消息的字段
* KOART TYPE BSEG-KOART, " 帐户类型
BELNR TYPE BSEG-BELNR, " 会计凭证编号
GJAHR TYPE BSEG-GJAHR, " 财年
MSG TYPE STRING, " 返回消息
LIGHT TYPE C LENGTH 4, " 消息指示灯
TYPE TYPE C LENGTH 1, " 消息类型
SEL ,
NUM TYPE I, " ALV 序号
END OF TY_UPLOAD.

*----------------------------------------------------------------------*
* 变量定义
*----------------------------------------------------------------------*
*&---接收上传数据的内表和工作区
DATA: GT_UPLOAD TYPE TABLE OF TY_UPLOAD,
GS_UPLOAD TYPE TY_UPLOAD.
FIELD-SYMBOLS: <FS_UPLOAD> TYPE TY_UPLOAD.

**************************************************************************************
*---------------------- 全局变量 ------------------------------------------------*
DATA:GT_EXCLUDE TYPE TABLE OF RSEXFCODE,
GS_EXCLUDE TYPE RSEXFCODE.
DATA:GS_FUNCTXT TYPE SMP_DYNTXT. "功能代码文本

DATA: GV_TEST VALUE 'X'."测试数据

DATA: GT_EVENTS TYPE SLIS_T_EVENT,
GS_EVENTS TYPE SLIS_ALV_EVENT.
DATA: GV_GRID TYPE REF TO CL_GUI_ALV_GRID.
*----------------------------------------------------------------------*
* ALV定义
*----------------------------------------------------------------------*
DATA: GT_FIELDCAT TYPE LVC_T_FCAT, "字段目录內表
GS_FIELDCAT TYPE LVC_S_FCAT, "字段目录工作区
GS_LAYOUT TYPE LVC_S_LAYO. "用于定义ALV表单的相关格式、属性


*&---------------------------------------------------------------------*
*& 宏定义
*&---------------------------------------------------------------------*
DEFINE MACRO_FILL_FCAT.
CLEAR : gs_fieldcat.
&1 = &1 + 1.
gs_fieldcat-col_pos = &1.
gs_fieldcat-fieldname = &2.
gs_fieldcat-scrtext_s = &3.
gs_fieldcat-scrtext_m = &3.
gs_fieldcat-scrtext_l = &3.
gs_fieldcat-hotspot = &4.
gs_fieldcat-ref_table = &5. "参考表名
gs_fieldcat-ref_field = &6. "参考字段名
gs_fieldcat-checkbox = &7.
gs_fieldcat-key = &8.
gs_fieldcat-edit = &9.

*IF &2 = 'ERFME'.
* gs_fieldcat-convexit = 'CUNIT'.
* ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.


*&---------------------------------------------------------------------*
*& 选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-003.
PARAMETERS:P_BUKRS TYPE BSEG-BUKRS OBLIGATORY. "公司代码
PARAMETERS:P_FILE LIKE RLGRAP-FILENAME. "导入摸版 txt文件模板
SELECTION-SCREEN END OF BLOCK BLK1.

SELECTION-SCREEN: FUNCTION KEY 1.
*&---------------------------------------------------------------------*
*& INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
GS_FUNCTXT-ICON_ID = ICON_EXPORT.
GS_FUNCTXT-QUICKINFO = '下载导入模版'.
GS_FUNCTXT-ICON_TEXT = '下载导入模版'.
SSCRFIELDS-FUNCTXT_01 = GS_FUNCTXT.
*-----------------------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*-----------------------------------------------------------------------------------*
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
PERFORM FRM_SUB_DOWN . "下载模板
ENDCASE.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM FRM_SELECT_PATH."选择路径

*----------------------------------------------------------------------*
* START OF SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.

IF P_FILE IS NOT INITIAL.

SELECT COUNT(*)
FROM T001
WHERE BUKRS = P_BUKRS.
IF SY-SUBRC <> 0.
MESSAGE TEXT-001 TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.

PERFORM FRM_UPLOAD_DATA. "数据导入
PERFORM FRM_DATA_CHECK. "数据校验
PERFORM FRM_LAYOUT_BUILD. "设置表格样式
PERFORM FRM_FIELD_BUILD1. "建立表头数据
PERFORM FRM_DATAOUT. "输出导入的数据
ELSE.
MESSAGE TEXT-002 TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_DATA
*&---------------------------------------------------------------------*
* "处理数据
*----------------------------------------------------------------------*
FORM FRM_DEAL_DATA.

PERFORM FRM_IMPORT_DATA .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_PATH
*&---------------------------------------------------------------------*
* "选择路径
*----------------------------------------------------------------------*

FORM FRM_SELECT_PATH .
CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'
EXPORTING
* DEF_FILENAME = ' '
* DEF_PATH = ' '
MASK = 'Excel Files,*.xls,All Files,*.*. '
MODE = 'O'
* TITLE = ' '
IMPORTING
FILENAME = P_FILE
* PATH =
* FILE =
EXCEPTIONS
SELECTION_CANCEL = 1
SELECTION_ERROR = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
WHEN 2.
MESSAGE 'Cancel.' TYPE 'S'.
WHEN OTHERS.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
* "数据导入
*----------------------------------------------------------------------*

FORM FRM_UPLOAD_DATA .
* CALL FUNCTION 'ZFM_CA_UPLOAD_FILE'
* EXPORTING
* IV_FILENAME = P_FILE
** IV_SKIP = 'X'
* TABLES
* T_DATA = gt_upload
** T_RETURN =
* .

DATA: LT_EXCEL TYPE TABLE OF ALSMEX_TABLINE, "表格结构。"
LS_EXCEL TYPE ALSMEX_TABLINE.

"调用此函数,将Excel中的内容以类似坐标的形式存储到LT_EXCEL内表中。"
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1
I_BEGIN_ROW = 4
I_END_COL = 33
I_END_ROW = 9999
TABLES
INTERN = LT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID
TYPE SY-MSGTY
NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

IF LT_EXCEL IS INITIAL.
MESSAGE '上传模板不能为空!' TYPE 'E'.
ELSE.
CLEAR:GT_UPLOAD.
FIELD-SYMBOLS:<FS>."这里涉及到SAP内部字段的使用,详情请参见微博相关介绍。"
SORT LT_EXCEL BY ROW COL.
DATA:NUM_COL TYPE I.

LOOP AT LT_EXCEL INTO LS_EXCEL.
NUM_COL = LS_EXCEL-COL.
ASSIGN COMPONENT NUM_COL OF STRUCTURE GS_UPLOAD TO <FS>.
<FS> = LS_EXCEL-VALUE.
AT END OF ROW.
APPEND GS_UPLOAD TO GT_UPLOAD.
CLEAR:GS_UPLOAD.
ENDAT.
CLEAR:LS_EXCEL.
ENDLOOP.

ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT_BUILD
*&---------------------------------------------------------------------*
* "设置表格样式
*----------------------------------------------------------------------*

FORM FRM_LAYOUT_BUILD .
CLEAR GS_LAYOUT.
GS_LAYOUT-ZEBRA = 'X'. "颜色间隔
GS_LAYOUT-CWIDTH_OPT = 'X'. "自适应宽度
* GS_LAYOUT-BOX_FNAME = 'BOX'.
* GS_LAYOUT-STYLEFNAME = 'FIELD_STYLE'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FIELD_BUILD1
*&---------------------------------------------------------------------*
* "建立表头数据
*----------------------------------------------------------------------*

FORM FRM_FIELD_BUILD1 .

DATA: L_COLPOS TYPE LVC_S_FCAT-COL_POS VALUE 0.
CHECK GT_FIELDCAT IS INITIAL.
MACRO_FILL_FCAT:
* L_COLPOS 'ZBOX' '选择' '' '' '' 'X' '' 'X',
L_COLPOS 'LIGHT' '消息指示灯' '' '' '' '' '' '',
L_COLPOS 'MSG' '返回消息' '' '' '' '' '' '',
L_COLPOS 'BELNR' '会计凭证编号' '' '' '' '' '' '',
L_COLPOS 'GJAHR' '财年' '' '' '' '' '' '',
L_COLPOS 'NUMBER' '凭证行关联' '' '' '' '' '' '',
L_COLPOS 'BLDAT' '凭证日期' '' '' '' '' '' '',
L_COLPOS 'BUDAT' '过账日期' '' '' '' '' '' '',
L_COLPOS 'BUKRS' '公司代码' '' '' '' '' '' '',
L_COLPOS 'BLART' '凭证类型' '' '' '' '' '' '',
L_COLPOS 'WAERS' '货币代码' '' '' '' '' '' '',
* L_COLPOS 'KURSF' '汇率' '' '' '' '' '' '',
L_COLPOS 'XBLNR' '参照' '' '' '' '' '' '',
L_COLPOS 'NUMPG' '页数' '' '' '' '' '' '',
L_COLPOS 'BKTXT' '凭证抬头摘要' '' '' '' '' '' '',
* L_COLPOS 'SHKZG' '借贷方' '' '' '' '' '' '',
L_COLPOS 'HKONT' '总账科目' '' '' '' '' '' '',
L_COLPOS 'KUNNR' '客户编号' '' '' '' '' '' '',
L_COLPOS 'LIFNR' '供应商编号' '' '' '' '' '' '',
* L_COLPOS 'BSCHL' '记账码' '' '' '' '' '' '',
L_COLPOS 'UMSKZ' '特别总账标识' '' '' '' '' '' '',
L_COLPOS 'WRBTR' '金额' '' '' '' '' '' '',
L_COLPOS 'MWSKZ' '税码' '' '' '' '' '' '',
L_COLPOS 'ZTERM' '付款条件' '' '' '' '' '' '',
L_COLPOS 'ZFBDT' '付款起算日期' '' '' '' '' '' '',
L_COLPOS 'KOSTL' '成本中心' '' '' '' '' '' '',
L_COLPOS 'AUFNR' '订单号' '' '' '' '' '' '',
* L_COLPOS 'RSTGR' '原因代码' '' '' '' '' '' '',
L_COLPOS 'XNEGP' '反记账' '' '' '' '' '' '',
L_COLPOS 'ZUONR' '分配' '' '' '' '' '' '',
L_COLPOS 'SGTXT' '行项目文本' '' '' '' '' '' '',
L_COLPOS 'EBELN' '采购凭证' '' '' '' '' '' '',
L_COLPOS 'EBELP' '采购凭证行号' '' '' '' '' '' '',
* L_COLPOS 'KIDNO' '付款参考' '' '' '' '' '' '',
L_COLPOS 'XREF1' '业务伙伴参考码1' '' '' '' '' '' '',
L_COLPOS 'XREF2' '业务伙伴参考码2' '' '' '' '' '' '',
L_COLPOS 'XREF3' '业务伙伴参考码3' '' '' '' '' '' '',
L_COLPOS 'ZZ001' '金融机构' '' '' '' '' '' '',
L_COLPOS 'ZZ002' '银行账户' '' '' '' '' '' '',
L_COLPOS 'ZZ003' '附加:供应商' '' '' '' '' '' '',
L_COLPOS 'ZZ004' '附加:客户' '' '' '' '' '' '',
L_COLPOS 'ZZ005' '三方收款标识' '' '' '' '' '' ''.


ENDFORM.


*&---------------------------------------------------------------------*
*& Form FRM_DATAOUT
*&---------------------------------------------------------------------*
* "输出导入的数据
*----------------------------------------------------------------------*

FORM FRM_DATAOUT .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'FRM_SET_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
* I_GRID_SETTINGS = LV_GRID_SETTINGS
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
IT_EVENTS = GT_EVENTS
I_SAVE = 'A'
* I_HTML_HEIGHT_TOP = 16
TABLES
T_OUTTAB = GT_UPLOAD
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
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 ALV_PF_STATUS
*&---------------------------------------------------------------------*
* GUI状态设置
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_STATUS USING PT_EXTAB TYPE SLIS_T_EXTAB .
SET PF-STATUS 'STANDARD' EXCLUDING PT_EXTAB.
ENDFORM. " ALV_PF_STATUS
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* 用户响应
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING L_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = GV_GRID.
CALL METHOD GV_GRID->CHECK_CHANGED_DATA.
RS_SELFIELD-REFRESH = 'X'. "刷新ALV的数据

CASE L_UCOMM. "导入
WHEN 'ZIMPORT'.
READ TABLE GT_UPLOAD TRANSPORTING NO FIELDS WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
MESSAGE '数据有误,请更正后再导入!' TYPE 'E'.
ELSE.
GV_TEST = ''.
PERFORM FRM_IMPORT_DATA. "导入过账
ENDIF.

* WHEN 'QX'. "全选
* LOOP AT GT_ALV INTO GS_ALV WHERE LIGHT <> ICON_LED_GREEN.
* GS_ALV-ZBOX = 'X'.
* MODIFY GT_ALV FROM GS_ALV.
* ENDLOOP.
* WHEN 'QXQX'. "取消全选
* LOOP AT GT_ALV INTO GS_ALV.
* GS_ALV-ZBOX = ''.
* MODIFY GT_ALV FROM GS_ALV.
* ENDLOOP.
ENDCASE.
ENDFORM. " FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_IMPORT_DATA
*&---------------------------------------------------------------------*
* 数据导入
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_IMPORT_DATA .

*&---BAPI参数

DATA: LT_DATA TYPE TABLE OF ZSFI0004, " 会计凭证导入输入参数
LS_DATA TYPE ZSFI0004, " 会计凭证导入输入参数
LT_LIST TYPE TABLE OF ZSFI0002, " 会计凭证导入行参数
LS_LIST TYPE ZSFI0002, " 会计凭证导入行参数
LT_RETURN TYPE TABLE OF ZSFI0003 , " 返回参数
LS_RETURN TYPE ZSFI0003. " 返回参数

 

*&---数据校验
* IF GV_TEST EQ 'X'.
* ENDIF.


*&---凭证数据整理
* SORT GT_UPLOAD BY NUMBER.
LOOP AT GT_UPLOAD ASSIGNING <FS_UPLOAD> GROUP BY ( NUMBER = <FS_UPLOAD>-NUMBER
BELNR = ''
TYPE = '' ).

 

FREE: LT_DATA,
LS_DATA,
LT_LIST,
LS_LIST,
LT_RETURN.

LS_DATA-BUKRS = P_BUKRS. " 公司代码
LS_DATA-BLDAT = <FS_UPLOAD>-BLDAT. " 凭证日期
LS_DATA-BUDAT = <FS_UPLOAD>-BUDAT. " 过账日期
LS_DATA-BLART = <FS_UPLOAD>-BLART. " 凭证类型
LS_DATA-BKTXT = <FS_UPLOAD>-BKTXT. " 凭证抬头文本
LS_DATA-XBLNR = <FS_UPLOAD>-XBLNR. " 参照
LS_DATA-NUMPG = <FS_UPLOAD>-NUMPG. " 页数
LS_DATA-WAERS = <FS_UPLOAD>-WAERS. " 货币

 


LOOP AT GROUP <FS_UPLOAD> INTO DATA(LS_UPLOAD).

MOVE-CORRESPONDING LS_UPLOAD TO LS_LIST. " 行项目
IF LS_LIST-ZFBDT EQ '00000000'.
CLEAR LS_LIST-ZFBDT.
ENDIF.
APPEND LS_LIST TO LT_LIST.
CLEAR LS_LIST.

ENDLOOP.

 

LS_DATA-CHILD_TABLE_LIST = LT_LIST. " 行项目
APPEND LS_DATA TO LT_DATA.
CLEAR : LS_DATA,LT_LIST.
*&---正式凭证创建

CALL FUNCTION 'ZZFI_DOCUMENT_IMPORT'
EXPORTING
IS_DATA = LT_DATA
IV_NO_LOG = 'X'
IMPORTING
ET_RESULT = LT_RETURN
* ES_HEADER =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.

READ TABLE LT_RETURN INTO LS_RETURN WITH KEY MSGTY = 'E'.
IF SY-SUBRC <> 0.
READ TABLE LT_RETURN INTO LS_RETURN WITH KEY MSGTY = 'S'.
IF SY-SUBRC = 0.
<FS_UPLOAD>-TYPE = 'S'.
<FS_UPLOAD>-LIGHT = ICON_GREEN_LIGHT.
<FS_UPLOAD>-MSG = LS_RETURN-MSGTX.

<FS_UPLOAD>-BELNR = LS_RETURN-BELNR.
<FS_UPLOAD>-BUKRS = LS_RETURN-BUKRS.
<FS_UPLOAD>-GJAHR = LS_RETURN-GJAHR.

IF LS_RETURN-BELNR IS INITIAL. "返回正确但是没有成功创建
<FS_UPLOAD>-TYPE = 'E'.
<FS_UPLOAD>-LIGHT = ICON_RED_LIGHT.
<FS_UPLOAD>-MSG = LS_RETURN-MSGTX.
ENDIF.


ENDIF.
MODIFY GT_UPLOAD FROM <FS_UPLOAD> TRANSPORTING LIGHT MSG TYPE BELNR BUKRS GJAHR WHERE NUMBER = <FS_UPLOAD>-NUMBER.
ELSE.

<FS_UPLOAD>-TYPE = 'E'.
<FS_UPLOAD>-LIGHT = ICON_RED_LIGHT.
<FS_UPLOAD>-MSG = LS_RETURN-MSGTX.
ENDIF.


CLEAR: LT_DATA,
LS_DATA,
LT_LIST,
LS_LIST,
LT_RETURN.

 

ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALPHA_IN
*&---------------------------------------------------------------------*
* 补齐前导零
*----------------------------------------------------------------------*
* -->P_WA_DATA_NAME00 text
* <--P_KEY_ASSET text
*----------------------------------------------------------------------*
FORM FRM_ALPHA_IN USING PV_IN
CHANGING PV_OUT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = PV_IN
IMPORTING
OUTPUT = PV_OUT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SUB_DOWN
*&---------------------------------------------------------------------*
* 模板下载
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SUB_DOWN .
*&---变量定义
DATA:LV_TEXT TYPE STRING, "message
LV_MOD(20), "model
LV_FULLPATH TYPE STRING, "full path
LS_OBJECT TYPE WWWDATATAB, "object name
LV_RC TYPE SY-SUBRC. "return code
DATA: LV_FILEPATH TYPE STRING, " 存放路径
LV_FILENAME TYPE STRING, "文件名称
LV_PATH TYPE STRING . " 下载后存放全路径
DATA: LV_OBJDATA LIKE WWWDATATAB,
LV_OBJ_NAME LIKE WWWDATATAB-OBJID,
LT_MIME LIKE W3MIME OCCURS 10.
DATA: LV_RET TYPE ABAP_BOOL,
LV_ANSWER.
DATA: LV_FILE TYPE STRING.

*&---SMWO 模板名称
LV_MOD = 'ZFIB0004'. "下载文件名

"保存对话框
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = '下载模板'
DEFAULT_EXTENSION = 'xlsx'
DEFAULT_FILE_NAME = '会计凭证批导(票据).xls'
FILE_FILTER = 'EXCEL'
PROMPT_ON_OVERWRITE = ''
CHANGING
FULLPATH = LV_PATH
FILENAME = LV_FILENAME
PATH = LV_FILEPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.

"检查文件是否存在
MOVE LV_PATH TO LV_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = LV_FILE
RECEIVING
RESULT = LV_RET
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 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.
EXIT.
ENDIF.

IF LV_RET EQ 'X'.

* 模版已存在,是否覆盖
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TEXT_QUESTION = '模版已存在,是否覆盖?'
TEXT_BUTTON_1 = '是'(005)
TEXT_BUTTON_2 = '否'(006)
IMPORTING
ANSWER = LV_ANSWER
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.

ENDIF.

IF LV_ANSWER EQ 'A'. "取消
EXIT.
ELSEIF LV_ANSWER NE '1'. "否
EXIT.
ENDIF.
ELSE.
LV_ANSWER = '1'.
ENDIF.


IF LV_ANSWER EQ '1'.

SELECT RELID OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF LV_OBJDATA
UP TO 1 ROWS
WHERE SRTF2 = 0
AND RELID = 'MI'
AND OBJID = LV_MOD.
ENDSELECT.

IF LV_PATH IS NOT INITIAL.
" 装载至本地文件
P_FILE = LV_PATH.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' "
EXPORTING
KEY = LV_OBJDATA
DESTINATION = P_FILE.
ENDIF.

ENDIF.
ENDFORM. " FRM_SUB_DOWN
*&---------------------------------------------------------------------*
*& Form FRM_SET_MSGBAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_DAORUNUM text
* -->P_L_ALLLINE text
* -->P_0873 text
*----------------------------------------------------------------------*
FORM FRM_SET_MSGBAR USING PV_C_ROW PV_T_ROW PV_C_NAME.
DATA: LV_CURROW(10) TYPE C,
LV_TOLROW(10) TYPE C,
LV_MESSAGEBAR(24) TYPE C.

LV_CURROW = PV_C_ROW.
LV_TOLROW = PV_T_ROW.
SHIFT LV_CURROW LEFT DELETING LEADING ''.
SHIFT LV_TOLROW LEFT DELETING LEADING ''.

CONCATENATE PV_C_NAME '进度 :' LV_CURROW '/' LV_TOLROW INTO LV_MESSAGEBAR.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = LV_MESSAGEBAR.
ENDFORM. " FRM_SET_MSGBAR
*&---------------------------------------------------------------------*
*& Form FRM_DATA_CHECK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_CHECK .

LOOP AT GT_UPLOAD ASSIGNING <FS_UPLOAD>.
IF <FS_UPLOAD>-ZZ003 IS NOT INITIAL.
<FS_UPLOAD>-ZZ003 = |{ <FS_UPLOAD>-ZZ003 ALPHA = IN }|.
ENDIF.
IF <FS_UPLOAD>-ZZ004 IS NOT INITIAL.
<FS_UPLOAD>-ZZ004 = |{ <FS_UPLOAD>-ZZ004 ALPHA = IN }|.
ENDIF.
ENDLOOP.


SELECT ZJRJG
FROM ZTFI0039
INTO TABLE @DATA(LT_ZTFI0039)
FOR ALL ENTRIES IN @GT_UPLOAD
WHERE ZJRJG = @GT_UPLOAD-ZZ001.


SELECT ZYHZH
FROM ZTFI0040
INTO TABLE @DATA(LT_ZTFI0040)
FOR ALL ENTRIES IN @GT_UPLOAD
WHERE ZYHZH = @GT_UPLOAD-ZZ002.


SELECT LIFNR
FROM LFA1
INTO TABLE @DATA(LT_LFA1)
FOR ALL ENTRIES IN @GT_UPLOAD
WHERE LIFNR = @GT_UPLOAD-ZZ003.

SELECT KUNNR
FROM KNA1
INTO TABLE @DATA(LT_KNA1)
FOR ALL ENTRIES IN @GT_UPLOAD
WHERE KUNNR = @GT_UPLOAD-ZZ004.

* SELECT ZSFSKBS
* FROM ZTFI0051
* INTO TABLE @DATA(LT_ZTFI0051)
* FOR ALL ENTRIES IN @GT_UPLOAD
* WHERE ZSFSKBS = @GT_UPLOAD-ZZ005.

LOOP AT GT_UPLOAD ASSIGNING <FS_UPLOAD>.

 

IF <FS_UPLOAD>-ZZ001 IS NOT INITIAL.

READ TABLE LT_ZTFI0039 TRANSPORTING NO FIELDS WITH KEY ZJRJG = <FS_UPLOAD>-ZZ001.
IF SY-SUBRC <> 0.
<FS_UPLOAD>-LIGHT = ICON_RED_LIGHT.
<FS_UPLOAD>-MSG = <FS_UPLOAD>-MSG && '金融机构' && <FS_UPLOAD>-ZZ001 && '不存在' .
<FS_UPLOAD>-TYPE = 'E'.
GS_UPLOAD = <FS_UPLOAD>.
MODIFY GT_UPLOAD FROM GS_UPLOAD TRANSPORTING LIGHT MSG TYPE WHERE NUMBER = <FS_UPLOAD>-NUMBER.
ENDIF.

ENDIF.

 

IF <FS_UPLOAD>-ZZ002 IS NOT INITIAL.

READ TABLE LT_ZTFI0040 TRANSPORTING NO FIELDS WITH KEY ZYHZH = <FS_UPLOAD>-ZZ002.
IF SY-SUBRC <> 0.
<FS_UPLOAD>-LIGHT = ICON_RED_LIGHT.
<FS_UPLOAD>-MSG = <FS_UPLOAD>-MSG && '银行账户' && <FS_UPLOAD>-ZZ002 && '不存在' .
<FS_UPLOAD>-TYPE = 'E'.
GS_UPLOAD = <FS_UPLOAD>.
MODIFY GT_UPLOAD FROM GS_UPLOAD TRANSPORTING LIGHT MSG TYPE WHERE NUMBER = <FS_UPLOAD>-NUMBER.
ENDIF.

ENDIF.
IF <FS_UPLOAD>-ZZ003 IS NOT INITIAL.
READ TABLE LT_LFA1 TRANSPORTING NO FIELDS WITH KEY LIFNR = <FS_UPLOAD>-ZZ003.
IF SY-SUBRC <> 0.
<FS_UPLOAD>-LIGHT = ICON_RED_LIGHT.
<FS_UPLOAD>-MSG = <FS_UPLOAD>-MSG && '供应商' && <FS_UPLOAD>-ZZ003 && '不存在' .
<FS_UPLOAD>-TYPE = 'E'.
GS_UPLOAD = <FS_UPLOAD>.
MODIFY GT_UPLOAD FROM GS_UPLOAD TRANSPORTING LIGHT MSG TYPE WHERE NUMBER = <FS_UPLOAD>-NUMBER.
ENDIF.

 

ENDIF.

IF <FS_UPLOAD>-ZZ004 IS NOT INITIAL.

READ TABLE LT_KNA1 TRANSPORTING NO FIELDS WITH KEY KUNNR = <FS_UPLOAD>-ZZ004.
IF SY-SUBRC <> 0.
<FS_UPLOAD>-LIGHT = ICON_RED_LIGHT.
<FS_UPLOAD>-MSG = <FS_UPLOAD>-MSG && '客户' && <FS_UPLOAD>-ZZ004 && '不存在' .
<FS_UPLOAD>-TYPE = 'E'.
GS_UPLOAD = <FS_UPLOAD>.
MODIFY GT_UPLOAD FROM GS_UPLOAD TRANSPORTING LIGHT MSG TYPE WHERE NUMBER = <FS_UPLOAD>-NUMBER.
ENDIF.

ENDIF.


*
* IF <FS_UPLOAD>-ZZ005 IS NOT INITIAL.
*
* READ TABLE LT_ZTFI0051 TRANSPORTING NO FIELDS WITH KEY ZSFSKBS = <FS_UPLOAD>-ZZ005.
* IF SY-SUBRC <> 0.
* <FS_UPLOAD>-LIGHT = ICON_RED_LIGHT.
* <FS_UPLOAD>-MSG = <FS_UPLOAD>-MSG && '三方收款标识' && <FS_UPLOAD>-ZZ005 && '不存在' .
* <FS_UPLOAD>-TYPE = 'E'.
* GS_UPLOAD = <FS_UPLOAD>.
* MODIFY GT_UPLOAD FROM GS_UPLOAD TRANSPORTING LIGHT MSG TYPE WHERE NUMBER = <FS_UPLOAD>-NUMBER.
* ENDIF.
*
* ENDIF.


ENDLOOP.
ENDFORM.

posted @ 2022-04-27 16:18  别忘了带红领巾  阅读(906)  评论(0)    收藏  举报