Bapi_po_create - Extensionin

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • SAPING
    Senior Member
    • may
    • 199

    #1

    Bapi_po_create - Extensionin

    Hola.
    Agregue un campo ZZ a la tabla EKKO y necesito saber como usar la estructura EXTENSIONIN de la funcion BAPI_PO_CREATE para pasarle este nuevo campo-valor.
    Estuve buscando bastante pero no me queda claro como hacerlo.

    Si me pueden ayudar, joya!!...
  • crounly
    Senior Member
    • nov
    • 227

    #2
    Busca un poco mas...lo tienes en un post del mes pasado:

    http://codigoderetorno.blogspot.com.es/

    Comentario

    • SAPING
      Senior Member
      • may
      • 199

      #3
      Originalmente publicado por crounly
      Busca un poco mas...lo tienes en un post del mes pasado:

      http://www.mundosap.com/foro/showthread.php?t=64676
      Si, lo he visto.
      Pero no me queda 100% claro como hacerlo ya que primero es para la BAPI_PO_CREATE1, y despues que es para items.

      Viendo un poco la funcion, vi que tengo un tratamiento para header, que es lo que busco, donde usa una estructura BAPI_TE_PO_HEADER...
      La diferencia con el que vos me pasas es que esta estructura no posee el campo ZZ que agregue a la EKKO...
      No se si lo tengo que agregar yo, o que....
      Ese es mi problema... no se como completar esa estructura que solo posee el campo PO_NUMBER, que es el num de doc de venta...

      Entiendo que la EXTENSIONIN se debe completar con el nombre de la estructura de la bapi (bapi_te_po_header) en el campo STRUCTURE para hacer referencia a que extension usar, pero los valores no se como agregarlos a los campos VALUEPARTx...

      No se si me explico...

      Gracias por tu rta!

      Comentario

      • crounly
        Senior Member
        • nov
        • 227

        #4
        Tienes que añadir el campo a CI_EKKODB y a CI_EKKODBX ( este ultimo , mismo nombre pero CHAR 1 ).

        Yo solo he trabajado con posiciones , no con cabecera, pero funciona igual.

        En vez de:

        Código:
        DATA:
         bapi_te_mepoitem LIKE bapi_te_mepoitem,
         bapi_te_mepoitemx LIKE bapi_te_mepoitemx.
        Utiliza:

        Código:
        DATA:
         bapi_te_mepohead LIKE bapi_te_mepoheader,
         bapi_te_mepoiheadx LIKE bapi_te_mepoheaderx.
        Luego lo rellenas ( adapta a tu campo ):

        Código:
         
        bapi_te_mepohead-ZZRLDATE = '20040110'.
        bapi_te_mepohead-ZZRADATE = '20041210'.
        
        bapi_te_mepoheadX-ZZRLDATE = 'X'.
        bapi_te_mepoheadX-ZZRADATE = 'X'.
        
        MOVE 'BAPI_TE_MEPOHEADER'   TO T_EXTENSIONIN-STRUCTURE.
        MOVE T_BAPI_TE_MEPOHEADER TO T_EXTENSIONIN-VALUEPART1.
        APPEND T_EXTENSIONIN.
         
        MOVE 'BAPI_TE_MEPOHEADERX'    TO T_EXTENSIONIN-STRUCTURE.
        MOVE T_BAPI_TE_MEPOHEADERX TO T_EXTENSIONIN-VALUEPART1.
        APPEND T_EXTENSIONIN.
        Y T_EXTENSIONIN lo pasa al parametro EXTENSIONIN.

        Me cuentas si te ha funcionado. Suerte
        http://codigoderetorno.blogspot.com.es/

        Comentario

        • Roy Fredy
          Junior Member
          • nov
          • 8

          #5
          BAPI_PO_CREATE1 para creacion de ordenes de servicio

          Señores me pidieron crear una función rfc que utilise la bapi_po_create1 el principal error que tengo es que a la tercera ejecución me crea el numero de orden de compra de servicios , para orden de compra materiales si me funciona me crea a la primera ejecución la orden de compra .
          Se que el tema es recurrente pero cuento con su ayuda .
          Codigo
          ======
          function zfi_crea_ord_compr.
          *"----------------------------------------------------------------------
          *"*"Interfase local
          *" EXPORTING
          *" VALUE(W_PO_NUMBER) TYPE EKKO-EBELN
          *" TABLES
          *" T_CABECERA STRUCTURE ZFICORDEN
          *" T_DETALLE STRUCTURE ZFIDORDEN
          *" TI_LOG STRUCTURE BAPIRET2
          *"----------------------------------------------------------------------
          *&---------------------------------------------------------------------*
          *& Programa : ZFI_CREA_ORD_COMPR
          *& Objetivos : Crear Orden de Compra Materiales , Servicios
          *& Fecha : 26/09/2012
          *& Autor : XXXXXX -
          *&---------------------------------------------------------------------*
          *---------------------------------------------------------------------*
          * Tablas Internas
          *---------------------------------------------------------------------*
          tables: asmd, t030, zfimmoclis.
          "log de la bapi,
          types: begin of ty_log,
          type type bapiret2-type,
          id type bapiret2-id,
          number type bapiret2-number,
          message type bapiret2-message.
          types: end of ty_log.

          data: st_return type bapiret2,
          ti_return like standard table of st_return,
          st_log type ty_log,
          st_error type bapiret2,
          l_posnr like ekpo-ebelp,
          l_posic like ekpo-ebelp.

          data w_line(2) type n.

          "tablas internas que hara uso mi BAPI
          data: begin of t_cab_oc occurs 0.
          include structure bapimepoheader.
          data: end of t_cab_oc.

          data: begin of t_cabx_oc occurs 0.
          include structure bapimepoheaderx.
          data: end of t_cabx_oc.

          data: begin of t_crea_oc occurs 0.
          include structure bapimepoitem.
          data: end of t_crea_oc.

          data: begin of ti_detalle occurs 0.
          include structure zfidorden.
          data: end of ti_detalle.

          data: begin of ti_cabecera occurs 0.
          include structure zficorden.
          data: end of ti_cabecera.

          data: begin of t_creax_oc occurs 0.
          include structure bapimepoitemx.
          data: end of t_creax_oc.

          data: begin of t_return_oc occurs 0.
          include structure bapiret2.
          data: end of t_return_oc.

          data: begin of t_scd_oc occurs 0.
          include structure bapimeposchedule.
          data: end of t_scd_oc.

          data: begin of t_scdx_oc occurs 0.
          include structure bapimeposchedulx.
          data: end of t_scdx_oc.

          * Imputacion
          data: begin of t_account_oc occurs 0.
          include structure bapimepoaccount.
          data: end of t_account_oc.

          data: begin of t_accountx_oc occurs 0.
          include structure bapimepoaccountx.
          data: end of t_accountx_oc.

          " Condiciones
          data: begin of t_pocond_oc occurs 0.
          include structure bapimepocond.
          data: end of t_pocond_oc.

          data: begin of t_pocondx_oc occurs 0.
          include structure bapimepocondx.
          data: end of t_pocondx_oc.

          data: begin of t_poservices_oc occurs 0.
          include structure bapiesllc.
          data: end of t_poservices_oc.

          data: begin of t_posrvaccessvalues_oc occurs 0.
          include structure bapiesklc.
          data: end of t_posrvaccessvalues_oc.

          data:l_zlow type zpptab_const-zlow ,
          gl_corr type i.

          data: w_lifnr like lfa1-lifnr,
          w_zterm like lfb1-zterm.

          data:w_pos(10) type n,
          w_lin(2) type n,
          w_bklas like asmd-bklas,
          w_matkl like asmd-matkl,
          w_konts like t030-konts.

          data: lw_extensionin like bapiparex,
          lt_extensionin like table of bapiparex.

          data: w_packno like esll-packno,
          w_supackno like esll-sub_packno,
          w_indic type c.

          *********** inicio de programa


          refresh: t_return_oc.
          refresh: t_cab_oc,t_cabx_oc.

          clear: w_lifnr.
          loop at t_cabecera.

          if t_cabecera-stcd1 is initial.
          move: 'E' to st_log-type ."
          concatenate 'Ruc no ingresado: ' t_cabecera-stcd1 into st_log-message.
          append st_log to ti_log.
          else.

          select single lifnr into w_lifnr
          from lfa1 where stcd1 eq t_cabecera-stcd1.

          select single zterm into w_zterm
          from lfb1 where bukrs eq '400' and lifnr eq w_lifnr.

          if sy-subrc eq 0.
          clear: t_cab_oc,t_cabx_oc.
          t_cab_oc-vendor = w_lifnr.
          t_cab_oc-purch_org = t_cabecera-ekorg.
          t_cab_oc-comp_code = t_cabecera-bukrs.
          t_cab_oc-doc_type = t_cabecera-doc_type.
          t_cab_oc-pur_group = t_cabecera-ekgrp.
          t_cab_oc-currency = t_cabecera-waers.
          move sy-datum to t_cab_oc-doc_date.
          move sy-datum to t_cab_oc-creat_date.
          move sy-uname to t_cab_oc-created_by.
          move sy-langu to t_cab_oc-langu.
          * MOVE t_cabecera-zterm TO t_cab_oc-pmnttrms.
          move w_zterm to t_cab_oc-pmnttrms.
          append t_cab_oc.

          t_cabx_oc-vendor = 'X'.
          t_cabx_oc-purch_org = 'X'.
          t_cabx_oc-comp_code = 'X'.
          t_cabx_oc-doc_type = 'X'.
          t_cabx_oc-pur_group = 'X'.
          t_cabx_oc-doc_date = 'X'.
          t_cabx_oc-creat_date = 'X'.
          t_cabx_oc-created_by = 'X'.
          t_cabx_oc-langu = 'X'.
          t_cabx_oc-pmnttrms = 'X'.
          t_cabx_oc-currency = 'X'.
          append t_cabx_oc.

          clear: ti_detalle.
          refresh: ti_detalle.

          loop at t_detalle.
          move-corresponding t_detalle to ti_detalle.
          append ti_detalle.
          endloop.

          clear:
          t_crea_oc,
          t_creax_oc,
          t_scd_oc,
          t_scdx_oc,
          t_account_oc,
          t_accountx_oc,
          t_pocondx_oc,
          t_poservices_oc,
          t_posrvaccessvalues_oc.

          refresh:
          t_crea_oc,
          t_creax_oc,
          t_scd_oc,
          t_scdx_oc,
          t_account_oc,
          t_accountx_oc,
          t_pocondx_oc,
          t_poservices_oc,
          t_posrvaccessvalues_oc.

          *detalle de orden de compra por posicion
          clear: l_posnr,w_pos,w_lin, w_packno,w_supackno.

          loop at ti_detalle where conex eq t_cabecera-conex and service eq ''.

          clear:
          t_crea_oc,t_creax_oc,t_scd_oc,t_scdx_oc,t_account_ oc,
          t_accountx_oc,t_pocondx_oc,t_poservices_oc,t_posrv accessvalues_oc.

          if ( ti_detalle-knttp = 'K' or ti_detalle-knttp = 'F' ) and ti_detalle-epstp = 'F'.

          w_indic = 'S'.
          t_crea_oc-item_cat = '9'.
          t_creax_oc-item_cat = 'X'.
          * verificar tipo de imputacion F con orden interna

          clear: w_packno.
          select single max( packno ) into w_packno from esll.
          w_packno = w_packno + 1.
          w_supackno = w_packno + 1.

          t_crea_oc-quantity = '1' .
          t_crea_oc-conv_num1 = '1'.
          t_crea_oc-conv_den1 = '1'.
          t_crea_oc-price_unit = '1'."ti_detalle-menge. "cantidad base
          t_crea_oc-prnt_price = 'X'.
          t_crea_oc-unlimited_dlv = 'X'.
          t_crea_oc-gr_ind = 'X' .
          t_crea_oc-ir_ind = 'X' .
          t_crea_oc-gr_basediv = 'X'.
          t_crea_oc-pckg_no = w_packno.

          t_creax_oc-quantity = 'X' .
          t_creax_oc-conv_num1 = 'X'.
          t_creax_oc-conv_den1 = 'X'.
          t_creax_oc-price_unit = 'X'.
          t_creax_oc-prnt_price = 'X'.
          t_creax_oc-unlimited_dlv = 'X'.
          t_creax_oc-gr_ind = 'X' .
          t_creax_oc-ir_ind = 'X' .
          t_creax_oc-gr_basediv = 'X'.
          t_creax_oc-pckg_no = 'X'.

          elseif ti_detalle-knttp = 'K' and ti_detalle-epstp = ' '.

          if ti_detalle-ematn is not initial.
          t_crea_oc-material = ti_detalle-ematn.
          endif.
          t_creax_oc-material = 'X'.
          t_crea_oc-net_price = ti_detalle-netwr.
          t_creax_oc-net_price = ti_detalle-netwr.
          w_indic = 'M'.

          endif.

          l_posnr = l_posnr + 10.

          *Posiciones de pedido
          t_crea_oc-po_item = l_posnr.
          t_crea_oc-quantity = ti_detalle-menge.
          t_crea_oc-short_text = ti_detalle-maktx.
          t_crea_oc-acctasscat = ti_detalle-knttp. "'K'.
          t_crea_oc-po_unit = ti_detalle-meins.
          t_crea_oc-matl_group = ti_detalle-matkl.
          t_crea_oc-plant = ti_detalle-werks.
          * IF w_indic = 'S'.
          * t_crea_oc-quantity = '1' .
          * t_crea_oc-conv_num1 = '1'.
          * t_crea_oc-conv_den1 = '1'.
          * t_crea_oc-price_unit = '1'."ti_detalle-menge. "cantidad base
          * t_crea_oc-prnt_price = 'X'.
          * t_crea_oc-unlimited_dlv = 'X'.
          * t_crea_oc-gr_ind = 'X' .
          * t_crea_oc-ir_ind = 'X' .
          * t_crea_oc-gr_basediv = 'X'.
          * t_crea_oc-pckg_no = w_packno.
          * ENDIF.
          t_crea_oc-preq_name = sy-uname.
          t_crea_oc-tax_code = ti_detalle-mwskz.
          append t_crea_oc.

          *Flags de Posiciones de pedido
          t_creax_oc-po_item = l_posnr.
          t_creax_oc-quantity = 'X'.
          t_creax_oc-short_text = 'X'.
          t_creax_oc-acctasscat = 'X'.
          t_creax_oc-po_unit = 'X'.
          t_creax_oc-matl_group = 'X'.
          t_creax_oc-plant = 'X'.
          * IF w_indic = 'S'.
          * t_creax_oc-quantity = 'X' .
          * t_creax_oc-conv_num1 = 'X'.
          * t_creax_oc-conv_den1 = 'X'.
          * t_creax_oc-price_unit = 'X'.
          * t_creax_oc-prnt_price = 'X'.
          * t_creax_oc-unlimited_dlv = 'X'.
          * t_creax_oc-gr_ind = 'X' .
          * t_creax_oc-ir_ind = 'X' .
          * t_creax_oc-gr_basediv = 'X'.
          * t_creax_oc-pckg_no = 'X'.
          * ENDIF.
          t_creax_oc-preq_name = 'X'.
          t_creax_oc-tax_code = 'X'.
          append t_creax_oc.


          if w_indic = 'M'.
          *Imputacion de pedido
          t_account_oc-po_item = l_posnr.
          t_account_oc-creat_date = sy-datum .
          t_account_oc-costcenter = ti_detalle-kostl.
          t_account_oc-orderid = ti_detalle-aufnr.
          append t_account_oc.

          *Flags de imputacion
          t_accountx_oc-po_item = l_posnr.
          t_accountx_oc-po_itemx = 'X' .
          t_accountx_oc-creat_date = 'X' .
          t_accountx_oc-costcenter = 'X'.
          t_accountx_oc-orderid = 'X'.
          append t_accountx_oc.
          endif.

          * Distribucion de imputacion

          if w_indic = 'S'.

          w_pos = w_pos + 1.
          w_lin = w_lin + 1.

          t_posrvaccessvalues_oc-pckg_no = w_packno.
          t_posrvaccessvalues_oc-line_no = w_pos."'0000000001' .
          t_posrvaccessvalues_oc-serno_line = w_lin. "'01'.
          t_posrvaccessvalues_oc-percentage = '50'.
          t_posrvaccessvalues_oc-serial_no = w_lin. "'01'.
          t_posrvaccessvalues_oc-net_value = '1'. "'106'.
          t_posrvaccessvalues_oc-quantity = '1'. "'106'.
          append t_posrvaccessvalues_oc.

          else.

          t_scd_oc-po_item = l_posnr.
          t_scd_oc-delivery_date = sy-datum.
          t_scd_oc-quantity = ti_detalle-menge .
          t_scd_oc-deliv_time = sy-uzeit.
          append t_scd_oc.

          t_scdx_oc-po_item = l_posnr.
          t_scdx_oc-delivery_date = 'X'.
          t_scdx_oc-quantity = 'X'.
          t_scdx_oc-deliv_time = 'X'.
          append t_scdx_oc.

          t_pocond_oc-itm_number = l_posnr.
          t_pocond_oc-cond_value = ti_detalle-netpr. " t_pocond_oc
          t_pocond_oc-currency = t_cabecera-waers.
          append t_pocond_oc.

          t_pocondx_oc-itm_number = l_posnr.
          t_pocondx_oc-cond_value = 'X'.
          t_pocondx_oc-currency = 'X'.
          append t_pocondx_oc.

          endif.

          endloop .

          * Servicios encabezado
          t_poservices_oc-pckg_no = w_packno.
          t_poservices_oc-line_no = w_pos. "'0000000001' .
          t_poservices_oc-ext_line = '0000000000' .
          * t_poservices_oc-service = ti_detalle-service.
          t_poservices_oc-outl_level = '0'.
          t_poservices_oc-outl_no = ' '.
          t_poservices_oc-outl_ind = 'X'.
          t_poservices_oc-subpckg_no = w_supackno.
          t_poservices_oc-edition = '0000' .
          t_poservices_oc-ovf_tol = '0'.
          t_poservices_oc-gr_price = '0'.
          t_poservices_oc-from_line = '1'.
          t_poservices_oc-distrib = '1'. " '2'.
          t_poservices_oc-tax_code = ti_detalle-mwskz.
          append t_poservices_oc.

          clear: w_pos , w_lin,t_poservices_oc,l_posnr.
          w_pos = 1.

          clear: w_line.
          loop at ti_detalle where conex eq t_cabecera-conex and service ne ''.

          clear:t_poservices_oc.
          l_posnr = ti_detalle-buzei."
          w_pos = w_pos + 1.
          w_lin = w_lin + 10.
          w_line = w_line + 1.

          t_posrvaccessvalues_oc-pckg_no = w_supackno.
          t_posrvaccessvalues_oc-line_no = w_pos .
          t_posrvaccessvalues_oc-serno_line = w_line. "'01'.
          * t_posrvaccessvalues_oc-percentage = '25'.
          t_posrvaccessvalues_oc-serial_no = w_line."'01'."w_lin. "'01'.
          t_posrvaccessvalues_oc-net_value = '1'. "'53'.
          t_posrvaccessvalues_oc-quantity = '1'. "'53'.
          append t_posrvaccessvalues_oc.

          clear: w_bklas,w_matkl,w_konts.
          select single matkl bklas
          into (w_matkl, w_bklas) from asmd
          where asnum eq ti_detalle-service.

          if sy-subrc eq 0.
          select single konts
          into (w_konts) from t030
          where ktopl ='PCSA' and
          ktosl = 'GBB' and bwmod ='0002' and
          bklas eq w_bklas.
          endif.

          t_account_oc-po_item = l_posnr.
          t_account_oc-creat_date = sy-datum .
          t_account_oc-costcenter = ti_detalle-kostl.
          t_account_oc-orderid = ti_detalle-aufnr.
          *Flags de imputacion

          t_account_oc-serial_no = w_line. "'01'.
          t_account_oc-gl_account = w_konts.
          append t_account_oc.

          t_accountx_oc-serial_no = 'X'.
          t_accountx_oc-gl_account = 'X'.
          t_accountx_oc-po_item = l_posnr.
          t_accountx_oc-po_itemx = 'X' .
          t_accountx_oc-creat_date = 'X' .
          t_accountx_oc-costcenter = 'X'.
          t_accountx_oc-orderid = 'X'.
          append t_accountx_oc.

          * servicio 1 asociado al encabezado
          t_poservices_oc-pckg_no = w_supackno.
          t_poservices_oc-line_no = w_pos.
          t_poservices_oc-ext_line = w_lin. "'10' .
          t_poservices_oc-service = ti_detalle-service.
          t_poservices_oc-outl_level = '0'.
          t_poservices_oc-subpckg_no = '0000000000'.
          t_poservices_oc-edition = '0000' .
          t_poservices_oc-base_uom = 'EA'.
          t_poservices_oc-quantity = '1' .
          t_poservices_oc-price_unit = '1' .
          t_poservices_oc-ovf_tol = '0' .
          t_poservices_oc-gr_price = ti_detalle-gr_price. "212. PRECIO DEL SERVICIO
          t_poservices_oc-matl_group = w_matkl.
          t_poservices_oc-tax_code = ti_detalle-mwskz.
          append t_poservices_oc.

          endloop.

          clear: w_po_number.

          if w_indic = 'S'.
          call function 'BAPI_PO_CREATE1'
          exporting
          poheader = t_cab_oc "ok
          poheaderx = t_cabx_oc
          * no_price_from_po = 'X'
          importing
          exppurchaseorder = w_po_number
          tables
          return = t_return_oc
          poitem = t_crea_oc
          poitemx = t_creax_oc
          poaccount = t_account_oc
          poaccountx = t_accountx_oc
          poservices = t_poservices_oc
          posrvaccessvalues = t_posrvaccessvalues_oc.
          else.
          call function 'BAPI_PO_CREATE1'
          exporting
          poheader = t_cab_oc "ok
          poheaderx = t_cabx_oc
          importing
          exppurchaseorder = w_po_number "NUMERO DE orden de compra.
          tables
          return = t_return_oc
          poitem = t_crea_oc
          poitemx = t_creax_oc
          poschedule = t_scd_oc
          poschedulex = t_scdx_oc
          poaccount = t_account_oc
          poaccountx = t_accountx_oc
          pocond = t_pocond_oc
          pocondx = t_pocondx_oc.
          endif.
          if not w_po_number is initial.
          call function 'BAPI_TRANSACTION_COMMIT'
          exporting
          wait = 'X'.
          add 1 to gl_corr.
          clear:st_log.
          move: 'I' to st_log-type .",
          concatenate 'Orden de Pedido creado satisfactoriamente: ' w_po_number into st_log-message.
          " CONCATENATE 'Orden de compra:' w_indic into st_log-message.
          append st_log to ti_log.

          zfimmoclis-ebeln = w_po_number.
          zfimmoclis-bukrs = '400'.
          zfimmoclis-lifnr = w_lifnr.
          zfimmoclis-datum = sy-datum.
          zfimmoclis-uzeit = sy-uzeit.
          modify zfimmoclis.
          commit work.

          else.
          loop at t_return_oc.
          add 1 to gl_corr.
          clear:st_log.
          move: t_return_oc-type to st_log-type,
          t_return_oc-id to st_log-id,
          t_return_oc-number to st_log-number,
          t_return_oc-message to st_log-message.",
          append st_log to ti_log.
          endloop.
          endif.
          ************************************************** *********************************************
          else.
          move: 'E' to st_log-type."
          concatenate 'Proveedor Inexistente para el' t_cabecera-stcd1 'no permitido'
          into st_log-message separated by space.
          append st_log to ti_log.
          endif.
          endif.
          endloop.
          endfunction.
          adjunto las estructuras y un excel de los campos que contiene .



          Editado por última vez por Roy Fredy; 22/11/2012, 14:32:19.

          Comentario

          • Mauricio Hidalgo
            Senior Member
            • may
            • 481

            #6
            1° Tienes un user exit disponible en la BAPI BAPI_PO_CREATE1. Se llama EXIT_SAPL2012_001.

            2° La estructura EXTENSIONIN, la ocupas de la siguiente forma.
            STRUCTURE = 'IDENTIFICADOR'
            VALUEPART1 = <Valor para el Campo ZZ>

            3° En el user exit.
            Ya debes tener creado el documento, según la ubicación donde se encuentra este exit.
            Entonces leer la tabla EXTENSIONIN con STRUCTURE = 'IDENTIFICADOR' y actualizar la tabla EKKO con:

            UPDATE EKKO
            SET <CAMPO ZZ> = <VALUEPART1>
            WHERE EBELN = POHEADER-PO_NUMBER.


            En todo caso, la otra alternativa es que implementes una BADI usando la ME_PROCESS_PO_CUST.

            Pero con todo lo anterior mucho más simple sería que tras haber llamado la BAPI, hicieras un update de la tabla EKKO con el dato que necesitas insertar.

            Saludos y espero te sirva

            Comentario

            • Roy Fredy
              Junior Member
              • nov
              • 8

              #7
              Me sugirieron aplicarle la nota 736576

              El funcional aplico la nota respectiva pero persiste en el mismo error me dijeron que con la aplicación de esa nota se soluciona mi problema .
              Es necesario utilizar user exit , badi para la solución respectiva tomando en cuenta que los usuarios que van a ejecutar dicha función lo realizaran en forma continua ;espero su gentil apoyo indicándome cual es el camino mas idóneo.

              Adjunto el log respectivo de la funcion

              Comentario

              • crounly
                Senior Member
                • nov
                • 227

                #8
                revisa que estan todos los campos tanto en la CI_EKKODB y a CI_EKKODBX.

                pega por aqui como rellenas el EXTENSIONIN
                http://codigoderetorno.blogspot.com.es/

                Comentario

                • Roy Fredy
                  Junior Member
                  • nov
                  • 8

                  #9
                  no se como trabajar con la CI_EKKODB

                  E visualizado que tengo en la CI_EKKODB ciertos campos , que campos tendría que añadir tanto en la estructura , y que código agregaría en mi función .
                  Adjunto el código de la función rfc para ordenes de compra para que pueda ser revisado y que que código ustedes lo podrían añadir para lograr su ejecución de manera exitosa.

                  El codigo se puede abrir con libreoffice , openoffice listo para ser descargado , hasta se puede abrir con word , no es imagen de codigo si no denle click en donde figurar para descargar.
                  "El codigo esta en formato odt de Openoffice "

                  "img de mi estructura CI_EKKODB que campos tendria que añadir ???'
                  Editado por última vez por Roy Fredy; 22/11/2012, 14:35:42.

                  Comentario

                  • crounly
                    Senior Member
                    • nov
                    • 227

                    #10
                    No puedo ver e codigo, solo la imagen.

                    Has ampliado también CI_EKKODBX??
                    Tienes que ampliar también esa tabla con los mismos campos que en CI_EKKODB
                    pero de tipo XFELD ( es un CHAR de 1 ).

                    Necesitas ampliar esa tabla.

                    Amplias CI_EKKODB y CI_EKKODBX con los nuevos campos.

                    Y después rellenas EXTENSIONIN como te he indicado en otro post.

                    Tienes que añadir el campo a CI_EKKODB y a CI_EKKODBX ( este ultimo , mismo nombre pero CHAR 1 ).

                    Yo solo he trabajado con posiciones , no con cabecera, pero funciona igual.

                    En vez de:

                    Código:
                    DATA:
                    bapi_te_mepoitem LIKE bapi_te_mepoitem,
                    bapi_te_mepoitemx LIKE bapi_te_mepoitemx.

                    Utiliza:

                    Código:
                    DATA:
                    bapi_te_mepohead LIKE bapi_te_mepoheader,
                    bapi_te_mepoiheadx LIKE bapi_te_mepoheaderx.

                    Luego lo rellenas ( adapta a tu campo ):

                    Código:

                    bapi_te_mepohead-ZZRLDATE = '20040110'.
                    bapi_te_mepohead-ZZRADATE = '20041210'.

                    bapi_te_mepoheadX-ZZRLDATE = 'X'.
                    bapi_te_mepoheadX-ZZRADATE = 'X'.

                    MOVE 'BAPI_TE_MEPOHEADER' TO T_EXTENSIONIN-STRUCTURE.
                    MOVE T_BAPI_TE_MEPOHEADER TO T_EXTENSIONIN-VALUEPART1.
                    APPEND T_EXTENSIONIN.

                    MOVE 'BAPI_TE_MEPOHEADERX' TO T_EXTENSIONIN-STRUCTURE.
                    MOVE T_BAPI_TE_MEPOHEADERX TO T_EXTENSIONIN-VALUEPART1.
                    APPEND T_EXTENSIONIN.

                    Y T_EXTENSIONIN lo pasa al parametro EXTENSIONIN.

                    Me cuentas si te ha funcionado. Suerte
                    http://codigoderetorno.blogspot.com.es/

                    Comentario

                    • Roy Fredy
                      Junior Member
                      • nov
                      • 8

                      #11
                      E seguido sus instrucciones derrepente algo falta por eso solicito apoyo

                      Señores ante la prontitud de la entrega de esa función de parte del funcional responsable fijado por el para el día viernes 23 noviembre.
                      Pido a ustedes que si pudieran darse el tiempo de revisar con detenimiento el código respectivo ,añadirle el código faltante o que pasos me falta , que quisas no me halla dada cuenta debido a que soy un abaper junior .
                      Escribir a este mail para suministrarles el ID y la contraseña para poder acceder por el teamweaver abaperorfjb@outlook.com, espero contar con su apoyo debido que el funcional que me supervisa esta impaciente por el termino de dicha función.
                      Editado por última vez por Roy Fredy; 22/11/2012, 14:29:38.

                      Comentario

                      • Roy Fredy
                        Junior Member
                        • nov
                        • 8

                        #12
                        E seguido sus instrucciones derrepente algo falta por eso solicito apoyo

                        Señores ante la exigencia de la entrega de mi función rfc el cual debí haber encontrado la solución hace días , e procurado seguir sus instrucciones .
                        Solicito el apoyo de ustedes para que sea revisado mi codigo por ustedes, los valores de ingreso , o que porciones de código debo agregar , o que es lo que falta para lo cual escribo mi mail abaperorfjb@outlook.com para suministrarle el id y la contraseña para que puedan acceder por el teamweaver para que ustedes puedan revisar dicho codigo y corregirlo.
                        El uso del user exit me lo descarto el funcional es una funcion rfc se va a utilizar varias veces asi me comento , y no me esta permitido trabajar con BADi , ademas no e trabajado con Badis.

                        Comentario

                        • Roy Fredy
                          Junior Member
                          • nov
                          • 8

                          #13
                          No entiendo muy bien que hacer que añadiria en el User Exit

                          Señores soy un abaper que se esta iniciando por eso no se como seguir adecuadamente la guía que me tratan de dar .
                          Estoy publicando mi código si es que me lo pueden revisar espero gentilmente su ayuda , y podrían añadir el código respectivo si en caso utilizo user exit que código añadir me han indicado que no puedo trabajar con la CI_EKKODB por que pertenece a otra OT y a otro usuario fuera de la empresa en la que estoy.
                          Indicar en lo posible de manera detallada.

                          codigo de la funcion respectiva que esta en dev....

                          Comentario

                          • Roy Fredy
                            Junior Member
                            • nov
                            • 8

                            #14
                            Problema solucionado

                            No hubo necesidad de utilizar un user exit , una badi .
                            Solo modificar una linea alguien que sugirió que la pila de sap tiene un funcionamiento que debes saber.

                            Comentario

                            • SAPING
                              Senior Member
                              • may
                              • 199

                              #15
                              Originalmente publicado por crounly
                              Tienes que añadir el campo a CI_EKKODB y a CI_EKKODBX ( este ultimo , mismo nombre pero CHAR 1 ).

                              Yo solo he trabajado con posiciones , no con cabecera, pero funciona igual.

                              En vez de:

                              Código:
                              DATA:
                               bapi_te_mepoitem LIKE bapi_te_mepoitem,
                               bapi_te_mepoitemx LIKE bapi_te_mepoitemx.
                              Utiliza:

                              Código:
                              DATA:
                               bapi_te_mepohead LIKE bapi_te_mepoheader,
                               bapi_te_mepoiheadx LIKE bapi_te_mepoheaderx.
                              Luego lo rellenas ( adapta a tu campo ):

                              Código:
                               
                              bapi_te_mepohead-ZZRLDATE = '20040110'.
                              bapi_te_mepohead-ZZRADATE = '20041210'.
                              
                              bapi_te_mepoheadX-ZZRLDATE = 'X'.
                              bapi_te_mepoheadX-ZZRADATE = 'X'.
                              
                              MOVE 'BAPI_TE_MEPOHEADER'   TO T_EXTENSIONIN-STRUCTURE.
                              MOVE T_BAPI_TE_MEPOHEADER TO T_EXTENSIONIN-VALUEPART1.
                              APPEND T_EXTENSIONIN.
                               
                              MOVE 'BAPI_TE_MEPOHEADERX'    TO T_EXTENSIONIN-STRUCTURE.
                              MOVE T_BAPI_TE_MEPOHEADERX TO T_EXTENSIONIN-VALUEPART1.
                              APPEND T_EXTENSIONIN.
                              Y T_EXTENSIONIN lo pasa al parametro EXTENSIONIN.

                              Me cuentas si te ha funcionado. Suerte

                              Muchas gracias por la ayuda CROUNLY, ya lo pude realizar (no lo hice antes porque surgieron otras prioridades)

                              Lo unico para aclarar es que la bapi BAPI_PO_CREATE trabaja con la estructura "BAPI_TE_PO_HEADER" y no con la "BAPI_TE_MEPOHEADER".
                              A su vez, no es necesario colocar la "BAPI_TE_MEPOHEADERX".

                              Les dejo mi codigo por las dudas:
                              Código:
                               
                              FORM fr_fill_extensionin_tcga  USING    p_matnr
                                                                      p_preis.
                                DATA: bapi_te_mepohead LIKE bapi_te_mepoheader,
                                      lw_tcga TYPE zfid_tng_camp_i.
                              *************************************
                                READ TABLE gt_tcga INTO lw_tcga WITH KEY numero_os_evo = p_matnr
                                                                         montant = p_preis.
                                IF sy-subrc IS INITIAL.
                                  bapi_te_mepohead-zz_tcga = lw_tcga-zz_tcga.
                              
                                  MOVE 'BAPI_TE_PO_HEADER' TO w_extensionin-structure.
                                  MOVE bapi_te_mepohead TO w_extensionin-valuepart1.
                                  APPEND w_extensionin TO t_extensionin.
                              
                                ENDIF.
                              
                              ENDFORM.                    " FR_FILL_EXTENSIONIN_TCGA
                              Abrazo !!!

                              Comentario

                              Trabajando...