BAPI_DELIVERYPROCESSING_EXEC
SA ne peut utiliser que cette BAPI
Créer un bon de livraison avec référence à plusieurs bons de commande : BBP_INB_DELIVERY_CREATE (une amélioration est requise pour les articles qui ne peuvent pas être écrits)
1. Le lot ne peut pas être écrit , vous devez appeler BAPI_OUTB_DELIVERY_CHANGE pour le modifier ( peut-être que l'unité de quantité doit être passée une fois, sinon elle rapportera une erreur VLBAPI 004 "Erreur dans le document & 1 article & 2 (contrôle de cohérence de quantité)" ) ; WS_DELIVERY_UPDATE également ne peut pas être écrit
Utilisez lt_request-extdelv_no = uv_dn. Impossible d'écrire le numéro du bon de livraison externe, écrivez-le lorsque WS_DELIVERY_UPDATE est modifié
Ci-joint:
DONNÉES: ls_item TYPE bapiibdlvitemchg.
CHOISIR UNIQUE lfimg lgmng lfimg_flo lgmng_flo umvkz umvkn umrev
DES lèvres
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)
O vbeln = '0180001234'
ET posnr = '000010'.
Partagez-le
2. Une erreur "Aucun type de livraison n'est transmis" est signalée
La raison en est que la fonction ME_EKPV_ARRAY_READ ne renvoie pas les données d'ekpv, et elle déterminera si ekpv est vide. S'il est vide, il y aura une série de codes d'affectation (y compris le type de livraison LFART) qui ne sera pas exécutée.
Il s'agit d'un bug dans bapi lui-même, et il n'y a pas de note.
En outre, si une ligne de commande inexistante est saisie, cette erreur sera également signalée.
Ebeln est assigné ici. Dans la boucle récursive plus tard, la table de lecture utilise ebeln ebelp, donc le retour final de ekpv sera vide.
Il y a un objet lo_db dans cette fonction, lo_db a un attribut mv_iter comme compteur et l'attribut mt_data stocke les données extraites de la table ekpv. Et cet objet est singleton
Ainsi, mv_iter et mt_data ne seront pas automatiquement effacés lors de l'appel à bapi à plusieurs reprises, donc si vous appelez ce bapi pour la deuxième fois, mv_iter = 2 n'entrera pas en récursivité à ce moment (il ne sera pas affecté par l'affectation à lt_intpu), et le l'exécution peut être réussie à ce moment Créer un bon de livraison
3. Si le contrôle de disponibilité est configuré, l'inventaire disponible sera signalé à I VL 150, et il y a un E
4. Impossible de spécifier l'élément, l'élément est accumulé à partir de 10
Date d'expédition réelle (date comptable)
Bapi n'a pas de paramètres pour écrire la date de livraison réelle. Si vous n'écrivez pas la date de livraison réelle, la date de création est utilisée lors de la validation.
Lorsque vous publiez à l'aide de WS_DELIVERY_UPDATE ou WS_DELIVERY_UPDATE_2, vous pouvez écrire la date de publication via vbkok-wadat_ist
Changer directement la table
DEMO
fonction zflg_dn_create.
* "------------------------------------------------ ----------------------
* "*" Interface locale:
* "IMPORTATION
* "VALUE (VBTYP) TYPE VBTYP
* "VALUE (VBELV) TYPE VBELN_VON
* "VALUE (LIFEX) TYPE ZDN_PLAN FACULTATIF
* "EXPORTATION
* "VALUE (RTYPE) TYPE BAPI_MTYPE
* "VALUE (RTMSG) TYPE BAPI_MSG
* "VALUE (VBELN) TYPE VBELN_VL
*" LES TABLES
* "IT_ITEM STRUCTURE ZDN_METHOD_S1
* "STRUCTURE DE RETOUR BAPIRET2 EN OPTION
* "------------------------------------------------ ----------------------
zfmdatasave1 'ZFLG_DN_CREATE'.
zfmdatasave2 «B».
*créer
Les données:
lt_request comme bapideliciousrequest se produit 0 avec la ligne d'en-tête,
lt_createditems comme bapideliciouscreateditems se produit à 0 avec la ligne d'en-tête.
*modifier
Les données:
it_header_partner comme table de bapidlvpartnerchg, "Livraison: changement de partenaire
it_header_deadlines comme le tableau de bapidlvdeadln, "Délai de livraison
it_item_data comme table de bapiobdlvitemchg, "modifier le niveau de l'élément de données de prélèvement de livraison sortante
it_item_control comme table de bapiobdlvitemctrlchg, "Données de contrôle au niveau de l'élément de livraison sortante
et_return comme table de bapiret2 avec ligne d'en-tête, "Paramètres de retour
it_item_data_spl comme la table de / spe / bapiobdlvitemchg, "modifier le niveau de l'élément de données de prélèvement des livraisons sortantes (SPE)
is_header_data comme bapiobdlvhdrchg, "modifier le niveau d'en-tête des données de prélèvement des livraisons sortantes
is_header_control comme bapiobdlvhdrctrlchg, "Données de contrôle au niveau de l'en-tête de livraison sortante
iv_delivery comme bapiobdlvhdrchg-deliv_numb. "交货
Les données:
lw_header_partner comme bapidlvpartnerchg, "Livraison: changement de partenaire
lw_header_deadlines comme bapidlvdeadln, "Délai de livraison
lw_item_data comme bapiobdlvitemchg, "modifier le niveau de l'élément de données de prélèvement de livraison sortante
lw_item_control comme bapiobdlvitemctrlchg, "Données de contrôle au niveau de l'élément de livraison sortante
lw_return comme bapiret2. "Paramètres de retour
données: l_techn_control type bapidlvcontrol.
Les données:
ls_item type bapiobdlvitemchg,
ls_item_t type bapiobdlvitemchg,
ls_item_control type bapiobdlvitemctrlchg,
ls_deadlines tapez bapidlvdeadln.
appeler la fonction 'CONVERSION_EXIT_ALPHA_INPUT'
exportation
entrée = vbelv
importation
sortie = vbelv.
effectuer alpha_input en changeant lifex.
boucle à it_item.
lt_request-document_type = vbtyp. "B signifie bon de commande, Une commande client
lt_request-document_numb = vbelv. "Numéro de commande de référence
lt_request-document_item = it_item-posnv. "Numéro d'article de la commande de référence
lt_request-plant = it_item-werks.
lt_request-stge_loc = it_item-lgort.
lt_request-quantity_sales_uom = it_item-lfimg. "Quantité livrée (la quantité ne peut pas être écrite lorsque la quantité disponible en stock est insuffisante)
lt_request-delivery_date = sy-datum.
lt_request-extdelv_no = lifex. "Identification externe du bon de livraison (numéro de plan de stockage) chenyl pour wangnl 20170518 libéré pour facturation combinée_20170602
lt_request-date = sy-datum.
lt_request-time = sy-uzeit.
ajoutez lt_request.
endloop.
appelez la fonction 'RV_DELIVERY_INIT'.
appeler la fonction 'BAPI_DELIVERYPROCESSING_EXEC'
les tables
request = lt_request
createditems = lt_createditems
return = retour.
* 1. Cette BAPI a des bogues, certaines erreurs ne seront pas RETURN, donc RETURN est vide et le bon de livraison peut ne pas être créé avec succès (par exemple, la commande client est introuvable, la commande client a été créée et le bon de livraison a été créé), ou il peut ne pas être créé
lire la table lt_createditems index 1.
vbeln = lt_createditems-document_numb. "Numéro du bon de livraison
lire le retour de table avec le type de clé = 'E'.
si vbeln n'est pas initial et sy-subrc ne 0. "Il y a un bogue, lorsque l'emplacement de stockage est erroné, return renverra une erreur, mais le numéro de bon de livraison sera généré
appeler la fonction 'BAPI_TRANSACTION_COMMIT'
exportation
attendre = 'X'.
rtype = 'S'.
rtmsg = 'Le bon de livraison a été créé avec succès'.
* Écriture fractionnée
appelez la fonction 'RV_DELIVERY_INIT'.
* Informations d'en-tête
is_header_data-deliv_numb = vbeln. "Numéro du bon de livraison
is_header_control-deliv_numb = vbeln.
* Modifier le nombre d'éléments dans les 10 lignes d'origine
boucle à it_item où charg n'est pas initial.
effacez lw_item_data.
lw_item_data-deliv_numb = vbeln.
lw_item_data-deliv_item = sy-tabix * 10. "Élément de campagne d'origine
lw_item_data-dlv_qty = it_item-lfimg.
lw_item_data-dlv_qty_imunit = it_item-lfimg.
* lw_item_data-base_uom = 'TO'. "Unité de base
* lw_item_data-sales_unit = 'TO'. "Unité de vente
lw_item_data-fact_unit_nom = 1. "Le numérateur (facteur) de la quantité de ventes convertie en SKU
lw_item_data-fact_unit_denom = 1. "La quantité des ventes est convertie en valeur de SKU (diviseur)
lw_item_data-batch = it_item-charg. "批次
ajoutez lw_item_data à it_item_data.
effacez lw_item_control.
lw_item_control-deliv_numb = vbeln.
lw_item_control-deliv_item = sy-tabix * 10. "Élément de campagne d'origine
lw_item_control-chg_delqty = 'X'. "Indicateur de modification de quantité
ajoutez lw_item_control à it_item_control.
endloop.
si it_item_data [] n'est pas initial.
appeler la fonction 'BAPI_OUTB_DELIVERY_CHANGE'
exportation
header_data = is_header_data
header_control = is_header_control
livraison = vbeln
les tables
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
.
si et_return [] est initial.
appeler la fonction 'BAPI_TRANSACTION_COMMIT'
exportation
attendre = 'X'.
fin si.
boucle à et_return où type = 'E'.
identifiant du message et_return-id
type 'E'
nombre et_return-number
avec et_return-message_v1
et_return-message_v2
et_return-message_v3
et_return-message_v4
dans rtmsg.
endloop.
fin si.
*SMS
si lifex n'est pas initial.
boucle à it_item.
mettre à jour zsd001_item
set dn = vbeln zt = 'en cours'
où dn_plan = lifex et dn_posnr = it_item-dn_posnr.
endloop.
engagez-vous et attendez.
fin si.
effectuer alpha_output en changeant vbeln.
autre.
effacer vbeln.
appelez la fonction 'BAPI_TRANSACTION_ROLLBACK'.
rtype = 'E'.
rtmsg = 'Impossible de créer le bon de livraison:'.
boucle au retour.
rtmsg = rtmsg && message de retour.
endloop.
fin si.
zfmdatasave2 'R'.
endfunction.
BAPI_OUTB_DELIVERY_CREATE_STO参考 PO
BAPI_OUTB_DELIVERY_CREATE_SLS参考 SO
Créez un bon de livraison en référence à la commande d'achat et il n'est pas nécessaire de transférer la quantité. La quantité du bon de livraison créée fait référence à la quantité promise de la commande au lieu de la quantité de l'article. La quantité promise de la commande peut être la quantité en stock lors de la création de la commande.
Peut être créé dans son ensemble
Code
po create dn "ajouter par cyl 2016/9/13
* Jugement p17
sélectionnez count (*) dans ztmm_po_lis2 où ebeln = lisnum et bsart = 'EB'.
si sy-subrc = 0.
sélectionner un seul
ekko ~ bsart ekko ~ lifnr ekko ~ bukrs ekko ~ inco2
ekpo ~ ebelp retpo
dans les champs correspondants de ls_ekpo2
depuis ekko
jointure interne ekpo sur ekko ~ ebeln = ekpo ~ ebeln
où ekko ~ ebeln = lisnum.
diviser ls_ekpo2-inco2 à '+' en lv_bukrs lv_kunnr lv_type.
décale lv_kunnr à gauche de 2 places.
si ls_ekpo2-bsart = 'EB' et ls_ekpo2-lifnr = '0000010142'
et ls_ekpo2-bukrs + 0 (2) = '23' et ls_ekpo2-bukrs ne '2300' et ls_ekpo2-bukrs ne '2330'
et lv_bukrs + 0 (2) = '23' et lv_bukrs ne '2300' et lv_bukrs ne '2330'
et (lv_type = 'Consignment' ou lv_type = 'Prototype')
et ls_ekpo2-retpo est initial.
lv_p17 = 'X'.
fin si.
fin si.
si lv_p17 = 'X'.
appelez la fonction 'RV_DELIVERY_INIT'.
sélectionnez ebeln ebelp
dans les champs correspondants de la table lt_ekpo
depuis ekpo
où ebeln = lisnum.
boucle à lt_ekpo dans ls_ekpo.
ls_bapidlvreftosto-ref_doc = ls_ekpo-ebeln.
ls_bapidlvreftosto-ref_item = ls_ekpo-ebelp.
ajoutez ls_bapidlvreftosto à lt_bapidlvreftosto.
endloop.
appeler la fonction 'BAPI_OUTB_DELIVERY_CREATE_STO'
importation
livraison = lv_vbeln
les tables
stock_trans_items = lt_bapidlvreftosto
return = retour_lt.
si lv_vbeln n'est pas initial.
appeler la fonction 'BAPI_TRANSACTION_COMMIT'
exportation
attendre = 'X'.
concaténer remarque 'commande d'achat' lisnum 'créer un nouveau numéro de commande de livraison' lv_vbeln en remarque.
concaténer'Ordre d'achat 'lisnum'Créez un nouveau numéro de bon de livraison' lv_vbeln dans ls_logitem-remarque.
ls_logitem-msg_no = ls_logitem-msg_no + 1.
ajoutez ls_logitem.
autre.
appelez la fonction 'BAPI_TRANSACTION_ROLLBACK'.
lire la table lt_return dans ls_return avec la clé type = 'E' id = 'VR' number = '420'. "Les marchandises ont été livrées
si sy-subrc = 0.
concaténer remarque «commande d'achat» lisnum «aucun nouveau numéro de commande de livraison n'a été créé» en remarque.
concaténer "commande d'achat" lisnum "aucun nouveau numéro de commande de livraison créé" dans ls_logitem-remarque
ls_logitem-msg_no = ls_logitem-msg_no + 1.
autre.
text_code = '003'.
concaténer remarque 'commande d'achat' lisnum 'Impossible de créer un bon de livraison:' en remarque.
concatenate'Ordre d'achat 'lisnum'Echec de création du bon de livraison:' dans ls_logitem-remarque.
ls_logitem-msg_no = ls_logitem-msg_no + 1.
boucle à lt_return dans ls_return où type = 'E' ou type = 'A'.
concaténer la remarque ls_return-message en remarque.
ls_logitem-remarque = ls_return-message.
ls_logitem-msg_no = ls_logitem-msg_no + 1.
endloop.
fin si.
fin si.
fin si.
* Cylindre de fin