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.程序的抬头用内表传值

这种就比较简单了,

主窗口先循环抬头,再循环明细,明细用订单号和页数来做条件,换页  即可。

 

posted @ 2019-06-20 17:13  不渡之人  阅读(2852)  评论(0)    收藏  举报