Archivo

Archive for the ‘BASIS’ Category

Tabla USR02 – Desbloquear usuario por tabla

Caso: Se desea desbloquear un usuario SAP mediante tabla; es decir no tenemos acceso a la SU01 pero si a modificar tablas (ejemplo: tenemos perfil de programador y no de BASIS).

Solución: En la tabla USR02, cuando por ejemplo un usuario tiene bloqueado el usuario por intentos fallidos, el campo UFLAG aparece con el valor 128. Para desbloquearlo sólo debemos volver el valor a 0 (cero)

Categorías:BASIS Etiquetas: , , , ,

Saltar mensaje "Falta autorización para transacción"

Caso: Se desea evitar el mensaje "Falta autorización para transacción"

Solución: Si tenemos acceso a la SE37, podemos ejecutar la función RS_HDSYS_CALL_TC_VARIANT.

Allí, en el parámetro TCODE ponemos la transacción a la cual deseamos ingresar y quitamos la X al parámetro AUTHORITY-CHECK.

Debe usarse con cuidado porque queda en el LOG de accesos y en la transacción (ejemplo en la SU01) puede que no tengas otros accesos

TH_LONG_USR_INFO – Validar que un usuario no se encuentra ya logueado en la transacción

Caso: se busca generar un mensaje de error si el usuario ya se encuentra logueado en la transacción

Solución: utilizamos TH_LONG_USR_INFO

FORM validar_doble_ingreso  USING   p_mandt  TYPE sy-mandt
                                     p_uname  TYPE sy-uname
                                     p_tcode  TYPE sy-tcode
                            CHANGING p_error  TYPE c.
 
  DATA: wterminal LIKE  usr41-terminal,
        wfdpos    TYPE sy-fdpos,
        wmode     TYPE sy-modno,
        user_info	TYPE TABLE OF uinfo2,
        lw_user_info LIKE LINE OF user_info.
 
  wmode = sy-modno + 1.
 
  CALL FUNCTION 'TERMINAL_ID_GET'
    EXPORTING
      username             = sy-uname
    IMPORTING
      terminal             = wterminal
    EXCEPTIONS
      multiple_terminal_id = 1
      no_terminal_found    = 2
      OTHERS               = 3.
 
  SEARCH wterminal FOR '-'.
 
  CHECK sy-subrc = 0.
  wfdpos = sy-fdpos + 1.
  wterminal = wterminal+wfdpos.
 
  REFRESH user_info.
 
  CALL FUNCTION 'TH_LONG_USR_INFO'
    EXPORTING
      user      = '*'
    TABLES
      user_info = user_info.
 
* Busco si el usuario tiene una sesión abierta en SISCON
  READ TABLE user_info INTO lw_user_info WITH KEY client   = p_mandt
                                                  user     = p_uname
                                                  tcode    = p_tcode
                                                  terminal = wterminal.
 
  IF sy-subrc EQ 0.
    p_error = 'X'.
  ENDIF.
 
ENDFORM.                    " VALIDAR_DOBLE_INGRESO
Categorías:BASIS Etiquetas: , ,

SM04 – Obtener lista de Usuarios y Transacciones logueados

Caso: se busca ver los usuarios logueados en el mandante y en que transacción se encuentran.

Screenshot_2

Solución: el código es obtenido del programa RSM04000_ALV (el de la SM04), en versión simplificada.

TABLES: msxxlist,
        uinfo.
 
* old (deprecated) UINFO structure
DATA: BEGIN OF COMMON PART usr.
DATA: BEGIN OF usr_tabl OCCURS 10.
        INCLUDE STRUCTURE usrinfo.
DATA: END OF usr_tabl.
DATA: END OF COMMON PART usr.
 
DATA: th_opcode(1)         TYPE x.
 
CONSTANTS:  opcode_list                     LIKE th_opcode VALUE 2.
 
REFRESH usr_tabl[].
 
CALL 'ThUsrInfo' ID 'OPCODE' FIELD opcode_list
  ID 'TABUSR' FIELD usr_tabl-*sys* .
 
SORT usr_tabl BY mandt bname.
 
LOOP AT usr_tabl.
  WRITE: / usr_tabl-MANDT, usr_tabl-BNAME, usr_tabl-tcode .
ENDLOOP.

Nota: para ver todas las transacciones de los usuarios, usar:
DATA: user_info  TYPE TABLE OF uinfo2

CALL FUNCTION 'TH_LONG_USR_INFO'
   EXPORTING
     user      '*'
   TABLES
     user_info user_info. 

Categorías:BASIS Etiquetas: , , ,

SE03 – Buscar órdenes de transporte por objeto

Caso: se busca en que orden se encuentra un objeto.

Solución: Por la transacción SE03 se puede buscar objetos en las órdenes de transporte (tanto liberadas con modificables).

Screenshot_1

Se puede filtrar por el objeto a buscar (programa, clase, tipo tabla, etc.). 

Screenshot_2

Otros objetos que no aparecen por defecto en la pantalla inicial pero que se pueden añadir son:

R3TR TABU – Contenido de tabla
R3TR TDAT – Customizing: Contenido de tablas
R3TR VDAT – Actualización vistas: Datos
R3TR CDAT – Actualización cluster vistas: Datos

Link: https://abapforsap.wordpress.com/2013/07/18/buscar-ordenes-de-transporte/

