Archive for Noviembre, 2006

Repensando a Web com Rails

Fabio Akita acaba de lanzar su libro Repensando a Web com Rails con el apoyo del genial Piers Harding (Creados de los conectores Ruby, Perl y Python con SAP).

Pueden leer más sobre el libro en el sitio oficial Balance on Rails.

Desde aquí, un fuerte abrazo y muchas felicitaciones para Fabio y Piers! -;)
Saludos,

Blag.

Comentarios

Enviar Logs al SPOOL

Más de un vez no has pedido que nuestros programas, generes Log de proceso o Log de errores…Estos Logs son luego impresos.
Que pasa si el usuario quiere mantener un registro histórico de esos Logs, sin tener que usar una tabla interna? Muy fácil, podemos mandar nuestros Logs de frente al Spool…Donde quedarán almacenados hasta que los impriminan o decidan eliminarlos.

REPORT Z_DUMMY_ATG NO STANDARD PAGE HEADING.

NEW-PAGE PRINT ON NO DIALOG KEEP IN SPOOL ‘X’.

WRITE:/ ‘Fecha: ‘, SY-DATUM.
WRITE:/ ‘Hora: ‘, SY-UZEIT.
WRITE:/ ‘Mandante: ‘, SY-MANDT.
WRITE:/ ‘Usuario: ‘, SY-UNAME.
WRITE:/ ‘Transacción: ‘, SY-TCODE.

NEW-PAGE PRINT OFF.

Saludos,

Blag.

Comentarios

Problemas con el listado de archivos…

Seguramente, alguna vez habrán utilizado la función TMP_GUI_DIRECTORY_LIST_FILES para listar todos los archivos que hay en una carpeta, y se habrán dado cuenta de que la función no toma el cuenta el filtro que utilicemos…
Aquí les dejo un pequeño programa para resolver este problema de una manera muy simple…

REPORT Z_DUMMY_ATG_3 NO STANDARD PAGE HEADING.

DATA: FILTER(3) TYPE C,
TEMP_EXT TYPE STRING,
LONG TYPE I,
W_TABIX TYPE SY-TABIX,
DIR(200) TYPE C.

DATA: T_FILE_TABLE TYPE STANDARD TABLE OF SDOKPATH
WITH HEADER LINE,
T_DIR_TABLE TYPE STANDARD TABLE OF SDOKPATH
WITH HEADER LINE.

FILTER = ‘txt’.
DIR = ‘C:’.

CALL FUNCTION ‘TMP_GUI_DIRECTORY_LIST_FILES’
EXPORTING
DIRECTORY = DIR
TABLES
FILE_TABLE = T_FILE_TABLE
DIR_TABLE = T_DIR_TABLE
EXCEPTIONS
CNTL_ERROR = 1
OTHERS = 2.

LOOP AT T_FILE_TABLE.
LONG = STRLEN( T_FILE_TABLE-PATHNAME ).
LONG = LONG - 3.
TEMP_EXT = T_FILE_TABLE-PATHNAME+LONG(3).
IF TEMP_EXT NE FILTER.
W_TABIX = SY-TABIX.
DELETE T_FILE_TABLE INDEX SY-TABIX.
ELSE.
WRITE:/ T_FILE_TABLE-PATHNAME.
ENDIF.
ENDLOOP.

Saludos,

Blag.

Comentarios

FOR ALL ENTRIES vs. INNER JOIN

Mucha gente se pregunta…Que es más rápido de ejecutar…Un FOR ALL ENTRIES o un INNER JOIN? Pues bueno, para que queden dudas, he hecho un pequeño programa para medir el tiempo de ejecución entre dos tablas BKPF y BSAK.

REPORT Z_DUMMY_ATG NO STANDARD PAGE HEADING.

TABLES: BKPF, BSEG.

DATA: T_BKPF TYPE STANDARD TABLE OF BKPF
WITH HEADER LINE,
T_BSAK TYPE STANDARD TABLE OF BSAK
WITH HEADER LINE.

DATA: RT_STR TYPE I,
RT_END TYPE I,
RUN_TIME1 TYPE P DECIMALS 2,
RUN_TIME2 TYPE P DECIMALS 2.

SELECT *
INTO TABLE T_BKPF
FROM BKPF.

IF NOT T_BKPF[] IS INITIAL.
GET RUN TIME FIELD RT_STR.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE T_BSAK
FROM BSAK
FOR ALL ENTRIES IN T_BKPF
WHERE BELNR EQ T_BKPF-BELNR.
GET RUN TIME FIELD RT_END.
RUN_TIME1 = ( RT_END - RT_STR ) / 1000000 .
ENDIF.

WRITE: ‘Runtime para FOR ALL ENTRIES’, RUN_TIME1.

CLEAR: T_BKPF,T_BSAK.
REFRESH: T_BKPF,T_BSAK.

GET RUN TIME FIELD RT_STR.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE T_BSAK
FROM ( BKPF INNER JOIN BSAK
ON BKPF~BELNR = BSAK~BELNR ).

GET RUN TIME FIELD RT_END.
RUN_TIME2 = ( RT_END - RT_STR ) / 1000000 .

WRITE:/ ‘Runtime para JOIN’, RUN_TIME2.

Analicemos los resultados…

Prueba 1:
———
Runtime para FOR ALL ENTRIES 0.12
Runtime para JOIN 0.02

Prueba 2:
———
Runtime para FOR ALL ENTRIES 0.10
Runtime para JOIN 0.01

Prueba 3:
———
Runtime para FOR ALL ENTRIES 0.11
Runtime para JOIN 0.02

Claramente, el INNER JOIN supera al FOR ALL ENTRIES…Y por mucho…
Saludos,

Blag.

Comentarios

Cerrar
E-mail It