原来使用 in smatnr 由于 oracle 1000 条 限制 出现问题 。。。。

来源:互联网 发布:哪个软件有腾落指标 编辑:程序博客网 时间:2024/06/03 05:34
SPAN {font-family: "Courier New";font-size: 10pt;color: #000000;background: #FFFFFF;}.L1S31 {font-style: italic;color: #808080;}.L1S32 {color: #3399FF;}.L1S33 {color: #4DA619;}.L1S52 {color: #0000FF;}FUNCTION Z_MAT_ST_DATA.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(PMATNR) TYPE  MATNR DEFAULT 'Y*'
*"     VALUE(PWERKS) TYPE  WERKS_D
*"     VALUE(PMTART) TYPE  MTART OPTIONAL
*"     VALUE(PREADZ) TYPE  CHAR1 DEFAULT 'X'
*"  TABLES
*"      SLGORT STRUCTURE  ZSTDATA OPTIONAL
*"      SDATA STRUCTURE  ZMATSTDATA
*"----------------------------------------------------------------------
  tables: mbew,makt.
  ranges:smatnr for mara-matnr,
         slg    for mard-lgort .
  data
         len type i.
  data : begin of itmatnr occurs 0,
           matnr like mara-matnr,
           meins like mara-meins,
         end of itmatnr.

  data : begin of itmok OCCURS 1,
           matnr like mara-matnr,
           werks like mkol-werks,
           lgort like mkol-lgort,
           sobkz like mkol-sobkz,
           slabs like mkol-slabs,
    end of itmok.

  if pmatnr ne space.
    if pmatnr cs '*' .
      smatnr-sign = 'I'.
      smatnr-option = 'CP'.
      smatnr-low = pmatnr.
      append smatnr.

    else.
      smatnr-sign = 'I'.
      smatnr-option = 'EQ'.
      smatnr-low = pmatnr.
      append smatnr.
    endif.
  endif.
  loop at slgort.
    slg-sign = 'I'.
    slg-option = 'EQ'.
    slg-low = slgort-lgort.
    append slg.
  endloop.

  select matnr meins into table itmatnr
    from mara
    where matnr in smatnr
    and   mtart eq pmtart.

  if itmatnr[] is INITIAL.
    exit.
  endif.

  select matnr
         werks
         lgort
         labst
    into corresponding fields of table SDATA
    from mard
    FOR ALL ENTRIES IN itmatnr
    where werks eq pwerks
      and lgort in slg
      and matnr eq itmatnr-matnr.

  clear len.
  describe table sdata lines len.
  if len ne 0.

    loop at sdata.

      select single * from mbew
        where BWKEY eq pwerks
        and matnr eq sdata-matnr.
      if sy-subrc eq 0.
        sdata-salk3 =
               sdata-labst *
               mbew-verpr.
        sdata-waers = 'CNY'.
        modify sdata transporting salk3 waers.
      endif.

    endloop.
  endif.


  clear sdata.

  select matnr
           werks
           lgort
           sobkz
           slabs

      into CORRESPONDING FIELDS OF TABLE itmok
      from mkol
      FOR ALL ENTRIES IN itmatnr
      where  werks eq pwerks
        and lgort in slg
        and matnr eq itmatnr-matnr.

  loop at itmok.
    clear sdata.
    SDATA-matnr = itmok-matnr.
    sdata-werks = itmok-werks.
    sdata-lgort = itmok-lgort.
    sdata-sobkz = itmok-sobkz.
    sdata-labst = itmok-slabs.
    append sdata.
  endloop.


  sort sdata by matnr.
  loop at sdata.
    at new matnr.
      clear makt.
      select single * from makt
        where matnr eq sdata-matnr
        and spras eq sy-langu.
    endat.

    read table itmatnr with key
       matnr = sdata-matnr.
    if sy-subrc eq 0.
      sdata-meins = itmatnr-meins.
    endif.

    sdata-maktx = makt-maktx.
    modify sdata transporting maktx meins.
  endloop.

  if preadz eq space.
    delete  sdata where labst eq 0.
  endif.
ENDFUNCTION.
原创粉丝点击