2015-05-20 23 views
0

我有我自己的程序的問題。在這個程序中,用戶必須在選擇屏幕上輸入數據。在那裏,他還可以選擇一個保存的ALV變體。 在下一步中,ALV列表將與選定的數據一起顯示。另外,ALV中的數據應該具有選擇的佈局。在此ALV中,用戶可以使用正常的ALV功能更改,保存,選擇和管理ALV變體。然而,這有一個問題。如果用戶想要使用過濾器切換到現有的ALV變體,它有時(所有情況的90%)不會應用過濾器和所選ALV的分類。 如果他在選擇屏幕中輸入此變體,則正確應用具有所有過濾器,排序等的正確ALV佈局。 我對F4-幫助選擇屏幕代碼:ALV改變變體不適用過濾器

DATA: lwa_variant LIKE disvariant, 
     lw_exit_flag TYPE cmpflag. 

lwa_variant-report = sy-repid. 


CALL FUNCTION 'REUSE_ALV_VARIANT_F4' 
EXPORTING 
    is_variant = lwa_variant 
    i_save = 'A' 
IMPORTING 
    e_exit = lw_exit_flag 
    es_variant = wa_variant 
EXCEPTIONS 
    not_found = 1 
    program_error = 2 
    OTHERS = 3. 
IF sy-subrc <> 0. 
    MESSAGE s899(mm) WITH text-088. 
ELSEIF NOT lw_exit_flag IS INITIAL. 
    MESSAGE s899(mm) WITH text-089. 
    CLEAR wa_variant. 
ENDIF. 
p_layou = wa_variant-variant. 

我在屏幕與ALV的PBO代碼:

DATA: i_fieldcat TYPE lvc_t_fcat, 
    wa_layout TYPE lvc_s_layo, 
    wa_stable TYPE lvc_s_stbl, 
    wa_r_variant TYPE DISVARIANT. 

IF o_alv_container IS INITIAL. 

CREATE OBJECT o_alv_container 
    EXPORTING 
    container_name = 'O_ALV_CONTAINER'. 

CREATE OBJECT o_alv 
    EXPORTING 
    i_parent = o_alv_container 
    EXCEPTIONS 
    others = 1. 
IF sy-subrc <> 0. 
    MESSAGE e002. 
ENDIF. 
IF wa_variant IS INITIAL AND p_layou IS INITIAL. 
    wa_r_variant-report = sy-repid. 
ELSEIF wa_variant IS NOT INITIAL. 
wa_r_variant = wa_variant. 
    wa_r_variant-handle = SPACE. 
    wa_r_variant-log_group = SPACE. 
    wa_r_variant-username = SPACE. 
    wa_r_variant-text = SPACE. 
    wa_r_variant-dependvars = SPACE. 
ELSE. 
    wa_r_variant-report = sy-repid. 
    wa_r_variant-variant = p_layou. 

ENDIF. 

wa_layout-zebra = ''. 
wa_layout-stylefname = 'IMPUT_STYLE'. 
wa_layout-sel_mode = 'A'. 
wa_layout-cwidth_opt = 'X'. 

CALL METHOD o_alv->set_table_for_first_display 
    EXPORTING 
    is_variant  = wa_r_variant 
    is_layout  = wa_layout 
    i_save   = 'A' 
    i_default  = 'A' 
    CHANGING 
    it_outtab  = i_alv_data 
    it_fieldcatalog = i_fieldcat 
    EXCEPTIONS 
    OTHERS   = 4. 
IF sy-subrc <> 0. 
    MESSAGE e002. 
ENDIF. 


ELSE. 

wa_stable-COL = 'X'. 
wa_stable-row = 'X'. 

CALL METHOD o_alv->refresh_table_display 
    EXPORTING 
    is_stable = wa_stable 
    EXCEPTIONS 
    OTHERS = 1. 
IF sy-subrc <> 0. 
    MESSAGE e003. 
ENDIF. 
ENDIF. 

我從未有過這樣的問題與任何其他程序和我從來沒有聽說過這個。不幸的是,表中有許多字段(> 20),所以用戶必須按照他們想要的方式進行配置(使用過濾器,排序等)。經過數小時的測試,我無法弄清楚我的代碼有什麼問題。我也調試了SAP ALV方法。我發現在某些情況下,系統無法加載過濾器。但我不知道爲什麼。任何提示或信息可能對我有用。 在此先感謝!

+0

您是否能夠創建MWE來重現此問題?通過上面的代碼片段,很難檢查系統行爲。 – vwegert

+0

你能告訴我什麼是MWE嗎?比我可以檢查是否有可能 –

+0

MWE = http://en.wikipedia.org/wiki/Minimal_Working_Example – vwegert

回答

0

我發現Finnaly出了什麼問題。

使用Shift +雙擊程序內ALV的空白區域,可以看到ALV中出現的錯誤信息。在修復它們之後,功能就像它應該那樣工作。

我的問題是這條線:

wa_layout-stylefname = 'IMPUT_STYLE'。

Regards