Diferencia entre revisiones de «DEV AUXILIARES/SELECCION CRITERIOS»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
(Página creada con «=Descripción= Category:MANUAL/DESARROLLADOR Category:DEV AUXILIARES Los auxiliares de tipo '''SELECCION_CRITERIOS''' permiten definir criterios adicionales a las Consultas, más fácil usar un ejemplo. La consulta '''CUENTA_SALDOS_Consulta''' permite consultar los saldos de cuentas contables: Por defecto, el generador de reportes embebido en la aplicación accede a los datos de la tabla de la pantalla que se está consultando. Pero en oca…»)
 
 
(No se muestran 25 ediciones intermedias del mismo usuario)
Línea 2: Línea 2:
[[Category:MANUAL/DESARROLLADOR]]
[[Category:MANUAL/DESARROLLADOR]]
[[Category:DEV AUXILIARES]]
[[Category:DEV AUXILIARES]]
Los auxiliares de tipo '''SELECCION_CRITERIOS''' permiten definir criterios adicionales a las [[DEV CONSULTAS|Consultas]], más fácil usar un ejemplo.
Los auxiliares de tipo '''SELECCION_CRITERIOS''' permiten definir criterios adicionales a las [[DEV CONSULTAS|Consultas]].


La consulta '''CUENTA_SALDOS_Consulta''' permite consultar los saldos de cuentas contables:
Este tipo de auxiliar aplica a:
*[[DEV CONSULTAS|Consultas (prxconsultas)]].
 
=Modo de operación=
Más fácil explicar la funcionalidad de este auxiliar a través de un ejemplo usando la consulta '''CUENTA_SALDOS_Consulta''' (ver [[CONTABILIDAD/SALDOS CONSULTA|Cuentas contables, saldos por rango de cuentas (CUENTA_SALDOS_Consulta)]]) que permite consultar los saldos de cuentas contables:
 
[[Archivo:20250401 1644 CONSULTA PARA SELECCION CRITERIOS.png|miniaturadeimagen|no|Consulta de saldos contables.]]
 
===Criterios de la consulta===
Los criterios definidos por la consulta son:
{| class="wikitable"
|-
! Columna !! Campo físico !! Campo lógico !! Atributo !! Descripción !! Etiquetas !! Observaciones
|-
|1||CuentaDesde||CuentaDesde||[[CONTABILIDAD/CUENTAS|CUENTA]]||Cuentas contables, saldos por rango de cuentas||REQ||Cuenta inicial.
|-
|2||CuentaHasta||CuentaHasta||[[CONTABILIDAD/CUENTAS|CUENTA]]||Cuentas contables, saldos por rango de cuentas||REQ||Cuenta final.
|-
|3||FechaDesde||FechaDesde||[[DATETIME|DATETIME]]||Fecha y hora.||REQ||Fecha para el saldo inicial.
|-
|4||FechaHasta||FechaHasta||[[DATETIME|DATETIME]]||Fecha y hora.||REQ||Fecha para el saldo final.
|-
|}
 
Si necesitáramos filtrar por sectores eligiendo uno o más de ellos no podríamos hacerlo ya que la definición de argumentos de consultas (ver [[DEV CONSULTAS/ARGUMENTOS|Consultas, argumentos (prxconsultasA)]]) no permite definir listas variables.
 
El auxiliar descripto en este artículo resuelve esa situación permitiendo definir una sentencia SQL que traiga una lista de registros, por ejemplo, lista de sectores de la empresa. Y posteriormente marcarlos para indicar cuáles hemos seleccionado. Esta funcionalidad se completa modificando el SQL de la consulta para que permita usar este nuevo argumento.
 
===Ingreso de criterios adicionales===
Al definir un auxiliar de este tipo veremos una opción en el menú de la consulta llamada "Definir criterios" como se ve justo abajo:
[[Archivo:20250401 1646 CONSULTA PARA SELECCION CRITERIOS OPCION MENU.png|miniaturadeimagen|no|Opción para definir criterios.]]
 
Al seleccionar esa opción se abrirá una pantalla como la de abajo en la que podemos marcar qué sectores queremos consultar:
[[Archivo:20250401 1647 DEFINIR CRITERIOS.png|miniaturadeimagen|no|Definir criterios.]]


La pantalla de selección de múltiples criterios solo admite una columna por lo que si queremos mostrar más de un campo habitualmente se separan con corchetes como se nota en la imagen.


