miércoles, 19 de octubre de 2011

SET/GET PARAMETER Ejemplo

 
Se utiliza para guardar un valor en memoria y volverlo a leer desde otro codigo.


REPORT  PARAMID                                                 .
 
data: gd_valuein(10) type c,
      gd_valueout(10) type c.
 
PARAMETERS: p_value(10) type c.
 
 
********************
*start-of-selection.
start-of-selection.
get parameter ID 'ZMESS' field gd_valuein.
set parameter ID 'ZMESS' field p_value.
get parameter ID 'ZMESS' field gd_valueout.
 
 
******************
*end-of-selection.
end-of-selection.
write:/ 'value at start of program:',  gd_valuein,
      / 'value at end of program:',  gd_valueout.

lunes, 10 de octubre de 2011

Ciclos (Loops)

Ciclos incondicionales:

DO [n TIMES] ...
[Statement_block]
[statement_block]
ENDDO.
ENDDO.

Además de utilizar el TIMES para restringir el número de pasadas de bucle de n.Utilizar  TIMES para restringir a n el numero de veces que pasa por el ciclo.  Las sentencias EXIT y STOP finalizan el ciclo. El campo del sistema sy-index contiene el numero de ciclos por donde ha pasado.

Ejemplo 1:

DO.
  WRITE sy-index.
SI SY-índice = 3.
   IF sy-index = 3.
EXIT.
         EXIT.
   ENDIF.
ENDDO.ENDDO.

La salida es: 1 2 3.

Ejemplo 2:
DO 2 TIMES.
ESCRIBE SY-índice.
   WRITE sy-index.
SKIP.
   SKIP.
   DO 3 TIMES.
      WRITE sy-index.
ENDDO.
   ENDDO.
SKIP.    SKIP.
 ENDDO.

ENDDO.ENDDO.La salida esLa salida de la lista es la siguiente::
1
1 2 3

2

1 2 3



Ciclos condicionales:

Se repite el ciclo hasta que una condicion sea verdadera.

WHILE log_exp
[Statemaent_block]
[statemaent_block]
ENDWHILE.
ENDWHILE.

Ejemplo:
REPORT demo_flow_control_while.
DATA: length TYPE i VALUE 0,
strl TYPE i VALUE 0,
string(30) TYPE c VALUE 'Test String'.
strl = strlen( string ).

WHILE string NE space.
       WRITE string(1).
       length = sy-index.
       SHIFT string.
ENDWHILE.

WRITE: / 'STRLEN: ', strl.
WRITE: / 'Length of string:', length.

La salida es : T es t S tr ing

STRLEN: 11

Length of String: 11


Terminar un paso de un ciclo incondicionalmente.

Para terminar un único paso de un ciclo utilizar CONTINUE, no ejecuta las sentencias restantes después del CONTINUE y salta al siguiente paso del ciclo.
DO 4 TIMES.
SI SY-índice = 2.
   IF sy-index = 2.
CONTINUE.
          CONTINUE.
ENDIF.
   ENDIF.
ESCRIBE SY-índice.
   WRITE sy-index.
ENDDO.ENDDO.
ENDDO.

La salida es:

1 3 4


Terminar un paso de un ciclo condicionalmente.

Para terminar un paso de un ciclo utilizar CHECK, si la condición no es vardadera cualquier sentencia restante dentro del ciclo es ignorada y continua en el siguiente paso del ciclo.

DO 4 TIMES.
CONSULTAR sy-índice de entre 2 y 3.
   CHECK sy-index BETWEEN 2 and 3.
ESCRIBE SY-índice.
   WRITE sy-index.
ENDDO.ENDDO.

La salida es:
2 3

Salir de un ciclo

Para terminar un cliclo utilizar la sentencia EXIT.
DO 4 TIMES.
SI SY-índice = 3.
   IF sy-index = 3.
EXIT.
          EXIT.
ENDIF.
   ENDIF.
ESCRIBE SY-índice.
ENDDO.  
WRITE sy-index.
ENDDO.ENDDO.
La salida es:
1 2




Funcion completar o quitar ceros a la izquierda

* Función que saca los ceros a la izquierda de una variable
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’
EXPORTING
INPUT = VG_VARIABLE
IMPORTING
OUTPUT = VG_VARIABLE.
* Función que completa con ceros a la izquierda de una variable
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
INPUT = VG_VARIABLE
IMPORTING
OUTPUT = VG_VARIABLE.

Funcion mayusculas y minusculas

FUNCION TRANSLATE: Convierte un texto a mayusculas o minusculas.

TRANSLATE <texto> TO UPPER CASE.
TRANSLATE <texto> TO LOWER CASE.
TRANSLATE <texto> USING <texto1>.
TRANSLATE <texto> FROM CODE PAGE g1 TO CODE PAGE g2.
TRANSLATE <texto> FROM NUMBER FORMAT n1 TO NUMBER FORMAT n2.

EJEMPLO 1:

DATA TEXTO(6).MOVE 'prueba' TO TEXTO.
TRANSLATE TEXTO TO UPPER CASE.
WRITE TEXTO.


EJEMPLO 2:

DATA: TEXTO(30) VALUE 'ESTO ES UNA PRUEBA',
CAMBIAR
(6) VALUE 'EXBY'.
WRITE TEXTO.
TRANSLATE TEXTO USING CAMBIAR.
WRITE: / TEXTO.


SALIDA:

ESTO ES UNA PRUEBA

XSTO XS UNA PRUXYA

Funcion Sumar Meses a una Fecha

*——————————————————————————-
*LV_DATE_ENT : Fecha de entrada a la que le calculo los meses
*LV_MES: Cantidad de meses que le sumo a LV_DATE_ENT
*LV_DATE_SAL : Fecha que me devuelve la función
*——————————————————————————-
DATALV_DATE_ENT TYPE D,
              LV_MES TYPE i,
              LV_DATE_SAL TYPE D.

LV_DATE_ENT sy-datum.
LV_MES 2.

CALL FUNCTION 'HR_PSD_DATES_ADD_MONTHS'
    EXPORTING
      V_DATE       LV_DATE_ENT
      V_MONTHS     LV_MES
    IMPORTING
      E_DATE       LV_DATE_SAL
    EXCEPTIONS
      NOT_POSITIVE 1
      OTHERS       2.

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

Ejemplo:

DATALV_DATE_ENT TYPE D,
       LV_MES TYPE i,
       LV_DATE_SAL TYPE D.

LV_DATE_ENT sy-datum.
LV_MES 10.


CALL FUNCTION 'HR_PSD_DATES_ADD_MONTHS'
    EXPORTING
      V_DATE       LV_DATE_ENT
      V_MONTHS     LV_MES
    IMPORTING
      E_DATE       LV_DATE_SAL
    EXCEPTIONS
      NOT_POSITIVE 1
      OTHERS       2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.