給PO分配自定义的表格(SmartForm)和输出程序 2

**----------------------------------------------------------
  field-symbols: like line of l_doc-xekpo.
**----------------------------------------------------------
  clear ent_retco.
  if nast-aende eq space.
    l_druvo = '1'.
  else.
    l_druvo = '2'.
  endif.

  call function 'ME_READ_PO_FOR_PRINTING'
    exporting
      ix_nast        = nast
      ix_screen      = ent_screen
    importing
      ex_retco       = ent_retco
      ex_nast        = l_nast
      doc            = l_doc
    changing
      cx_druvo       = l_druvo
      cx_from_memory = l_from_memory.
  check ent_retco eq 0.
**& Modify by TLY 20100306.
  loop at l_doc-xekpo assigning .
    gt_out-ebeln = -ebeln.   "採購文件號碼.
    gt_out-bedat = l_doc-xekko-bedat. "採購文件日期.
    gt_out-lifnr = l_doc-xekko-lifnr. "供應商帳號.
    gt_out-adrnr = l_doc-xekko-adrnr. "地址號碼.
    gt_out-waers = l_doc-xekko-waers. "幣別碼.
    gt_out-ebelp = -ebelp.   "採購文件的項目號碼.
    gt_out-matnr = -matnr.   "物料號碼.
    gt_out-verkf = l_doc-xekko-verkf. "銷售員.Add by TLY 20100312.
    gt_out-telf1 = l_doc-xekko-telf1. "銷售員電話.Add by TLY 20100312.
    gt_out-ekorg = l_doc-xekko-ekorg. "採購組織.Add by TLY 20100312.
    gt_out-ekgrp = l_doc-xekko-ekgrp. "採購群組.Add by TLY 20100312.
*   gt_out-maktx = -txz01.
    gt_out-meins = -meins.   "採購單計量單位.
    gt_out-netpr = -netpr.   "採購文件中的淨價.
    gt_out-peinh = -peinh.   "價格單位.
    gt_out-menge = -menge.   "採購單數量.
    gt_out-netwr = -netwr.   "以採購單幣別計算的淨訂購值.
    gt_out-mwskz = -mwskz.   "銷售稅碼.
    gt_out-lgort = -lgort.   "儲存地點.
    gt_out-adrn2 = -adrn2.   "交貨地址號碼.
    gt_out-werks = -werks.   "工廠.
    gt_out-txz01 = -txz01.   "短文.
    gt_out-bpumz = -bpumz.   "單位轉換分子.Add by TLY 20100312.
    gt_out-bpumn = -bpumn.   "單位轉換分母.Add by TLY 20100312.
    gt_out-snetwr = l_doc-xpekko-netwr.
    append gt_out.
    clear gt_out.
  endloop.
**& Address NO. in DB table T001W.
  select werks adrnr pstlz ort01 stras
    from t001w
    into table gt_t001w.

**& Address Infor.
  loop at gt_out.
**& Address NO. exit or not.
    if gt_out-adrnr is not initial.
      gt_addr-addrnumber = gt_out-adrnr.
    else.
      select single adrnr
        from lfa1
        into gt_addr-addrnumber
       where lifnr = gt_out-lifnr
         and adrnr <> space.
      if sy-subrc = 0.
*    ELSEIF gt_out-kadrnr IS NOT INITIAL.
*      gt_addr-addrnumber = gt_out-kadrnr.
*      gt_out-adrnr       = gt_out-kadrnr.
        gt_out-adrnr       =  gt_addr-addrnumber.
      elseif gt_out-adrn2 is not initial.
        gt_addr-addrnumber = gt_out-adrn2.
        gt_out-adrnr       = gt_out-adrn2.
      else.
**& Address NO. in DB table T001W.
        read table gt_t001w with key werks = gt_out-werks.
        if sy-subrc = 0. "Read success.
          gt_addr-addrnumber = gt_t001w-adrnr.
          gt_out-adrnr       = gt_t001w-adrnr.
          clear: gt_t001w.
        endif.
      endif.
    endif.
    append gt_addr.
    clear:gt_addr.

**& Delivery date.
    gt_ddate-ebeln = gt_out-ebeln.
    gt_ddate-ebelp = gt_out-ebelp.
    append gt_ddate.
    clear  gt_ddate.

