Inicio > ABAP/4, BAPIs > Crear hoja de entrada de servicio con BAPI_ENTRYSHEET_CREATE

Crear hoja de entrada de servicio con BAPI_ENTRYSHEET_CREATE

Caso: se busca crear una hoja de entrada de servicios con la BAPI_ENTRYSHEET_CREATE, emulando la ME81n, sobre un pedido de servicios. Es un caso simple, adjunto abajo algunos links por si necesitan ver algo más.

La nota importante es que, si se ejecuta la BAPI luego de la creación del pedido, hay que ejecutar la función ME_STATISTICS_TABLES_REFRESH antes de la creación de la hoja de servicios, ya que sino tira un DUMP de registros duplicados (ITAB_DUPLICATE_KEY en SAPLEINS, LEINSF3I, XMCEKPO_CUT_LIS).

FORM crear_hoja USING p_ebeln TYPE ebeln
CHANGING p_hoja TYPE bapiessr-sheet_no.

* Selecciona item de pedido
DATA: BEGIN OF t_ped OCCURS 0,
ebeln TYPE ekko-ebeln, " Pedido
ebelp TYPE ekpo-ebelp, " Iten del pedido
txz01 TYPE essr-txz01, " Texto de la hoja de entrada de serv
dlort TYPE essr-dlort, " Local de Prest Servicios
lzvon TYPE essr-lzvon, " Periodo de
lzbis TYPE essr-lzbis, " Periodo hasta
sbnamag TYPE essr-sbnamag, " Resp Interno
packno TYPE ekpo-packno, " paquete de servivio
END OF t_ped.

DATA: t_uesll TYPE esll OCCURS 0 WITH HEADER LINE,
lc_mensaje TYPE string.

DATA: po_entrysheetheader TYPE bapiessrc,
po_entrysheet TYPE bapiessr-sheet_no,
po_services TYPE bapiesllc OCCURS 0 WITH HEADER LINE,
lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.

SELECT * FROM ekpo
INTO CORRESPONDING FIELDS OF TABLE t_ped
WHERE ebeln = p_ebeln.

LOOP AT t_ped.
t_ped-lzvon = sy-datum.
t_ped-lzbis = sy-datum.
t_ped-sbnamag = sy-uname.
MODIFY t_ped.
ENDLOOP.

LOOP AT t_ped.

REFRESH: po_services, t_uesll.
* busca los servicios del item de pedido
CALL FUNCTION ‘MS_READ_SERVICES’
EXPORTING
i_hpackno = t_ped-packno
TABLES
t_esll = t_uesll.

CHECK NOT t_uesll[] IS INITIAL.

* Llena tabla de cabecera y detalle de hoja de entrada de servicio
CLEAR po_entrysheetheader.
po_entrysheetheader-po_number = t_ped-ebeln.
po_entrysheetheader-po_item = t_ped-ebelp.
po_entrysheetheader-begdate = sy-datum.
po_entrysheetheader-enddate = sy-datum.
po_entrysheetheader-pckg_no = ‘1’.
po_entrysheetheader-person_int = t_ped-sbnamag.
po_entrysheetheader-short_text = t_ped-txz01.
po_entrysheetheader-location = t_ped-dlort.
po_entrysheetheader-acceptance = ‘X’.
po_entrysheetheader-doc_date = sy-datum.
po_entrysheetheader-post_date = sy-datum.

CLEAR po_services.
po_services-pckg_no = ‘1’.
po_services-line_no = ‘1’.
po_services-outl_ind = ‘X’.
po_services-subpckg_no = ‘2’.
po_services-quantity = ‘1’.
APPEND po_services.

LOOP AT t_uesll WHERE package IS INITIAL.
po_services-pckg_no = ‘2’.
po_services-line_no = po_services-line_no + 1.
po_services-outl_ind = ‘ ‘.
CLEAR po_services-subpckg_no.
po_services-quantity = t_uesll-menge.
po_services-base_uom = t_uesll-meins.
po_services-price_unit = t_uesll-peinh.
IF t_uesll-menge GT 0.
po_services-gr_price = t_uesll-netwr / t_uesll-menge.
ENDIF.
po_services-pln_pckg = t_uesll-packno.
po_services-pln_line = t_uesll-introw.
po_services-short_text = t_uesll-ktext1.
APPEND po_services.
ENDLOOP.

ENDLOOP.

CALL FUNCTION ‘ME_STATISTICS_TABLES_REFRESH’
EXPORTING
i_ebeln = p_ebeln.

* BAPI para crear hoja de entrada de servicios
CALL FUNCTION ‘BAPI_ENTRYSHEET_CREATE’
EXPORTING
entrysheetheader = po_entrysheetheader
IMPORTING
entrysheet = po_entrysheet
TABLES
entrysheetservices = po_services
return = lt_return.

IF po_entrysheet IS NOT INITIAL.

* Informo la Hoja de servicios generada
p_hoja = po_entrysheet.
CONCATENATE ‘Generada y liberada Hoja de Entrada de Servicios:’ po_entrysheet ‘ ‘ INTO lc_mensaje.
MESSAGE : lc_mensaje TYPE ‘I’.

ELSE.
PERFORM visualiza_log_ejecucion TABLES lt_return.
ENDIF.

ENDFORM. "crear_hoja

FORM visualiza_log_ejecucion TABLES p_return TYPE tty_bapiret2.
DATA:
lt_log TYPE TABLE OF string WITH HEADER LINE.

*PREPARA LOG
CLEAR lt_log[].

LOOP AT p_return.

CLEAR lt_log.

CONCATENATE p_return-type(1)
‘-‘
p_return-id(20)
‘-‘
p_return-number(3)
‘-‘
p_return-message(100)
‘-‘
p_return-message_v1(50)
INTO lt_log SEPARATED BY space.

APPEND lt_log.

ENDLOOP. "F1_RETURN
*MUESTRA LOG
CALL FUNCTION ‘POPUP_WITH_TABLE’
EXPORTING
endpos_col = 170
endpos_row = 20
startpos_col = 10
startpos_row = 5
titletext = ‘LOG de ejecución’
TABLES
valuetab = lt_log
EXCEPTIONS
break_off = 1
OTHERS = 2.

ENDFORM. "visualiza_log_ejecución

Links:

http://scn.sap.com/thread/1006844

http://www.sap4.com/wiki/index.php?title=BAPI_ENTRYSHEET_CREATE

http://www.mundosap.com/foro/showthread.php?t=62467

http://www.mundosap.com/foro/showthread.php?t=62347

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: