lunes, 11 de agosto de 2014

Leer archivos de texto desde el App Server (Problemas con encoding)

Si alguna vez se encuentran con el problema de que están creando un archivo de  texto en el aplication server de su sistema de SAP y a la hora de leerlo les da problemas, prueben la siguiente solución.

Recientemente tuve que crear un archivo TXT con un reporte de documentos, al crearlo utilicé el open dataset normal con el encoding default, el archivo era un archivo separado por tabs, después de crear el archivo, si lo descargaba desde el app server usando la transacción CG3Y con formato ASCI, podiamos visualizar el archivo correctamente alineado, pensabamos que todo estaba bien, pero cuando tratabamos de visualizar el archivo desde windows accesando directamente al drive del server de sap(Unidad mapeada en windows), teniamos problemas de alineado, los tabs se respetaban, pero los saltos de linea no se respetaban usando notepad, al parecer esta problema se da porque los archivos en el server directamente no estan convertidos a ASCI, cosa que si pasa cuando usamos la transacción CG3Y.
La solución para esto fue utilizar el encoding UTF-8, este encoding le permite al notepad interpretar los saltos de página(que se tienen que especificar al final de cada line cuando se crea el file usando el valor Hexadecimal CL_ABAP_CHAR_UTILITIES=>CR_LF ).

Si no tienen forma de accesar los archivos directamente del server para probar la visualización, pueden descargarlo con la CG3Y utilizando el formato BIN, asi estarán viendo una version igual a la guardad en el server.

Código:
  DATAgw_lines TYPE string.
  OPEN DATASET gv_filename FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
  IF sy-subrc <> 0.
    lv_rc sy-subrc.
  ENDIF.

  LOOP AT ut_file INTO gw_lines.
    TRANSFER gw_lines TO gv_filename.
  ENDLOOP.

  CLOSE DATASET gv_filename.


Ojalá esto sea de ayuda.

Saludos

martes, 26 de febrero de 2013

Cómo encontrar Badis en transacciones o programas



Hola,


Muchas veces necesitamos saber cuales Badis tenemos disponibles para determinada transacción o programa, esto con el fin de encontrar la que mejor se acople a nuestras necesidades, una de las mejores formas de encontrar la lista de Badis disponibles es la siguiente:


1. Abrir la transacción SE24 e ingresar la clase: CL_EXITHANDLER.




2. Ir al método GET_INSTANCE.




3. Poner un break-point en la linea 14 (CALL METHOD cl_exithandler=>get_class_name_by_interface).




4. Ejecutar el programa o la transacción y cada vez que el programa se detenga en el break-point podemos encontrar el nombre de la badi en la variable exit_name.




Saludos  


Modificar Datos de tablas de BD en SAP

Hola,

A veces existe la necesidad de modificar el valor de algún campo de la Base de Datos de SAP, nótese que esto no es una buena práctica, sin embargo, puede ser muy útil para cuando se están realizando las pruebas unitarias en desarrollo.

Modificar Tablas mediante la transacción SE16N
  1. Accesar la transacción SE16N
  2. En el campo de tabla digite el nombre de la tabla que necesita editarle los campos
  3. En el campo de comandos escriba '&SAP_EDIT', luego presione ENTER.
  4. Filtre la búsqueda del campo que desee modificar introduciendo criterios de selección.
  5. Presione F8 para ejecutar el informe.
  6. Se puede eliminar  o agregar registros enteros.
  7. Se puede cambiar datos de los campos que salen con fondo blanco (los que no son campo llave).
  8. Después de realizar las modificaciones se presiona GUARDAR.

Modificar Tablas mediante la transacción SE11 o la SE16


  1. Accesar la transacción SE11 o la SE16.
  2. Se ingresa la tabla de base de datos deseada.
  3. Se selecciona el registor que se desee modificar.
  4. Presiono doble click sobre el registro encontrado para ver la información de forma vertical.
  5. En el campo de comandos escriba '/h' y presione ENTER.
  6. Me posiciono sobre cualquier campo del registro encontrado y presiono enter.
  7. Ahora, en modo debug, dependiendo de lo que se quiera hacer le cambio el valor a la variable CODE. Si se quiere modificar le asigno el valor 'EDIT', si se quiere eliminar un registro le asigno el valor 'DELE', si se quiere añadir un registro le asigno el valor 'INSR'.
  8. Se presiona F8.
  9. A continuación, según el código asignado a la variable CODE se permite eliminar un registro, agregar un registro, o modificar los valores de un registro.
  10. Presionar guardar.

Accesar a cualquier Transacción sin permisos en SAP

Hola

Muchas veces necesitamos acceder a alguna transacción dentro de SAP y el sistema nos retorna el mensaje de error para indicarnos que no tenemos acceso a la transaction especificada. Para solucionar esto existe un Function Module que nos permite acceder a cualquier transaction sin necesidad de tener los permisos.
Solamente debemos acceder a las SE37(debemos tener acceso al menos a esta transacción) ejecutar la función e ingresar el nombre de la transacción que necesitamos, con esto la función nos llevará a la transacción y podremos realizar nuestras pruebas o lo que necesitemos.
Debe de usarse con cuidado para pruebas, y evitar modificar datos en sistemas de producción.

La function Module es:
PLM_PS_EXECUTE_TRANSACTION

Saludos