Problema con BAPI_ENTRYSHEET_CREATE

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • fenixse7
    Junior Member
    • mar
    • 22

    #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!
  • Anthony Martinez
    Member
    • nov
    • 30

    #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.

    Comentario

    Trabajando...