2009年9月15日 星期二

Bapi Create SO V2

發現 BAPI_SALESORDER_CREATEFROMDATA 建立出來的資料太多限制與事後修改
於是在改用了BAPI_SALESORDER_CREATEFROMDAT2
這部份在Schedule Line 與 Condition有很好的控制
回傳值的部份也比 BAPI_SALESORDER_CREATEFROMDATA 清楚的很多
運用上還可以把長文的部份輸入在內...

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
    EXPORTING
ORDER_HEADER_IN  = ORDER_HEADER_IN
ORDER_HEADER_INX = ORDER_HEADER_INX
SALESDOCUMENTIN  = L_SALESDOCUMENT
*     testrun   = 'X'
    IMPORTING
SALESDOCUMENT    = L_VBELN
    TABLES
RETURN    = LI_RETURN
ORDER_ITEMS_IN    = ORDER_ITEMS_IN
ORDER_ITEMS_INX   = ORDER_ITEMS_INX
ORDER_SCHEDULES_IN   = ORDER_SCHEDULES_IN
ORDER_SCHEDULES_INX  = ORDER_SCHEDULES_INX
ORDER_PARTNERS    = ORDER_PARTNERS
ORDER_CONDITIONS_IN  = ORDER_CONDITIONS_IN.
ORDER_CONDITIONS_INX = ORDER_CONDITIONS_INX.
<code>


但真正控制還是把正確的資訊傳達給 BAPI_SALESORDER_CREATEFROMDAT2

重點分為五項:header、item、Schedule、Condition、Pantner

* Sales document type
  ORDER_HEADER_IN-DOC_TYPE   = WA_OPENSO-AUART.  
  ORDER_HEADER_IN-SALES_ORG  = WA_OPENSO-VKORG.
  ORDER_HEADER_IN-DISTR_CHAN = WA_OPENSO-VTWEG.
  ORDER_HEADER_IN-DIVISION =   WA_OPENSO-SPART.
  ORDER_HEADER_IN-SALES_GRP = WA_OPENSO-VKGRP.
  ORDER_HEADER_IN-SALES_OFF = WA_OPENSO-VKBUR.
  ORDER_HEADER_IN-REQ_DATE_H = WA_OPENSO-VDATU.
  ORDER_HEADER_IN-PURCH_NO_C = WA_OPENSO-BSTNK.
  ORDER_HEADER_IN-CURRENCY   = WA_OPENSO-WAERK.
  ORDER_HEADER_IN-PMTGAR_PRO = WA_OPENSO-PMTGAR_PRO.
  ORDER_HEADER_IN-DOC_NUM_FI = WA_OPENSO-DOC_NUM_FI.
  ORDER_HEADER_IN-INCOTERMS1  = WA_OPENSO-INCO1.
  ORDER_HEADER_IN-INCOTERMS2  = WA_OPENSO-INCO2.
  APPEND ORDER_HEADER_IN.

****項目資料***************************
  ORDER_ITEMS_IN-ITM_NUMBER = WA_OPENSO-POSNR.
  ORDER_ITEMS_IN-MATERIAL =  WA_OPENSO-MATNR.
  ORDER_ITEMS_IN-BATCH    = WA_OPENSO-CHARG.
  ORDER_ITEMS_IN-PLANT = WA_OPENSO-WERKS.
  ORDER_ITEMS_IN-STORE_LOC = WA_OPENSO-LGORT.
  ORDER_ITEMS_IN-PURCH_NO_C = WA_OPENSO-PURCH_NO_C.
  ORDER_ITEMS_IN-DLVSCHDUSE = WA_OPENSO-DLVSCHDUSE.
  APPEND ORDER_ITEMS_IN.
****Schedule Line資料***************************
  ORDER_SCHEDULES_IN-ITM_NUMBER = WA_OPENSO-POSNR.
  ORDER_SCHEDULES_IN-REQ_DATE = WA_OPENSO-REQ_DATE.
  ORDER_SCHEDULES_IN-REQ_QTY = WA_OPENSO-KWMENG.
  APPEND ORDER_SCHEDULES_IN.


****CONDITIONS資料***************************
  ORDER_CONDITIONS_IN-ITM_NUMBER  = WA_OPENSO-POSNR.
  ORDER_CONDITIONS_IN-COND_TYPE   = 'ZPR0'.
  ORDER_CONDITIONS_IN-COND_VALUE  = WA_OPENSO-KBETR.
  APPEND ORDER_CONDITIONS_IN.

****Partner資料***************************
**賣方  SP
  CLEAR ORDER_PARTNERS.
  ORDER_PARTNERS-PARTN_ROLE = 'AG'.
  ORDER_PARTNERS-PARTN_NUMB = WA_OPENSO-KUNAG.
  APPEND ORDER_PARTNERS .
*出貨對象  SH
  CLEAR ORDER_PARTNERS.
  ORDER_PARTNERS-PARTN_ROLE = 'WE'.
  ORDER_PARTNERS-PARTN_NUMB = WA_OPENSO-KUNWE.
  APPEND ORDER_PARTNERS.
*"發票收受人 RE
  CLEAR ORDER_PARTNERS.
  ORDER_PARTNERS-PARTN_ROLE = 'RE'.
  ORDER_PARTNERS-PARTN_NUMB = WA_OPENSO-KUNWE.
  APPEND ORDER_PARTNERS.
*付款方  PY
  CLEAR ORDER_PARTNERS.
  ORDER_PARTNERS-PARTN_ROLE = 'RG'.
  ORDER_PARTNERS-PARTN_NUMB = WA_OPENSO-KUNRG.
  APPEND ORDER_PARTNERS.
*End Customer  Z1
  CLEAR ORDER_PARTNERS.
  ORDER_PARTNERS-PARTN_ROLE = 'Z1'.
  ORDER_PARTNERS-PARTN_NUMB = WA_OPENSO-KUNZ1.
  APPEND ORDER_PARTNERS.

2009年9月11日 星期五

擔保品到期通知

要建立一個當擔保品額度低於某個值時可以通知負責業務人員
包含一些G/L Accont And S G/L Indicator的部份
流程分析:
1.可至BSID內取得客戶擔保品額度的G/L Accont
   將擔保品分為二個暫存區
   一個為擔保品額度   另一個為取消額度
   將擔保品額度 減去 取消額度
2.至KNVP取得客戶編號回串員工編號
   得到員工編號後回串員工電子郵件
3.當擔保品額度過小時寄發郵件給該負責業務人員
   不建議發於登入SAP帳號內的業務工作場所(內部郵件)..
   應發於員工個人電子郵件信箱(例如Outlook.Note等)

2009年9月10日 星期四

特性值

我用了二個方法都可以取得我想要的值






方法一:
尋找方法由AUSP-OBJEK = MCH1-CUOBJ_BM 取得AUSP-ATWRT (特性值)







TableMCH1















方法二:
1. TABLE INOB INOB-OBTAB = MCH1(TABLE而定)
2. INOB-CUOBJ = MCH1-CUOBJ_BM
3. 呼叫Functionkey值取得INOB-OBJEK = MCH1-MATNR + MCH1-CHARG (MATNR要補空格)






4. Call Function 'CLAF_CLASSIFICATION_OF_OBJECTS'














2009年9月1日 星期二

BAPI Create SO


Excel建入好初始資料後整批開立
這時發現所有的輸入條件都有key的情況下就是無法開立SO
經查證後為Excel上傳格式的問題..這部份要特別小心

我呼叫
BAPI_SALESORDER_CREATEFROMDATA來完成這項工作

但在使用這支BAPI時發生了一個小問題...
後來進Debug模式查後發現在PartnerKUNNR並無補0造成無法開立SO解決的方法為在Excel上傳時務必以Type C上傳至程式減少錯誤發生
在呼叫BAPI時最好能先查看BAPI內的TYPE是宣告什麼