ITPub博客

首页 > Linux操作系统 > Linux操作系统 > so PRICE FOR CTO

so PRICE FOR CTO

原创 Linux操作系统 作者:fivezhuo 时间:2010-06-25 10:37:47 0 删除 编辑

function zrfc_sd_pce_0085.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(ZCUSTPO) LIKE  VBAK-BSTNK OPTIONAL
*"  EXPORTING
*"     VALUE(ZAMOUNT) LIKE  KONP-KBETR
*"  TABLES
*"      WOCOMPNENT STRUCTURE  ZWOCONPNENT OPTIONAL
*"      WOAMOUT STRUCTURE  ZWOAMOUT OPTIONAL
*"----------------------------------------------------------------------
  data: begin of wo_table occurs 0,
        vbeln like vbak-vbeln,
        posnr like vbep-posnr,
        aufnr like vbep-aufnr,
        rsnum like afko-rsnum,
        end of wo_table.

  data: zkonwa like konp-konwa,
        zkbetr like konp-kbetr,
        zkpein like konp-kpein,
        zaufnr like vbep-aufnr,
        zamount1 like vbap-netpr,
        zso like vbak-vbeln,
        zaufnr1 like vbep-aufnr ,
        or_no like jest-objnr,
        wo_status like bsvx-sttxt.

* Convert Internal SAP value to Currency value
  data:      t_intval like wmto_s-amount.   "Internal Amount
  data:      t_disval  like wmto_s-amount. "Display Amount

  tables:vbak,vbkd,mara.

  if zcustpo is initial.
    exit.
  endif.

****get SO
  select single vbak~vbeln into zso
   from vbak inner join vbuk
  on vbak~vbeln = vbuk~vbeln
  where bstnk = zcustpo
  and abstk <> 'C'. " C is complete reject order,b is partial

  select * into  corresponding fields of table wo_table
  from vbep
  where vbeln = zso.

* delete duplicates data.
  delete adjacent duplicates from wo_table comparing vbeln posnr aufnr.

  if wo_table[] is initial.
    exit.
  endif.

****get wo rsnum
  loop at wo_table.

    select single rsnum into wo_table-rsnum from afko
    where aufnr = wo_table-aufnr.
    modify wo_table.

  endloop.

******get component by wo Where condtion = ''
  loop at wo_table.
    clear: or_no ,wo_status.
    or_no   = 'OR'.
    or_no+2 = wo_table-aufnr.
    call function 'STATUS_TEXT_EDIT'
         exporting
              objnr         = or_no
              only_active   = 'X'
              spras         = 'E'
              bypass_buffer = '1'
         importing
              line          = wo_status.

    if wo_status cs 'REL'.

      select * into  corresponding fields of wocompnent
      from resb
      where rsnum = wo_table-rsnum
      and xloek = ''  " DELETE
      and dumps = ''  " DUMMY
      and bdmng > 0.                                        "20100614
*    AND enmng > 0 .
**    AND KZEAR = 'X'.
        if sy-subrc = 0.
          wocompnent-kdauf = wo_table-vbeln.
          append wocompnent.
        endif.
      endselect .

    endif.
  endloop.

  if wocompnent[] is initial.
    exit.
  endif.

  sort wocompnent by aufnr.
  read table wocompnent index 1.
  zaufnr = wocompnent-aufnr.

  loop at wocompnent.

    if wocompnent-aufnr <> zaufnr . " CACULATE AMOUNT/PER WO.
      woamout-aufnr = zaufnr1.
      woamout-netpr = zamount1.
      append woamout.
      zaufnr = wocompnent-aufnr.
      clear: zamount1,zaufnr1.
    endif.

    select single * from vbak where vbeln = wocompnent-kdauf.
    select single * from vbkd where vbeln = wocompnent-kdauf.
    select single * from mara where matnr = wocompnent-matnr.

****get condition record master
    select single konp~kbetr konp~konwa konp~kpein
    into (zkbetr,zkonwa,zkpein)
    from a957 inner join konp
    on a957~knumh = konp~knumh
    where a957~kschl = 'PR00'
    and a957~vkorg = vbak-vkorg
    and a957~vtweg = vbak-vtweg
    and a957~kunnr =  vbak-kunnr
    and a957~zzkdmat = mara-bismt
    and a957~inco1 =  vbkd-inco1
    and a957~inco2 =  vbkd-inco2
*    AND a957~datab <= vbak-erdat
*    AND a957~datbi >= vbak-erdat.
    and a957~datab <= vbkd-prsdt
    and a957~datbi >= vbkd-prsdt.

    t_intval = zkbetr .

    call function 'CURRENCY_AMOUNT_SAP_TO_DISPLAY'
         exporting
              currency        = zkonwa
              amount_internal = t_intval
         importing
              amount_display  = t_disval
         exceptions
              internal_error  = 1
              others          = 2.

    zkbetr = t_disval.
*** condition record price
    wocompnent-kbetr =  zkbetr / zkpein.
*** component total price
    wocompnent-netpr =  wocompnent-bdmng * wocompnent-kbetr.
    modify wocompnent.
*****************total amount
    zamount = zamount + wocompnent-netpr.
    zamount1 = zamount1 + wocompnent-netpr.
    zaufnr1 = wocompnent-aufnr.
  endloop.
*** FINIAL WO AMOUNT " CACULATE AMOUNT/PER WO.
  woamout-aufnr = zaufnr1.
  woamout-netpr = zamount1.
  append woamout.
  clear: zamount1.

endfunction.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14397246/viewspace-666219/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: so
下一篇: BILLING REPORT
请登录后发表评论 登录
全部评论

注册时间:2009-08-01

  • 博文量
    110
  • 访问量
    65202