业务背景:
通过前期开发的学员录入考勤系统积累的学员信息、学员考勤信息。为了便于管理与统计,现需要实现学员卡片打印、学员考勤打印。(write方式)
功能分析:
1)为实现打印功能,需用write方式;开发学员卡片打印程序、学员考勤打印程序。
2)课堂上确认具体格式需求。
打印实现效果
代码实现
1.LIST报表属性绘制基本页面
*&---------------------------------------------------------------------*
*& Report ZHY01_HY101_20220627_02
*&---------------------------------------------------------------------*
*& Program Name <程序名称>: ZHY01_HY101_20220627_02
*& Purpose <程序用途>: LIST 作业
*& Project Name <项目名称>: SAP_ABAP_01期间
*& Created by <创 建 人>: HY101
*& Created on <创建日期>: 20220627
*& FC Consultant <功能顾问>: 鼠小倩
*& Description <功能描述>: LIST 作业
*&---------------------------------------------------------------------*
* Modification Log<程序修改日志>
*<日期> <开发者> <功能顾问> <修改描述>
* 20220627 HY101 鼠小倩 S4HK909676
*&---------------------------------------------------------------------*
REPORT ZHY01_HY101_20220627_02 NO STANDARD PAGE HEADING LINE-SIZE 150.
*定义变量及初始化
DATA: D_DATE TYPE D,
D_TIME TYPE T.
*页眉
TOP-OF-PAGE.
WRITE '学员基本信息卡' COLOR COL_HEADING.
START-OF-SELECTION.
*首行
ULINE AT 20(100). "绘制横线
WRITE: /20 SY-VLINE,119 SY-VLINE. "位置20和位置120绘制竖线
ULINE AT /20(100).
*左右外框+字
D_DATE = SY-DATUM.
D_TIME = SY-UZEIT.
WRITE: /20 SY-VLINE,'学员基本信息卡:'.
POSITION 95.
WRITE: (25) D_DATE USING EDIT MASK '查询日期:____年__月__日',119 SY-VLINE,
/20 SY-VLINE,119 SY-VLINE.
POSITION 96.
WRITE: (25) D_TIME USING EDIT MASK '查询时间:__点__分__秒',119 SY-VLINE,
/20 SY-VLINE,30'学号:',119 SY-VLINE,
/20 SY-VLINE,30'姓名:',119 SY-VLINE,
/20 SY-VLINE,30'性别:',119 SY-VLINE,
/20 SY-VLINE,30'年龄:',119 SY-VLINE.
ULINE AT /20(100).
*页数
WRITE: /20 SY-VLINE,105 '共',107 sy-pagno,'页',119 SY-VLINE,
/20 SY-VLINE,105 '第',107 sy-pagno,'页',119 SY-VLINE.
*热点-考勤记录
SKIP TO LINE 13.
*INCLUDE <LIST>.
FORMAT HOTSPOT on COLOR 6 INVERSE ON.
WRITE 23'考勤记录'.
FORMAT HOTSPOT OFF COLOR OFF.
*AT LINE-SELECTION.
*考勤记录外框:左右下
DO 21 TIMES.
WRITE: /20 SY-VLINE,119 SY-VLINE. "位置20和位置120绘制竖线
ENDDO.
ULINE AT /20(100).
*考勤汇总-横线
SKIP TO LINE 30.
ULINE AT /80(40).
*考勤汇总-竖线
SKIP TO LINE 30.
DO 5 TIMES.
WRITE: /80 SY-VLINE.
ENDDO.
*考勤汇总-字
SKIP TO LINE 31.
POSITION 81.
WRITE: '考勤汇总',100 '5月',105'0次',
/'',100 '6月',105'2次',
/'',100 '7月',105'3次'.
*内表-横线
SKIP TO LINE 15.
DO 7 TIMES.
ULINE AT 30(50). "绘制横线
write /.
NEW-LINE.
ENDDO.
*内表-竖线
SKIP TO LINE 16.
WRITE: /30 SY-VLINE,'考勤日期',54 SY-VLINE,'考勤时间',79 SY-VLINE. "位置30和位置79绘制竖线
write /.
SKIP TO LINE 18.
DO 6 TIMES.
WRITE: /30 SY-VLINE,54 SY-VLINE,79 SY-VLINE. "位置30和位置79绘制竖线
write /.
ENDDO.
SKIP TO LINE 29.
ULINE AT 30(50). "绘制横线
运行结果展示
2.动态获取数据库数据。
TABLES: ZTKT_XYXX,
ZTKT_XYKQ.
*定义变量及初始化
DATA: gs_index,
gt_table TYPE TABLE OF ztkt_xyxx,
gs_table TYPE ztkt_xyxx,
gt_edit TYPE TABLE OF ztkt_xykq,
gs_edit TYPE ztkt_xykq.
*获取数据库数据
SELECT *
FROM ztkt_xyxx
INTO CORRESPONDING FIELDS OF TABLE gt_table
WHERE zxh = 'HY101'.
SELECT *
FROM ztkt_xykq
INTO CORRESPONDING FIELDS OF TABLE gt_edit
FOR ALL ENTRIES IN gt_table WHERE zxh = gt_table-zxh.
LOOP AT gt_table INTO gs_table.
ENDLOOP.
LOOP AT gt_edit INTO gs_edit.
gs_index = sy-tfill.
ENDLOOP.
WRITE / '考勤记录查询' COLOR COL_HEADING.
WRITE: / '学号:',gs_table-zxh,
/ '姓名:',gs_table-Zxm,
/ '性别:',gs_table-Zxb,
/ '性别:',gs_table-Zxb,
/ '考勤日期',gs_edit-zrq,
/ '考勤时间',gs_edit-zkqsj.
运行结果
3.点击热点——“考勤记录”后的新页
*&---------------------------------------------------------------------*
*&点击热点后的新页
*&---------------------------------------------------------------------*
AT LINE-SELECTION.
WRITE / '考勤记录查询' COLOR COL_HEADING.
*首行
ULINE AT 20(100). "绘制横线
WRITE: /20 SY-VLINE,119 SY-VLINE. "位置20和位置120绘制竖线
ULINE AT /20(100).
*左右外框+字
D_DATE = SY-DATUM.
D_TIME = SY-UZEIT.
WRITE: /20 SY-VLINE,'学员基本信息卡:'.
POSITION 95.
WRITE: (25) D_DATE USING EDIT MASK '查询日期:____年__月__日',119 SY-VLINE,
/20 SY-VLINE,119 SY-VLINE.
POSITION 96.
WRITE: (25) D_TIME USING EDIT MASK '查询时间:__点__分__秒',119 SY-VLINE,
/20 SY-VLINE,30'学号:',gs_table-zxh,119 SY-VLINE,
/20 SY-VLINE,30'姓名:',gs_table-Zxm,119 SY-VLINE,
/20 SY-VLINE,30'性别:',gs_table-Zxb,119 SY-VLINE,
/20 SY-VLINE,30'性别:',gs_table-Zxb,119 SY-VLINE.
ULINE AT /20(100).
*页数
WRITE: /20 SY-VLINE,105 '共',107 sy-pagno,'页',119 SY-VLINE,
/20 SY-VLINE,105 '第',107 sy-pagno,'页',119 SY-VLINE.
*考勤记录外框:左右下
DO 21 TIMES.
WRITE: /20 SY-VLINE,119 SY-VLINE. "位置20和位置120绘制竖线
ENDDO.
ULINE AT /20(100).
*考勤汇总-横线
SKIP TO LINE 30.
ULINE AT /80(40).
*考勤汇总-竖线
SKIP TO LINE 30.
DO 5 TIMES.
WRITE: /80 SY-VLINE.
ENDDO.
*考勤汇总-字
SKIP TO LINE 31.
POSITION 81.
WRITE: '考勤汇总',100 '5月',105'0次',
/'',100 '6月',105'2次',
/'',100 '7月',105'3次'.
*内表-横线
SKIP TO LINE 15.
DO 7 TIMES.
ULINE AT 30(50). "绘制横线
write /.
NEW-LINE.
ENDDO.
*内表-竖线
SKIP TO LINE 16.
WRITE: /30 SY-VLINE,'考勤日期',54 SY-VLINE,'考勤时间',79 SY-VLINE. "位置30和位置79绘制竖线
* write /.
SKIP TO LINE 18.
DO 6 TIMES.
WRITE: /30 SY-VLINE,gs_edit-zrq,54 SY-VLINE,gs_edit-zkqsj,79 SY-VLINE. "位置30和位置79绘制竖线
write /.
ENDDO.
SKIP TO LINE 29.
ULINE AT 30(50). "绘制横线
运行结果
点击热点
查询结果