BAPI_DELIVERYPROCESSING_EXEC
SAはこのBAPIのみを使用できます
複数の発注書を参照して納品書を作成します:BBP_INB_DELIVERY_CREATE(書き込むことができない品目には拡張が必要です)
1.バッチを書き込むことができません。変更するには、BAPI_OUTB_DELIVERY_CHANGEを呼び出す必要があります(数量単位を1回渡す必要がある場合があります。そうしないと、エラーVLBAPI 004 "ドキュメント&1アイテム&2(数量整合性チェック)のエラー"); WS_DELIVERY_UPDATEも報告されます。で書くことはできません
lt_request-extdelv_no = uv_dnを使用します。外部納品書番号を書き込むことはできません。WS_DELIVERY_UPDATEが変更されたときに書き込みます。
添付:
データ:ls_item TYPEbapiibdlvitemchg。
単一を選択lfimglgmng lfimg_flo lgmng_flo umvkz umvkn umrev
唇から
INTO(ls_item-dlv_qty、ls_item-dlv_qty_imunit、ls_item-del_qty_flo、ls_item-dlv_qty_st_flo、
ls_item-fact_unit_nom、ls_item-fact_unit_denom、ls_item-conv_fact)
WHERE vbeln = '0180001234'
AND posnr = '000010'。
共有する
2.「配信タイプが渡されません」というエラーが報告されます
その理由は、関数ME_EKPV_ARRAY_READがekpvのデータを返さず、ekpvが空であるかどうかを判別するためです。空の場合、実行されない一連の割り当てコード(配信タイプLFARTを含む)があります。
これはbapi自体のバグであり、メモはありません。
さらに、存在しない注文明細が入力された場合、このエラーも報告されます。
ここでEbelnが割り当てられます。後の再帰ループでは、読み取りテーブルがebeln ebelpを使用するため、ekpvの最終的な戻り値が空になります。
この関数にはオブジェクトlo_dbがあり、lo_dbにはカウンターとして属性mv_iterがあり、属性mt_dataはテーブルekpvからフェッチされたデータを格納します。そして、このオブジェクトはシングルトンです
したがって、bapiを繰り返し呼び出すときにmv_iterとmt_dataは自動的にクリアされないため、このbapiを2回呼び出すと、この時点でmv_iter = 2は再帰になりません(lt_intpuへの割り当ての影響を受けません)。この時点で実行は成功する可能性があります納品書を作成します
3.可用性チェックが構成されている場合、使用可能な在庫はI VL 150に報告され、Eがあります。
4.アイテムを指定できません。アイテムは10から累積されます。
実際の発送日(投稿日)
Bapiには、実際の納期を書き込むためのパラメータがありません。実際の納期を書き込まない場合は、投稿時に作成日が使用されます。
WS_DELIVERY_UPDATEまたはWS_DELIVERY_UPDATE_2を使用して投稿する場合、vbkok-wadat_istを使用して投稿日を書き込むことができます。
テーブルを直接変更する
デモ
関数zflg_dn_create。
* "------------------------------------------------ ----------------------
* "*"ローカルインターフェース:
* "インポート
* "VALUE(VBTYP)TYPE VBTYP
* "VALUE(VBELV)TYPE VBELN_VON
* "VALUE(LIFEX)TYPE ZDN_PLAN OPTIONAL
* "エクスポート
* "VALUE(RTYPE)TYPE BAPI_MTYPE
* "VALUE(RTMSG)TYPE BAPI_MSG
* "VALUE(VBELN)TYPE VBELN_VL
* "テーブル
* "IT_ITEM STRUCTURE ZDN_METHOD_S1
* "RETURN STRUCTURE BAPIRET2OPTIONAL
* "------------------------------------------------ ----------------------
zfmdatasave1'ZFLG_DN_CREATE '。
zfmdatasave2'B '。
*作成
データ:
bapideliciousrequestのようなlt_requestは、ヘッダー行で0になります。
bapideliciouscreateditemsのようなlt_createditemsは、ヘッダー行で0になります。
*変更
データ:
it_header_partner like bapidlvpartnerchg、 "配信:パートナーの変更
bapidlvdeadlnのテーブルのようなit_header_deadlines、 "配信期限
it_item_data like bapiobdlvitemchg、 "出荷ピッキングデータアイテムレベルの変更
it_item_control like bapiobdlvitemctrlchg、 "出荷品目レベルの管理データ
et_returnは、ヘッダー行のあるbapiret2のテーブルのようなものです。
it_item_data_splは、/ spe / bapiobdlvitemchgのテーブルのように、 "出荷ピッキングデータアイテムレベル(SPE)を変更します。
is_header_data like bapiobdlvhdrchg、 "出荷ピッキングデータヘッダーレベルを変更します
is_header_control like bapiobdlvhdrctrlchg、 "出荷ヘッダーレベルの制御データ
bapiobdlvhdrchg-deliv_numbのようなiv_delivery。「交货
データ:
lw_header_partner like bapidlvpartnerchg、 "配信:パートナーの変更
bapidlvdeadlnのようなlw_header_deadlines、 "配信期限
bapiobdlvitemchgのようなlw_item_data、 "出荷ピッキングデータアイテムレベルの変更
lw_item_control like bapiobdlvitemctrlchg、 "出荷品目レベルの管理データ
lw_return likebapiret2。 "パラメータを返す
データ:l_techn_controlタイプbapidlvcontrol。
データ:
ls_itemタイプbapiobdlvitemchg、
ls_item_tタイプbapiobdlvitemchg、
ls_item_controlタイプbapiobdlvitemctrlchg、
ls_deadlinesタイプbapidlvdeadln。
関数 'CONVERSION_EXIT_ALPHA_INPUT'を呼び出す
エクスポート
入力= vbelv
インポート
出力= vbelv。
lifexを変更するalpha_inputを実行します。
it_itemでループします。
lt_request-document_type = vbtyp。 "Bは注文書、Aは販売注文書を意味します
lt_request-document_numb = vbelv。 "参照注文番号
lt_request-document_item = it_item-posnv。 "参照注文アイテム番号
lt_request-plant = it_item-werks。
lt_request-stge_loc = it_item-lgort。
lt_request-quantity_sales_uom = it_item-lfimg。 "配送数量(利用可能な在庫数量が不足している場合、数量を書き留めることはできません)
lt_request-delivery_date = sy-datum。
lt_request-extdelv_no = lifex。 "複合請求書のためにリリースされたwangnl20170518の納品書(保管計画番号)chenylの外部識別_20170602
lt_request-date = sy-datum。
lt_request-time = sy-uzeit。
lt_requestを追加します。
エンドループ。
関数 'RV_DELIVERY_INIT'を呼び出します。
関数 'BAPI_DELIVERYPROCESSING_EXEC'を呼び出します
テーブル
リクエスト= lt_request
createditems = lt_createditems
return = return。
* 1.このBAPIにはバグがあり、一部のエラーはRETURNにならないため、RETURNが空になり、配送注文が正常に作成されない場合があります(販売注文が見つからない、販売注文が作成され、配送注文が作成されたなど)。作成済み)、または作成されていない可能性があります
テーブルlt_createditemsインデックス1を読み取ります。
vbeln = lt_createditems-document_numb。 "納品書番号
キータイプ= 'E'でテーブルリターンを読み取ります。
vbelnが初期でsy-subrcne 0でない場合。「バグがあります。保管場所が間違っていると、returnはエラーを返しますが、配送注文番号は生成されます。
関数 'BAPI_TRANSACTION_COMMIT'を呼び出す
エクスポート
待機= 'X'。
rtype = 'S'。
rtmsg = '納品書は正常に作成されました'。
*書き込み分割
関数 'RV_DELIVERY_INIT'を呼び出します。
*ヘッダー情報
is_header_data-deliv_numb = vbeln。 "納品書番号
is_header_control-deliv_numb = vbeln。
*元の10行のアイテム数を変更します
chargが初期ではないit_itemでループします。
lw_item_dataをクリアします。
lw_item_data-deliv_numb = vbeln。
lw_item_data-deliv_item = sy-tabix * 10. "元のラインアイテム
lw_item_data-dlv_qty = it_item-lfimg。
lw_item_data-dlv_qty_imunit = it_item-lfimg。
* lw_item_data-base_uom = 'TO'。 "基本単位
* lw_item_data-sales_unit = 'TO'。 "販売単位
lw_item_data-fact_unit_nom = 1. "SKUに変換された販売数量の分子(係数)
lw_item_data-fact_unit_denom = 1. "販売数量はSKU(除数)の値に変換されます
lw_item_data-batch = it_item-charg。「批次
lw_item_dataをit_item_dataに追加します。
lw_item_controlをクリアします。
lw_item_control-deliv_numb = vbeln。
lw_item_control-deliv_item = sy-tabix * 10. "元のラインアイテム
lw_item_control-chg_delqty = 'X'。 "数量変更フラグ
lw_item_controlをit_item_controlに追加します。
エンドループ。
it_item_data []が初期値でない場合。
関数 'BAPI_OUTB_DELIVERY_CHANGE'を呼び出します
エクスポート
header_data = is_header_data
header_control = is_header_control
配信= vbeln
テーブル
header_partner = it_header_partner
header_deadlines = it_header_deadlines
item_data = it_item_data
item_control = it_item_control
return = et_return
* ITEM_DATA_SPL = IT_ITEM_DATA_SPL
。
et_return []が初期の場合。
関数 'BAPI_TRANSACTION_COMMIT'を呼び出す
エクスポート
待機= 'X'。
endif。
タイプ= 'E'であるet_returnでループします。
メッセージIDet_return-id
タイプ「E」
番号et_return-番号
et_return-message_v1を使用
et_return-message_v2
et_return-message_v3
et_return-message_v4
rtmsgに。
エンドループ。
endif。
*SMS
lifexが初期でない場合。
it_itemでループします。
zsd001_itemを更新します
set dn = vbeln zt = '進行中'
ここで、dn_plan = lifexおよびdn_posnr = it_item-dn_posnrです。
エンドループ。
作業をコミットして待ちます。
endif。
vbelnを変更するalpha_outputを実行します。
そうしないと。
クリアvbeln。
関数 'BAPI_TRANSACTION_ROLLBACK'を呼び出します。
rtype = 'E'。
rtmsg = '納品書の作成に失敗しました:'。
戻り時にループします。
rtmsg = rtmsg && return-message。
エンドループ。
endif。
zfmdatasave2'R '。
エンドファンクション。
BAPI_OUTB_DELIVERY_CREATE_STO参照PO
BAPI_OUTB_DELIVERY_CREATE_SLS参照SO
発注書を参照して納品書を作成します。数量を転送する必要はありません。作成された納品書の数量は、ラインアイテムの数量ではなく、注文の約束された数量を指します。注文の約束された数量は、注文が作成されたときの在庫数量である場合があります。
全体として作成できます
コード
po create dn "add by cyl 2016/9/13
*判断p17
ztmm_po_lis2からcount(*)を選択します。ここで、ebeln = lisnumおよびbsart = 'EB'です。
sy-subrc = 0の場合。
シングルを選択
ekko〜bsart ekko〜lifnr ekko〜bukrs ekko〜inco2
ekpo〜ebelp retpo
ls_ekpo2の対応するフィールドに
ekkoから
ekko〜ebeln = ekpo〜ebelnの内部結合ekpo
ここで、ekko〜ebeln = lisnumです。
'+'のls_ekpo2-inco2をlv_bukrslv_kunnrlv_typeに分割します。
lv_kunnrを2桁左にシフトします。
ls_ekpo2-bsart = 'EB'およびls_ekpo2-lifnr = '0000010142'の場合
およびls_ekpo2-bukrs + 0(2)= '23'およびls_ekpo2-bukrsne'2300 'およびls_ekpo2-bukrsne' 2330 '
およびlv_bukrs + 0(2)= '23'およびlv_bukrsne'2300 'およびlv_bukrsne' 2330 '
および(lv_type = '委託販売品'またはlv_type = 'プロトタイプ')
ls_ekpo2-retpoは初期です。
lv_p17 = 'X'。
endif。
endif。
lv_p17 = 'X'の場合。
関数 'RV_DELIVERY_INIT'を呼び出します。
ebelnebelpを選択します
テーブルlt_ekpoの対応するフィールドに
ekpoから
ここで、ebeln = lisnumです。
lt_ekpoでls_ekpoにループします。
ls_bapidlvreftosto-ref_doc = ls_ekpo-ebeln。
ls_bapidlvreftosto-ref_item = ls_ekpo-ebelp。
ls_bapidlvreftostoをlt_bapidlvreftostoに追加します。
エンドループ。
関数 'BAPI_OUTB_DELIVERY_CREATE_STO'を呼び出します
インポート
配信= lv_vbeln
テーブル
stock_trans_items = lt_bapidlvreftosto
return = lt_return。
lv_vbelnが初期でない場合。
関数 'BAPI_TRANSACTION_COMMIT'を呼び出す
エクスポート
待機= 'X'。
備考 '発注書' lisnum '新しい配達注文番号' lv_vbelnを備考に連結します。
'Purchase Order' lisnum'Create a new delivery note number'lv_vbelnをls_logitem-remarkに連結します。
ls_logitem-msg_no = ls_logitem-msg_no +1。
ls_logitemを追加します。
そうしないと。
関数 'BAPI_TRANSACTION_ROLLBACK'を呼び出します。
テーブルlt_returnをキータイプ= 'E' id = 'VR'番号= '420'でls_returnに読み込みます。 "商品は配達されました
sy-subrc = 0の場合。
注釈「発注書」lisnum「新しい配達注文番号が作成されませんでした」を注釈に連結します。
'発注書' lisnum '新しい配達注文番号が作成されていません'をls_logitem-remarkに連結します。
ls_logitem-msg_no = ls_logitem-msg_no +1。
そうしないと。
text_code = '003'。
注釈「発注書」lisnum「配達注文の作成に失敗しました:」を注釈に連結します。
'Purchase Order' lisnum'Failed to create Delivery note: 'をls_logitem-remarkに連結します。
ls_logitem-msg_no = ls_logitem-msg_no +1。
lt_returnでls_returnにループします。ここで、type = 'E'またはtype = 'A'です。
remarkls_return-messageをremarkに連結します。
ls_logitem-remark = ls_return-メッセージ。
ls_logitem-msg_no = ls_logitem-msg_no +1。
エンドループ。
endif。
endif。
endif。
*終了シリンダー