REPORT ZMIGRA.
* Dado un fichero tabulado por un caracter, sube los datos a la tabla
* correspondiente.
*
* Form Externos
*
* ue_<tabla>_<campo> :-> Tratamiento del campo cuando est lleno
* ue_<tabla> :-> Tratamiento cuado la tabla est llena
* ue_<tabla>_ERROR :-> Tratamiento si el grabacin ha pedado
* ue_<tabla>_<campo>_CONST :-> Tratamiento del campo cuando est lleno
TABLES: DD03L, SSCRFIELDS, RLGRAP.
*------------ Tabla a Cargar
INCLUDE ZMIGRA_TOP. "Aqui estaran las tablas.
*------------ Tabla a Cargar
DATA: BEGIN OF ITAB OCCURS 0,
REG(255),
END OF ITAB,
MITAB LIKE ITAB OCCURS 0 WITH HEADER LINE,
KITAB(72) OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME.
PARAMETERS: FICHERO LIKE RLGRAP-FILENAME.
SELECTION-SCREEN SKIP 1.
PARAMETERS: TABLA LIKE DD02L-TABNAME OBLIGATORY.
SELECTION-SCREEN SKIP 1.
PARAMETERS: CONDI AS CHECKBOX DEFAULT 'X'.
SELECT-OPTIONS: KMPOLONG FOR ITAB-REG.
SELECT-OPTIONS: KMPOVALE FOR ITAB-REG.
PARAMETERS: POSICUT(3) TYPE N DEFAULT '001',
USEREXIT(15) DEFAULT 'ZUE_*'.
SELECTION-SCREEN SKIP 1.
PARAMETERS: TEST AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK B01.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
DATA: BP(40).
FIELD-SYMBOLS: <F>, <FF>.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR FICHERO.
DATA: FICHERO_IN LIKE RLGRAP-FILENAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = FICHERO_IN
MASK =
',All Files,*.*,Data Files,*.dat,Text Files,*.txt.'
MODE = 'O'
TITLE = 'Selecciona un fichero...'
IMPORTING
FILENAME = FICHERO
EXCEPTIONS
INV_WINSYS = 01
NO_BATCH = 02
SELECTION_CANCEL = 03
SELECTION_ERROR = 04.
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'FC01'. PERFORM RELOAD. ENDIF.
IF SSCRFIELDS-UCOMM = 'FC02'. PERFORM EDIT_SRC. ENDIF.
INITIALIZATION.
INCLUDE <ICON>.
MOVE '@42@' TO SSCRFIELDS-FUNCTXT_01.
MOVE '@0Q@' TO SSCRFIELDS-FUNCTXT_02.
PERFORM RELOAD.
END-OF-SELECTION.
PERFORM UP_FILE.
CHECK SY-SUBRC EQ 0.
PERFORM LOOP_ITAB.
FORM EDIT_SRC.
DATA: SRC(72) OCCURS 0 WITH HEADER LINE.
DATA: SRC3(72) OCCURS 0 WITH HEADER LINE.
DATA: SRC2(72) OCCURS 0 WITH HEADER LINE,
ANS(1).
DATA: MESSI(240),
LINEA TYPE I,
PROG(30),
DIRECTIVA(72).
DATA: F(240),
G TYPE I,
H(72).
REFRESH: SRC2, SRC3, SRC.
READ REPORT 'ZMIGRA_TOP' INTO SRC3.
CONCATENATE 'include' USEREXIT '.' INTO SRC2 SEPARATED BY ' '.
APPEND SRC2.
READ REPORT USEREXIT INTO SRC.
CHECK SY-SUBRC EQ 0.
SY-SUBRC = 4.
DATA: FT(1).
CLEAR FT.
WHILE SY-SUBRC NE 0 AND SY-SUBRC NE 2.
CLEAR SY-SUBRC.
EDITOR-CALL FOR SRC TITLE 'Modificando include.'.
IF SY-SUBRC NE 0.
SY-SUBRC = 2.
CHECK SY-SUBRC EQ 0.
ENDIF.
REFRESH SRC2.
SRC2 = 'report znadar_ejemplo.'. APPEND SRC2.
IF USEREXIT NP '*TOP*'.
LOOP AT SRC3. SRC2 = SRC3. APPEND SRC2. ENDLOOP.
ENDIF.
LOOP AT SRC. SRC2 = SRC. APPEND SRC2. ENDLOOP.
SYNTAX-CHECK FOR SRC2 MESSAGE F LINE G WORD H.
CHECK SY-SUBRC NE 0.
MESSAGE S398(00) WITH ' Line: ' G '.' F.
ENDWHILE.
CHECK SY-SUBRC EQ 0.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Have a Nice Dat... '
TEXT_QUESTION = 'Would you like to save the source ?'
ICON_BUTTON_1 = 'ICON_SYSTEM_SAVE'
ICON_BUTTON_2 = 'ICON_CANCEL'
DEFAULT_BUTTON = '1'
DISPLAY_CANCEL_BUTTON = 'X'
START_COLUMN = 25
START_ROW = 6
IMPORTING
ANSWER = ANS
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.
CHECK ( ANS = '1' AND SY-SUBRC EQ 0 ).
INSERT REPORT USEREXIT FROM SRC.
ENDFORM.
FORM RELOAD.
CLEAR: KMPOLONG, KMPOVALE. REFRESH: KMPOLONG, KMPOVALE.
KMPOLONG-SIGN = KMPOVALE-SIGN = 'I'.
KMPOLONG-OPTION = KMPOVALE-OPTION = 'BT'.
SELECT * FROM DD03L WHERE TABNAME = TABLA.
KMPOLONG-LOW = DD03L-FIELDNAME.
KMPOLONG-HIGH = DD03L-INTLEN.
KMPOVALE-HIGH = DD03L-FIELDNAME.
KMPOVALE-LOW = '='.
APPEND: KMPOLONG, KMPOVALE.
ENDSELECT.
ENDFORM.
FORM LOOP_ITAB.
DATA: DI(40),
SI(40),
AX TYPE I,
BX TYPE I,
CX LIKE SY-INDEX,
DX LIKE AX, AL(1), SF(1), SS(1).
ASSIGN (TABLA) TO <F>.
LOOP AT ITAB.
CLEAR MITAB. REFRESH MITAB.
IF CONDI = 'X'.
AX = 1.
AL = ITAB-REG+POSICUT(AX).
SPLIT ITAB-REG AT AL INTO TABLE MITAB.
CLEAR <F>.
LOOP AT KMPOLONG.
READ TABLE MITAB INDEX SY-TABIX.
IF SY-SUBRC NE 0.
CLEAR SY-SUBRC. CHECK SY-SUBRC NE 0.
ENDIF.
CONCATENATE TABLA '-' KMPOLONG-LOW INTO DI.
ASSIGN (DI) TO <FF>.
AX = 0.
BX = KMPOLONG-HIGH.
CONCATENATE 'ue_' TABLA '_' KMPOLONG-LOW INTO BP.
PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
<FF> = MITAB-REG+AX(BX).
ENDLOOP.
CHECK SY-SUBRC EQ 0.
ENDIF.
CONCATENATE 'ue_' TABLA INTO BP.
PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
IF CONDI = 'X'.
LOOP AT KMPOVALE.
CONCATENATE TABLA '-' KMPOVALE-HIGH INTO DI.
ASSIGN (DI) TO <FF>.
SHIFT KMPOVALE-LOW LEFT.
<FF> = KMPOVALE-LOW.
CONCATENATE 'ue_' TABLA '_' KMPOLONG-LOW '_CONST' INTO BP.
PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
ENDLOOP.
ENDIF.
IF CONDI = ' '.
DATA: CL(3) TYPE N, CH(9) TYPE N.
SELECT SINGLE * FROM DD03L "cmp si tiene MANDT
WHERE TABNAME = TABLA
AND FIELDNAME = 'MANDT'
AND AS4LOCAL = 'A'
AND AS4VERS = '0000'.
IF SY-SUBRC NE 0. CLEAR CL. ELSE. CL = 3. ENDIF.
CH = STRLEN( <F> ).
MOVE ITAB-REG TO <F>+CL(CH).
ENDIF.
IF TEST = ' '.
INSERT (TABLA) FROM <F>.
ENDIF.
IF SY-SUBRC NE 0.
CONCATENATE 'ue_' TABLA '_ERROR' INTO BP.
PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
ENDIF.
ENDLOOP.
ENDFORM.
FORM UP_FILE.
CLEAR: ITAB.
REFRESH: ITAB.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FICHERO
FILETYPE = 'ASC'
TABLES
DATA_TAB = ITAB
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
GUI_REFUSE_FILETRANSFER = 8
OTHERS = 9.
ENDFORM.