MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Problema con BAPI_ENTRYSHEET_CREATE (foro/showthread.php?t=62467)

fenixse7 02/05/12 14:16:04

Problema con BAPI_ENTRYSHEET_CREATE
 
Buenas gente, hace rato estoy tratando de crear una Hoja de entrada de servicio con esta BAPI, tuve demasiados errores pero el que ahora tengo es:

"No existe ninguna imputación para la línea de servicios 0000000010".

El codigo usado es:

TYPES: BEGIN OF t_pedido,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
bstyp TYPE ekpo-bstyp,
packno TYPE ekpo-packno,
END OF t_pedido.
DATA:
ls_header TYPE bapiessrc,
lt_return TYPE TABLE OF bapiret2,
lt_services TYPE TABLE OF bapiesllc,
ls_services TYPE bapiesllc,
lv_num_her TYPE bapiessr-sheet_no,
lv_doc_date TYPE bldat,
lv_post_date TYPE bldat,
lv_quantity TYPE mengev,
ls_rel_code TYPE bapimmpara-rel_code,
ls_return TYPE bapiret2,
lt_pedido TYPE TABLE OF t_pedido,
ls_pedido TYPE t_pedido,
lv_packno TYPE esll-packno,
lt_esll TYPE TABLE OF esll,
ls_esll TYPE esll,
ls_ekko TYPE ekko,
ls_ekpo TYPE ekpo,
ls_essr TYPE essr.

* Damos el formato necesario para las fechas y montos recibidos.
WRITE fecha_doc_hes TO lv_doc_date.
WRITE fecha_contab_hes TO lv_post_date.

* Convertimos las fechas en el formato aaaammdd
CALL FUNCTION 'CONVERSION_EXIT_PDATE_INPUT'
EXPORTING
input = lv_doc_date
IMPORTING
output = lv_doc_date.

CALL FUNCTION 'CONVERSION_EXIT_PDATE_INPUT'
EXPORTING
input = lv_post_date
IMPORTING
output = lv_post_date.

REPLACE FIRST OCCURRENCE OF ',' IN monto_neto_hes WITH '.'.
MOVE monto_neto_hes TO lv_quantity.

* Pasamos los datos de cabecera
PERFORM cargar_cabecera USING txt_breve_hes
nro_pedido
lv_doc_date
lv_post_date
CHANGING ls_header.

* Preparamos la entrysheetservices
* Insertamos una fila de líneas virtuales
ls_services-pckg_no = '1 '.
ls_services-line_no = '1 '.
*... marca esto como esquema
ls_services-outl_ind = 'X'.
ls_services-subpckg_no = '2'.
APPEND ls_services TO lt_services.

* Vamos a buscar los datos del pedido en SAP
SELECT ebeln ebelp bstyp packno
FROM ekpo INTO TABLE lt_pedido
WHERE ebeln = nro_pedido.

IF sy-subrc NE 0.
return = text-001. "El pedido no existe en SAP.
EXIT.
ENDIF.

READ TABLE lt_pedido INTO ls_pedido INDEX 1.
IF sy-subrc EQ 0.

lv_packno = ls_pedido-packno.

* Buscamos los servicios del pedido
CALL FUNCTION 'MS_READ_SERVICES'
EXPORTING
i_hpackno = lv_packno
TABLES
t_esll = lt_esll.

IF sy-subrc EQ 0.

* Solo cargamos los servicios en la estructura adecuada
* Solo se carga el primer servicio asociado al pedido.
READ TABLE lt_esll INTO ls_esll WITH KEY package = space.
IF sy-subrc EQ 0.
ls_services-pckg_no = '2'.
ls_services-line_no = ls_services-line_no + 1.
ls_services-outl_ind = ' '.
CLEAR ls_services-subpckg_no.
ls_services-quantity = lv_quantity.
ls_services-base_uom = ls_esll-meins.
ls_services-price_unit = ls_esll-peinh.
IF ls_esll-menge GT 0.
ls_services-gr_price = '1'."ls_esll-netwr / ls_esll-menge.
ENDIF.
ls_services-pln_pckg = ls_esll-packno.
ls_services-pln_line = ls_esll-introw.
ls_services-short_text = ls_esll-ktext1.
APPEND ls_services TO lt_services.
ENDIF.

ENDIF.

ENDIF.

* Creamos la hoja de servicio
CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE'
EXPORTING
entrysheetheader = ls_header
IMPORTING
entrysheet = lv_num_her
TABLES
entrysheetservices = lt_services
return = lt_return.

IF sy-subrc EQ 0.

LOOP AT lt_return INTO ls_return.
IF ls_return-type EQ 'E'.
return = ls_return-message.
EXIT.
ELSEIF ls_return-type EQ 'S'.
num_hoja_servicio = lv_num_her.
return = text-004. "Se creo la Hoja de Servicio en SAP.
ENDIF.
ENDLOOP.

CHECK lv_num_her IS NOT INITIAL.

* Aseguramos los cambios en la BD
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = ''
IMPORTING
return = ls_return.

SELECT SINGLE * INTO ls_ekko FROM ekko WHERE ebeln EQ nro_pedido.
MOVE ls_pedido TO ls_ekpo.
ls_essr-bktxt = txt_breve_doc.
* ls_essr-tbtwr = lv_quantity * 1.
* ls_essr-netwr = lv_quantity * 1.

* Grabamos el texto del documento: CAMPO ESSR-BKTXT - Texto breve del doc dentro de la HES
CALL FUNCTION 'MS_SERVICE_ENTRY'
EXPORTING
i_ekko = ls_ekko
i_ekpo = ls_ekpo
i_essr = ls_essr
i_without_screen = 'X'
EXCEPTIONS
fatal_error = 1
status_wrong = 2
cancel = 3
OTHERS = 4.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO return.
ENDIF.

* Cambiamos el estado de la hoja de entrada a LIBERADO
ls_rel_code = 'AH'. "Liberadores H. Serv
REFRESH lt_return.

CALL FUNCTION 'BAPI_ENTRYSHEET_RELEASE'
EXPORTING
entrysheet = lv_num_her
rel_code = ls_rel_code
TABLES
return = lt_return.

IF sy-subrc NE 0.
return = text-003. "Error al intentar ejecutar el cambio de estado de la HES.
EXIT.
ELSE.
LOOP AT lt_return INTO ls_return.
IF ls_return-type EQ 'E'.
return = ls_return-message.
EXIT.
ELSEIF ls_return-type EQ 'S'.
return = text-005. "Se creo la HES y se LIBERO.
ENDIF.
ENDLOOP.
ENDIF.

* Aseguramos el cambio de estado para la hoja de servicio.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = ''
IMPORTING
return = ls_return.

ELSE.
return = text-002. "Error al intentar ejecutar la creacion de la HES.
ENDIF.

ENDFUNCTION.

Desde ya muchas gracias!

Anthony Martinez 29/08/14 01:11:22

Actualizar ESSR-BKTXT
 
Hola fenixse7, he usado de ejemplo tu funcion MS_SERVICE_ENTRY pero no logro actualizar el campo ESSR-BKTXT, si tu lograste actualizarlo con alguna otra funcion o metodo te agradeceria me expongas como lo hiciste ?, gracias por tu respuesta.


Husos Horarios son GMT. La hora en este momento es 17:16:36.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web