文章目录
- 创建表单
- 定义接口
- 创建全局变量并初始化
- 循环显示学校信息表
- 注意
- 在报表中调用表单,打印信息
- 增加用户选择数据功能
- 添加ALV按钮并在ALV_USER_COMMAND 接收按钮
- 响应设置的打印按钮
实现一个学生信息表的打印功能,表头打印学生基本信息,循环该学生的学校信息,每当学生ID变更时新开一页并打印该学生的表头信息,然后循环打印该学生的每一条学校信息,在ALV报表中能够打印选中的学生信息,效果如图:
创建表单
定义接口
定义数据接口,用于传递学生信息
接口字段包括学员ID、姓名、性别、学校等。
接口字段如下
创建全局变量并初始化
GW_STUINFO: 存储当前处理的学生信息。
GW_SCHINFO: 存储学生信息的内表。
GV_INDEX: 索引变量,初始化为1,用于遍历内表
初始化:取表的第一条数作为表头学员信息
*
IF OUTPUT_STUINFO[] IS NOT INITIAL.
GW_STUINFO = OUTPUT_STUINFO[ 1 ].
ENDIF.
循环显示学校信息表
- 创建W1表头信息和W2学校信息,设置W1为次窗口,W2为主窗口
- 在W1下创建模板W11表头
W1表头下包含的元素
在W2下创建循环,用于显示学校信息的每一行
定义数据的LOOP循环方式
在循环下创建用于显示学校信息的模板和模板包含的文本
在循环下创建程序行
在程序行中更新GV_INDEX下一条数据的索引, 更新表头取下一条学员的信息
*更新表头和GV_INDEX
GV_INDEX = GV_INDEX + 1.
IF GV_INDEX <= LINES( OUTPUT_STUINFO ).
GW_STUINFO = OUTPUT_STUINFO[ GV_INDEX ].
ENDIF.
在循环下创建命令用于当下一条学生ID跟正在处理的学生ID不相等时换页
- 换页命令:条件 GW_STUINFO-ZCODE != GW_SCHINFO-ZCODE
注意
W2和W1的顺序不能错,LOOP循环下的模板、程序行和命令是并级的,改变顺序可能会导致表单只显示一位学生的表头信息或需要循环显示的信息不完整。
在报表中调用表单,打印信息
增加用户选择数据功能
在用来显示ALV数据的结构中添加SEL
在ALV字段中启动用户选择功能
添加ALV按钮并在ALV_USER_COMMAND 接收按钮
响应设置的打印按钮
- 得到用户选择的数据
数据是用来和表单进行交互,所以表单接口定义要什么,这里我们准备什么数据
*1.定义一个和表单接口类型一致的本地内表
DATA: LT_STUINFO TYPE ZSTUINF_JSM_TTY_01,
LS_STUINFO TYPE ZSTUINF_JSM_STR_01.
*2.把用户选择的数据放到LT_STUINFO里
LOOP AT GT_ALV INTO GS_ALV WHERE SEL = 'X' .
MOVE-CORRESPONDING GS_ALV TO LS_STUINFO.
APPEND LS_STUINFO TO LT_STUINFO.
ENDLOOP.
取数时要将数据根据学生ID进行排序
FORM FRM_GET_DATA .
FIELD-SYMBOLS <FS_ALV> TYPE GTY_ALV."改变这个值,内表值也会改变
SELECT A~ZCODE ,A~ZNAME, A~SEX,A~ZSCHOOL, B~ZSNAME, B~ZADD
FROM ZSTUDENT_JSM_01 AS A LEFT OUTER JOIN ZSCHOOL_JSM_01 AS B
ON A~ZSCHOOL = B~ZSCHOOL
INTO CORRESPONDING FIELDS OF TABLE @GT_ALV
WHERE ZCODE IN @S_CODE.
SORT GT_ALV BY ZCODE ASCENDING.
*处理取到的数据,把F/M转换成男/女
LOOP AT GT_ALV ASSIGNING <FS_ALV>.
IF <FS_ALV>-SEX = 'F'.
<FS_ALV>-SEX = '女'.
ELSE.
<FS_ALV>-SEX = '男'.
ENDIF.
ENDLOOP.
ENDFORM.
- 调用这个FORM
调用SSF_FUNCTION_MODULE_NAME,拿到表单module的名字 —— 因为系统会给每个SF生成一个函数模块,所以根据参数 SmartForm的名字调用表单
*得到FORM的函数模块名称ZJSM_SF_STUINFOR_02
*调用SSF_FUNCTION_MODULE_NAME
DATA:LV_STRING TYPE RS38L_FNAM.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZJSM_SF_STUINFOR_02'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
FM_NAME = LV_STRING
* EXCEPTIONS
* NO_FORM = 1
* NO_FUNCTION_MODULE = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
*调用函数模块显示表单
CALL FUNCTION LV_STRING"使用上面生成的FORM名字来调用表单
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = ls_SSFCTRLOP
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = ls_SSFCOMPOP
* USER_SETTINGS = 'X'
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
TABLES
OUTPUT_STUINFO = LT_STUINFO
* EXCEPTIONS
* FORMATTING_ERROR = 1
* INTERNAL_ERROR = 2
* SEND_ERROR = 3
* USER_CANCELED = 4
* OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
打印控制相关的:设置打印参数,如预览、是否弹出对话框等
*给FORM修改打印参数
DATA: ls_SSFCTRLOP TYPE SSFCTRLOP, "CONNTROL_PARAMETERS参数
ls_SSFCOMPOP TYPE SSFCOMPOP. "OUTPUT_OPTIONS参数
*给SMARTFORM的打印参数赋值
ls_SSFCTRLOP-NO_DIALOG = 'X'. "无弹窗
ls_SSFCTRLOP-PREVIEW = 'X'. "预览
ls_SSFCOMPOP-TDDEST = 'LP01'."output参数
PRINT_STUINFO子程序完整代码如下:
FORM PRINT_STUINFO .
*1.定义一个和表单接口类型一致的本地内表
DATA: LT_STUINFO TYPE ZSTUINF_JSM_TTY_01,
LS_STUINFO TYPE ZSTUINF_JSM_STR_01.
*给FORM修改打印参数
DATA: ls_SSFCTRLOP TYPE SSFCTRLOP, "CONNTROL_PARAMETERS参数
ls_SSFCOMPOP TYPE SSFCOMPOP. "OUTPUT_OPTIONS参数
*给SMARTFORM的打印参数赋值
ls_SSFCTRLOP-NO_DIALOG = 'X'. "无弹窗
ls_SSFCTRLOP-PREVIEW = 'X'. "预览
ls_SSFCOMPOP-TDDEST = 'LP01'."output参数
*2.把用户选择的数据放到LT_STUINFO里
LOOP AT GT_ALV INTO GS_ALV WHERE SEL = 'X' .
MOVE-CORRESPONDING GS_ALV TO LS_STUINFO.
APPEND LS_STUINFO TO LT_STUINFO.
ENDLOOP.
*得到FORM的函数模块名称ZJSM_SF_STUINFOR_02
*调用SSF_FUNCTION_MODULE_NAME
DATA:LV_STRING TYPE RS38L_FNAM.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZJSM_SF_STUINFOR_02'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
FM_NAME = LV_STRING
* EXCEPTIONS
* NO_FORM = 1
* NO_FUNCTION_MODULE = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
*调用函数模块显示表单
CALL FUNCTION LV_STRING"使用上面生成的FORM名字来调用表单
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = ls_SSFCTRLOP
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = ls_SSFCOMPOP
* USER_SETTINGS = 'X'
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
TABLES
OUTPUT_STUINFO = LT_STUINFO
* EXCEPTIONS
* FORMATTING_ERROR = 1
* INTERNAL_ERROR = 2
* SEND_ERROR = 3
* USER_CANCELED = 4
* OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
标签:FUNCTION,打印信息,表单,ABAP,ls,ALV,OUTPUT,STUINFO
From: https://blog.csdn.net/irisawy/article/details/143762670