1. 程式人生 > >SAP OOALV 動態設定單元格可否編輯

SAP OOALV 動態設定單元格可否編輯

對於OOALV有些列允許客戶輸入,但是當用戶輸入之後,或者ALV展示之前要判斷是否滿足一定的條件,如果滿足,那麼就要單獨設定某一行或者幾行的這個欄位不可以編輯或可以編輯,效果如果所示:
在這裡插入圖片描述
動態編輯
實現步驟
1.在展示的內表或內表型別中新增欄位
CELLTAB TYPE LVC_T_STYL.
例如:

TYPES : BEGIN OF T_SC,
BUKRS LIKE ANLZ-BUKRS,
ANLN1 LIKE ANLA-ANLN1, "模具編號
ANLN2 LIKE ANLA-ANLN2,
CELLTAB TYPE LVC_T_STYL,
END OF T_SC.

2.在layout設定中新增程式碼
XXX_LAYOUT-STYLEFNAME =’CELLTAB’.

3.實現控制編輯屬性的程式碼

FORM FRM_INIT_STYLE_TAB .
DATA: LT_SFLIGHT TYPE TABLE OF SFLIGHT WITH HEADER LINE,
LT_CELLTAB TYPE LVC_T_STYL,
LS_CELLTAB TYPE LVC_S_STYL,
L_INDEX TYPE I.
LOOP AT IT_TAB INTO WA_TAB.
CLEAR : WA_TAB-CELLTAB. "不為空會報錯
IF WA_TAB-CELLTAB IS INITIAL.
L_INDEX = SY-TABIX.
REFRESH LT_CELLTAB.
LS_CELLTAB-FIELDNAME = ‘ZCWCZD’.

  IF WA_TAB-ZCWCZI IS NOT INITIAL AND
      WA_TAB-ZCXCZI IS INITIAL.
    LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
  ELSE.
    LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
  ENDIF.
  INSERT LS_CELLTAB INTO TABLE LT_CELLTAB.

  INSERT LINES OF LT_CELLTAB INTO TABLE WA_TAB-CELLTAB.
  MODIFY IT_TAB FROM WA_TAB INDEX L_INDEX.
ENDIF.

ENDLOOP.
ENDFORM. " FRM_INIT_STYLE_TAB

4.在需要重新顯示的地方呼叫程式碼
在每一個你需要重新判斷單元格是否可以編輯的地方呼叫,如:

MODULE DISPLAY_FINANCIAL_DISPOSAL OUTPUT.
"設定可編輯欄位
PERFORM FRM_INIT_STYLE_TAB.
"展示avl
PERFORM DISPLAY_FINANCIAL_DISPOSAL.
ENDMODULE. " DISPLAY_FINANCIAL_DISPOSAL OUTPUT
5.按實際情況配合修改資料事件使用