Enterprise Resource Planning PortalERPGenie.COM Enterprise Resource Planning Portal

   Advertise | Founder BLOG

Web ERPGenie.COM  Other Search Options

Home | Vote for us |

ERPGenie.COM -> SAP Technical -> ABAP -> Example code -> Solitaire

PROGRAM ZMN00003 NO STANDARD PAGE HEADING.


 
   DATA: NUMBER LIKE DATATYPE-INTEGER2.

   DATA: DUMMY  LIKE DATATYPE-INTEGER2.

   DATA: BEGIN OF CARDS OCCURS 52 ,

         ENTRY TYPE I,

         ROW TYPE I,

         

COL

 TYPE I,

         
VIS
(1),

         END OF CARDS.

   DATA: CARD_NUM TYPE I, SUIT_NUM TYPE I, SUIT(1), CARD(2), ROWS TYPE I.

   DATA: BLANK(3) VALUE '***'.

   DATA: NEXT-CARD(4) VALUE 'Next'.

   DATA: RESTART(8) VALUE 'New game'.

   DATA: REVEAL(6) VALUE 'Reveal'.

   DATA: TEST_NUM TYPE I, TO_NUM TYPE I, MOVING_NUM TYPE I,

           PILE_NUM TYPE I.

   DATA: CURR_C TYPE I, CURR_H TYPE I, CURR_S TYPE I, CURR_D TYPE I.

   DATA: MOVING_SUIT(1), TO_SUIT(1), MOVING_CARD(2), TO_CARD(2),

     PILE_SUIT(1), PILE_CARD(2),MOVING_TYPE(1)    .

   DATA: MOVING_ROW TYPE I, MOVING_COL TYPE I,

         TO_ROW TYPE I, TO_COL TYPE I, TEST_ROW TYPE I.

   DATA: CURRENT_CARD TYPE I,

          MIN_CARD TYPE I , MAX_CARD TYPE I.

   DATA: CURRENTFIELD(50).

   DATA: DISC_C(3),DISC_H(3),DISC_S(3),DISC_D(3).

   DATA: ROWS_OUT TYPE I, COLS_OUT TYPE I.


 

 
   PERFORM SHUFFLE.

   PERFORM SHOW_SCREEN.


 
   AT LINE-SELECTION.

     GET CURSOR FIELD CURRENTFIELD.

     PERFORM PROCESS-INPUT.


 
   *---------------------------------------------------------------------*

   *       FORM SHUFFLE                                                  *

   *---------------------------------------------------------------------*

   *       ........                                                      *

   *---------------------------------------------------------------------*

   FORM SHUFFLE.

     MIN_CARD = 3.MAX_CARD = 24.

     CURR_C = -1.CURR_D = -1.CURR_H = -1.CURR_S = -1.

     DISC_C = 'CCC'.DISC_H = 'HHH'.DISC_S = 'SSS'.DISC_D = 'DDD'.

     NUMBER = SY-UZEIT MOD 1000.

     DO NUMBER TIMES.

       CALL FUNCTION 'RANDOM_I2'

            IMPORTING

                 RND_VALUE = DUMMY.

     ENDDO.

     REFRESH CARDS. CLEAR CARDS. SY-TABIX = 0.

     WHILE SY-TABIX < 52.

   *do 40 times.

       CALL FUNCTION 'RANDOM_I2'

            EXPORTING

                 RND_MIN   = 0

                 RND_MAX   = 51

            IMPORTING

                 RND_VALUE = NUMBER.

       READ TABLE CARDS WITH KEY NUMBER TRANSPORTING NO FIELDS.

       IF SY-SUBRC <> 0.

         CARDS-VIS = 'n'.

         DESCRIBE TABLE CARDS LINES ROWS.

         CASE ROWS.

           WHEN 0.CARDS-VIS = 'y'.CARDS-ROW = 0.CARDS-COL = 0.

           WHEN 7.CARDS-VIS = 'y'.CARDS-ROW = 1.CARDS-COL = 1.

           WHEN 13.CARDS-VIS = 'y'.CARDS-ROW = 2.CARDS-COL = 2.

           WHEN 18.CARDS-VIS = 'y'.CARDS-ROW = 3.CARDS-COL = 3.

           WHEN 22.CARDS-VIS = 'y'.CARDS-ROW = 4.CARDS-COL = 4.

           WHEN 25.CARDS-VIS = 'y'.CARDS-ROW = 5.CARDS-COL = 5.

           WHEN 27.CARDS-VIS = 'y'.CARDS-ROW = 6.CARDS-COL = 6.

           WHEN 28.CARDS-ROW = 20.CARDS-COL = 0.

         ENDCASE.

         CARDS-COL = CARDS-COL + 1.

         CARDS-ENTRY = NUMBER.

         APPEND CARDS.

       ENDIF.

   *enddo.

     ENDWHILE.

     CURRENT_CARD = MIN_CARD.

   ENDFORM.


 
   *---------------------------------------------------------------------*

   *       FORM SHOW_SCREEN                                              *

   *---------------------------------------------------------------------*

   *       ........                                                      *

   *---------------------------------------------------------------------*

   FORM SHOW_SCREEN.

     ROWS_OUT = 1.

     COLS_OUT = 4.

     DO 7 TIMES.

       SKIP TO LINE ROWS_OUT.

       POSITION COLS_OUT.

       WRITE BLANK HOTSPOT.

       COLS_OUT = COLS_OUT + 4.

     ENDDO.

     
LOOP
 AT CARDS.

       PERFORM MAKE_CARD.

       IF CARDS-ROW < 20.

         ROWS_OUT = CARDS-ROW + 1.

         SKIP TO LINE ROWS_OUT.

         COLS_OUT = CARDS-COL * 4.

         POSITION COLS_OUT.

         IF CARDS-VIS = 'n'.

           WRITE 'XXX' COLOR OFF INTENSIFIED OFF INVERSE OFF.

         ELSE.

           IF SUIT = 'D' OR SUIT = 'H'.

             WRITE: SUIT NO-GAP COLOR 6 INTENSIFIED INVERSE HOTSPOT,

                    CARD COLOR 6 INTENSIFIED INVERSE HOTSPOT.

           ELSE.

          WRITE: SUIT NO-GAP COLOR OFF INTENSIFIED OFF INVERSE OFF HOTSPOT,

                CARD COLOR OFF INTENSIFIED OFF INVERSE OFF HOTSPOT.

           ENDIF.

         ENDIF.

       ELSE.

         SKIP TO LINE 20.      COLS_OUT =  CARDS-COL  * 4.

         IF COLS_OUT > 48.

           SKIP TO LINE 21.

           COLS_OUT = COLS_OUT - 48.

         ENDIF.

         POSITION COLS_OUT.

         IF CARDS-COL = CURRENT_CARD.

           PILE_SUIT = SUIT.

           PILE_CARD = CARD.

           PILE_NUM = CARD_NUM.

           IF SUIT = 'D' OR SUIT = 'H'.

             WRITE: PILE_SUIT NO-GAP COLOR 6 INTENSIFIED INVERSE HOTSPOT,

                    PILE_CARD COLOR 6 INTENSIFIED INVERSE HOTSPOT.

           ELSE.

             WRITE: PILE_SUIT NO-GAP COLOR OFF INTENSIFIED OFF HOTSPOT,

                    PILE_CARD COLOR OFF INTENSIFIED OFF HOTSPOT.

           ENDIF.

         ELSE.

           IF CARDS-COL < CURRENT_CARD.

             WRITE 'XXX' COLOR OFF INTENSIFIED OFF INVERSE OFF.

           ENDIF.

         ENDIF.

       ENDIF.

     ENDLOOP.

     SKIP TO LINE 4. POSITION 40.WRITE: DISC_C

          COLOR OFF INTENSIFIED OFF INVERSE OFF HOTSPOT.

     SKIP TO LINE 4. POSITION 44. WRITE: DISC_D

          COLOR 6 INTENSIFIED INVERSE HOTSPOT.

     SKIP TO LINE 4. POSITION 48. WRITE: DISC_S

          COLOR OFF INTENSIFIED OFF INVERSE OFF HOTSPOT.

     SKIP TO LINE 4. POSITION 52. WRITE: DISC_H

          COLOR 6 INTENSIFIED INVERSE HOTSPOT.

     IF MIN_CARD > 0.

       SKIP TO LINE 23. POSITION 1. WRITE NEXT-CARD HOTSPOT.

     ENDIF.

     SKIP TO LINE 23. POSITION 20. WRITE RESTART HOTSPOT.

   *  skip to line 23. position 40. write reveal hotspot.

     SKIP TO LINE 25. POSITION 1. WRITE CURRENTFIELD.

     SY-LSIND = 0.

   ENDFORM.


 
   *---------------------------------------------------------------------*

   *       FORM PROCESS-INPUT                                            *

   *---------------------------------------------------------------------*

   *       ........                                                      *

   *---------------------------------------------------------------------*

   FORM PROCESS-INPUT.

     IF CURRENTFIELD = 'NEXT-CARD'.

       IF CURRENT_CARD = MAX_CARD.

         CURRENT_CARD = MIN_CARD.

       ELSE.

         CURRENT_CARD = CURRENT_CARD + 3.

         IF CURRENT_CARD > MAX_CARD.

           CURRENT_CARD = MAX_CARD.

         ENDIF.

       ENDIF.

       MOVING_CARD = SPACE.

       CURRENTFIELD = SPACE.

       PERFORM SHOW_SCREEN.

       EXIT.

     ENDIF.

     IF CURRENTFIELD = 'REVEAL'.

       
LOOP
 AT CARDS.

         CARDS-VIS =  'y'.

         MODIFY CARDS.

       ENDLOOP.

       PERFORM SHOW_SCREEN.

       EXIT.

     ENDIF.

     IF CURRENTFIELD = 'RESTART'.

       PERFORM SHUFFLE.

       CURRENTFIELD = 'Restarting'.

       PERFORM SHOW_SCREEN.

       EXIT.

     ENDIF.

     IF MOVING_CARD = SPACE.

       IF CURRENTFIELD = 'CARD' OR CURRENTFIELD = 'SUIT'.

         CURRENTFIELD = SPACE.

         ROWS_OUT = SY-CUROW - 1.

         COLS_OUT = SY-CUCOL DIV 4.

         
LOOP
 AT CARDS.

           IF CARDS-ROW = ROWS_OUT AND CARDS-COL = COLS_OUT.

             CURRENTFIELD = 'Moving '.

             PERFORM MAKE_CARD.

             MOVING_ROW = CARDS-ROW.

             MOVING_COL = CARDS-COL.

             MOVING_CARD = CARD.

             MOVING_SUIT = SUIT.

             MOVING_TYPE = 'm'.

             MOVING_NUM = CARD_NUM.

             CURRENTFIELD+8(1) = SUIT.

             CURRENTFIELD+9(2) = CARD.

           ENDIF.

         ENDLOOP.

       ELSE.

         IF CURRENTFIELD = 'PILE_CARD' OR CURRENTFIELD = 'PILE_SUIT'.

           MOVING_CARD = PILE_CARD.

           MOVING_SUIT = PILE_SUIT.

           MOVING_TYPE = 'p'.

           MOVING_NUM = PILE_NUM.

           CURRENTFIELD = 'Moving pile card'.

           CURRENTFIELD+17(1) = PILE_SUIT.

           CURRENTFIELD+18(2) = PILE_CARD.

         ELSE.

           CURRENTFIELD = SPACE.

         ENDIF.

       ENDIF.

     ELSE.

       IF CURRENTFIELD = 'CARD' OR CURRENTFIELD = 'SUIT' OR

              CURRENTFIELD = 'BLANK'.

         ROWS_OUT = SY-CUROW - 1.

         COLS_OUT = SY-CUCOL DIV 4.

         TEST_ROW = -1.

         IF CURRENTFIELD = 'BLANK'.

           TO_COL = COLS_OUT.

           TO_ROW = ROWS_OUT - 1.

           IF MOVING_CARD = 'K'.

             PERFORM MOVE_CARD.

           ELSE.

             CURRENTFIELD = 'Can only move K to blank'.

             MOVING_CARD = SPACE.

           ENDIF.

         ELSE.

           
