记录一个PO增加最新采购价格和采购数量的需求

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31228779/article/details/78434732

目的对于同一物料下,需要获取相应供应商的最新采购价格和汇总采购数量 

但有时会出现同一物料会从多个供应商去采购 ,所以会有多个供应商的最新价格

此时 考虑对于同一物料号的具有多个供应商时 将最新采购价格用" / “分开 作为一个最新价格展示


    select
      ekko~ebeln
      ekpo~ebelp
      ekpo~matnr
      ekko~lifnr
      ekko~aedat
      ekpo~netpr
      ekpo~menge
      into corresponding fields of table lt_ebeln
      from ( ( ekpo
                    inner join ztprice on ekpo~matnr = ztprice~matnr )
                    inner join ekes on ekpo~ebeln = ekes~ebeln
                                    and ekpo~ebelp = ekes~ebelp  )
                    inner join ekko on ekpo~ebeln = ekko~ebeln
      where ztprice~matnr in s_matnr
      and ekes~erdat in s_podate
      and ekpo~loekz <> 'L'
      and ekpo~retpo <> 'X'
      and ( ekko~pro_status = 'G' or ekko~pro_status = 'H' or ekko~pro_status = 'I' or ekko~pro_status = 'J' or ekko~pro_status = 'K' ).

    sort lt_ebeln by ebeln ebelp.
    delete adjacent duplicates from lt_ebeln.

    loop at lt_ebeln into lw_ebeln.
      move-corresponding lw_ebeln to lw_ebeln_nm.
      append lw_ebeln_nm to lt_ebeln_nm.
    endloop.

*   lt_ebeln_pr = lt_ebeln.
*根据日期降序取得最近日期的采购 再根据供应商排序
*这样可以获取不同供应商之间的所有采购价
    sort lt_ebeln_nm by matnr lifnr aedat descending.
*排除同一物料号下 相同供应商的数据 以此取得 同一个物料号所对应不同供应商所对应最新日期的价格 LT_EBELN_PR2
    lt_ebeln_pr2 = lt_ebeln_nm.
    delete adjacent duplicates from lt_ebeln_pr2 comparing matnr lifnr.
*根据排除相同的供应商后的数据 再根据日期进行降序处理 得到不同供应商中找到最近最新日期的采购价格
    sort lt_ebeln_pr2 by matnr aedat descending.

删除存在相同物料号的数据 根据该条数据作为主数据 去取存在多物料号对应不同供应商时的最新采购价格 放在主数据PO价里用‘/’拆分
    lt_ebeln_pr3 = lt_ebeln_pr2.
    delete adjacent duplicates from lt_ebeln_pr3 comparing matnr.

    clear:lw_ebeln_pr2,lw_ebeln_pr3,lv_index2.
    loop at lt_ebeln_pr3 into lw_ebeln_pr3.
*      lv_index = sy-tabix.
*      CLEAR sy-tabix.
      loop at lt_ebeln_pr2 into lw_ebeln_pr2 where matnr = lw_ebeln_pr3-matnr.
        lv_index2 = lv_index2 + 1.
        if lv_index2 <> 1.
          lv_str2 =  lw_ebeln_pr2-netpr.
          condense lv_str2 no-gaps.
          concatenate lv_str1 '/' lv_str2 into lv_string.
          condense lv_string no-gaps.
          lv_str1 = lv_string.
        elseif lv_index2 = 1..
          lv_str1 = lw_ebeln_pr2-netpr.
          condense lv_str1 no-gaps.
          lv_string = lv_str1.
        endif.
      endloop.

      clear lv_index2.
      lw_ebeln_pr3-netpr = lv_string.
      modify lt_ebeln_pr3 from lw_ebeln_pr3.
    endloop.

    clear: lw_ebeln_pr3,lw_tab.
    sort lt_ebeln_pr3 by matnr.
    loop at gt_tab into lw_tab.
      read table lt_ebeln_pr3 into lw_ebeln_pr3 with key matnr = lw_tab-matnr binary search.
      if sy-subrc = 0.
        lw_tab-netpr = lw_ebeln_pr3-netpr.
        lw_tab-startdate = s_podate-low.
        lw_tab-enddate = s_podate-high.
        modify gt_tab from lw_tab.
      endif.
    endloop.

    clear: lw_ebeln_pr2,lw_tab,lv_menge.
    loop at gt_tab into lw_tab.
      loop at lt_ebeln_nm into lw_ebeln_nm where matnr = lw_tab-matnr.
        lv_menge = lv_menge + lw_ebeln_nm-menge.
      endloop.

      lw_tab-menge = lv_menge.
      clear lv_menge.
      modify gt_tab from lw_tab.
    endloop.



猜你喜欢

转载自blog.csdn.net/qq_31228779/article/details/78434732