TPV - Caso práctico 7 - Añadir observaciones en inserción/edición de línea

Creado por David Miralpeix, Modificado el Mar, 5 Mar, 2024 a 11:34 A. M. por Óscar Ortiz

En este caso práctico vamos a crear un modelo que se ejecutará tras insertar o al editar una línea de un ticket, para permitir editar datos de la línea que no están disponibles desde la inserción/edición de línea estándar de la TPV.


También veremos cómo se puede condicionar este modelo para solo mostrarlo cuando se cumplan ciertos requisitos personalizables. En nuestro caso, vamos a hacer que la ventana solo se levante cuando la línea que se inserte, tenga un IdLinea par.


Recoger datos y aplicar condiciones deseadas


Será necesario un subproceso



Que tenga como origen de datos un procedimiento en el que se evalúe una o tantas condiciones como se necesiten.



Por ejemplo, en este procedimiento, se analiza si el IdLinea es par o impar.


CREATE PROCEDURE [dbo].[pPers_Evalua_Insercion]  @iXML XML,  @oXML XML OUTPUTASDECLARE @IdTicket INTDECLARE @IdLinea INTDECLARE @MostrarVentana BITBEGIN TRY    -- Obtener parámetros de entrada  SELECT @IdTicket = T.C.value('IdTicket[1]','INT'),    @IdLinea = T.C.value('Linea[1]/IdLinea[1]','INT')  FROM @iXML.nodes('./data') T(C)  IF (@IdLinea % 2 = 0) BEGIN    SET @MostrarVentana = 1  END ELSE BEGIN    SET @MostrarVentana = 0  END    SET @oXML =     (SELECT      (SELECT         'ok' AS Estado,        '' AS Mensaje      FOR XML PATH('Respuesta'), ELEMENTS, TYPE),      (SELECT          @MostrarVentana AS MostrarVentana,        @IdTicket AS IdTicket,        @IdLinea AS IdLinea      FOR XML PATH('data'), ELEMENTS, TYPE),      (SELECT          NULL      FOR XML PATH('view'), ELEMENTS, TYPE)    FOR XML PATH('Resultado'), ELEMENTS, TYPE)  RETURN -1END TRY     BEGIN CATCH  IF @@TRANCOUNT > 0 ROLLBACK TRAN    DECLARE @CatchError NVARCHAR(MAX) = ERROR_MESSAGE()  DECLARE @err_state INT = ERROR_STATE()  DECLARE @err_severity INT = ERROR_SEVERITY()    RAISERROR(@CatchError,@err_severity, @err_state)   RETURN 0END CATCHGOzPermisos 'pPers_Evalua_Insercion'
SQL

Una vez configurado todo, se incluirá el subproceso en el proceso Pos inserción de línea (AHOR87). En versiones posteriores a la v4.4.2400.88 el proceso se llama TICKET LÍNEA - POST inserción (AHOR87).



Modelo


Una vez tenemos todo lo anterior configurado, podemos crear el modelo.



El origen de datos, para obtener datos extra de la línea del artículo, dependiendo de las necesidades en cuanto a la ventana, puede no ser necesario.



El diseño del formulario:




Guardado de formulario


El modelo en cuestión servirá, en este caso, para modificar las observaciones de una línea, así que necesita de un procedimiento y un subproceso/proceso/menú.


El procedimiento guarda las observaciones de la línea del ticket, en caso de recibir múltiples líneas de un ticket, solo modificará las observaciones de la primera:


CREATE PROCEDURE [dbo].[pPers_TPV_Guarda_Observaciones]  @iXML XML,  @oXML XML OUTPUTASDECLARE @IdTicket INTDECLARE @IdLinea INTDECLARE @Observaciones VARCHAR(255)BEGIN TRY  -- Obtener parámetros de entrada  SELECT @IdTicket = T.C.value('IdTicket[1]','INT'),    @IdLinea = T.C.value('Linea[1]/IdLinea[1]','INT'),    @Observaciones = T.C.value('Observaciones[1]','VARCHAR(255)')  FROM @iXML.nodes('./data') T(C)        -- Actualizar observaciones de la linea del ticket  UPDATE Tickets_Lineas SET Observaciones = @Observaciones  WHERE IdTicket = @IdTicket AND IdLinea = @IdLinea        -- Mensaje de ok  SELECT @oXML = '<Resultado>          <Respuesta>            <Estado>ok</Estado>            <Mensaje>Observaciones de la línea actualizada</Mensaje>          </Respuesta>          <data />          <view />        </Resultado>'  RETURN -1END TRY     BEGIN CATCH  IF @@TRANCOUNT > 0 ROLLBACK TRAN    DECLARE @CatchError NVARCHAR(MAX) = ERROR_MESSAGE()  DECLARE @err_state INT = ERROR_STATE()  DECLARE @err_severity INT = ERROR_SEVERITY()    RAISERROR(@CatchError,@err_severity, @err_state)   RETURN 0END CATCHGO-- Asigna permisos al procedimiento almacenado que acabas de crearzPermisos 'pPers_TPV_Guarda_Observaciones'
SQL


Una vez creado el procedimiento, creamos un origen de datos usando este procedimiento de la siguiente forma:



Ese origen de datos, lo utilizamos en un subproceso de tipo Guardado de formularios:



Incluimos el subproceso en un proceso que refresca el ticket:




NOTA:

El refresco del ticket solo será necesario en caso de querer mostrar las observaciones en las líneas del ticket



Incluimos el proceso en un menú:



Y una vez tenemos el menú, lo asignamos al pie del modelo en el que hemos colocado un componente ahora menú.


Subproceso que levanta el modelo


Crearemos el subproceso, al que le asignaremos el modelo que acabamos de crear.



Después, vamos a colocarle la condición que va a hacer que se levante solo cuando queremos.



Este subproceso lo vamos a colocar, igual que el anterior, en el proceso TICKET LÍNEA - POST inserción



Una vez configurado, la ventana se levantará al realizar una inserción, pero solo cuando se cumplan las condiciones que queramos.


¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo