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)

Anuncios
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: ,