LOOP
 AT CARDS.

             IF ( CARDS-ROW >= TEST_ROW AND CARDS-ROW < 20 )

                    AND CARDS-COL = COLS_OUT.

               TEST_ROW = CARDS-ROW.

               PERFORM MAKE_CARD.

               TO_COL = CARDS-COL.

               TO_ROW = CARDS-ROW.

               TO_CARD = CARD.

               TO_SUIT = SUIT.

               TO_NUM = CARD_NUM.

             ENDIF.

           ENDLOOP.

           IF TO_COL <> MOVING_COL OR MOVING_TYPE = 'p'.

             IF

                ( ( MOVING_SUIT = 'D' OR MOVING_SUIT = 'H' ) AND

                  ( TO_SUIT = 'D' OR TO_SUIT = 'H' ) )

              OR

                ( ( MOVING_SUIT = 'C' OR MOVING_SUIT = 'S' ) AND

                  ( TO_SUIT = 'S' OR TO_SUIT = 'S' ) ).

               CURRENTFIELD = 'Can only put black on red or red on black'.

               MOVING_CARD = SPACE.

             ELSE.

               TEST_NUM = TO_NUM - 1.

               IF TEST_NUM = MOVING_NUM.

                 PERFORM MOVE_CARD.

               ELSE.

                 CURRENTFIELD = 'Can only put on next higher card'.

                 MOVING_CARD = SPACE.

               ENDIF.

             ENDIF.

           ELSE.

             CURRENTFIELD = 'Can only move to another column'.

             MOVING_CARD = SPACE.

           ENDIF.

         ENDIF.

       ELSE.

         IF CURRENTFIELD(4) = 'DISC'.

           TO_SUIT = CURRENTFIELD+5(1).

           IF MOVING_TYPE = 'p'.

           ELSE.

             TEST_ROW = -1.

             
LOOP
 AT CARDS.

               IF CARDS-COL = MOVING_COL AND

                       CARDS-ROW > TEST_ROW AND CARDS-ROW < 20.

                 TEST_ROW = CARDS-ROW.

                 PERFORM MAKE_CARD.

                 MOVING_SUIT = SUIT.

                 MOVING_CARD = CARD.

                 MOVING_ROW = CARDS-ROW.

                 MOVING_COL = CARDS-COL.

                 MOVING_NUM = CARD_NUM.

               ENDIF.

             ENDLOOP.

           ENDIF.

           IF MOVING_SUIT = TO_SUIT.

             CASE MOVING_SUIT.

               WHEN 'C'. TEST_NUM = CURR_C + 1.

               WHEN 'H'. TEST_NUM = CURR_H + 1.

               WHEN 'D'. TEST_NUM = CURR_D + 1.

               WHEN 'S'. TEST_NUM = CURR_S + 1.

             ENDCASE.

             IF TEST_NUM = MOVING_NUM.

               PERFORM DISCARD_CARD.

               CASE MOVING_SUIT.

                 WHEN 'C'. CURR_C = CURR_C + 1.

                 WHEN 'D'. CURR_D = CURR_D + 1.

                 WHEN 'S'. CURR_S = CURR_S + 1.

                 WHEN 'H'. CURR_H = CURR_H + 1.

               ENDCASE.

             ELSE.

               CURRENTFIELD = 'Can only discard on next lower card'.

               MOVING_CARD = SPACE.

             ENDIF.

           ELSE.

             MOVING_CARD = SPACE.

             CURRENTFIELD = 'Can only discard on same suit'.

           ENDIF.

         ELSE.

           MOVING_CARD = SPACE.

           CURRENTFIELD = SPACE.

         ENDIF.

       ENDIF.

     ENDIF.

     PERFORM SHOW_SCREEN.

   ENDFORM.

   *---------------------------------------------------------------------*

   *       FORM MAKE_CARD                                                *

   *---------------------------------------------------------------------*

   *       ........                                                      *

   *---------------------------------------------------------------------*

   FORM MAKE_CARD.

     SUIT_NUM = CARDS-ENTRY DIV 13 .

     CASE SUIT_NUM.

       WHEN 0.SUIT = 'D'.

       WHEN 1.SUIT = 'H'.

       WHEN 2.SUIT = 'C'.

       WHEN 3.SUIT = 'S'.

     ENDCASE.

     CARD_NUM = CARDS-ENTRY MOD 13.

     CASE CARD_NUM.

       WHEN 0.CARD = 'A'.

       WHEN 1.CARD = '2'.

       WHEN 2.CARD = '3'.

       WHEN 3.CARD = '4'.

       WHEN 4.CARD = '5'.

       WHEN 5.CARD = '6'.

       WHEN 6.CARD = '7'.

       WHEN 7.CARD = '8'.

       WHEN 8.CARD = '9'.

       WHEN 9.CARD = '10'.

       WHEN 10.CARD = 'J'.

       WHEN 11.CARD = 'Q'.

       WHEN 12.CARD = 'K'.

     ENDCASE.

   ENDFORM.

   *---------------------------------------------------------------------*

   *       FORM MOVE_CARD                                                *

   *---------------------------------------------------------------------*

   *       ........                                                      *

   *---------------------------------------------------------------------*

   FORM MOVE_CARD.

     IF CURRENTFIELD <> 'BLANK'.

       CURRENTFIELD = 'Moving xxx to'.

       MOVE MOVING_SUIT TO CURRENTFIELD+7(1).

       MOVE MOVING_CARD TO CURRENTFIELD+8(2).

       MOVE TO_SUIT TO CURRENTFIELD+14(1).

       MOVE TO_CARD TO CURRENTFIELD+15(2).

     ELSE.

       CURRENTFIELD = 'Starting emtpy column'.

     ENDIF.

     IF MOVING_TYPE = 'p'.

       MOVE 'from pile' TO CURRENTFIELD+18.

       
