Reporte de Crystal Report filtro sesión Usuario

Saludo cordial a los miembros de este Foro.

Necesito una ayuda en relación a un reporte de Arqueo de Caja que estoy desarrollando para su uso con SAP Business One. La particularidad que tiene este reporte es que me han solicitado que cuando el usuario requiera emitir el reporte, sólo se muestren los registros que él llevó a cabo en Pagos Recibidos. Actualmente tengo un mecanismo de Apertura de Caja que relaciona el usuario con la sesión actual en SAP con un numero de caja. Es decir, el cajero accede a una ventana de usuario que automáticamente toma la sesión del usuario y genera un número de caja, relacionando el usuario con ese numero de caja. El usuario prácticamente no hace nada, sólo selecciona la fecha de Apertura, hace tab y todos los valores se completan.

Los campos de usuario ya se completan con los datos de usuario, nombre Usuario etc. Esto lo logré con el sgte query:
SELECT $[USER] from dummy

Lo que necesito es saber si tengo alguna manera de decirle al Crystal Report que tome el usuario de la sesión, de alguna forma, de tal manera que sólo me muestre las operaciones que le corresponden al mismo, algo como ésto en el comando del reporte:

SELECT T0…..FROM ORCT T0
WHERE T0.”UserSign” = $[USER]

Alguien tuviera alguna sugerencia por favor.

Desde ya agradecido.

:heavy_heart_exclamation: Importante :exclamation: La siguiente respuesta es generada por nuestro Robot AI de Consultoria-SAP denominado “CSAPBOT” usando tecnología de IA -inteligencia artificial. Por lo tanto, puede haber datos incorrectos. No podemos garantizar que la información sea 100% correcta, solo consultores SAP profesionales y usuarios del sistema podrían verificar la información. ¿Te animas a hacerlo? ¿Aceptas el reto? Puedes responder este debate si sigue abierto!

Si quieres aprender más sobre nuestros sistemas con AI, te esperamos en este artículo.


Hola, gracias por tu excelente descripción del caso. Es un escenario muy bien planteado sobre control de caja por usuario en SAP Business One, y es totalmente posible filtrar en un reporte de Crystal Reports los datos de usuario de sesión actual, siempre que se configure correctamente desde SAP.


Objetivo

Filtrar los registros de pagos (ORCT) por usuario de sesión (cajero), cuando se ejecuta un reporte en Crystal Reports directamente desde SAP Business One.


¿Es posible obtener el usuario de sesión dentro del reporte?

, pero NO directamente usando $[USER] dentro del Command del Crystal Report. Esa sintaxis ($[USER]) funciona solo dentro de campos de definición de valores en SAP B1, no dentro de la definición de un Command en Crystal.


¿Cómo lograrlo correctamente?

Tienes dos opciones confiables:


:white_check_mark: Opción 1: Pasar el usuario como parámetro en SAP B1 al Crystal Report

  1. Crea un parámetro llamado UserID en tu Crystal Report.

  2. En SAP B1, cuando adjuntes el reporte (en Reportes → Gestión de reportes o en el menú de impresión), configura el parámetro como:

    SELECT $[USER] FROM DUMMY
    
    

    Esto enviará automáticamente el nombre del usuario actual que ejecuta el reporte como valor del parámetro UserID.

  3. Luego, en tu Command de Crystal:

    SELECT 
      T0.DocEntry,
      T0.DocDate,
      T0.CardCode,
      T0.CardName,
      T0.CashSum,
      T0.UserSign
    FROM ORCT T0
    WHERE T0.UserSign = (SELECT USERID FROM OUSR WHERE USER_CODE = '{?UserID}')
    
    

:white_check_mark: Opción 2: Usar USER_CODE directamente si ya estás guardando el usuario

Si en tu lógica de apertura de caja ya estás almacenando el USER_CODE, y no necesitas hacer la traducción del ID numérico (UserSign), podrías incluso comparar directamente con el string:

WHERE OUSR.USER_CODE = '{?UserID}'

Siempre que ORCT.UserSign esté correctamente relacionado.


Importante considerar:

  • La tabla OUSR es la que almacena los datos de usuario, donde:

    • USERID es el UserSign (número entero)

    • USER_CODE es el username visible en SAP

  • En la tabla ORCT, el campo UserSign indica quién creó el documento de pago.


Consejo extra

Ya que en tu ventana de apertura de caja se genera un número de caja relacionado al usuario, puedes complementar el filtro para que también valide:

...AND T0.U_NumCaja = (SELECT MAX(U_NumCaja) FROM [tu_tabla_caja] WHERE UserCode = '{?UserID}')

De esta forma, aseguras que vean solo lo que corresponde a su caja abierta y no todo su historial.


Resumen Consultoria-SAP

  • Puedes filtrar por usuario de sesión en Crystal Reports desde SAP B1 si configuras correctamente un parámetro que reciba $[USER].

  • Luego, en el SQL del Command, traduces ese parámetro a UserSign con la tabla OUSR.

  • Esta solución es común en escenarios de arqueo de caja, en módulos de Finanzas (FI) y Ventas (SD).

  • Recuerda siempre validar la sesión del usuario activo si usas múltiples cajas abiertas.

¡Estamos aquí para ayudarte en los Foros SAP de Consultoria-SAP!