Batch Input

posted under by Antonio Lopez
Este reporte sube los datos contenidos en un archivo de texto plano, que a su vez ha sido guardado en formato txt y separados los valores por tabulador.

REPORT ZCMABI_MM001_MON .

************************************************************************
* Description : subir datos de un archivo plano separado por tabs
* Inputs : archivo de texto
* Outputs : log de errores y aciertos
* Error/Return Codes : Ninguno
* External References: WS_FILENAME_GET, WS_UPLOAD
* transactions
************************************************************************

********* TABLES *******************************************************

********* DATA: VARIABLES **********************************************
DATA: w_msg(50) TYPE c, "Message string by Input File Proc.
w_n0 LIKE sy-tabix, "Counter: records read
w_n1 LIKE sy-tabix, "Counter: records selected
w_n2 LIKE sy-tabix. "Counter: records processed


********* DATA: INTERNAL TABLES, RANGES ********************************
*DATA: it_file TYPE zcmata_mm001_mxe OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF it_file OCCURS 0,
MONEDA LIKE ZCMATA_MM001_MON-MONEDA,
NOMBRE_LARGO LIKE ZCMATA_MM001_MON-NOMBRE_LARGO,
END OF it_file.

DATA:
bdc_tab LIKE STANDARD TABLE OF bdcdata WITH HEADER LINE,
err_bi LIKE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE.

PARAMETERS: p_fname LIKE rlgrap-filename OBLIGATORY. "Filename Prefix


*************************
**** at selection-screen.
*************************
*--------- F4 for PC Input file ----------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
PERFORM select_file.

AT SELECTION-SCREEN ON p_fname.
PERFORM try_upload_file.

********************
* at selection-screen.
********************
*******************
START-OF-SELECTION.
*******************
PERFORM numerate_lines.
PERFORM validate_file.

*****************
END-OF-SELECTION.
*****************

*PERFORM PROCESS_FILE.
PERFORM print_statistic.
PERFORM print_footer.







*---------------------------------------------------------------------*
* FORM SELECT_FILE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM select_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = 'c:\'
mask = ',Text Files,*.txt;*.doc,All Files,*.*.'(101)
title = 'Select File'(100)
IMPORTING
filename = p_fname
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 AND sy-subrc <> 3.
MESSAGE e102(yb) WITH 'Error Selecting File'(007).
ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
* FORM TRY_UPLOAD_FILE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM try_upload_file.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_fname
filetype = 'DAT'
TABLES
data_tab = it_file
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
CASE sy-subrc.
* =to be customized=: text-006 = 'Uploading Error:'
* text-06n = Concrete Error Description
WHEN 1. CONCATENATE text-006 text-061 INTO w_msg SEPARATED BY space.
WHEN 2. CONCATENATE text-006 text-062 INTO w_msg SEPARATED BY space.
WHEN 3. CONCATENATE text-006 text-063 INTO w_msg SEPARATED BY space.
WHEN 4. CONCATENATE text-006 text-064 INTO w_msg SEPARATED BY space.
WHEN 5. CONCATENATE text-006 text-065 INTO w_msg SEPARATED BY space.
WHEN 6. CONCATENATE text-006 text-066 INTO w_msg SEPARATED BY space.
WHEN 7. CONCATENATE text-006 text-067 INTO w_msg SEPARATED BY space.
WHEN 8. CONCATENATE text-006 text-068 INTO w_msg SEPARATED BY space.
ENDCASE.
MESSAGE e102(yb) WITH w_msg.
ENDIF.
IF it_file IS INITIAL.
MESSAGE e102(yb) WITH 'Empty File!'(013).
ENDIF.
ENDFORM.


*---------------------------------------------------------------------*
* FORM NUMERATE_LINES *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM numerate_lines.
DESCRIBE TABLE it_file LINES w_n0.
ENDFORM.


*---------------------------------------------------------------------*
* FORM VALIDATE_FILE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM validate_file.
DATA:
lit_file LIKE LINE OF it_file.

PERFORM bdc_open. "< Apertura del juego de datos

WRITE: /5 'NOMENCLATURA', 20 'NOMBRE LARGO'.
LOOP AT it_file.
MOVE it_file TO lit_file.

AT FIRST.
PERFORM dynpro USING:
'X' 'ZCMAMP_MM001_MON' '0100',
'' 'BDC_OKCODE' '=ADD',
'' 'BDC_CURSOR' 'ZCMATA_MM001_MON-MONEDA'.
ENDAT.

PERFORM dynpro USING:
'X' 'ZCMAMP_MM001_MON' '0100',
'' 'BDC_OKCODE' '=ADD',
'' 'BDC_CURSOR' 'ZCMATA_MM001_MON-NOMBRE_LARGO',
'' 'ZCMATA_MM001_MON-MONEDA' LIT_FILE-MONEDA,
'' 'ZCMATA_MM001_MON-NOMBRE_LARGO' LIT_FILE-NOMBRE_LARGO.


WRITE: /5 lit_file-MONEDA, 20 lit_file-NOMBRE_LARGO.
ENDLOOP.

PERFORM dynpro USING:
'X' 'ZCMAMP_MM001_MON' '0100',
'' 'BDC_OKCODE' '=SAVE',
'' 'BDC_CURSOR' 'ZCMATA_MM001_MON-NOMBRE_LARGO',
'' 'ZCMATA_MM001_MON-MONEDA' LIT_FILE-MONEDA,
'' 'ZCMATA_MM001_MON-NOMBRE_LARGO' LIT_FILE-NOMBRE_LARGO.



CALL TRANSACTION 'ZCMA_MM001_TMON' USING bdc_tab
MODE 'N'
MESSAGES INTO err_bi.

SKIP 2.
WRITE: 'TABLA DE ERRORES' COLOR 7 ON.
LOOP AT ERR_BI.
WRITE: / 'ERROR NUMERO:' COLOR 2 ON, SY-TABIX COLOR 2 ON.
WRITE: / 'ID MSG', ERR_BI-MSGID,
/ 'NUMBER', ERR_BI-MSGNR,
/ 'TIPO', ERR_BI-MSGTYP,
/ 'VAR1', ERR_BI-MSGV1,
/ 'VAR2', ERR_BI-MSGV2,
/ 'VAR3', ERR_BI-MSGV3,
/ 'VAR4', ERR_BI-MSGV4,
/ 'FIELD', ERR_BI-FLDNAME.
ENDLOOP.

CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
* BIN_FILESIZE = ' '
* CODEPAGE = ' '
FILENAME = 'C:\ERRORES_BIM.TXT'
FILETYPE = 'ASC'
* MODE = ' '
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* COL_SELECT = ' '
* COL_SELECTMASK = ' '
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
TABLES
data_tab = err_bi
* FIELDNAMES =
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.

IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


DESCRIBE TABLE it_file LINES w_n1.

PERFORM bdc_closed. " Cierre del juego de datos
ENDFORM.


*---------------------------------------------------------------------*
* FORM PRINT_STATISTIC *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM print_statistic.
SKIP 1.
WRITE: / 'Read Lines'(014) INTENSIFIED ON,
AT 40 w_n0 INTENSIFIED OFF.
WRITE: / 'Selected Lines'(015) INTENSIFIED ON,
AT 40 w_n1 INTENSIFIED OFF.
WRITE: / 'Processed Lines'(016) INTENSIFIED ON,
AT 40 w_n1 INTENSIFIED OFF.
WRITE: / 'ARCHIVO DE ERRORES GUARDADO: (C:\ERRORES_BI.TXT)'.

ENDFORM.


*---------------------------------------------------------------------*
* FORM PRINT_FOOTER *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM print_footer.
* =to be customized=
WRITE /'*** End Of Report ***'.
ENDFORM.

*......................................................................*
* DYNPRO
*......................................................................*
FORM dynpro USING value(dynbegin)
value(name)
value(value).

CLEAR bdc_tab.
IF dynbegin = 'X'.
bdc_tab-program = name.
bdc_tab-dynpro = value.
bdc_tab-dynbegin = 'X'.
ELSE.
bdc_tab-fnam = name.
bdc_tab-fval = value.
ENDIF.
APPEND bdc_tab.
CLEAR bdc_tab.

ENDFORM.

*......................................................................*
* BCD OPEN
*......................................................................*
FORM bdc_open.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = 'antonio' " SM35
keep = 'X'
user = sy-uname.
ENDFORM.

*......................................................................*
* BCD CLOSED
*......................................................................*
FORM bdc_closed.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
ENDFORM.

0 comentarios

Make A Comment
Google
 
top