Créer un DN de bon de livraison

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

 

Je suppose que tu aimes

Origine blog.csdn.net/cylcylcylcylwo/article/details/114014976
conseillé
Classement