1

透過テーブルとクラスターテーブルからデータを選択し、その結果を内部テーブルに入れます。クラスタテーブルは結合できないselect singleため、クラスタテーブルからデータを取得するために2つ使用しました。

問題は、ループ内で、各出力行に内部テーブルの最初の行(D各行)と同じ情報が割り当てられることです。where条件のフィールドが、BELNR列から同じ値の3行を取得するためである可能性があります。

まず、コードは次のとおりです。

FORM select_data1 CHANGING lt_data LIKE gt_map1.   
  FIELD-SYMBOLS: <fs_main> TYPE zimposto_consumo.

  SELECT a~belnr d~spart a~bldat a~waers c~wrbtr a~hwaer c~dmbtr  
    INTO CORRESPONDING FIELDS OF TABLE lt_data
          FROM ( ( bkpf AS a
      INNER JOIN bsis AS c ON c~belnr = a~belnr )
      INNER JOIN vbrk AS d ON d~xblnr = c~belnr )
      WHERE a~belnr IN belnr.


  LOOP AT lt_data ASSIGNING <fs_main>.
      SELECT SINGLE kbetr fwste hwste FROM bset
        INTO (<fs_main>-kbetr, <fs_main>-fwste, <fs_main>-hwste)
        WHERE belnr = <fs_main>-belnr.

      SELECT SINGLE koart FROM bseg
        INTO (<fs_main>-koart)
        WHERE buzei = 1
        AND belnr = <fs_main>-belnr.


    IF <fs_main>-koart = 'D'.    
          FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
          WRITE:/
                  sy-vline NO-GAP,
                  (16) <fs_main>-belnr NO-GAP,
                  sy-vline NO-GAP,
                  (16) <fs_main>-spart NO-GAP,
                  sy-vline NO-GAP,
                  (10) <fs_main>-bldat NO-GAP,
                  sy-vline NO-GAP.
                  perc = <fs_main>-kbetr / 10.
                  WRITE: (10) perc NO-GAP,
                  sy-vline NO-GAP,
                  (5) <fs_main>-waers NO-GAP,
                  sy-vline NO-GAP,
                  (16) <fs_main>-wrbtr NO-GAP,
                  sy-vline NO-GAP,
                  (16) <fs_main>-fwste NO-GAP,
                  sy-vline NO-GAP,
                  (5) <fs_main>-hwaer NO-GAP,
                  sy-vline NO-GAP,
                  (16) <fs_main>-dmbtr NO-GAP,
                  sy-vline NO-GAP,
                  (16) <fs_main>-hwste NO-GAP,
                  sy-vline NO-GAP.
                  WRITE:/ sy-uline(137).
                  write: <fs_main>-koart. 
    ELSE.   
                  write: 'Não há dados a mostrar.'. 
    ENDIF.   
  ENDLOOP.

ENDFORM.                    "select_data1

結果はこれです:

実行時の結果

D出力テーブルの右側にある「D」は、3行を表すものであってはなりません。最初の1つだけが必要でD、他の2つはである必要がありますS

なにが問題ですか?

4

3 に答える 3

5

あなたWRITE <fs_main>-koart.はブロックの中にいますIF <fs_main>-koart = 'D'.

したがって、常にD. それはコードコピーの問題だと思います。

あなたが使う

      SELECT SINGLE koart FROM bseg
        INTO (<fs_main>-koart)
        WHERE buzei = 1
        AND belnr = <fs_main>-belnr.

そして、あなたはチェックしませんSY-SUBRC。エントリが見つからない場合、 の古い値が<fs_main>-koart変数に保持されます。

私がお勧めします:

      clear <fs_main>-koart.
      "<fs_main>-koart = '?'.    "Alternative
      SELECT SINGLE koart FROM bseg
        INTO (<fs_main>-koart)
        WHERE buzei = 1
        AND belnr = <fs_main>-belnr.

また

      SELECT SINGLE koart FROM bseg
        INTO (<fs_main>-koart)
        WHERE buzei = 1
        AND belnr = <fs_main>-belnr.
      IF SY-SUBRC NE 0.
        clear <fs_main>-koart.
        "<fs_main>-koart = '?'.    "Alternative
        " or you may skip the output with NEXT
      ENDIF.
于 2012-06-14T18:38:22.720 に答える
0

選択項目にハードコードされた広告申込情報 (BUZEI) があります。それが繰り返しデータの原因だと思います。

于 2012-06-14T18:07:27.893 に答える
0

コメントですが、会社と年でフィルタリングしていないのは本当に奇妙だと思います。今年のドキュメントの同じ BELNR は、来年のドキュメントとは異なることに注意してください。企業も同じ。

それがプログラムで表示したいものであることを確認してください。会計年度が変わったり、新しい会社がシステムに追加された場合に問題になる可能性があるためです。

于 2012-06-27T13:51:38.940 に答える