Por defecto, el generador de reportes embebido en la aplicación accede a los datos de la tabla de la pantalla que se está consultando. Pero en ocasiones se requieren más datos que los disponibles en esa estructura por lo que podemos definir un auxiliar que proporciona una sentencia SQL que traerá el resultado que queremos usar de base para el reporte.
Al cerrar la pantalla, las selecciones se guardan en una tabla descripta en [[DEV AUXILIARES/SELECCION CRITERIOS TABLA|Tabla para guardar criterios de una consulta (pCONSULTA_CRITERIOS)]] y quedan asociadas a la consulta. Cada consulta tiene un GUID que se inicializa al abrirla, y es usado por esta tabla.


Este tipo de auxiliar aplica a:
El SQL de la consulta debe usar código similar al de abajo para incluir en el resultado lo que corresponda a los sectores elegidos:
*[[DEV CLASES|Clases (prxclases)]].
*[[DEV CONSULTAS|Consultas (prxconsultas)]].


=Modo de operación=
<pre>
Ante una solitud de impresión el sistema automáticamente verifica la existencia de un auxiliar de este tipo.
AND
(
NOT EXISTS (SELECT * FROM pCONSULTA_CRITERIOS WHERE FGUID = @FGUID)
OR EXISTS (SELECT * FROM pCONSULTA_CRITERIOS, SECTOR WHERE pCONSULTA_CRITERIOS.FGUID = @FGUID AND pCONSULTA_CRITERIOS.FCLAVE = SECTOR.FCLAVE_CRITERIOS AND CTAMOVTABLA.FSECTOR = SECTOR.FCODIGO)
)
)
</pre>


No se requiere ninguna participación del usuario.
El SQL primero verifica si se está usando la tabla pCONSULTA_CRITERIOS:
*Si no se está usando trae todos los registros.
*Si se está usando trae solo los registros asociados, en este caso, a los sectores elegidos como criterios.


=Etiquetas=
===Campo adicional en la tabla de sectores===
Este auxiliar no define ninguna etiqueta, directamente registramos el comando SQL.
Para simplificar esta sentencia se ha agregado a la tabla de [[CONTABILIDAD/SECTORES]] un campo calculado denominado FCLAVE_CRITERIOS que une el código y la descripción de cada sector (usando corchetes) para que tengan el mismo formato que la pantalla de selección de criterios.


=Ejemplo=
Por ejemplo, si ejecutamos:
Este auxiliar permite imprimir etiquetas de códigos de barras desde los marbetes, notar que no usa ninguna etiqueta.


<pre>
<pre>
SELECT
SELECT * FROM pCONSULTA_CRITERIOS WHERE FGUID = '{1A2F93C7-0490-4A92-B436-5CE2CBD1D946}'
MPETIQUETAS_CMP.FCODIGO
</pre>
, MPETIQUETAS_CMP.FPLANTATIPO
 
, MPETIQUETAS_CMP.FPLANTA
El sistema retornará:
, MPETIQUETAS_CMP.FPARTIDA
*[ADM][Administración]
, MPETIQUETAS_CMP.FARTICULO
*[COM][Comercial]
, FUNIDADMEDIDA = MPETIQUETAS_CMP.FEMPAQUE
*[SEC9905][Sector 9905 EDITA]
, FUNIDADMEDIDA_DESCRIPCION = ARTUNIDADMEDIDA.FDESCRIPCION
 
, FUNIDADMEDIDA_ETIQUETA = ARTUNIDADMEDIDA.FETIQUETA
Estos valores coinciden con algunos de los registros de sectores cuyo contenido es:
, MPETIQUETAS_CMP.FCLASIFICACION
, FCLASIFICACION_DESCRIPCION = ARTCLASIFICACION.FDESCRIPCION
, FCLASIFICACION_ETIQUETA = ARTCLASIFICACION.FETIQUETA
, MPETIQUETAS_CMP.FATRIBUTOC
, FCANTIDAD = MPETIQUETAS.FCANTIDADETIQUETAS
, MPETIQUETAS.FCANTIDADPALLET
, MPETIQUETAS_CMP.FFECHAINGRESO
, MPETIQUETAS_CMP.FOBSERVACIONES
, MPETIQUETAS_CMP.FUSUARIO
, MPETIQUETAS_CMP.FTS
, MPETIQUETAS_CMP.FETIQUETAPARTIDA
, MPETIQUETAS_CMP.FETIQUETACLASIFICACION
, MPETIQUETAS_CMP.FETIQUETA


