W Pub: ABAP Prog Propios MIG Filez

  1. REPORT ZMIGRA.
  2. * Dado un fichero tabulado por un caracter, sube los datos a la tabla
  3. * correspondiente.
  4. *
  5. * Form Externos
  6. *
  7. * ue_<tabla>_<campo>       :-> Tratamiento del campo cuando est lleno
  8. * ue_<tabla>               :-> Tratamiento cuado la tabla est llena
  9. * ue_<tabla>_ERROR         :-> Tratamiento si el grabacin ha pedado
  10. * ue_<tabla>_<campo>_CONST :-> Tratamiento del campo cuando est lleno
  11.  
  12. TABLES: DD03L, SSCRFIELDS, RLGRAP.
  13. *------------ Tabla a Cargar
  14. INCLUDE ZMIGRA_TOP.                    "Aqui estaran las tablas.
  15. *------------ Tabla a Cargar
  16. DATA: BEGIN OF ITAB OCCURS 0,
  17.         REG(255),
  18.       END OF ITAB,
  19.       MITAB LIKE ITAB OCCURS 0 WITH HEADER LINE,
  20.       KITAB(72) OCCURS 0 WITH HEADER LINE.
  21.  
  22. SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME.
  23. PARAMETERS:     FICHERO LIKE RLGRAP-FILENAME.
  24. SELECTION-SCREEN SKIP 1.
  25. PARAMETERS:     TABLA LIKE DD02L-TABNAME OBLIGATORY.
  26. SELECTION-SCREEN SKIP 1.
  27. PARAMETERS:     CONDI AS CHECKBOX DEFAULT 'X'.
  28. SELECT-OPTIONS: KMPOLONG FOR ITAB-REG.
  29. SELECT-OPTIONS: KMPOVALE FOR ITAB-REG.
  30. PARAMETERS:     POSICUT(3) TYPE N DEFAULT '001',
  31.                 USEREXIT(15) DEFAULT 'ZUE_*'.
  32. SELECTION-SCREEN SKIP 1.
  33. PARAMETERS:     TEST AS CHECKBOX DEFAULT 'X'.
  34. SELECTION-SCREEN END OF BLOCK B01.
  35. SELECTION-SCREEN FUNCTION KEY 1.
  36. SELECTION-SCREEN FUNCTION KEY 2.
  37. DATA: BP(40).
  38. FIELD-SYMBOLS: <F>, <FF>.
  39.  
  40. AT SELECTION-SCREEN ON VALUE-REQUEST FOR FICHERO.
  41.   DATA: FICHERO_IN LIKE RLGRAP-FILENAME.
  42.   CALL FUNCTION 'WS_FILENAME_GET'
  43.        EXPORTING
  44.             DEF_FILENAME     = FICHERO_IN
  45.             MASK             =
  46.               ',All Files,*.*,Data Files,*.dat,Text Files,*.txt.'
  47.             MODE             = 'O'
  48.             TITLE            = 'Selecciona un fichero...'
  49.        IMPORTING
  50.             FILENAME         = FICHERO
  51.        EXCEPTIONS
  52.             INV_WINSYS       = 01
  53.             NO_BATCH         = 02
  54.             SELECTION_CANCEL = 03
  55.             SELECTION_ERROR  = 04.
  56.  
  57. AT SELECTION-SCREEN.
  58.   IF SSCRFIELDS-UCOMM = 'FC01'. PERFORM RELOAD. ENDIF.
  59.   IF SSCRFIELDS-UCOMM = 'FC02'. PERFORM EDIT_SRC. ENDIF.
  60.  
  61. INITIALIZATION.
  62.   INCLUDE <ICON>.
  63.   MOVE '@42@' TO SSCRFIELDS-FUNCTXT_01.
  64.   MOVE '@0Q@' TO SSCRFIELDS-FUNCTXT_02.
  65.   PERFORM RELOAD.
  66.  
  67. END-OF-SELECTION.
  68.  
  69.   PERFORM UP_FILE.
  70.   CHECK SY-SUBRC EQ 0.
  71.   PERFORM LOOP_ITAB.
  72.  
  73. FORM EDIT_SRC.
  74.   DATA: SRC(72) OCCURS 0 WITH HEADER LINE.
  75.   DATA: SRC3(72) OCCURS 0 WITH HEADER LINE.
  76.   DATA: SRC2(72) OCCURS 0 WITH HEADER LINE,
  77.         ANS(1).
  78.   DATA: MESSI(240),
  79.         LINEA TYPE I,
  80.         PROG(30),
  81.         DIRECTIVA(72).
  82.   DATA: F(240),
  83.         G TYPE I,
  84.         H(72).
  85.   REFRESH: SRC2, SRC3, SRC.
  86.   READ REPORT 'ZMIGRA_TOP' INTO SRC3.
  87.   CONCATENATE 'include' USEREXIT '.' INTO SRC2 SEPARATED BY ' '.
  88.   APPEND SRC2.
  89.   READ REPORT USEREXIT INTO SRC.
  90.   CHECK SY-SUBRC EQ 0.
  91.   SY-SUBRC = 4.
  92.   DATA: FT(1).
  93.   CLEAR FT.
  94.   WHILE SY-SUBRC NE 0 AND SY-SUBRC NE 2.
  95.     CLEAR SY-SUBRC.
  96.     EDITOR-CALL FOR SRC TITLE 'Modificando include.'.
  97.     IF SY-SUBRC NE 0.
  98.       SY-SUBRC = 2.
  99.       CHECK SY-SUBRC EQ 0.
  100.     ENDIF.
  101.     REFRESH SRC2.
  102.     SRC2 = 'report znadar_ejemplo.'. APPEND SRC2.
  103.     IF USEREXIT NP '*TOP*'.
  104.       LOOP AT SRC3. SRC2 = SRC3. APPEND SRC2. ENDLOOP.
  105.     ENDIF.
  106.     LOOP AT SRC. SRC2 = SRC. APPEND SRC2. ENDLOOP.
  107.     SYNTAX-CHECK FOR SRC2 MESSAGE F LINE G WORD H.
  108.     CHECK SY-SUBRC NE 0.
  109.     MESSAGE S398(00) WITH ' Line: ' G '.' F.
  110.   ENDWHILE.
  111.   CHECK SY-SUBRC EQ 0.
  112.   CALL FUNCTION 'POPUP_TO_CONFIRM'
  113.     EXPORTING
  114.       TITLEBAR              = 'Have a Nice Dat... '
  115.       TEXT_QUESTION         = 'Would you like to save the source ?'
  116.       ICON_BUTTON_1         = 'ICON_SYSTEM_SAVE'
  117.       ICON_BUTTON_2         = 'ICON_CANCEL'
  118.       DEFAULT_BUTTON        = '1'
  119.       DISPLAY_CANCEL_BUTTON = 'X'
  120.       START_COLUMN          = 25
  121.       START_ROW             = 6
  122.    IMPORTING
  123.       ANSWER                = ANS
  124.     EXCEPTIONS
  125.       TEXT_NOT_FOUND        = 1
  126.       OTHERS                = 2.
  127.   CHECK ( ANS = '1' AND SY-SUBRC EQ 0 ).
  128.   INSERT REPORT USEREXIT FROM SRC.
  129. ENDFORM.
  130.  
  131. FORM RELOAD.
  132.   CLEAR: KMPOLONG, KMPOVALE. REFRESH: KMPOLONG, KMPOVALE.
  133.   KMPOLONG-SIGN   = KMPOVALE-SIGN   = 'I'.
  134.   KMPOLONG-OPTION = KMPOVALE-OPTION = 'BT'.
  135.   SELECT * FROM DD03L WHERE TABNAME = TABLA.
  136.     KMPOLONG-LOW    = DD03L-FIELDNAME.
  137.     KMPOLONG-HIGH     = DD03L-INTLEN.
  138.     KMPOVALE-HIGH    = DD03L-FIELDNAME.
  139.     KMPOVALE-LOW     = '='.
  140.     APPEND: KMPOLONG, KMPOVALE.
  141.   ENDSELECT.
  142. ENDFORM.
  143.  
  144. FORM LOOP_ITAB.
  145.   DATA: DI(40),
  146.         SI(40),
  147.         AX TYPE I,
  148.         BX TYPE I,
  149.         CX LIKE SY-INDEX,
  150.         DX LIKE AX, AL(1), SF(1), SS(1).
  151.   ASSIGN (TABLA) TO <F>.
  152.   LOOP AT ITAB.
  153.     CLEAR MITAB. REFRESH MITAB.
  154.     IF CONDI = 'X'.
  155.       AX = 1.
  156.       AL = ITAB-REG+POSICUT(AX).
  157.       SPLIT ITAB-REG AT AL INTO TABLE MITAB.
  158.       CLEAR <F>.
  159.       LOOP AT KMPOLONG.
  160.         READ TABLE MITAB INDEX SY-TABIX.
  161.         IF SY-SUBRC NE 0.
  162.           CLEAR SY-SUBRC. CHECK SY-SUBRC NE 0.
  163.         ENDIF.
  164.         CONCATENATE TABLA '-' KMPOLONG-LOW INTO DI.
  165.         ASSIGN (DI) TO <FF>.
  166.         AX = 0.
  167.         BX = KMPOLONG-HIGH.
  168.         CONCATENATE 'ue_' TABLA '_' KMPOLONG-LOW INTO BP.
  169.         PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
  170.         <FF> = MITAB-REG+AX(BX).
  171.       ENDLOOP.
  172.       CHECK SY-SUBRC EQ 0.
  173.     ENDIF.
  174.     CONCATENATE 'ue_' TABLA INTO BP.
  175.     PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
  176.     IF CONDI = 'X'.
  177.       LOOP AT KMPOVALE.
  178.         CONCATENATE TABLA '-' KMPOVALE-HIGH INTO DI.
  179.         ASSIGN (DI) TO <FF>.
  180.         SHIFT  KMPOVALE-LOW LEFT.
  181.         <FF> = KMPOVALE-LOW.
  182.         CONCATENATE 'ue_' TABLA '_' KMPOLONG-LOW '_CONST' INTO BP.
  183.         PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
  184.       ENDLOOP.
  185.     ENDIF.
  186.     IF CONDI = ' '.
  187. DATA: CL(3) TYPE N, CH(9) TYPE N.
  188.       SELECT SINGLE * FROM  DD03L "cmp si tiene MANDT
  189.        WHERE  TABNAME    = TABLA
  190.        AND    FIELDNAME  = 'MANDT'
  191.        AND    AS4LOCAL   = 'A'
  192.        AND    AS4VERS    = '0000'.
  193.        IF SY-SUBRC NE 0. CLEAR CL. ELSE. CL = 3. ENDIF.
  194.       CH = STRLEN( <F> ).
  195.       MOVE ITAB-REG TO <F>+CL(CH).
  196.     ENDIF.
  197.     IF TEST = ' '.
  198.       INSERT (TABLA) FROM <F>.
  199.     ENDIF.
  200.     IF SY-SUBRC NE 0.
  201.       CONCATENATE 'ue_' TABLA '_ERROR' INTO BP.
  202.       PERFORM (BP) IN PROGRAM (USEREXIT) IF FOUND.
  203.     ENDIF.
  204.   ENDLOOP.
  205. ENDFORM.
  206.  
  207. FORM UP_FILE.
  208.   CLEAR: ITAB.
  209.   REFRESH: ITAB.
  210.   CALL FUNCTION 'WS_UPLOAD'
  211.        EXPORTING
  212.             FILENAME                = FICHERO
  213.             FILETYPE                = 'ASC'
  214.        TABLES
  215.             DATA_TAB                = ITAB
  216.        EXCEPTIONS
  217.             CONVERSION_ERROR        = 1
  218.             FILE_OPEN_ERROR         = 2
  219.             FILE_READ_ERROR         = 3
  220.             INVALID_TABLE_WIDTH     = 4
  221.             INVALID_TYPE            = 5
  222.             NO_BATCH                = 6
  223.             UNKNOWN_ERROR           = 7
  224.             GUI_REFUSE_FILETRANSFER = 8
  225.             OTHERS                  = 9.
  226. ENDFORM.