Roger  

在开发说明中,取最高价格和最低价格。

 


但是,在测试代码的过程中,用AT NEW 却出现这种情况:

****采购价格和供应商************************************:
***EKKO-EKPO取供应商***********************************************
DATA: BEGIN OF itab_ekko OCCURS 0 ,
        matnr LIKE eban-matnr,
        aedat LIKE ekpo-aedat,
        netpr LIKE ekpo-netpr,
        lifnr LIKE ekko-lifnr,
        ebeln LIKE ekko-ebeln,
  END OF itab_ekko.
DATA: lt_ekko LIKE itab_ekko OCCURS 0 WITH HEADER LINE.
DATA: lt_ekko1 LIKE itab_ekko OCCURS 0 WITH HEADER LINE. " 放最低采购价格

DATA: BEGIN OF wa,
       matnr LIKE eban-matnr,
        aedat LIKE ekpo-aedat,
        netpr LIKE ekpo-netpr,
        lifnr LIKE ekko-lifnr,
        ebeln LIKE ekko-ebeln,
  END OF wa.

  SELECT
      ekpo~matnr
      ekpo~ebeln
      ekpo~aedat
      ekpo~netpr
      ekko~lifnr
      INTO CORRESPONDING FIELDS OF TABLE lt_ekko
      FROM ekpo
      INNER JOIN ekko ON ekko~ebeln = ekpo~ebeln
      WHERE ekpo~matnr IN w_matnr
       AND ekpo~aedat IN w_date .

  SORT lt_ekko BY matnr netpr ASCENDING.
  CLEAR: wa.
  LOOP AT lt_ekko INTO wa.
    AT NEW matnr.
      lt_ekko1-matnr = wa-matnr.
      lt_ekko1-lifnr = wa-lifnr.
      lt_ekko1-netpr = wa-netpr.

      APPEND lt_ekko1.
      CLEAR: lt_ekko1.
      CLEAR: wa.
    ENDAT.
  ENDLOOP.

  这时,wa里的数据除了第一个字段MATNR是正确的之外,其他后边的字段有的是"***"掩码,有的是“0”。这是在AT NEW里进行內表赋值时,不能正常处理的原因。

解决办法是:用外部的变量把数据传输到新的內表之中。代码如下:
***EKKO-EKPO取供应商***********************************************
DATA: BEGIN OF itab_ekko OCCURS 0 ,
        matnr LIKE eban-matnr,
        aedat LIKE ekpo-aedat,
        netpr LIKE ekpo-netpr,
        lifnr LIKE ekko-lifnr,
        ebeln LIKE ekko-ebeln,
  END OF itab_ekko.
DATA: lt_ekko LIKE itab_ekko OCCURS 0 WITH HEADER LINE.
DATA: lt_ekko1 LIKE itab_ekko OCCURS 0 WITH HEADER LINE. " 放最低采购价格

DATA: BEGIN OF wa,
       matnr LIKE eban-matnr,
        aedat LIKE ekpo-aedat,
        netpr LIKE ekpo-netpr,
        lifnr LIKE ekko-lifnr,
        ebeln LIKE ekko-ebeln,
  END OF wa.

DATA: matnr LIKE eban-matnr,
      lifnr LIKE ekko-lifnr,
      netpr LIKE ekpo-netpr.


  SELECT
      ekpo~matnr
      ekpo~ebeln
      ekpo~aedat
      ekpo~netpr
      ekko~lifnr
      INTO CORRESPONDING FIELDS OF TABLE lt_ekko
      FROM ekpo
      INNER JOIN ekko ON ekko~ebeln = ekpo~ebeln
      WHERE ekpo~matnr IN w_matnr
       AND ekpo~aedat IN w_date .

  SORT lt_ekko BY matnr netpr ASCENDING.
  CLEAR: wa .
  LOOP AT lt_ekko INTO wa .
    matnr = wa-matnr.
    lifnr = wa-lifnr.
    netpr = wa-netpr.
    AT NEW matnr.
      lt_ekko1-matnr = matnr.
      lt_ekko1-lifnr = lifnr.
      lt_ekko1-netpr = netpr.

      APPEND lt_ekko1.
      CLEAR: lt_ekko1.
      CLEAR: wa.
    ENDAT.
  ENDLOOP.

 


 

posted on 2012-01-25 21:39  weidongef  阅读(391)  评论(0)    收藏  举报