W Pub: ABAP Prog Propios SOURCE

  1. REPORT ZNADAR1 NO STANDARD PAGE HEADING LINE-SIZE 180.
  2. TABLES: DD03L.
  3. PARAMETERS: TABLA_1(12),
  4.             TABLA_2(12).
  5.  
  6. DATA: BEGIN OF ITAB_1 OCCURS 0,
  7.         FIELDNAME LIKE DD03L-FIELDNAME,
  8.         KEYFLAG   LIKE DD03L-KEYFLAG,
  9.       END   OF ITAB_1,
  10.       BEGIN OF ITAB_2 OCCURS 0,
  11.         FIELDNAME LIKE DD03L-FIELDNAME,
  12.         KEYFLAG   LIKE DD03L-KEYFLAG,
  13.       END   OF ITAB_2,
  14.       BEGIN OF ITAB_3 OCCURS 0,
  15.         POSI(2),
  16.         FIELDNAME LIKE DD03L-FIELDNAME,
  17.         LADO(1),
  18.       END OF ITAB_3,
  19.       AX TYPE I,
  20.       BX TYPE I,
  21.       CX(2).
  22.  
  23. AT LINE-SELECTION.
  24.    READ LINE 2.
  25.    IF SY-LISEL+16(12) NE TABLA_1 OR SY-LISEL+39(12) NE TABLA_2.
  26.       TABLA_1 = SY-LISEL+16(19).
  27.       TABLA_2 = SY-LISEL+39(12).
  28.       SY-LSIND = SY-LSIND - 1.
  29.       PERFORM PINTAR.
  30.    ELSE.
  31.      PERFORM BUSCAR_Y_MONTAR.
  32.    ENDIF.
  33.  
  34. END-OF-SELECTION.
  35. PERFORM PINTAR.
  36.  
  37. FORM PINTAR.
  38. REFRESH: ITAB_1, ITAB_2. CLEAR: ITAB_1, ITAB_2.
  39. SELECT * APPENDING CORRESPONDING FIELDS OF TABLE ITAB_1
  40.          FROM DD03L WHERE TABNAME = TABLA_1.
  41. SELECT * APPENDING CORRESPONDING FIELDS OF TABLE ITAB_2
  42.          FROM DD03L WHERE TABNAME = TABLA_2.
  43.  
  44. DESCRIBE TABLE ITAB_1 LINES AX.
  45. DESCRIBE TABLE ITAB_2 LINES BX.
  46. IF BX > AX. AX = BX. ENDIF.
  47. BX = 1.
  48. SKIP 1.
  49. INCLUDE <ICON>.
  50. WRITE: AT 10 '@15@' AS ICON HOTSPOT NO-GAP, '@42@'  AS ICON HOTSPOT,
  51.                     AT 17 TABLA_1 INPUT,
  52.                     AT 30 '--->',
  53.                     AT 40 TABLA_2 INPUT,
  54.        AT 60 'Zona de Resultados'.
  55. SKIP 1.
  56.  
  57. DO AX TIMES.
  58.    WRITE / ' '.
  59.    READ TABLE ITAB_1 INDEX BX.
  60.    IF SY-SUBRC EQ 0.
  61.       FORMAT COLOR OFF.
  62.       WRITE AT 17 CX INPUT.
  63.       IF ITAB_1-KEYFLAG = 'X'. FORMAT COLOR 4. ENDIF.
  64.       WRITE AT 20 ITAB_1-FIELDNAME+0(12).
  65.    ENDIF.
  66.    READ TABLE ITAB_2 INDEX BX.
  67.    IF SY-SUBRC EQ 0.
  68.       FORMAT COLOR OFF.
  69.       WRITE AT 37 CX INPUT.
  70.       IF ITAB_2-KEYFLAG = 'X'. FORMAT COLOR 4. ENDIF.
  71.       WRITE AT 40 ITAB_2-FIELDNAME+0(12).
  72.    ENDIF.
  73.    FORMAT COLOR OFF.
  74.    WRITE AT 59 SY-VLINE.
  75.    ADD 1 TO BX.
  76. ENDDO.
  77. ENDFORM.
  78.  
  79. FORM BUSCAR_Y_MONTAR.
  80. DATA: TCADE(72) OCCURS 0 WITH HEADER LINE.
  81.   REFRESH ITAB_3. CLEAR ITAB_3. BX = 3.
  82.   DO.
  83.    READ LINE BX.
  84.    IF SY-SUBRC NE 0. EXIT. ENDIF.
  85.    ITAB_3-POSI = SY-LISEL+17(2).
  86.    ITAB_3-FIELDNAME = SY-LISEL+19(12).
  87.    ITAB_3-LADO = '1'.
  88.    IF NOT ITAB_3-POSI IS INITIAL. APPEND ITAB_3. ENDIF.
  89.    ITAB_3-POSI = SY-LISEL+37(2).
  90.    ITAB_3-FIELDNAME = SY-LISEL+39(12).
  91.    ITAB_3-LADO = '5'.
  92.    IF NOT ITAB_3-POSI IS INITIAL. APPEND ITAB_3. ENDIF.
  93.    ADD 1 TO BX.
  94.   ENDDO.
  95.   SORT ITAB_3 BY POSI LADO.
  96. DATA: CADE(172),
  97.        DX TYPE I.
  98.   BX = DX = 3.
  99. * Montar iguales
  100.   LOOP AT ITAB_3.
  101.      AX = SY-TABIX MOD 2.
  102.      IF AX NE 0. READ LINE BX. ENDIF.
  103.      IF AX NE 0.
  104.       CONCATENATE CADE '&not;=&not;' TABLA_1 '-' ITAB_3-FIELDNAME '.' INTO CADE.
  105.      ELSE.
  106.       CONCATENATE TABLA_2 '-' ITAB_3-FIELDNAME CADE INTO CADE.
  107.      ENDIF.
  108.      IF AX EQ 0.
  109.         TCADE = CADE. APPEND TCADE.
  110.         CLEAR CADE.
  111.      ENDIF.
  112.      ADD 1 TO BX.
  113.   ENDLOOP.
  114.   CLEAR TCADE. APPEND TCADE.
  115.   LOOP AT ITAB_3.
  116.      AX = SY-TABIX MOD 2.
  117.      IF AX NE 0. READ LINE BX. ENDIF.
  118.      IF AX NE 0.
  119.         CONCATENATE 'MOVE&not;' TABLA_1 '-' ITAB_3-FIELDNAME CADE
  120.                                                         INTO CADE.
  121.      ELSE.
  122.         CONCATENATE CADE '&not;TO&not;'
  123.                     TABLA_2 '-' ITAB_3-FIELDNAME '.' INTO CADE.
  124.      ENDIF.
  125.      IF AX EQ 0. TCADE = CADE. APPEND TCADE. CLEAR CADE. ENDIF.
  126.      ADD 1 TO BX.
  127.   ENDLOOP.
  128.   CLEAR TCADE. APPEND TCADE.
  129.   CONCATENATE 'SELECT&not;*&not;FROM&not;' TABLA_1 '&not;WHERE' INTO TCADE.
  130.   APPEND TCADE.
  131.   LOOP AT ITAB_3.
  132.      AX = SY-TABIX MOD 2.
  133.      IF AX NE 0. READ LINE BX. ENDIF.
  134.      IF AX NE 0.
  135.        IF SY-TABIX NE '1'. CADE = 'AND&not;'. ENDIF.
  136.         CONCATENATE  CADE ITAB_3-FIELDNAME '&not;=&not;' INTO CADE.
  137.      ELSE.
  138.         CONCATENATE CADE TABLA_2 '-' ITAB_3-FIELDNAME  INTO CADE.
  139.      ENDIF.
  140.      IF AX EQ 0. TCADE = CADE. APPEND TCADE. CLEAR CADE. ENDIF.
  141.      ADD 1 TO BX.
  142.   ENDLOOP.
  143.  
  144.   BX = 4.
  145.   LOOP AT TCADE.
  146.      READ LINE BX.
  147.      TRANSLATE TCADE USING '&not; '.
  148.      SY-LISEL+60 = TCADE.
  149.      MODIFY LINE BX.
  150.      ADD 1 TO BX.
  151.   ENDLOOP.
  152. ENDFORM.