LOOP
 AT CARDS.

         IF CARDS-ROW = 20 AND CARDS-COL = CURRENT_CARD.

           CARDS-COL = TO_COL.

           CARDS-ROW = TO_ROW + 1.

           CARDS-VIS = 'y'.

         ENDIF.

         IF CARDS-ROW = 20 AND CARDS-COL > CURRENT_CARD.

           CARDS-COL = CARDS-COL - 1.

         ENDIF.

         MODIFY CARDS.

       ENDLOOP.

       CURRENT_CARD = CURRENT_CARD - 1.

       MAX_CARD = MAX_CARD - 1.

       IF MAX_CARD < MIN_CARD.

         MIN_CARD = MIN_CARD - 1.

         MAX_CARD = MIN_CARD.

       ENDIF.

       IF CURRENT_CARD < 1.

         CURRENT_CARD = MIN_CARD.

       ENDIF.

     ELSE.

       
LOOP
 AT CARDS.

         IF CARDS-COL = MOVING_COL AND

          ( CARDS-ROW >= MOVING_ROW AND CARDS-ROW < 20 ).

           CARDS-COL = TO_COL.

           CARDS-ROW = TO_ROW + 1 + CARDS-ROW - MOVING_ROW.

           MODIFY CARDS.

         ENDIF.

       ENDLOOP.

       TEST_ROW = MOVING_ROW - 1.

       
LOOP
 AT CARDS.

         IF CARDS-COL = MOVING_COL AND CARDS-ROW = TEST_ROW.

           CARDS-VIS = 'y'.

           MODIFY CARDS.

         ENDIF.

       ENDLOOP.

     ENDIF.

     MOVING_CARD = SPACE.

   ENDFORM.

   *---------------------------------------------------------------------*

   *       FORM DISCARD_CARD                                             *

   *---------------------------------------------------------------------*

   *       ........                                                      *

   *---------------------------------------------------------------------*

   FORM DISCARD_CARD.

     MOVE 'Discarding' TO CURRENTFIELD.

     MOVE MOVING_SUIT TO CURRENTFIELD+13(1).

     MOVE MOVING_CARD TO CURRENTFIELD+14(2).

     CASE TO_SUIT.

       WHEN 'C'.

         DISC_C+1(2) = MOVING_CARD.

       WHEN 'D'.

         DISC_D+1(2) = MOVING_CARD.

       WHEN 'H'.

         DISC_H+1(2) = MOVING_CARD.

       WHEN 'S'.

         DISC_S+1(2) = MOVING_CARD.

     ENDCASE.

     IF MOVING_TYPE = 'p'.

       MOVE 'from pile' TO CURRENTFIELD+18.

       
