#1
|
|||
|
|||
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! |
#2
|
|||
|
|||
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.
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|