jueves, 22 de marzo de 2012

TRANSFER, GUI_DOWNLOAD Grabar Archivo Directorio


Nota: los archivos grabados con la sentencia OPEN DATASET , TRANSFER , no se visualizan bien en el programa Notepad de Windows debido a que se aprecian todos los datos juntos como si fuera una sola línea, pero si se abren con WordPad, Excel u otra herramienta estos datos se aprecian bien organizados.


EJEMPLO GRABAR ARCHIVO A RUTA EN UN SERVIDOR.

REPORT ZTMP_PRUEBA.

TYPES BEGIN OF ST_DEMO,
        REG_NO
(10TYPE C,
        NAME
(20TYPE C,
        ADDR
(20TYPE C,
        
END OF ST_DEMO.

DATA WA_DEMO TYPE ST_DEMO,
       IT_DEMO 
TYPE TABLE OF ST_DEMO,
       L_FNAME 
TYPE STRING .

PARAMETERSP_FNAME(128TYPE C DEFAULT '/usr/sap/SRI/SYS/src/DOWN.TXT' OBLIGATORY.

L_FNAME 
P_FNAME.

WA_DEMO
-REG_NO '100001'.
WA_DEMO
-NAME 'ANAND'.
WA_DEMO
-ADDR 'NAGARKOVIL'.
 
APPEND WA_DEMO TO IT_DEMO.

WA_DEMO
-REG_NO '100002'.
WA_DEMO
-NAME 'VIKRAM'.
WA_DEMO
-ADDR 'CHENNAI'.
APPEND WA_DEMO TO IT_DEMO.


 
OPEN DATASET L_FNAME FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

 
WRITE :'REG NUM',16 'NAME',37 'ADDRESS' .

  
LOOP AT IT_DEMO INTO WA_DEMO.
    
IF SY-SUBRC 0.
      
TRANSFER WA_DEMO TO L_FNAME.
      
WRITE :/5 WA_DEMO-REG_NO,16 WA_DEMO-NAME,37 WA_DEMO-ADDR.
    
ENDIF.
  
ENDLOOP.

http://help.sap.com/saphelp_40b/helpdata/en/34/55cad198482bc0e10000009b38f91f/content.htm
http://help.sap.com/saphelp_40b/helpdata/en/34/8e73b06df74873e10000009b38f9b8/content.htm


EJEMPLO GRABAR  ARCHIVO A RUTA EN UN SERVIDOR.



REPORT ZTMP_PRUEBA2.

DATABEGIN OF t_itab OCCURS 0,
              
line(2500),
END OF t_itab.

DATA RUTA_ARC TYPE STRING.

RUTA_ARC 
'/CVPL/PRUEBA.TXT'.

OPEN DATASET RUTA_ARC FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

LOOP AT t_itab.
     
TRANSFER t_itab TO RUTA_ARC.
ENDLOOP.

PARA GRABAR ARCHIVOS A RUTAS de PCs CLIENTES
DATA RUTA_ARC TYPE STRING.

RUTA_ARC 'C:\TEMPORAL\PRUEBA.TXT'.

CALL FUNCTION 'GUI_DOWNLOAD'
    
EXPORTING
*   BIN_FILESIZE                    =
      filename                      
RUTA_ARC
      filetype                      
'ASC'
      trunc_trailing_blanks_eol     
space
    
TABLES
      data_tab                      
=  t_itab
 
EXCEPTIONS
   file_write_error                
1
   no_batch                        
2
   gui_refuse_filetransfer         
3
   invalid_type                    
4
   no_authority                    
5
   unknown_error                   
6
   header_not_allowed              
7
   separator_not_allowed           
8
   filesize_not_allowed            
9
   header_too_long                 
10
   dp_error_create                 
11
   dp_error_send                   
12
   dp_error_write                  
13
   unknown_dp_error                
14
   access_denied                   
15
   dp_out_of_memory                
16
   disk_full                       
17
   dp_timeout                      
18
   file_not_found                  
19
   dataprovider_exception          
20
   control_flush_error             
21
   
OTHERS                          22
            
.

martes, 13 de diciembre de 2011

Funcion para extraer año y periodo de fecha


* Encuentra el periodo actual basado en la fecha actual
*
REPORT ZPERIOD.

DATA: X_PERIOD LIKE T009B-POPER,
      X_YEAR   LIKE CSSL-GJAHR.

CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
     EXPORTING
          I_DATE         = SY-DATUM
*         I_MONMIT       = 00
          I_PERIV        = 'K4'
     IMPORTING
          E_BUPER        = X_PERIOD
          E_GJAHR        = X_YEAR
     EXCEPTIONS
          INPUT_FALSE    = 1
          T009_NOTFOUND  = 2
          T009B_NOTFOUND = 3
          OTHERS         = 4.

WRITE: / 'El periodo actual de la compañia es:', X_PERIOD, X_YEAR.

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.