*&---------------------------------------------------------------------*
*& TYPES定義
*&---------------------------------------------------------------------*
TYPES:
BEGIN OF TYP_ITEM,
SGTXT TYPE ACDOCA-SGTXT, " 项目文本
RACCT TYPE ACDOCA-RACCT, " 会计年度
HSL_S TYPE STRING, " 借方
HSL_H TYPE STRING, " 贷方
END OF TYP_ITEM,
TYP_T_ITEM TYPE STANDARD TABLE OF TYP_ITEM,
BEGIN OF TYP_ALV,
BUKRS TYPE BKPF-BUKRS, " 公司代码
GJAHR TYPE BKPF-GJAHR, " 会计年度
MONAT TYPE BKPF-MONAT, " 会计期间
BUDAT TYPE BKPF-BUDAT, " 过账日期
BELNR TYPE BKPF-BELNR, " 会计凭证号码
BLART TYPE BKPF-BLART, " 凭证类型
XBLNR TYPE BKPF-XBLNR, " 参照
BKTXT TYPE BKPF-BKTXT, " 凭证抬头文本
STBLG TYPE BKPF-STBLG, " 冲销凭证号
PPNAM TYPE BKPF-PPNAM, " 预制
USNAM TYPE BKPF-USNAM, " 过账人
ZCK TYPE CHAR01, " 复选框
END OF TYP_ALV,
TYP_T_ALV TYPE STANDARD TABLE OF TYP_ALV.
*&---------------------------------------------------------------------*
*& DATA定義
*&---------------------------------------------------------------------*
* 选择屏幕用
DATA:
GV_USNAM TYPE BKPF-USNAM,
GV_PPNAM TYPE BKPF-PPNAM,
GV_BLART TYPE BKPF-BLART,
GV_BELNR TYPE BKPF-BELNR,
GV_BUDAT TYPE BKPF-BUDAT,
GV_MONAT TYPE BKPF-MONAT.
* ALV用
DATA:
GS_LAYOUT TYPE LVC_S_LAYO,
GT_FIELDCAT TYPE LVC_T_FCAT,
GT_ALV TYPE TYP_T_ALV.
* 打印用
DATA:
GT_ITEM TYPE TYP_T_ITEM.
*&---------------------------------------------------------------------*
* 选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLC01 WITH FRAME TITLE TEXT-001.
PARAMETERS:
P_BUKRS TYPE BKPF-BUKRS OBLIGATORY, " 公司代码
P_GJAHR TYPE BKPF-GJAHR OBLIGATORY. " 会计年度
SELECT-OPTIONS:
S_MONAT FOR GV_MONAT OBLIGATORY, " 会计期间
S_BUDAT FOR GV_BUDAT, " 过账日期
S_BELNR FOR GV_BELNR, " 会计凭证号
S_BLART FOR GV_BLART, " 凭证类型
S_PPNAM FOR GV_PPNAM, " 预制人
S_USNAM FOR GV_USNAM. " 过账人
SELECTION-SCREEN END OF BLOCK BLC01.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM GET_DATA.
PERFORM OUT_ALV.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GET_DATA .
DATA:
LS_ALV TYPE TYP_ALV,
LR_POPER TYPE RANGE OF POPER,
LS_POPER LIKE LINE OF LR_POPER.
* 获取会计核算凭证标题
SELECT BUKRS, " 公司代码
GJAHR, " 会计年度
MONAT, " 会计期间
BUDAT, " 过账日期
BELNR, " 会计凭证号码
BLART, " 凭证类型
PPNAM, " 预制
USNAM, " 用户名
STBLG, " 冲销凭证号
XBLNR, " 参考
BKTXT " 抬头文本
INTO TABLE @DATA(LT_BKPF)
FROM BKPF
WHERE BUKRS = @P_BUKRS
AND GJAHR = @P_GJAHR
AND MONAT IN @S_MONAT
AND BUDAT IN @S_BUDAT
AND BELNR IN @S_BELNR
AND BLART IN @S_BLART
AND PPNAM IN @S_PPNAM
AND USNAM IN @S_USNAM.
* 取得失败的场合
IF SY-SUBRC = 0 AND
LT_BKPF IS NOT INITIAL.
ELSE.
MESSAGE '指定关键字的表目没有找到' TYPE 'S'.
LEAVE LIST-PROCESSING.
ENDIF.
* ALV数据编辑
LOOP AT LT_BKPF INTO DATA(LS_BKPF).
MOVE-CORRESPONDING LS_BKPF TO LS_ALV.
APPEND LS_ALV TO GT_ALV.
CLEAR LS_ALV.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form OUT_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM OUT_ALV.
* 编辑FIELDCAT
PERFORM FRM_SET_FIELDCAT:
USING '1' '1' 'ZCK' '复选框', "复选框
USING '1' '2' 'BUKRS' '公司代码', "公司代码
USING '1' '3' 'GJAHR' '会计年度', "会计年度
USING '1' '4' 'MONAT' '会计期间', "会计期间
USING '1' '5' 'BUDAT' '过账日期', "过账日期
USING '1' '6' 'BELNR' '会计凭证号码',"会计凭证号码
USING '1' '7' 'BLART' '凭证类型', "凭证类型
USING '1' '8' 'XBLNR' '参考', "参考
USING '1' '9' 'BKTXT' '凭证抬头文本',"凭证抬头文本
USING '1' '10' 'STBLG' '冲销凭证号', "冲销凭证号
USING '1' '11' 'PPNAM' '预制', "预制
USING '1' '12' 'USNAM' '过账人'. "过账人
* 编辑LAYOUT
PERFORM FRM_SET_LAYOUT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING " 传入
I_CALLBACK_PROGRAM = SY-CPROG " 当前程序
IS_LAYOUT_LVC = GS_LAYOUT " alv样式
IT_FIELDCAT_LVC = GT_FIELDCAT "alv字段设置
I_CALLBACK_PF_STATUS_SET = 'FRM_STATUS_SET' "设置gui状态
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' "响应功能
* IMPORTING "传出
TABLES " 传入/传出
T_OUTTAB = GT_ALV " ALV数据
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_STATUS_SET
*&---------------------------------------------------------------------*
*& 设定GUI状态
*&---------------------------------------------------------------------*
*& --> P_
*&---------------------------------------------------------------------*
FORM FRM_STATUS_SET USING EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'ZSTATUS01'." 设置gui状态
* SET PF-STATUS 'ZSTATUS01' EXCLUDING EXTAB." 设置gui状态
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& 功能处理
*&---------------------------------------------------------------------*
*& --> P_
*&---------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING LV_UCOMM LIKE SY-UCOMM " 获取功能码
SELFIELD TYPE SLIS_SELFIELD. " 光标位置信息
* 定义 ALV使用的结构和内表
DATA:
LS_LAYOUT TYPE LVC_S_LAYO,
LS_FIELDCAT TYPE LVC_S_FCAT,
LT_FIELDCAT TYPE LVC_T_FCAT.
* 将更新后的数据传到alv所对应的内表
DATA:LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
* 获取ALV获取全局数据
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LR_GRID.
* 检查被更改的数据
CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
* 刷新ALV
SELFIELD-REFRESH = 'X'.
CASE LV_UCOMM.
WHEN 'ZPRT'.
* 打印
PERFORM FRM_PRINT.
WHEN 'ZBACK'.
LEAVE TO SCREEN 0." 返回选择屏幕
WHEN 'ZCANEL' OR 'ZEXIT'.
LEAVE PROGRAM. " 退出程序
WHEN OTHERS.
ENDCASE.
* 获取FIELDCAT
LR_GRID->GET_FRONTEND_FIELDCATALOG( IMPORTING ET_FIELDCATALOG = LT_FIELDCAT ).
* 设置FIELDCAT
LR_GRID->SET_FRONTEND_FIELDCATALOG( IT_FIELDCATALOG = LT_FIELDCAT ).
* 获取LAYOUT
LR_GRID->GET_FRONTEND_LAYOUT( IMPORTING ES_LAYOUT = LS_LAYOUT ).
* 编辑layout
* 设置LAYOUT
LR_GRID->SET_FRONTEND_LAYOUT( IS_LAYOUT = LS_LAYOUT ).
* 基于行列稳定刷新
DATA:LS_STBL TYPE LVC_S_STBL.
LS_STBL-ROW = 'X'.
LS_STBL-COL = 'X'.
LR_GRID->REFRESH_TABLE_DISPLAY( IS_STABLE = LS_STBL )."刷新ALV展示的表
* LR_GRID->REFRESH_TABLE_DISPLAY( IS_STABLE = VALUE LVC_S_STBL( ROW = 'X'
* COL = 'X' ) )."刷新ALV展示的表
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*& --> P_
*& --> P_
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT
USING P_ROW TYPE LVC_ROWPOS
P_COL TYPE LVC_COLPOS
P_FIELDNAME TYPE LVC_FNAME
P_TEXT TYPE CHAR40.
DATA:
LS_FIELDCAT TYPE LVC_S_FCAT.
LS_FIELDCAT-ROW_POS = P_ROW.
LS_FIELDCAT-COL_POS = P_COL.
LS_FIELDCAT-FIELDNAME = P_FIELDNAME.
LS_FIELDCAT-COLTEXT = P_TEXT."描述
LS_FIELDCAT-SCRTEXT_L = P_TEXT.
LS_FIELDCAT-SCRTEXT_M = P_TEXT.
LS_FIELDCAT-SCRTEXT_S = P_TEXT.
* 复选框
IF P_FIELDNAME = 'ZCK'.
LS_FIELDCAT-CHECKBOX = ABAP_TRUE."复选框
LS_FIELDCAT-EDIT = ABAP_TRUE."可编辑
ENDIF.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
* 编辑layout
GS_LAYOUT-ZEBRA = 'X'. " 斑马线
GS_LAYOUT-NO_ROWMARK = 'X'. " 禁用行选择
GS_LAYOUT-CWIDTH_OPT = 'X'. " 优化列宽度
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT
*&---------------------------------------------------------------------*
*& 打印
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_PRINT.
DATA:
LV_BUDAT TYPE CHAR15," 年月日
LV_BUTXT TYPE T001-BUTXT," 公司代码或公司的名称
LS_RETURN TYPE SSFCRESCL, " 表格打印结束时返回值
LS_ITEM TYPE TYP_ITEM,
LV_FNAM TYPE RS38L_FNAM, " 功能模块的名称
LS_JOBOUT TYPE SSFCRESOP, " 表格打印开始时返回值
LS_OUTPUT TYPE SSFCOMPOP, " 打印参数选项
LS_CONTROL TYPE SSFCTRLOP. " 打印控制
* 获取单位名称
SELECT SINGLE BUTXT
INTO LV_BUTXT
FROM T001
WHERE BUKRS = P_BUKRS.
*--------------------ssf open-----------------*
* smartforms 打印参数设置
LS_OUTPUT-TDDEST = 'LP01'." 输出设备
LS_OUTPUT-TDIEXIT = 'X'. " 立刻退出迟于打印预览中的打印/传真
LS_OUTPUT-TDIMMED = 'X'. " 立即假脱机打印
LS_OUTPUT-TDDELETE = 'X'. " 立即假脱机删除
LS_OUTPUT-TDNOPREV = ''. " 无打印预览
LS_CONTROL-PREVIEW = 'X'. " 打印预览
LS_CONTROL-NO_DIALOG = ' '. "
LS_CONTROL-NO_OPEN = 'X'. "
LS_CONTROL-NO_CLOSE = 'X'. "
* 打开打印机
CALL FUNCTION 'SSF_OPEN'
EXPORTING
USER_SETTINGS = ''
OUTPUT_OPTIONS = LS_OUTPUT
CONTROL_PARAMETERS = LS_CONTROL
IMPORTING
JOB_OUTPUT_OPTIONS = LS_JOBOUT
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
* 获取功能块的名称
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = ' ' " 表单名
IMPORTING
FM_NAME = LV_FNAM
EXCEPTIONS
NO_FORM = 1
NO_FOUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0 .
MESSAGE
ID SY-MSGID "システムid
TYPE SY-MSGTY "
NUMBER SY-MSGNO "
WITH SY-MSGV1 "
SY-MSGV2 "
SY-MSGV3 "
SY-MSGV4. "
ENDIF.
*数据处理
LOOP AT GT_ALV INTO DATA(LS_ALV)
WHERE ZCK = ABAP_TRUE.
CLEAR:GT_ITEM.
*
SELECT A~SGTXT,"摘要
A~RACCT,"科目
A~BSCHL,"过账码
A~HSL, "金额
B~SHKZG "借贷标识
INTO TABLE @DATA(LT_ACDOCA)
FROM ACDOCA AS A
INNER JOIN TBSL AS B ON A~BSCHL = B~BSCHL
WHERE RLDNR = '0L' " 分类账
AND BELNR = @LS_ALV-BELNR
AND RBUKRS = @LS_ALV-BUKRS
AND GJAHR = @LS_ALV-GJAHR
AND POPER = @LS_ALV-MONAT.
LOOP AT LT_ACDOCA INTO DATA(LS_ACDOCA).
LS_ITEM-SGTXT = LS_ACDOCA-SGTXT.
LS_ITEM-RACCT = LS_ACDOCA-RACCT.
IF LS_ACDOCA-SHKZG = 'S' ." 借方
LS_ITEM-HSL_S = LS_ACDOCA-HSL.
ENDIF.
IF LS_ACDOCA-SHKZG = 'H' ." 贷方
LS_ITEM-HSL_H = LS_ACDOCA-HSL * -1.
ENDIF.
COLLECT LS_ITEM INTO GT_ITEM.
CLEAR LS_ITEM.
ENDLOOP.
DO 10 TIMES.
APPEND LS_ITEM TO GT_ITEM.
ENDDO.
* 拼接年月日
CONCATENATE LS_ALV-BUDAT+0(4) '年'
LS_ALV-BUDAT+4(2) '月'
LS_ALV-BUDAT+6(2) '日'
INTO LV_BUDAT.
* 启动smartforms
CALL FUNCTION LV_FNAM
EXPORTING
CONTROL_PARAMETERS = LS_CONTROL
OUTPUT_OPTIONS = LS_OUTPUT
USER_SETTINGS = ''
IV_BUTXT = LV_BUTXT
IV_BUDAT = LV_BUDAT
IV_BELNR = LS_ALV-BELNR
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* error handling
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
ENDIF .
ENDLOOP.
*-----------------ssf close-------------------*
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
JOB_OUTPUT_INFO = LS_RETURN
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT
*&---------------------------------------------------------------------*
*& 打印
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_ZERO
CHANGING OT_ITEM TYPE TYP_T_ITEM.
LOOP AT OT_ITEM ASSIGNING FIELD-SYMBOL(<LFS_ITEM>).
IF <LFS_ITEM>-HSL_H IS INITIAL.
<LFS_ITEM>-HSL_H = '0.00'.
ENDIF.
IF <LFS_ITEM>-HSL_S IS INITIAL.
<LFS_ITEM>-HSL_S = '0.00'.
ENDIF.
ENDLOOP.
ENDFORM.
SMARTFORMS打印
最新推荐文章于 2024-09-14 21:48:00 发布