Crear autorización para leer archivos del servidor

Transacción: PFCG

Escenario: tengo un usuario que en fondo ejecuta una transacción que lee archivos txt del servidor de SAP para actualizar una tabla antes de mostrarle los datos en pantalla. Luego copia esos archivos a una carpeta de procesados y los elimina de la ubicación original. Me sirve para no tener que ejecutar un JOB periódico y así se actualizan los datos de pantalla on-demand.

El problema surge con las autorizaciones que le tengo que dar al usuario para ingresar a dicha transacción. Encontré un link interesante que abajo adjunto en el cual se puede llamar a la función AUTHORITY_CHECK_DATASET en el programa Z para poder verificar que el usuario puede acceder a leer y/o escribir archivos del servidor.

Sino, la otra forma (como verán en el documento adjunto no es recomendable ya que si tienen varias transacciones o archivos que leer deben pasarse agregando manualmente a los perfiles las autorizaciones) es agregar una autorización S_DATASET por la PCCG, agregando el nombre del archivo (en mi caso es *), el nombre del programa y las actividades deseadas, entre las que están:

06 Borrar

33 Leer

34 Escribir

A6 Leer con filtro

A7 Escribir con filtro

Link: http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/11687

Categorías:BASIS Etiquetas: ,

Como crear un objeto de autorización

Vamos a ver como hacer un objeto de autorización simple.

Supongamos que queremos verificar que el usuario tiene autorización para acceder a trabajar sobre la sociedad AR01.

Hay distintos tipos de autorización para un objeto; por ejemplo se puede visualizar, modificar, etc. sobre una varable. Vamos a agregar todas las actividades para poder acceder a una sociedad.

Transacciones relacionadas: SU21, SU24, SE38, PFCG.

  1. Primero hay que ir a la transacción SU21 para crear una clase de objeto. Lo creamos y luego de creado hacemos doble click sobre él.

  1. Aparecerá la lista de objetos de la clase. Creamos un nuevo objeto

  1. Presionamos el botón “Actividades permitidas” y elegimos las actividades que corresponden a la autorización. En nuestro caso eligiremos la 01, 02 y 03.

  1. Guardamos los cambios.
  1. Ahora vamos a la transacción SU24 para relacionar nuestro programa Z a la autorización que creamos. Indicamos el nombre de nuestra transacción Z y presionamos ejecutar.

  1. Veremos la lista de transacciones, presionamos en “Ind. Verificación” o hacemos doble click sobre el nombre de la transacción

  1. Entramos a modificar el indicador de verificación. Presionamos “Obj. Autoriz” para agregar nuestro objeto.

  1. Indicamos el objeto recién creado:

  1. Ahora el objeto aparece en la lista. Grabamos.

  1. Nos queda agregar la autorización en el programa Z. En nuestro caso queremos ver que el usuario tenga permiso de visualización de la sociedad que viene por parámetro:

*—————————————————————————-

at selection-screen.

perform check_autorizacion using pa_bukrs.

*—————————————————————————-

form check_autorizacion using p_bukrs type bukrs.

authority-check object ‘ZFI_AR0001’
id ‘BUKRS’ field p_bukrs
id ‘ACTVT’ field ’03’.

if sy-subrc <> 0.
message e001 with p_bukrs. “No tiene autorización para la sociedad &.
endif.
endform.

*——————————————————————————————-

  1. Ahora bien, cuando queramos ejecutar el programa, nos va a dar error ya que nosotros mismos no tenemos autorización para acceder al mismo (salvo que tengamos perfil SAP_ALL). Por lo tanto debemos crearnos un perfil. Vamos a la transacción PFCG, ponemos el nombre de un nuevo rol y ponemos el botón “Nuevo Rol”:

  1. Al crear el nuevo rol, debemos incluir una descripción. La agregamos y vamos a la lengüeta “Autorizaciones” y allí presionamos el botón verde que dice proponer perfil: nos va a crear un nuevo perfil. Presionamos entonces el botón Modificar datos de autorización.

  1. Si nos pide seleccionar modelo, le ponemos que no y si nos dice guardar el rol le ponemos que si. Aparecerá la siguiente pantalla, en donde apretaremos en “Agregar manualmente”:

  1. Indicamos el objeto de autorización y presionamos OK.

  1. Ahora debemos indicar en nuestro perfil que accesos va a tener el mismo sobre el objeto de autorización. Recordemos que el objeto está creado para las actividades 01, 02 y 03.

Pero queremos que este rol tenga solo acceso para la actividad 03. Sería el caso de un perfil de “visualizador”, generalmente la nomenclatura es que se hace un perfil ZSD_VIS_SOCIEDAD por ejemplo para este caso y para las actividades 01 y 02 sería: ZSD_MGT_SOCIEDAD.

Para la sociedad elegimos sólo la AR01.

  1. Vemos que todo el árbol queda en verde. Apretamos el botón de GENERAR y volvemos a la pantalla anterior, en donde tenemos que ir a la lengüeta de usuarios para agregarnos. Agregamos nuestro usuario y presionamos el botón COMPARAR USUARIOS y luego “Ajuste completo” para ajustar los datos y así se actualiza el maestro de usuarios con los cambios. Finalmente presionamos guardar y volvemos a ejecutar el programa Z.
Categorías:BASIS, Otras Etiquetas: , , , , ,