**& Tax rate.
    gt_taxr-mwskz = gt_out-mwskz.
    append gt_taxr.
    clear: gt_taxr.

**& Description of Storage Location.
    gt_lgort-werks = gt_out-werks.
    gt_lgort-lgort = gt_out-lgort.
    append gt_lgort.
    clear: gt_lgort.

**& Material description.
    gt_maktx-matnr = gt_out-matnr.
    append gt_maktx.
    clear  gt_maktx.

**& Vendor name.
    gt_vendort-lifnr = gt_out-lifnr.
    append gt_vendort.
    clear  gt_vendort.

**& Add by TLY 20100312.
*    gt_manuf-lifnr = gt_out-lifnr.
*    gt_manuf-ekorg = gt_out-ekorg.
*    APPEND gt_manuf.
*    CLEAR gt_manuf.

    gt_porepre-ekgrp = gt_out-ekgrp.
    append gt_porepre.
    clear  gt_porepre.
**& End add by TLY 20100312.
    modify gt_out.
    clear:gt_out.
  endloop.
*& Sort Address NO.
  if gt_addr[] is not initial. "Get address infor.
    sort gt_addr.
    delete adjacent duplicates from gt_addr.
    select addrnumber city1 street str_suppl3
           tel_number fax_number   post_code1
      from adrc
      into corresponding fields of table gt_addr
      for all entries in gt_addr
    where addrnumber = gt_addr-addrnumber.
  endif.

**& Get Delivery date.
  if gt_ddate[] is not initial.
    select ebeln ebelp etenr eindt
      from eket
      into corresponding fields of table gt_ddate
      for all entries in gt_ddate
     where ebeln = gt_ddate-ebeln
       and ebelp = gt_ddate-ebelp.
    sort gt_ddate.
  endif.

**& Tax rate.
  if gt_taxr[] is not initial.
    sort gt_taxr.
    delete adjacent duplicates from gt_taxr.
    select mwskz kursr
      from ztmm02
      into table gt_taxr
      for all entries in gt_taxr
     where mwskz = gt_taxr-mwskz
       and mwart = 'V'.
  endif.

**& Description of Storage Location.
  if gt_lgort[] is not initial.
    sort gt_lgort.
    delete adjacent duplicates from gt_lgort.
    select werks lgort lgobe
      from t001l
      into table gt_lgort
      for all entries in gt_lgort
     where werks = gt_lgort-werks
       and lgort = gt_lgort-lgort.
  endif.

**& Add by TLY 20100312.
**& 抓取採購代表及電話.
  if gt_porepre[] is not initial.
    sort gt_porepre.
    delete adjacent duplicates from gt_porepre.
    select ekgrp eknam tel_number tel_extens
      from t024
      into table gt_porepre
      for all entries in gt_porepre
     where ekgrp = gt_porepre-ekgrp.
  endif.
**& 抓取廠商聯絡人及電話.
*  IF gt_manuf[] IS NOT INITIAL.
*    SORT gt_manuf.
*    DELETE ADJACENT DUPLICATES FROM gt_manuf.
*    SELECT lifnr ekorg verkf telf1
*      FROM lfm1
*      INTO TABLE gt_manuf
*      FOR ALL ENTRIES IN gt_manuf
*     WHERE lifnr = gt_manuf-lifnr
*       AND ekorg = gt_manuf-ekorg.
*  ENDIF.
**& End add by TLY 20100312.

**& Get user name.
  select single a~name_last a~name_first
    into (lv_lname, lv_fname )
    from usr21 as u
   inner join adrp as a on a~persnumber = u~persnumber
   where u~bname = sy-uname.
  if sy-subrc = 0. "Get successful.
    concatenate lv_lname lv_fname into gv_name.
    condense gv_name.
  endif.

**& Get Material descriptions.
  if gt_maktx[] is not initial.
    sort gt_maktx.
    delete adjacent duplicates from gt_maktx.
    select matnr maktx
      from makt
      into table gt_maktx
      for all entries in gt_maktx
     where matnr = gt_maktx-matnr
       and spras = sy-langu.
  endif.

**& Get vendor name.
  if gt_vendort[] is not initial.
    sort gt_vendort.
    delete adjacent duplicates from gt_vendort.
    select lifnr name1 adrnr
      from lfa1
      into table gt_vendort
      for  all entries in gt_vendort
      where lifnr = gt_vendort-lifnr.
  endif.

