Autor Tema: BAPI_PO_CREATE1  (Leído 15144 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado oscar

  • Administrador
  • Usuario Sr.
  • *****
  • Mensajes: 112
    • Ver Perfil
BAPI_PO_CREATE1
« en: 09 de Julio de 2007, 06:42:33 pm »
Con esta BAPI vamos a crearnos un pedido de Compras...


Primero rellenamos la Cabecera de la BAPI.
Código: [Seleccionar]
FORM rellenar_bapi_cab.

  CLEAR l_poheader.
  CLEAR l_poheaderx.

  l_poheader-comp_code    = ekko-bukrs.
  l_poheader-doc_type     = 'NB'.
  l_poheader-creat_date   = sy-datlo.
  l_poheader-created_by   = sy-uname.
  l_poheader-vendor       = ekko-lifnr.
  l_poheader-purch_org    = ekko-ekorg.
  l_poheader-pur_group    = ekko-ekgrp.
  l_poheader-doc_date     = sy-datum.


  l_poheaderx-comp_code   = 'X'.
  l_poheaderx-doc_type    = 'X'.
  l_poheaderx-creat_date  = 'X'.
  l_poheaderx-created_by  = 'X'.
  l_poheaderx-vendor      = 'X'.
  l_poheaderx-purch_org   = 'X'.
  l_poheaderx-pur_group   = 'X'.
  l_poheaderx-doc_date    = 'X'.

ENDFORM.                    " rellenar_bapi_cab

Ahora rellenamos las posiciones
Código: [Seleccionar]
FORM rellenar_bapi_pos.

  DATA: pos_rep LIKE ekpo-ebelp.

* Coger nombre material.
  SELECT SINGLE * FROM makt WHERE matnr = i_pedido-matnr
                              AND spras = sy-langu.
  SELECT SINGLE * FROM mara WHERE matnr = i_pedido-matnr.


  CLEAR pos_rep.
  LOOP AT i_pedido.
    CLEAR: l_t_poitem, l_t_poitemx, l_t_poschedule, l_t_poschedulex.
    ADD 10 TO pos_rep.

    l_t_poitem-po_item                  = pos_rep.
    l_t_poitem-short_text               = makt-maktx.
    l_t_poitem-material                 = i_pedido-matnr.
    l_t_poitem-plant                    = ekpo-werks.
    l_t_poitem-stge_loc                 = ekpo-lgort.
    l_t_poitem-quantity                 = i_pedido-menge.
    l_t_poitem-po_unit                  = mara-meins.
    l_t_poitem-item_cat                 = '2'.
    l_t_poitem-agreement                = i_pedido-konnr.
    l_t_poitem-agmt_item                = i_pedido-ktpnr.
    APPEND l_t_poitem.

    l_t_poitemx-po_item                 = pos_rep.
    l_t_poitemx-po_itemx                = 'X'.
    l_t_poitemx-short_text              = 'X'.
    l_t_poitemx-material                = 'X'.
    l_t_poitemx-plant                   = 'X'.
    l_t_poitemx-stge_loc                = 'X'.
    l_t_poitemx-quantity                = 'X'.
    l_t_poitemx-po_unit                 = 'X'.
    l_t_poitemx-item_cat                = 'X'.
    IF NOT i_pedido-konnr IS INITIAL.
      l_t_poitemx-agreement             = 'X'.
      l_t_poitemx-agmt_item             = 'X'.
    ENDIF.
    APPEND l_t_poitemx.

    l_t_poschedule-po_item        = pos_rep.
    l_t_poschedule-delivery_date  = i_pedido-eeind.
    l_t_poschedule-quantity       = i_pedido-menge.
    l_t_poschedule-deliv_time     = sy-uzeit.
    APPEND l_t_poschedule.

    l_t_poschedulex-po_item         = pos_rep.
    l_t_poschedulex-po_itemx        = 'X'.
    l_t_poschedulex-delivery_date   = 'X'.
    l_t_poschedulex-quantity        = 'X'.
    l_t_poschedulex-deliv_time      = 'X'.
    APPEND l_t_poschedulex.

ENDFORM.                    " rellenar_bapi_pos

Ejecutamos la BAPI.
Código: [Seleccionar]
FORM crear_pedido_compra .

  CALL FUNCTION 'BAPI_PO_CREATE1'
    EXPORTING
      poheader         = l_poheader
      poheaderx        = l_poheaderx
    IMPORTING
      exppurchaseorder = d_ebeln
    TABLES
      return           = l_t_return
      poitem           = l_t_poitem
      poitemx          = l_t_poitemx
      poschedule       = l_t_poschedule
      poschedulex      = l_t_poschedulex.


  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
ENDFORM.                    " crear_pedido_compra