在abap中选择不检索所有值

时间:2012-06-14 16:47:47

标签: sap abap

我制作了一个结构,用于保存信息os透明表e集群表。由于群集表无法加入,因此我创建了两个选择单个列表,用于从群集表中检索信息。问题在于,在循环中,并且可能因为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.


    ÎF <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

结果就是这个。请注意,&#39; D&#39;在表格的最后不应该是3行。第一个是D,另外两个是S. runtime result

3 个答案:

答案 0 :(得分:3)

您的写:`<fs_main>-koart.位于ÎF <fs_main>-koart = 'D'.内。 所以你应该总是得到D。我认为这是代码副本的问题。

您使用

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

并且您不检查子目录。如果未找到任何条目,则<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.

答案 1 :(得分:0)

您的选择中有硬编码的订单项(BUZEI)。我怀疑这是重复数据的原因。

答案 2 :(得分:0)

只是一个评论,我觉得很奇怪你没有按公司和年份过滤。 记得同一份BELNR今年的文件将不会是明年的同一份文件。与公司一样。

请确保这是您希望程序显示的内容。因为在财政年度变更或新公司被添加到系统时可能会出现问题。