SAP 订货单、发货单批量打印(实例)2019.06.20
首先需要做好一个ALV,这个肯定是必要的。
一,ALV多选及取值
1.Function-ALV
添加一个选择字段:SEL。设置 layout 属性 box_fieldname : layout-box_fieldname = ‘SEL’ 即可选择多条。
2.OO-ALV
设置 layout 的属性 SEL_MODE 来实现,SEL_MODE的值有’A’,’B’,’C’,’D’
|
值 |
模式 |
可能的选择 |
|
|
SPACE |
等同于B |
参考B |
|
|
'A' |
行和列的选择,无法选择单元格 |
多行,多列 |
|
|
'B' |
单选,不可以多选行,不可以多选单元格 |
多行,多列 |
|
|
'C' |
多选,可以多选行,不可以多选单元格 |
多行,多列 |
|
|
'D' |
单元格的选择,可以多选单元格 |
多行,多列,任何单元格多选 |
|
之后在ALV显示网格里就可以通过按住crtl实现多行,多列的选择。
获取选择的行号
这时function ALV就不可以了,要临时把 function ALV 转换为 OO ALV
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "把function ALV临时转换成 OO ALV,可以把ALV上修改的数据传到内表
IMPORTING
e_grid = lr_alv_grid.
"获取数据的方法:"GET_SELECTED_CELLS","GET_SELECTED_CELLS_ID",
"GET_SELECTED_ROWS","GET_SELECTED_COLUMNS "获取行 / 获取列
"获取行号
DATA:lt_row_id TYPE lvc_t_roid.
DATA:wa_row_id TYPE LINE OF lvc_t_roid.
CALL METHOD lr_alv_grid->get_selected_rows
IMPORTING
* et_index_rows = et_index_rows
et_row_no = lt_row_id.
LOOP AT lt_row_id INTO wa_row_id. "读取选择的行到 gtd_out_sel 内表中
READ TABLE gtd_out INTO gth_out INDEX wa_row_id-row_id.
IF sy-subrc = 0.
APPEND gth_out TO gtd_out_sel.
ENDIF.
CLEAR:wa_row_id,gth_out.
ENDLOOP.
CLEAR:lt_row_id.
至此,取到了选择的数据。
二,调用smartforms输出打印
1.程序的抬头用结构传值
遇到2个问题,第一个,弹出多个打印选项的窗口,可以修改以下参数解决
DATA: w_ctrlop TYPE ssfctrlop, "Smart Forms: 控制结构 "W_CONTROL w_compop TYPE ssfcompop, "SAP Smart Forms: 智能写作器 (传输) 选项"W_OUTPUT. w_return TYPE ssfcrescl. "Smart Forms: 表格打印结束时返回值 w_ctrlop-no_dialog = 'X'. "关闭打印对话框 w_ctrlop-preview = 'X'. "直接预览,不打印 w_compop-tdnoprev = 'X'. "没有打印预览 直接打印
第二个问题,弹出多个选择打印机的窗口,这个就很麻烦了,暂时放弃了。
2.程序的抬头用内表传值
这种就比较简单了,
主窗口先循环抬头,再循环明细,明细用订单号和页数来做条件,换页 即可。