PDA

Ver la Versión Completa : movimiento facturas xml en fondo


romario2
23/03/09, 10:13:37
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.