3

ABAP 740 SP13 でテーブル コントロールのすべての行が表示されないという問題があります。

たとえば、次の 2 つの行を含むテーブルがあります。

LT_TRANSFER_CONFIRM_TC の値

これは、このコードが実行されるテーブルの状態です。

CALL SCREEN 0300 STARTING AT 10 5
                 ENDING AT 85 16.

これはすぐに Process Before Output コードに入ります。

*----------------------------------------------------------------------*
*                        PROCESS BEFORE OUTPUT                         *
*----------------------------------------------------------------------*
PROCESS BEFORE OUTPUT.
  MODULE status_0300.
  LOOP AT lt_transfer_confirm_tc
         INTO ls_transfer_confirm_tc
         WITH CONTROL tc_transfer_confirm
         CURSOR tc_transfer_confirm-current_line.
    MODULE tc_transfer_confirm_get_lines.
  ENDLOOP.

どこにstatus_0300ある:

MODULE status_0300 OUTPUT.
  SET PF-STATUS 'STATUS_0300'.
  " Confirm Material Number Count
  SET TITLEBAR 'T05'.
ENDMODULE.

とはtc_transfer_confirm_get_lines:

MODULE tc_transfer_confirm_get_lines OUTPUT.
  g_tc_transfer_confirm_lines = sy-loopc.
ENDMODULE.

私の PBO のループの最初の繰り返しの終わりに、値はテーブルの最初の行であるls_transfer_confirm_tcと一致し、( in ) は に設定されます。lt_transfer_confirm_tctc_transfer_confirm-current_line1g_tc_transfer_confirm_linestc_transfer_confirm_get_lines10

ループの 2 回目の繰り返しは処理されません。カーソルは、ENDLOOP(最初の繰り返しから) という行に(ステートメントCURSOR tc_transfer_confirm-current_line.の最後であるため) ホップし、最後に、その行で停止することなく に移動します。このループの最後に、is initial 、is still 、およびis still . この質問の上部にある画像に示されているように、その間ずっと、テーブルにはまだ 2 つの行があります。LOOPENDLOOPMODULE tc_transfer_confirm_get_linesls_transfer_confirm_tctc_transfer_confirm-current_line1g_tc_transfer_confirm_lines10lt_transfer_confirm_tc

この時点で、画面は次のように表示されます。

SCREEN 0300 で表示されるテーブル コントロール

このループがテーブルの 2 行目を処理しないため、画面に表示されない理由がわかりません。

ありがとう。

4

1 に答える 1

2

問題はtc_transfer_confirm-lines、値が常に 1 になるように の値を設定していなかったことです。

次のコードは正常に実行されます。

*----------------------------------------------------------------------*
*                        PROCESS BEFORE OUTPUT                         *
*----------------------------------------------------------------------*
PROCESS BEFORE OUTPUT.
  MODULE status_0300.
  MODULE tc_trnsfr_cnfrm_change_tc_attr.
  LOOP AT lt_transfer_confirm_tc
         INTO ls_transfer_confirm_tc
         WITH CONTROL tc_transfer_confirm
         CURSOR tc_transfer_confirm-current_line.
    MODULE tc_transfer_confirm_get_lines.
  ENDLOOP.

新しいモジュールでtc_trnsfr_cnfrm_change_tc_attr:

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_TRANSFER_CONFIRM'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE tc_trnsfr_cnfrm_change_tc_attr OUTPUT.
  DESCRIBE TABLE lt_transfer_confirm_tc LINES tc_transfer_confirm-lines.
ENDMODULE.
于 2016-07-06T18:42:48.320 に答える