0

自分のプログラムに問題があります。このプログラムでは、ユーザーは選択画面でデータを入力する必要があります。そこで、保存された ALV バリアントの 1 つを選択することもできます。次のステップで、選択したデータを含む ALV リストが表示されます。さらに、ALV 内のデータには、選択されたレイアウトが含まれている必要があります。この ALV では、ユーザーは通常の ALV 機能を使用して、ALV のバリアントを変更、保存、選択、および管理できます。とはいえ、それには問題があります。ユーザーがフィルターを使用して既存の ALV バリアントに切り替えたい場合、(すべてのケースの 90%) フィルターと選択した ALV の並べ替えが適用されないことがあります。選択画面でこのバリアントを入力すると、すべてのフィルター、並べ替えなどを含む適切な ALV レイアウトが正しく適用されます。選択画面の f4-help の私のコード:

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 メソッドもデバッグしました。場合によっては、システムがフィルターを読み込めないことがわかりました。しかし、理由はわかりません。ヒントや情報は私にとって役立つ場合があります。前もって感謝します!

4

1 に答える 1