首先需要做好一個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.程序的抬頭用內表傳值
這種就比較簡單了,
主窗口先循環抬頭,再循環明細,明細用訂單號和頁數來做條件,換頁 即可。