**========== Process data =======================
**& Sort Purchase order infor.
  sort gt_out by ebeln lgort.

**& Loop table.
  loop at gt_out assigning .
**& Delivery date.
    at new ebeln.
      read table gt_ddate with key ebeln = -ebeln.
      if sy-subrc = 0.  "Read successful.
        lv_eindt = gt_ddate-eindt.
      endif.
      clear:gt_ddate.
    endat.
**& Storage Description.
    at new lgort.
      read table gt_lgort with key werks = -werks
                               lgort = -lgort binary search.
      if sy-subrc = 0.
        -lgobe = gt_lgort-lgobe. "Storage description.
      endif.
      -flag  = 'X'.
    endat.

    -eindt = lv_eindt.
**& Material description.
    if -txz01 is not initial.
      -maktx = -txz01.
    endif.

**& Address infor.
    read table gt_addr with key addrnumber = -adrnr.
    if sy-subrc = 0. "Read successful.
*      -city1      = gt_addr-city1.
*      -street     = gt_addr-street.
*      -str_suppl3 = gt_addr-str_suppl3.
      -tel_number = gt_addr-tel_number.
      -fax_number = gt_addr-fax_number.
*      -post_code1 = gt_addr-post_code1.
      clear:gt_addr.
    endif.

**& Add by TLY 20100315.
    read table gt_t001w with key werks = -werks.
    if sy-subrc = 0.  "Read successful.
      -post_code1 = gt_t001w-pstlz.
      -street     = gt_t001w-ort01.
      -str_suppl3 = gt_t001w-stras.
      clear gt_t001w.
    endif.
**& End add by TLY 20100315.
**-------------------------------------------------------------------
**& Currency converting factor.
    perform. currency_converting using -waers
                                      -netpr
                             changing -netpr.
** Uint price.
    if -peinh <> 0 and -bpumn <> 0.
      -netpr = -netpr / -peinh
                     * -bpumz / -bpumn.
    endif.


**& Add by TLY 20100312.
**& 採購代表及電話.
    read table gt_porepre with key ekgrp = -ekgrp.
    if sy-subrc = 0.
      -eknam = gt_porepre-eknam.
      -rtelf1 = gt_porepre-tel_number.
      -extens = gt_porepre-tel_extens.
      clear: gt_porepre.
    endif.
**& 廠商聯絡人及電話.
*    READ TABLE gt_manuf WITH KEY lifnr = -lifnr
*                                 ekorg = -ekorg.
*    IF sy-subrc = 0.
*      -verkf = gt_manuf-verkf.
*      -telf1 = gt_manuf-telf1.
*      CLEAR: gt_manuf.
*    ENDIF.
**& End add by TLY 20100312.

**& Net Order Value in PO Currency.
    lv_netwr = lv_netwr + -netwr.
**& Tax value.
    read table gt_taxr with key mwskz = -mwskz binary search.
    if sy-subrc = 0. "Read successful.
      lv_taxva = lv_taxva + -netwr * gt_taxr-kursr / 100.
    endif.

**& Read Purchase Order Item text .
    perform. read_text using -ebeln -ebelp
                   changing -itemtxt.
**& Read Material description.
    if -maktx is initial.
      read table gt_maktx with key matnr = -matnr.
      if sy-subrc = 0.  "Read successful.
        -maktx = gt_maktx-maktx.
        clear: gt_maktx.
      endif.
    endif.
**& Read vendor name.
    read table gt_vendort with key lifnr = -lifnr.
    if sy-subrc = 0.
      -name1 = gt_vendort-name1.
**& Add by TLY 20100312.
*      SELECT SINGLE tel_number fax_number
*        FROM adrc
*        INTO (-tel_number, -fax_number)
*      WHERE addrnumber = gt_vendort-adrnr.
**& End add by TLY 20100312.
      clear: gt_vendort.
    endif.

    at end of ebeln.
**& Read Purchase Order Header text .
      perform. read_text using -ebeln '0'
                     changing -headert.
***& Total value.
      -snetwr = lv_netwr.
      -staxva = lv_taxva.
      -total  = lv_netwr + lv_taxva.
      clear: lv_netwr, lv_taxva, lv_total, lv_eindt.
    endat.
  endloop.

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

转载于:http://blog.itpub.net/13547743/viewspace-630967/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值