輸出數(shù)據(jù),分別用子程序處理ALV 相關(guān)的Fieldcat 及Layout. 最后調(diào)用REUSE_ALV_GRID_DISPLAY輸出ALV:
其中:
i_callback_user_command = 'USER_COMMAND' 及
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'有點(diǎn)特別坑填,請見后。
布局部分:
ALV中,欲保存布局,須在REUSE_ALV_GRID_DISPLAY函數(shù)中添加I_SAVE參數(shù)汁政。I_SAVE定義為C數(shù)據(jù)類型,值如下:
‘ ‘ = display variants cannot be saved
Defined display variants (e.g. delivered display variants) can be selected for presentation independently of this flag. Changes can not be saved.
‘X’ = standard save
Display variants can be saved as standard display variants. User-specific saving is not possible.
‘U’ = only user-specific saving
The user can only save display variants user-specifically
‘A’ = standard and user-specific saving
The user can save a display variant user-specifically and as standard display variant. The user chooses in the display variant save popup.
為了進(jìn)一步管理布局缀旁,則需要加入IS_VARIANT參數(shù)记劈,其數(shù)據(jù)結(jié)構(gòu)參考DISVARIANT,一般需要定義其中的REPORT=SY-REPID并巍,VARIANT為布局保存格式目木。有三個有用函數(shù)供調(diào)用保存的格式布局,分別為:
REUSE_ALV_VARIANT_DEFAULT_GET 讀取默認(rèn)的布局
REUSE_ALV_VARIANT_EXISTENCE 檢測指定布局是否存在
REUSE_ALV_VARIANT_F4 顯示布局格式選擇對話窗
FORM output_data.
PERFORM addfield.
PERFORM layout.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
* I_GRID_TITLE = G_TITLE
it_fieldcat = gt_fieldcat[]
is_layout = gs_layout
is_variant = g_variant ”可調(diào)用變式
i_save = 'A' “這是保存變式
TABLES
t_outtab = gt_out[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "OUTPUT_DATA
ALV 相關(guān)的Fieldcat : 對一些字段要求相同的懊渡,用FILED_TYPE區(qū)別:
FORM addfield.
PERFORM e01_fieldcat_init USING:
'INFNR' 'Info record NO.' 6 '' '' 'Q' '' '',
'LIFNR' 'Vendor' 6 '' '' 'Q' '' 'X',
'MATNR' 'Material NO.' 6 '' '' ' ' '' 'X',
'EKORG' 'Purchasing Org.' 10 '' '' ' ' '' '',
'WERKS' 'Plant' 25 '' '' ' ' '' '',
'ESOKZ' 'Infotype' 10 '' '' ' ' '' '',
'MEINS' 'PO Unit' 25 '' '' ' ' '' '',
'UMREZ' 'Numerator for conversion' 10 '' '' ' ' '' '',
'UMREN' 'Denominator for conversion' 10 '' '' ' ' '' '',
'VABME' 'Var. PO Unit Active' 10 '' '' ' ' '' '',
'NETPR' 'Net price' 10 '' '' 'C' '' '',
'WAERS' 'Currency' 10 '' '' ' ' '' '',
'PEINH' 'Price unit' 6 '' '' ' ' '' '',
'BPRME' 'Order Price Unit' 18 '' '' ' ' '' '',
*{ SAPCI-2801 Start
'MM_NETPR' text-h01 10 space space 'C' space space,
'MM_PEINH' text-h02 6 space space space space space,
'LMEIN' text-h03 6 space space space space space,
*} SAPCI-2801 End
'DATAB' 'Valid From' 35 '' '' ' ' '' '',
'DATBI' 'Valid To' 18 '' '' ' ' '' '',
'MWSKZ' 'Tax Code' 13 '' '' ' ' '' '',
'MFRNR' 'Manufacturer' 13 '' '' ' ' '' '',
'EKGRP' 'Pur. Group' 10 '' '' '' '' '',
'APLFZ' 'Planned Delivery Days' 10 '' '' ' ' '' '',
'MINBM' 'Minimum PO Quantity' 6 '' '' ' ' '' '',
'NORBM' 'Standard PO Quantity' 13 '' '' ' ' '' '',
'INCO1' 'Incoterms1' 10 '' '' ' ' '' '',
'INCO2' 'Incoterms2' 6 '' '' ' ' '' '',
'IDNLF' 'Vendor Material' 13 '' '' ' ' '' '',
'MFR_CODE' 'Mfr Code' 13 '' '' ' ' '' '',
'MFR_NAME' 'Mfr Name' 35 '' '' ' ' '' '',
'MPN_NO' 'MPN number' 20 '' '' ' ' '' '',
'MFRPN' 'Mfr Part Number' 40 '' '' ' ' '' '',
'BRAND' 'Brand' 15 '' '' ' ' '' '',
'BRAND_TYP' 'Brand Type' 45 '' '' ' ' '' '',
'AENAM' 'Changed By' 12 '' '' ' ' '' '',
'AEDAT' 'Changed On' 18 '' '' ' ' '' '',
'AETIM' 'Time of Last Change' 18 '' '' ' ' '' '',
'RELIF' 'Regular Vendor' 20 '' '' ' ' '' '',
'POTXT' 'PO text' 13 '' '' ' ' '' '',
'KSTBM' 'Scale Quantity' 13 '' '' ' ' '' '',
'KBETR' 'Scale Amount' 10 '' '' 'C' '' '',
'URZLA' 'country of origin' 13 '' '' ' ' '' '',
'TELF1' 'telephone' 13 '' '' ' ' '' '',
'LOEKZ' 'Deletion flag of Purch.org.' 13 '' '' ' ' '' '',
'LOEVM_KO' 'Deletion flag of Condition' 13 '' '' ' ' '' '',
'MMSTA' 'Plant-Specific Material Status' 13 '' '' ' ' '' '',
'KNUMH' 'Condition record no.' 10 '' '' ' ' '' '',
'KOPOS' 'Sequential number of the condition' 3 '' '' ' ' '' ''.
* 'VOLEH ' 'Volume Unit' 13 '' '' 'Q' '' '',
* 'KWMENG2' 'SO Qty in CAR' 13 '' '' 'Q' '' '',
* 'MENGE3' 'STO2 Qty in CAR (3200)' 20 '' '' 'Q' '' '',
* 'VOLUM' 'SO Volume' 10 '' '' '' '' ''.
ENDFORM. "ADDFIELD
中間e01_fieldcat_init部分:Field_type = Q or C or V 或其他分別給值:
no_zero 如果取值為零刽射,則為空军拟,既不輸出零;
just: 對其方式誓禁,R 右對齊
no_convext懈息,Do not consider conversion exit for output
qfieldname 參考計(jì)量單位的字段名稱
qtabname Qfieldname 對應(yīng)的輸出內(nèi)表名
對銷售單位及體積單位給了值:
ALV FIELDCAT詳細(xì)字段值可叁考:分類講得很詳細(xì)。
https://blog.csdn.net/champaignwolf/article/details/79662527
FORM e01_fieldcat_init
USING field_name TYPE c
field_text TYPE c
field_lenth TYPE i
field_edit TYPE c
field_checkbox TYPE c
field_type TYPE c
field_key TYPE c
fix_column TYPE c.
DATA: ls_fieldcat TYPE slis_fieldcat_alv.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = field_name.
ls_fieldcat-seltext_l = field_text.
IF field_type EQ 'Q'.
ls_fieldcat-just = 'R'.
ls_fieldcat-no_zero = 'X'.
ls_fieldcat-qtabname = 'VBDPA'.
ls_fieldcat-qfieldname = 'VRKME'.
ELSEIF field_type EQ 'C'.
ls_fieldcat-just = 'R'.
ls_fieldcat-no_zero = 'X'.
ELSEIF field_type EQ 'V'.
ls_fieldcat-just = 'R'.
ls_fieldcat-no_zero = 'X'.
ls_fieldcat-qtabname = 'VBDPA'.
ls_fieldcat-qfieldname = 'VOLEH'.
ELSE.
ls_fieldcat-no_convext = 'X'.
ls_fieldcat-just = 'L'.
ENDIF.
* LS_FIELDCAT-CHECKBOX = FIELD_CHECKBOX.
ls_fieldcat-outputlen = field_lenth.
ls_fieldcat-edit = field_edit.
ls_fieldcat-key = field_key.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ENDFORM. "E01_FIELDCAT_INIT
LAYOUT只是給了優(yōu)化列寬設(shè)置及使ALV表格按斑馬線間隔條碼方式顯示:
FORM layout.
gs_layout-colwidth_optimize = 'X'.
gs_layout-zebra = 'X'.
* GS_LAYOUT-BOX_FIELDNAME = 'SEL'.
* GS_LAYOUT-COLTAB_FIELDNAME = 'COLOR'.
ENDFORM. "layout
I_CALLBACK_PF_STATUS_SET:ALV工具欄Subroutine(子程序)
I_CALLBACK_USER_COMMAND:ALV User Command Subroutine(子程序)现横,實(shí)現(xiàn)對應(yīng)菜單項(xiàng)及相應(yīng)事件功能
詳細(xì)請參考漓拾,非常不錯:https://www.cnblogs.com/hcmy00/p/6524107.html
熱點(diǎn)鏈接
熱點(diǎn)鏈接,即 Fieldcat中 的 hotspot 屬性戒祠;
設(shè)置之后,當(dāng)用戶點(diǎn)擊帶有熱點(diǎn)的字段時速种,就會觸發(fā) Subroutine(FRM_USER_COMMAND)中的動作姜盈;對于熱點(diǎn)鏈接,所對應(yīng)的FCode為 “&IC1“配阵;
FORM user_command USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
CASE rs_selfield-fieldname.
WHEN 'B_NETPR1'.
CALL FUNCTION 'DSYS_SHOW_FOR_F1HELP'
EXPORTING
* APPLICATION = 'SO70'
dokclass = 'TX'
doklangu = 'E'
dokname = 'Z_B_NETPR1'
* DOKTITLE = ' '
* HOMETEXT = ' '
* OUTLINE = ' '
* VIEWNAME = 'STANDARD'
* Z_ORIGINAL_OUTLINE = ' '
* CALLED_FROM_SO70 = ' '
* SHORT_TEXT = ' '
* APPENDIX = ' '
* IMPORTING
* APPL =
* PF03 =
* PF15 =
* PF12 =
EXCEPTIONS
class_unknown = 1
object_not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDCASE.
ENDCASE.
ENDFORM. "USER_COMMAND
如上邏輯僅在點(diǎn)擊字段 Base Net Unit Price時彈出如下框給出說明:
對于屏幕上的field馏颂,我們通常可以使用f1調(diào)出它對應(yīng)的data element的documention棋傍,要維護(hù)data element的文本可在data element修改狀態(tài)勾選那個 change document checkbox,然后點(diǎn)擊documentation就可以修改了救拉。
但是我們?nèi)绾吾槍ζ聊簧厦嫒我庖粋€field去調(diào)用f1 help文檔呢?
首先當(dāng)然要創(chuàng)建f1 help文擋瘫拣,在se61創(chuàng)建TX document class的文擋并且指定語言
https://blog.csdn.net/feijibin/article/details/9107161