FROM
{| class="wikitable"
MPETIQUETAS_CMP
|-
! FCODIGO !! FDESCRIPCION !! FCLAVE_CRITERIOS
|-
|ADM||Administración||[ADM][Administración]
|-
|COM||Comercial||[COM][Comercial]
|-
|OPS||Operaciones||[OPS][Operaciones]
|-
|PA||Planta||[PA][Planta]
|-
|SEC9905||Sector 9905 EDITA||[SEC9905][Sector 9905 EDITA]
|-
|}


INNER JOIN MPETIQUETAS ON
=Etiquetas=
MPETIQUETAS.FPLANTATIPO = MPETIQUETAS_CMP.FPLANTATIPO
Este auxiliar no define ninguna etiqueta, directamente registramos el comando SQL, aunque opcionalmente puede usarse la etiqueta '''<COMANDO>''' cerrada con '''</COMANDO>'''.
AND MPETIQUETAS.FPLANTA = MPETIQUETAS_CMP.FPLANTA
AND MPETIQUETAS.FPARTIDA = MPETIQUETAS_CMP.FPARTIDA


INNER JOIN ARTUNIDADMEDIDA ON
=Comando del auxiliar=
ARTUNIDADMEDIDA.FARTICULO = MPETIQUETAS_CMP.FARTICULO
El comando definido por el auxiliar del ejemplo es:
AND ARTUNIDADMEDIDA.FCODIGO = MPETIQUETAS_CMP.FEMPAQUE


LEFT OUTER JOIN ARTCLASIFICACION ON
<pre>
ARTCLASIFICACION.FARTICULO = MPETIQUETAS_CMP.FARTICULO
<COMANDO>
AND ARTCLASIFICACION.FCODIGO = MPETIQUETAS_CMP.FCLASIFICACION
SELECT
FCLAVE = '[' + SECTOR.FCODIGO + ']' + '[' + SECTOR.FDESCRIPCION + ']'


WHERE
, FCHECKED = CASE
MPETIQUETAS_CMP.FPLANTATIPO = FBN(FPLANTATIPO)
WHEN EXISTS (SELECT * FROM pCONSULTA_CRITERIOS WHERE pCONSULTA_CRITERIOS.FGUID = FBN(GUID) AND pCONSULTA_CRITERIOS.FCLAVE = '[' + SECTOR.FCODIGO + ']' + '[' + SECTOR.FDESCRIPCION + ']') THEN CAST(1 AS BIT)
AND MPETIQUETAS_CMP.FPLANTA = FBN(FPLANTA)
ELSE CAST(0 AS BIT)
AND MPETIQUETAS_CMP.FPARTIDA = FBN(FPARTIDA)
END


