En este caso práctico vamos a añadir una ventana con el saldo pendiente del cliente, si lo tuviera, al cambiar el cliente del ticket. Es importante tener en cuenta que se trata de un ejemplo genérico. Si lo quieres implementar en tu entorno debes asegurarte de que estás obteniendo los datos deseados.


A rasgos generales, vamos a necesitar:

  • Un modelo que muestre la información
  • Un subproceso que muestre el modelo y continúe el flujo de la operativa estándar --> un proceso para encapsularlo --> un menú para llamarlo.
  • Modificar el proceso estándar en el que se quiere insertar
  • Una vista que devuelva los datos deseados


Antes de comenzar con el personalizador, crearemos la vista en la base de  datos. Para continuar, debemos asegurarnos de que el resultado que devuelve es el deseado. Así, luego será más fácil comprobar que nuestra personalización es correcta.


-- Crea la vista con las necesidades del cliente
CREATE VIEW [dbo].[vpers_Clientes_Efectos_Pdtes] AS
  select sum(pendienteeuros) as Saldo, idcliente from VClientes_Efectos_Pdtes group by idcliente

GO

-- Asigna permisos a la vista que acabas de crear
zpermisos 'vpers_Clientes_Efectos_Pdtes'


GO


En nuestro caso, queremos un botón en el formulario que ponga 'Continuar' para seguir con el ticket de venta, por lo que vamos a prepararlo antes que el modelo, así, cuando editemos el modelo, lo haremos sin interrupciones. Para ello necesitaremos un subproceso, un proceso y un menú, por ese orden


Crearemos un subproceso llamado 'Pers - Cerrar y continuar' con los siguientes parámetros: 



A continuación crearemos un proceso en el área Formulario llamado 'Pers - Continuar' que llame al subproceso que acabamos de crear



Por último, antes de pasar al modelo, tenemos que crear un menú llamado 'Pers - Mnu Continuar' que ejecute el proceso recién creado



Una vez creada la vista y el menú, comenzamos con el modelo. 


En primer lugar, crearemos un nuevo modelo de petición de datos con los siguientes parámetros:



En origen de datos debemos crear uno nuevo, por lo que le daremos al botón "nuevo" y lo configuraremos de la siguiente forma:


  • Tipo de origen de datos: Vista
  • Área: Compras
  • Descripción: Clientes efectos pendientes
  • Etiqueta: Efectos pendientes
  • Origen de datos: vpers_Clientes_Efectos_Pdtes
  • Filtro: IdCliente = '{{IdCliente}'



Ahora, vamos a diseñar el formulario. No nos vamos a detener demasiado en este punto, ya que depende mucho del gusto y necesidades personales. En nuestro caso, tenemos el siguiente esquema:



En cuanto al tamaño de los componentes del modelo, casi todos los componentes tienen unos tamaños de 0px o 100%, esto quiere decir que el componente se adaptará a la sección que lo contiene

  • Frame flotante: Ancho = 500 px
  • Sección Pie de página: Alto = 100 px


Como queremos que nuestro formulario muestre el cliente al que refiere el saldo, debemos indicarlo en los parámetros del input correspondiente. Para ello, en el campo Valor, pondremos @Cliente. Este valor, al igual que el @IdCliente del modelo, se obtiene directamente del proceso de cambio de cliente. A partir de la versión 4.4.2400.52, los valores serán "{{Cliente}}" e "{{IdCliente}}" 



Ahora tenemos que configurar el campo Saldo. En valor, indicamos el nombre del campo que devuelve la vista. Es importante recordar que debe respetar mayúsculas y minúsculas. Además, para que muestre la información con decimales y el símbolo de la moneda, hemos indicado que es de tipo Precio.



Por último, en el componente tipo menú que hemos añadido en el pie del formulario, tenemos que indicar que queremos mostrar el menú que hemos personalizado al principio. 



Una vez tenemos el modelo creado, tenemos que personalizar el proceso que queremos que lo llame. En nuestro caso, lo llamaremos en el proceso de Cambio de cliente. Para ello, necesitamos crear un subproceso que muestre el modelo anterior si el cliente tiene saldo pendiente y un proceso que lo llame.


Antes de continuar con el personalizador, vamos a volver a la base de datos para crear la función que determinará si se va a mostrar o no el modelo que hemos creado.


-- Crea la función que determinará si se muestra o no la ventana de saldo pendiente
CREATE FUNCTION [dbo].[persfunTPV_DameSaldo] (@IdCliente varchar(15))
RETURNS @Resultado TABLE (Resultado varchar(50))
AS BEGIN
  IF EXISTS (SELECT saldo FROM vpers_Clientes_Efectos_Pdtes WHERE idcliente = @IdCliente) 
  BEGIN
    INSERT INTO @Resultado VALUES (1) -- Devuelve 1 si el cliente tiene saldo pendiente
  END
  ELSE
  BEGIN
    INSERT INTO @Resultado VALUES (0) -- Devuelve 0 si el cliente no tiene saldo pendiente
  END
  
RETURN 
END
GO


-- Asigna permisos a la función que acabas de crear
zpermisos 'persfunTPV_DameSaldo'
GO


-- Inserta un registro en la tabla API_EXEC con la función  que acabas de crear para que se pueda ejecutar desde el TPV
If Exists (select * from API_EXEC where ProcName = 'persfunTPV_DameSaldo')
DELETE FROM API_EXEC WHERE ProcName = 'persfunTPV_DameSaldo'
GO
INSERT INTO API_EXEC (ProcName)
  SELECT 'persfunTPV_DameSaldo'
GO



El siguiente paso es modificar el proceso de cambio de cliente para añadirle el subproceso que mostrará el saldo pendiente en función del resultado de la función anterior.


Para ello, crearemos un subproceso de tipo Modelo que muestre el modelo anterior. Como vamos a ponerle una condición para que muestre (o no) el modelo, hay que marcar el campo Salta siguiente. En caso contrario, si no cumpliera las condiciones, no continuaría con el proceso.



Además, tenemos que añadir la condición:


Una vez guardado, buscaremos el proceso Cambiar cliente y le añadimos el subproceso anterior. Además, si queremos, podemos añadirle una atajo de teclado para poder ejecutar este proceso sin necesidad de pulsar el icono correspondiente.



Una vez realizados todos estos pasos, al pulsar en el icono de cambiar cliente, se mostrará el saldo pendiente del cliente seleccionado, si lo tuviera: