so

function zrfc_sd_pce_0086.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(ZMESSAGE) LIKE  ZPCEGMESSAGE STRUCTURE  ZPCEGMESSAGE
*"  TABLES
*"      POHEADER STRUCTURE  ZCTO_PO_HEADER OPTIONAL
*"      PODETAIL STRUCTURE  ZCTO_PO_DETAIL OPTIONAL
*"      POCONFIGURE STRUCTURE  ZCTO_PO_CONFIG OPTIONAL
*"      POADDRESS STRUCTURE  ZCTO_PO_ADDRESS OPTIONAL
*"      Z_SO STRUCTURE  ZCTO_SO OPTIONAL
*"      ZZSOERRORLOG STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------


***----
  data: zhhpn like zcto_po_detail-hhpn.
  data: zpodetail like zcto_po_detail,
        zsoerrorlog like zsoerrorlog,
        zqty like zcto_po_detail-qty,
        zamount like zcto_po_detail-amount.

  p_werks = zplant.
  if poheader[] is initial
     or podetail[] is initial
     or poaddress[] is initial.
    z_so-custpo = 'no data'.
    z_so-hhso = 'Fail'.
    append z_so.
    exit.
  endif.

  sort podetail by hhpn.
  read table podetail index 1.
  zhhpn = podetail-hhpn.
**** if HHFG, summer to one line 20100415
  loop at podetail.
    if podetail-hhpn = zhhpn.
      move-corresponding podetail to zpodetail .
      zqty = zqty + podetail-qty .
      zamount = zamount + podetail-amount.
      continue.
    else.
      move-corresponding zpodetail to itab .
      itab-qty = zqty.
      itab-amount = zamount.
      append itab.
      clear: zqty,zamount,zpodetail.
      zhhpn = podetail-hhpn.
      move-corresponding podetail to zpodetail .
      zqty = zqty + zpodetail-qty .
      zamount = zamount + zpodetail-amount.
    endif.
  endloop.

  move-corresponding zpodetail to itab .
  append itab.

***read header
  loop at itab.
    read table poheader with key custpo = itab-custpo.
    if sy-subrc = 0.
      itab-cpodate        = poheader-cpodate.
      itab-currency       = poheader-currency.
      itab-totalamount    = poheader-totalamount.
      itab-emcso          = poheader-emcso.
      itab-endcpo         = poheader-endcpo.
      itab-resellerso     = poheader-resellerso.
      itab-producttype    = poheader-producttype.
*      itab-customername   = POHEADER-customername.
*      itab-soflag         = POHEADER-soflag.
*      itab-hhso           = POHEADER-hhso.
      itab-transdate      = poheader-transdate .
      itab-transtime      = poheader-transtime.
      modify itab.
    else.
      delete itab.
    endif.
  endloop.

***read address
  loop at itab.
    read table poaddress with key  custpo = itab-custpo.
    if sy-subrc = 0.
      move-corresponding poaddress to itab.
      modify itab.
    else.
      delete itab.
    endif.
  endloop.

**Process data       Create SO
  delete itab[] where soflag eq 'Y'.
  move itab[] to t_comp[].
  sort t_comp by custpo.
  delete adjacent  duplicates from t_comp comparing custpo.
  sort itab by custpo cpoline.
  delete adjacent  duplicates from itab comparing custpo cpoline.

  loop at t_comp.
    clear: zbapisdhd1,zbapisdhd1[], zsalesdocument,zbapiret2,
           zbapisditm,zbapisditm[],zbapiparnr,zbapiparnr[],
           zbapischdl,zbapischdl[],zbapicond,zbapicond[],
           zbapisdtext,zbapisdtext[].

    z_so-custpo  =  t_comp-custpo.

    g_item = 10.
****---  order_header_in  = zbapisdhd1
    zbapisdhd1-doc_type      =  zdoc_type.
    zbapisdhd1-sales_org     =  zsales_org.
    zbapisdhd1-distr_chan    =  zdistr_chan.
    zbapisdhd1-division      =  zdivision.
    zbapisdhd1-purch_date    =  t_comp-cpodate.
    if t_comp-reqdeldate < sy-datum.
      zbapisdhd1-req_date_h = sy-datum.
    else.
      zbapisdhd1-req_date_h   =   t_comp-reqdeldate.      "
    endif.
*    ZBAPISDHD1-REF_1         =  T_COMP-EMCSO.
    zbapisdhd1-ref_doc_l     = t_comp-emcso. "Change by five
    zbapisdhd1-purch_no_c    =  t_comp-custpo.
    zbapisdhd1-currency      =  t_comp-currency.   "
    zbapisdhd1-created_by   =  'PCE-ITPM'.  "change by five
****add by five
    zbapisdhd1-incoterms2   = 'LH'. "
    zbapisdhd1-price_date   = t_comp-reqdeldate.
    zbapisdhd1-ref_1        = t_comp-resellerso . "keep
    zbapisdhd1-ref_1_s      = t_comp-pickslipnumber. "keep
    zbapisdhd1-purch_no_s   = t_comp-endcpo.
****add by five
    append zbapisdhd1.

***---ORDER_TEXT = zbapisdtext    2010.04.07
    zbapisdtext-text_id     = '0001'.         "header text
    zbapisdtext-langu       = sy-langu.
    zbapisdtext-text_line   = t_comp-producttype.
    append zbapisdtext.
    clear zbapisdtext.

****--- order_partners = zbapiparnr
*    SELECT  kna1~kunnr INTO p_kunnr1
*    FROM kna1
*    WHERE name1 = t_comp-customername." BY FIVE 20100525

    select single cvalue into p_kunnr1 from zpcecontrolvalue
    where werks = 'PEL1'
    and ctype = 'CTOCUST'
    and indicator1 = 'ACT'.

    if sy-subrc = 0 .
      select  single * from knvv
      where kunnr =  p_kunnr1
      and knvv~vkorg = zsales_org
      and knvv~vtweg = zdistr_chan
      and knvv~spart = zdivision.
      if sy-subrc <> 0.
        exit.
      else.
        p_kunnr2 = p_kunnr1.
      endif.
*      EXIT.         "Jimmy  " by five remark0525
    endif.
*    ENDSELECT.

 

    if p_kunnr2 is initial.
      concatenate t_comp-customername
      '  is not find in customer data'  into   zmessage.
      z_so-hhso = 'Fail'.
      append z_so.
      exit.
    else.
      zbapiparnr-partn_role   = 'AG'.
      zbapiparnr-partn_numb   = p_kunnr2.
      append zbapiparnr.
    endif.

    clear:p_kunnr2,p_kunnr1.

    zbapiparnr-partn_role   = 'WE'.
    zbapiparnr-partn_numb   = 'YYYYYYYYYY'. " one time customer
    zbapiparnr-name       =  t_comp-shipto_name.
    zbapiparnr-name_2     =  t_comp-deliverto.
****ZBAPIPARNR-NAME_3     =
****ZBAPIPARNR-NAME_4     =
    zbapiparnr-street     =  t_comp-shipto_street.
    zbapiparnr-priv_addr  =  t_comp-shipto_street+35(10).
    zbapiparnr-district   =  t_comp-shipto_state.
    zbapiparnr-countr_iso =  t_comp-shipto_iso.
    zbapiparnr-postl_code =  t_comp-shipto_postcode.
    zbapiparnr-city       =  t_comp-shipto_city.
    append zbapiparnr.

***** change ship to party with ZCTO_PO_ADDRESS intall address
*    zbapiparnr-partn_role   = 'WE'.
*    zbapiparnr-partn_numb   = 'YYYYYYYYYY'. " one time customer
*    zbapiparnr-name       =  t_comp-in_name.
*    zbapiparnr-street     =  t_comp-in_address.
*    zbapiparnr-address  =  t_comp-in_address1.
*    zbapiparnr-priv_addr  = t_comp-in_address2.
*    zbapiparnr-telephone  =  t_comp-in_phone.
*    zbapiparnr-telebox    =  t_comp-in_email.
*    zbapiparnr-fax_number =  t_comp-in_fax.
*    zbapiparnr-country    =  t_comp-in_country.
*    zbapiparnr-region     =  t_comp-in_state.
*    zbapiparnr-postl_code =  t_comp-in_postalcode.
*    zbapiparnr-city       =  t_comp-in_city.
*    APPEND zbapiparnr.

    clear:p_kunnr2,p_kunnr1.

*    SELECT SINGLE kunnr adrnr INTO (p_kunnr2,p_adrnr) FROM kna1
*    WHERE kunnr = 'YYYYYYYYYY'.
*    IF SY-SUBRC <> 0.
*      CONCATENATE T_COMP-CUSTOMERNAME 'BILL to party is not find'
*INTO  ZMESSAGE.
*      EXIT.
*    ELSE.
*      ZBAPIPARNR-PARTN_ROLE   = 'RE'.
*      ZBAPIPARNR-PARTN_NUMB   = P_KUNNR2.
*      ZBAPIPARNR-ADDR_LINK    = P_ADRNR.
*      APPEND ZBAPIPARNR.
*    ENDIF.


************* address=ZBAPIADDRESS
*    IF sy-subrc  = 0.
*      zbapiaddress-addr_no    =  p_adrnr .
*      zbapiaddress-name    = t_comp-billto_name  .
*      zbapiaddress-name_2    = t_comp-deliverto  .
*      zbapiaddress-street    =  t_comp-billto_street.
*      zbapiaddress-str_suppl1 = t_comp-billto_street1.
*      zbapiaddress-str_suppl2 = t_comp-billto_street2.
*      zbapiaddress-location = t_comp-billto_street3.
*      zbapiaddress-city    = t_comp-billto_city.
*      zbapiaddress-country    =  t_comp-billto_state.
*      zbapiaddress-postl_cod1    =  t_comp-billto_postcode.
*      APPEND zbapiaddress.
*    ENDIF.

************order item
    loop at itab where custpo = t_comp-custpo.
****appedn pre-zero
      call function 'CONVERSION_EXIT_ALPHA_INPUT'
           exporting
                input  = g_item
           importing
                utput = g_item.

****--- ORDER_ITEMS_IN      = zbapisditm
      zbapisditm-itm_number  = g_item.
      zbapisditm-material    = itab-hhpn.
      zbapisditm-item_categ  = zdoc_type.
*       zbapisditm-BATCH       = ''.
      zbapisditm-plant       = p_werks.
*       zbapisditm-STORE_LOC   = ''.
      zbapisditm-target_qty = itab-qty.
      zbapisditm-purch_no_c = itab-custpo.
      zbapisditm-po_itm_no  = itab-cpoline.
      zbapisditm-ref_1      = itab-emcso.
      select single lgpro prctr
      into (zbapisditm-store_loc,zbapisditm-profit_ctr)
      from marc
      where matnr = zbapisditm-material
      and werks = p_werks.

      append zbapisditm.clear zbapisditm.

***---ORDER_TEXT = zbapisdtext    2010.04.07
      zbapisdtext-itm_number  = g_item.           "item text
      zbapisdtext-text_id     = '0001'.
      zbapisdtext-langu       = sy-langu.
      zbapisdtext-text_line   = itab-b2b_mc_code.
      append zbapisdtext.clear zbapisdtext.


***--ORDER_SCHEDULES_IN = zbapischdl
      zbapischdl-itm_number  = g_item.
      zbapischdl-req_date    = itab-reqdeldate.
      zbapischdl-req_qty     = itab-qty.
      zbapischdl-sched_line = '1'.
      zbapischdl-req_date = zbapisdhd1-req_date_h .
      zbapischdl-tp_date = zbapisdhd1-req_date_h .
      zbapischdl-ms_date = zbapisdhd1-req_date_h .
      zbapischdl-load_date = zbapisdhd1-req_date_h .
      zbapischdl-gi_date = zbapisdhd1-req_date_h .
      zbapischdl-sched_type = zschtype.
      append zbapischdl.clear zbapischdl.


***--ORDER_CONDITIONS_IN   = zbapicond
      zbapicond-itm_number   = g_item.
      zbapicond-cond_type    = 'PR00'.
      zbapicond-cond_value   = itab-price.
      zbapicond-currency     = itab-currency.
      zbapicond-cond_p_unt   = '1'.
      append zbapicond.clear zbapicond.

*      zbapicond-itm_number   = g_item.
*      zbapicond-cond_type    = 'MWST'.
*      zbapicond-cond_value   = '0'.
*      zbapicond-currency     = itab-currency.
*      zbapicond-cond_p_unt   = '1'.
*      APPEND zbapicond.

      g_item = g_item + 10.
    endloop.


    call function 'BAPI_SALESORDER_CREATEFROMDAT2'
    exporting
*   SALESDOCUMENTIN               =
      order_header_in               = zbapisdhd1
   importing
     salesdocument                 = zsalesdocument
   tables
     return                        = zbapiret2
     order_items_in                = zbapisditm
*   ORDER_ITEMS_INX               =
     order_partners                = zbapiparnr
     order_schedules_in            = zbapischdl
*   ORDER_SCHEDULES_INX           =
     order_conditions_in           = zbapicond
     order_text                    = zbapisdtext.
*     PARTNERADDRESSES              = ZBAPIADDRESS .

    zzsoerrorlog[] = zbapiret2[].

    call function 'BAPI_TRANSACTION_COMMIT'
         exporting
              wait = 'Y'.

    call function 'ENQUE_SLEEP'
         exporting
              seconds = 1.

    if not zsalesdocument is initial.                           """
      call function 'BAPI_TRANSACTION_COMMIT'
           exporting
                wait   = 'X'
           importing
                return = zreturn.
      if sy-subrc = 0.
        update zcto_po_header  set soflag = 'Y'
                                   hhso   = zsalesdocument
                         where    custpo = t_comp-custpo.
        if  sy-subrc = 0.
          z_so-hhso   =  zsalesdocument. append z_so.
          zmessage = 'generate success!'.
        else.
          call function 'BAPI_TRANSACTION_ROLLBACK'.
          z_so-hhso   =  'Fail'.         append z_so.
          zmessage = 'generate fail!'.
        endif.
      else.
        call function 'BAPI_TRANSACTION_ROLLBACK'.
        z_so-hhso   =  'Fail'.         append z_so.
        zmessage = 'generate fail!'.
      endif.
    else.
      z_so-hhso   =  'Fail'.         append z_so.
      zmessage = 'generate fail!'.
    endif.
    if not zzsoerrorlog[] is initial.
      select single * from zsoerrorlog where vbeln = t_comp-custpo.
      if sy-subrc = 0 .
        delete from zsoerrorlog where vbeln = t_comp-custpo.
        if sy-subrc = 0.
          loop at zzsoerrorlog.
            move-corresponding zzsoerrorlog to zsoerrorlog .
            zsoerrorlog-vbeln = t_comp-custpo.
            zsoerrorlog-znumber = zzsoerrorlog-number.
            zsoerrorlog-zmessage = zzsoerrorlog-message.
            zsoerrorlog-zparameter = zzsoerrorlog-parameter.
            zsoerrorlog-zrow = zzsoerrorlog-row.
            zsoerrorlog-ztime = sy-uzeit.
            zsoerrorlog-zdate = sy-datum.
            insert into zsoerrorlog values zsoerrorlog.
          endloop.

        endif.
      else.
        loop at zzsoerrorlog.
          move-corresponding zzsoerrorlog to zsoerrorlog .
          zsoerrorlog-vbeln = t_comp-custpo.
          zsoerrorlog-znumber = zzsoerrorlog-number.
          zsoerrorlog-zmessage = zzsoerrorlog-message.
          zsoerrorlog-zparameter = zzsoerrorlog-parameter.
          zsoerrorlog-zrow = zzsoerrorlog-row.
          zsoerrorlog-ztime = sy-uzeit.
          zsoerrorlog-zdate = sy-datum.
          insert into zsoerrorlog values zsoerrorlog.
        endloop.
      endif.
    endif.
  endloop.

endfunction.

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

转载于:http://blog.itpub.net/14397246/viewspace-666218/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值