1

我从透明表和集群表中选择数据并将结果放入内部表中。由于无法连接集群表,因此我使用了两个select single来从集群表中检索数据。

问题是,在循环中,每个输出行都被分配了与内部表中第一行相同的信息(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 行。只有第一个应该是D,另外两个应该是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 回答