movimiento facturas xml en fondo

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • romario2
    Senior Member
    • abr
    • 233

    #1

    movimiento facturas xml en fondo

    Hola,
    tengo un programa abap que mueve facturas .xml de una carpeta a otra.
    Cuando ejecuto el report de forma manual va perfecto. En cambio, si lo hago en fondo, por un job, no se procesa correctamente la factura.

    Alguien me puede ayudar, es un tema urgente.
    Gracias de antemano


    codigo relacionado:

    CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
    EXPORTING
    dir_name = eps_dir
    * file_mask = 'Acuse_4400000395_v2.xml'
    TABLES
    dir_list = it_epsdir_list
    EXCEPTIONS
    invalid_eps_subdir = 1
    sapgparam_failed = 2
    build_directory_failed = 3
    no_authorization = 4
    read_directory_failed = 5
    too_many_read_errors = 6
    empty_directory_list = 7
    OTHERS = 8.


    ****************
    EPS_GET_DIRECTORY_LISTING
    **************

    DATA: lv_eps_subdir LIKE epsf-epssubdir.

    * authority check
    IF dir_name(4) = gc_trans_dir. " check TMS authority
    PERFORM check_trans_read_authority.
    IF sy-subrc <> 0.
    RAISE no_authorization.
    ENDIF.
    ELSE.
    PERFORM check_ftp_authority.
    IF sy-subrc <> 0.
    RAISE no_authorization.
    ENDIF.
    ENDIF.

    * expand EPS subdirectory names
    IF dir_name = space. " assume files in EPS/in
    dir_name = gc_eps_in.
    ENDIF.
    IF dir_name = gc_eps_in OR " get full directory name
    dir_name = gc_eps_out OR
    dir_name = gc_eps_log OR
    dir_name(4) = gc_trans_dir.
    lv_eps_subdir = dir_name.
    CALL FUNCTION 'EPS_GET_DIRECTORY_PATH'
    EXPORTING
    eps_subdir = lv_eps_subdir
    dir_name = dir_name
    IMPORTING
    dir_name = dir_name
    EXCEPTIONS
    invalid_eps_subdir = 01
    sapgparam_failed = 02
    build_directory_failed = 03.
    CASE sy-subrc.
    WHEN 01.
    RAISE invalid_eps_subdir.
    WHEN 02.
    RAISE sapgparam_failed.
    WHEN 03.
    RAISE build_directory_failed.
    ENDCASE.
    ENDIF.

    * get directory listing
    CALL 'C_DIR_READ_FINISH' " just to be sure
    ID 'ERRNO' FIELD file-errno
    ID 'ERRMSG' FIELD file-errmsg.

    CALL 'C_DIR_READ_START'
    ID 'DIR' FIELD dir_name
    ID 'FILE' FIELD file_mask
    ID 'ERRNO' FIELD file-errno
    ID 'ERRMSG' FIELD file-errmsg.
    IF sy-subrc <> 0.
    RAISE read_directory_failed.
    ENDIF.

    REFRESH dir_list.
    CLEAR file_counter.
    CLEAR error_counter.
    DO.
    CLEAR file.
    CLEAR dir_list.
    CALL 'C_DIR_READ_NEXT'
    ID 'TYPE' FIELD file-type
    ID 'NAME' FIELD file-name
    ID 'LEN' FIELD file-len
    ID 'OWNER' FIELD file-owner
    ID 'MTIME' FIELD file-mtime
    ID 'MODE' FIELD file-mode
    ID 'ERRNO' FIELD file-errno
    ID 'ERRMSG' FIELD file-errmsg.

    * handle files > 2147483647 byte (int 4) - hen 9.9.2004
    IF file-len > 2147483647.
    dir_list-size = -99.
    ELSE.
    dir_list-size = file-len.
    ENDIF.
    dir_list-name = file-name.
    IF sy-subrc = 0.
    IF file-type(1) = 'f' OR " regular file
    file-type(1) = 'F'.
    ADD 1 TO file_counter.
    dir_list-rc = 0.
    APPEND dir_list.
    ENDIF.
    ELSEIF sy-subrc = 1.
    EXIT.
    ELSE.
    IF error_counter > gc_1000.
    CALL 'C_DIR_READ_FINISH'
    ID 'ERRNO' FIELD file-errno
    ID 'ERRMSG' FIELD file-errmsg.
    RAISE too_many_read_errors.
    ENDIF.
    ADD 1 TO error_counter.
    dir_list-rc = 18.
    APPEND dir_list.
    ENDIF.
    ENDDO.

    CALL 'C_DIR_READ_FINISH'
    ID 'ERRNO' FIELD file-errno
    ID 'ERRMSG' FIELD file-errmsg.

    IF file_counter > 0.
    SORT dir_list BY name ASCENDING.
    ELSE.
    RAISE empty_directory_list.
    ENDIF.
Trabajando...