ORDER BY MPETIQUETAS_CMP.FCODIGO
FROM SECTOR
ORDER BY 1
</COMANDO>
</pre>
</pre>
Notar la sección del comando que arma el resultado de la columna '''FCHECKED''' (que es obligatoria) verificando si el sector (de la tabla de sectores) existe en la tabla pCONSULTA_CRITERIOS. Si existe retorna (CAST(1 AS BIT) sino retorna (CAST 0 AS BIT).

Revisión actual - 15:48 3 abr 2025

Descripción

Los auxiliares de tipo SELECCION_CRITERIOS permiten definir criterios adicionales a las Consultas.

Este tipo de auxiliar aplica a:

Modo de operación

Más fácil explicar la funcionalidad de este auxiliar a través de un ejemplo usando la consulta CUENTA_SALDOS_Consulta (ver Cuentas contables, saldos por rango de cuentas (CUENTA_SALDOS_Consulta)) que permite consultar los saldos de cuentas contables:

Consulta de saldos contables.

Criterios de la consulta

Los criterios definidos por la consulta son:

Columna Campo físico Campo lógico Atributo Descripción Etiquetas Observaciones
1 CuentaDesde CuentaDesde CUENTA Cuentas contables, saldos por rango de cuentas REQ Cuenta inicial.
2 CuentaHasta CuentaHasta CUENTA Cuentas contables, saldos por rango de cuentas REQ Cuenta final.
3 FechaDesde FechaDesde DATETIME Fecha y hora. REQ Fecha para el saldo inicial.
4 FechaHasta FechaHasta DATETIME Fecha y hora. REQ Fecha para el saldo final.

Si necesitáramos filtrar por sectores eligiendo uno o más de ellos no podríamos hacerlo ya que la definición de argumentos de consultas (ver Consultas, argumentos (prxconsultasA)) no permite definir listas variables.

El auxiliar descripto en este artículo resuelve esa situación permitiendo definir una sentencia SQL que traiga una lista de registros, por ejemplo, lista de sectores de la empresa. Y posteriormente marcarlos para indicar cuáles hemos seleccionado. Esta funcionalidad se completa modificando el SQL de la consulta para que permita usar este nuevo argumento.

Ingreso de criterios adicionales

Al definir un auxiliar de este tipo veremos una opción en el menú de la consulta llamada "Definir criterios" como se ve justo abajo:

Opción para definir criterios.

Al seleccionar esa opción se abrirá una pantalla como la de abajo en la que podemos marcar qué sectores queremos consultar:

Definir criterios.

La pantalla de selección de múltiples criterios solo admite una columna por lo que si queremos mostrar más de un campo habitualmente se separan con corchetes como se nota en la imagen.

Al cerrar la pantalla, las selecciones se guardan en una tabla descripta en Tabla para guardar criterios de una consulta (pCONSULTA_CRITERIOS) y quedan asociadas a la consulta. Cada consulta tiene un GUID que se inicializa al abrirla, y es usado por esta tabla.

El SQL de la consulta debe usar código similar al de abajo para incluir en el resultado lo que corresponda a los sectores elegidos:

AND
(
NOT EXISTS (SELECT * FROM pCONSULTA_CRITERIOS WHERE FGUID = @FGUID)
OR EXISTS (SELECT * FROM pCONSULTA_CRITERIOS, SECTOR WHERE pCONSULTA_CRITERIOS.FGUID = @FGUID AND pCONSULTA_CRITERIOS.FCLAVE = SECTOR.FCLAVE_CRITERIOS AND CTAMOVTABLA.FSECTOR = SECTOR.FCODIGO)
)
)

El SQL primero verifica si se está usando la tabla pCONSULTA_CRITERIOS:

  • Si no se está usando trae todos los registros.
  • Si se está usando trae solo los registros asociados, en este caso, a los sectores elegidos como criterios.

Campo adicional en la tabla de sectores

Para simplificar esta sentencia se ha agregado a la tabla de CONTABILIDAD/SECTORES un campo calculado denominado FCLAVE_CRITERIOS que une el código y la descripción de cada sector (usando corchetes) para que tengan el mismo formato que la pantalla de selección de criterios.

Por ejemplo, si ejecutamos:

SELECT * FROM pCONSULTA_CRITERIOS WHERE FGUID = '{1A2F93C7-0490-4A92-B436-5CE2CBD1D946}'

El sistema retornará:

  • [ADM][Administración]
  • [COM][Comercial]
  • [SEC9905][Sector 9905 EDITA]

Estos valores coinciden con algunos de los registros de sectores cuyo contenido es:

FCODIGO FDESCRIPCION FCLAVE_CRITERIOS
ADM Administración [ADM][Administración]
COM Comercial [COM][Comercial]
OPS Operaciones [OPS][Operaciones]
PA Planta [PA][Planta]
SEC9905 Sector 9905 EDITA [SEC9905][Sector 9905 EDITA]

Etiquetas

Este auxiliar no define ninguna etiqueta, directamente registramos el comando SQL, aunque opcionalmente puede usarse la etiqueta <COMANDO> cerrada con </COMANDO>.

Comando del auxiliar

El comando definido por el auxiliar del ejemplo es:

<COMANDO>
SELECT
FCLAVE = '[' + SECTOR.FCODIGO + ']' + '[' + SECTOR.FDESCRIPCION + ']'

, FCHECKED = CASE
WHEN EXISTS (SELECT * FROM pCONSULTA_CRITERIOS WHERE pCONSULTA_CRITERIOS.FGUID = FBN(GUID) AND pCONSULTA_CRITERIOS.FCLAVE = '[' + SECTOR.FCODIGO + ']' + '[' + SECTOR.FDESCRIPCION + ']') THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END

FROM SECTOR
ORDER BY 1
</COMANDO>

Notar la sección del comando que arma el resultado de la columna FCHECKED (que es obligatoria) verificando si el sector (de la tabla de sectores) existe en la tabla pCONSULTA_CRITERIOS. Si existe retorna (CAST(1 AS BIT) sino retorna (CAST 0 AS BIT).