LOOP
 AT CARDS.

         IF CARDS-ROW = 20 AND CARDS-COL = CURRENT_CARD.

           CARDS-COL = 0.

         ENDIF.

         IF CARDS-ROW = 20 AND CARDS-COL > CURRENT_CARD.

           CARDS-COL = CARDS-COL - 1.

         ENDIF.

         MODIFY CARDS.

       ENDLOOP.

       CURRENT_CARD = CURRENT_CARD - 1.

       MAX_CARD = MAX_CARD - 1.

       IF MAX_CARD < MIN_CARD.

         MIN_CARD = MIN_CARD - 1.

         MAX_CARD = MIN_CARD.

       ENDIF.

       IF CURRENT_CARD < 1.

         CURRENT_CARD = MIN_CARD.

       ENDIF.

     ELSE.

       
LOOP
 AT CARDS.

         IF CARDS-ROW = MOVING_ROW AND CARDS-COL = MOVING_COL.

           CARDS-COL = 0.

           MODIFY CARDS.

         ENDIF.

       ENDLOOP.

       TEST_ROW = MOVING_ROW - 1.

       
LOOP
 AT CARDS.

         IF CARDS-COL = MOVING_COL AND CARDS-ROW = TEST_ROW.

           CARDS-VIS = 'y'.

           MODIFY CARDS.

         ENDIF.

       ENDLOOP.

     ENDIF.

     MOVING_CARD = SPACE.

   ENDFORM.

Up/Download the table content of a SAP table to/from a file

