2017-10-04 21 views
0

ABAPにはまったく新しい機能です。私はテーブル属性it_pakket(トラック内のパッケージ)を持つクラス "トラック"( "vrachtwagen")を持っています。私はこのテーブルの内容を画面に書き込む方法を書いた(DisplayLading)。私は各トラックでこれを行いたいので、私はforループでこのメソッドを呼び出します。プログラムはエラーなく実行されますが、出力は画面に表示されません。forループ内のABAPメソッド呼び出し

REPORT ZPR412_OO_OEF1. 

CLASS CPakket DEFINITION. 
    PUBLIC SECTION. 
     DATA: Id TYPE I READ-ONLY, 
      aantal TYPE I, 
      bestemmeling TYPE STRING. 
     METHODS: SetID IMPORTING ID TYPE I. 
ENDCLASS. 

CLASS CPakket IMPLEMENTATION. 
    METHOD SetID. 
    me->Id = ID. 
    ENDMETHOD. 
ENDCLASS. 

CLASS CVrachtwagen DEFINITION. 
    PUBLIC SECTION. 
    DATA: Id TYPE I READ-ONLY. 
    METHODS: SetID IMPORTING ID TYPE I, 
      LaadPakket IMPORTING Pakket TYPE REF TO CPakket, 
      LosPakket IMPORTING Pakket TYPE REF TO CPakket, 
      DisplayLading. 
    PRIVATE SECTION. 
    DATA: it_pakket TYPE STANDARD TABLE OF REF TO CPakket, 
      pakket TYPE REF TO CPakket. 
ENDCLASS. 

CLASS CVrachtwagen IMPLEMENTATION. 
    METHOD SetID. 
    me->Id = ID. 
    ENDMETHOD. 
    METHOD LaadPakket. 
    APPEND Pakket TO it_pakket. 
    ENDMETHOD. 
    METHOD LosPakket. 
    ENDMETHOD. 
    METHOD DisplayLading. 
    LOOP AT me->it_pakket into pakket. 
     WRITE:/ pakket->Id, pakket->aantal, pakket->bestemmeling. 
    ENDLOOP. 
    ENDMETHOD. 
ENDCLASS. 

DATA: 
    vrachtwagen TYPE REF TO CVrachtwagen, 
    it_vrachtwagens TYPE STANDARD TABLE OF REF TO CVrachtwagen, 
    pakket TYPE REF TO CPakket, 
    it_pakket TYPE STANDARD TABLE OF REF TO CPakket, 
    s TYPE string. 

start-of-selection. 
DO 2 TIMES. 
    CREATE OBJECT vrachtwagen. 
    CALL METHOD vrachtwagen->SetId EXPORTING Id = sy-index. 
    APPEND vrachtwagen TO it_vrachtwagens. 
ENDDO. 

CREATE OBJECT pakket. 
CALL METHOD pakket->SetId EXPORTING Id = 1. 
pakket->aantal = 5. 
pakket->bestemmeling = 'Bob'. 
APPEND pakket TO it_pakket. 

CREATE OBJECT pakket. 
CALL METHOD pakket->SetId EXPORTING Id = 2. 
pakket->aantal = 2. 
pakket->bestemmeling = 'Jan'. 
APPEND pakket TO it_pakket. 

CREATE OBJECT pakket. 
CALL METHOD pakket->SetId EXPORTING Id = 3. 
pakket->aantal = 1. 
pakket->bestemmeling = 'Piet'. 
APPEND pakket TO it_pakket. 

LOOP AT it_vrachtwagens INTO vrachtwagen. 
    CASE sy-index. 
    WHEN 1. 
     loop at it_pakket into pakket. 
     if sy-index lt 3. 
      vrachtwagen->LaadPakket(pakket). 
     endif. 
     endloop. 
    WHEN 2. 
     read table it_pakket into pakket index 3. 
     vrachtwagen->LaadPakket(pakket). 
    ENDCASE. 
ENDLOOP. 
LOOP AT it_vrachtwagens INTO vrachtwagen. 
    vrachtwagen->DisplayLading(). 
ENDLOOP. 

私は、トラックをパッケージで充填するためのコードを書いており、トラックがループする内部テーブルにトラックを追加しました。私の推測では、プログラムがまだループを実行しているので、CVrachtwagenクラス実装のwriteメソッドは画面に書き込めません。

+0

「it_pakket」はどこに記入しますか? –

+0

@lausekはコードの別の部分にあります(クラッタを防ぐためにオリジナルの投稿には含めませんでした)、3つの "pakket"オブジェクトを作成してit_pakketテーブルに追加します。別のWrite文を使用してこのテーブルの出力を出力することができたので、テーブルit_pakketは疑いなく埋められます。 – RobVH

+1

問題は、あなたが提供していないコードの部分にある可能性が非常に高いです。質問を編集して[MCVE](https://stackoverflow.com/help/mcve)を追加してください。それ以外にも:ABAPでは大文字と小文字が区別されないので、CamelCaseの命名規則を使用することに慣れずに、推奨されるlower_case_with_underscoresという名前に固執することをお勧めします。また、コード内の名前は英語でなければなりません。 – vwegert

答えて

4

システム変数SY-INDEXLOOP ATループ内で設定されていない、あなたはit_vrachtwagensit_pakketの上にループ内部SY-TABIXと交換する必要があります。ループインデックス -

SY-インデックス:SAP's documentation(あまり有用ではない)から

。 DOおよびWHILEループには、現在のパスを含む以前のループパスの数が含まれます。

sy-tabix - 内部テーブルのテーブルインデックスの行番号。 1次または2次表索引を使用してアクセスされた最後の行が含まれます。ハッシュアルゴリズムを使用してアクセスすると0に設定されます。

+0

これはうまくいきました、ありがとう! – RobVH

関連する問題