REPORT ZAPC0042.


 
   TABLES: DD02T,

           DD03L.


 
   * Linea

   DATA: I_SOURCE LIKE LINE OCCURS 100 WITH HEADER LINE.

   DATA L_RESP.

   DATA: PROGRAM_NAME     LIKE SY-CPROG.

   DATA: L_MANDT.


 
   DATA: L_LINEA(72).

   DATA: L_TABLA(2000).

   define ap.

   APPEND &1 TO I_SOURCE.

   end-of-definition.


 
   *------PARAMETER/SELECT-OPTIONS EN PANTALLA----------------------------*

   SELECTION-SCREEN BEGIN OF BLOCK BLK_PAR WITH FRAME.

   PARAMETERS: P_TABLA LIKE DD03L-TABNAME OBLIGATORY."Nombre de tabla

   PARAMETERS: P_PATH LIKE RLGRAP-FILENAME

                      DEFAULT 'C:\TEMP\' OBLIGATORY.

   PARAMETERS:  P_BORRAR AS CHECKBOX.

   SELECTION-SCREEN END OF BLOCK BLK_PAR.

   SELECTION-SCREEN BEGIN OF BLOCK BLK_PAR3 WITH FRAME TITLE TEXT-003.

   PARAMETERS: P_W1(80),

               P_W2(80),

               P_W3(80),

               P_W4(80),

               P_W5(80).

   SELECTION-SCREEN END OF BLOCK BLK_PAR3.


 
   SELECTION-SCREEN BEGIN OF BLOCK BLK_PAR2 WITH FRAME.

   SELECTION-SCREEN BEGIN OF LINE.

   SELECTION-SCREEN COMMENT 1(6) TEXT-001.

   SELECTION-SCREEN POSITION 10.

   PARAMETERS: P_GRAB RADIOBUTTON GROUP RAD1 DEFAULT 'X'.    "Grabar

   SELECTION-SCREEN END OF LINE.


 
   SELECTION-SCREEN BEGIN OF LINE.

   SELECTION-SCREEN COMMENT 1(6) TEXT-002.

   SELECTION-SCREEN POSITION 10.

   PARAMETERS: P_CARG RADIOBUTTON GROUP RAD1.                "Cargar

   SELECTION-SCREEN END OF LINE.

   SELECTION-SCREEN END OF BLOCK BLK_PAR2.


 
   SELECTION-SCREEN BEGIN OF BLOCK BLK_PAR4 WITH FRAME.

   SELECTION-SCREEN BEGIN OF LINE.

   SELECTION-SCREEN COMMENT 1(6) TEXT-005.

   SELECTION-SCREEN POSITION 10.

   PARAMETERS: P_INS RADIOBUTTON GROUP RAD2 DEFAULT 'X'.    "Insert

   SELECTION-SCREEN END OF LINE.


 
   SELECTION-SCREEN BEGIN OF LINE.

   SELECTION-SCREEN COMMENT 1(6) TEXT-006.

   SELECTION-SCREEN POSITION 10.

   PARAMETERS: P_MOD RADIOBUTTON GROUP RAD2.                "Modify

   SELECTION-SCREEN END OF LINE.

   SELECTION-SCREEN END OF BLOCK BLK_PAR4.


 

 
   START-OF-SELECTION.


 
     PERFORM VALIDAR_USUARIO(ZAPC0050).

     PERFORM GENERAR_REPORT.


 
     IF NOT P_CARG IS INITIAL.

       IF NOT P_BORRAR IS INITIAL.

         PERFORM BORRAR_TABLA.

       ENDIF.

       PERFORM CARGAR_TABLA.

     ELSE.

       PERFORM GRABAR_TABLA.

     ENDIF.


 

 

 
   *---------------------------------------------------------------------*

   *       FORM GENERAR_REPORT                                           *

   *---------------------------------------------------------------------*

   *       ........                                                      *

   *---------------------------------------------------------------------*

   FORM GENERAR_REPORT.

     DATA L_TABLA(10).


 
     CLEAR L_MANDT.

     SELECT * FROM DD03L

      WHERE TABNAME = P_TABLA

        AND FIELDNAME = 'MANDT'.

       L_MANDT = 'X'.

     ENDSELECT.


 

 
     CONCATENATE 'I_' P_TABLA INTO L_TABLA.

     AP 'REPORT Z.'.

     CONCATENATE 'TABLES' P_TABLA '.' INTO L_LINEA SEPARATED BY SPACE.

     AP L_LINEA.

     CONCATENATE 'DATA' L_TABLA

                 'LIKE' P_TABLA 'OCCURS 100 WITH HEADER LINE.'

                 INTO L_LINEA SEPARATED BY SPACE.

     AP L_LINEA.

     AP 'FORM BORRAR_TABLA.'.


 
     IF L_MANDT = 'X'.

       CONCATENATE 'DELETE FROM' P_TABLA

                   'CLIENT SPECIFIED WHERE MANDT = SY-MANDT.'

                   INTO L_LINEA SEPARATED BY SPACE.

     ELSE.

       IF P_BORRAR = 'X'.

         MESSAGE E208(00) WITH ' cannot erase contained board by MANDT '.

       ENDIF.

     ENDIF.


 
     AP L_LINEA.

     AP 'ENDFORM.        "BORRAR TABLA'.


 
     AP 'FORM GRABAR_TABLA.'.

     CONCATENATE 'SELECT * FROM' P_TABLA

                 'INTO TABLE ' L_TABLA

                 INTO L_LINEA SEPARATED BY SPACE.

     AP L_LINEA.

     IF NOT P_W1 IS INITIAL.

       CONCATENATE 'WHERE' P_W1 INTO L_LINEA SEPARATED BY SPACE.

       AP L_LINEA.

       AP P_W2.

       AP P_W3.

       AP P_W4.

       AP P_W5.

     ENDIF.

     AP '.'.

     AP 'CALL FUNCTION ''WS_DOWNLOAD'''.

     AP 'EXPORTING'.

     CONCATENATE  'FILENAME = ''' P_PATH P_TABLA '.DAT''' INTO L_LINEA.

     AP L_LINEA.

     AP 'FILETYPE = ''DAT'''.

     AP 'TABLES'.

     CONCATENATE 'DATA_TAB = ' L_TABLA '.' INTO L_LINEA

     SEPARATED BY SPACE.

     AP L_LINEA.

     AP 'ENDFORM.        "GRABAR_TABLA'.


 
     AP 'FORM CARGAR_TABLA.'.

     AP 'CALL FUNCTION ''WS_UPLOAD'''.

     AP 'EXPORTING'.

     CONCATENATE  'FILENAME = ''' P_PATH P_TABLA '.DAT'''  INTO L_LINEA.

     AP L_LINEA.

     AP 'FILETYPE = ''DAT'''.

     AP 'TABLES'.

     CONCATENATE 'DATA_TAB = ' L_TABLA '.' INTO L_LINEA

     SEPARATED BY SPACE.

     AP L_LINEA.

     IF L_MANDT = 'X'.

       CONCATENATE 'LOOP AT ' L_TABLA '.' INTO L_LINEA SEPARATED BY SPACE.

       AP L_LINEA.

       CONCATENATE L_TABLA '-MANDT = SY-MANDT.' INTO L_LINEA.

       AP L_LINEA.