FAQ - TPV - ¿Cómo puedo ordenar familias y artículos mostrados en mi TPV táctil?

Creado por David Miralpeix, Modificado el Tue, 05 Mar 2024 a las 12:08 PM por Óscar Ortiz

Puede suceder que se quiera cambiar el orden para que los artículos aparezcan, por ejemplo, por orden alfabético. 


Para realizar esto, en versiones antiguas como la 4.4.2300 se debe personalizar la vista vTPV_Articulos_Familias, forzando la ordenación dentro de la propia vista. Consulta con el administrador del ERP para llevar a cabo estos pasos, ya que se necesita un perfil técnico para implementarlo.


NOTA:

Existe la posibilidad de personalizar la GRID desde el personalizador, mediante una vista personalizada del TPV objeto.

Consulta en este artículo la información. 


Ya que SQL Server sobrescribe el ORDER BY de las vistas para ejecutarse de forma más eficiente, hay que utilizar un ORDER BY  con offset, disponible desde la versión de SQL Server 2012.


Una vez creada la vista, hay que cambiar el campo SQL de la colección TPV_Articulos_Familias.


IF EXISTS(SELECT 1 FROM sys.views WHERE OBJECT_ID = OBJECT_ID('vPERS_TPV_Articulos_Familias'))
  DROP VIEW vPERS_TPV_Articulos_Familias
GO

CREATE VIEW [dbo].[vPERS_TPV_Articulos_Familias]
AS
-- =============================================
-- #AUTHOR:  
--        AXIUM
-- #NAME:
---        vPERS_TPV_Articulos_Familias
-- #CREATION: 
--        25/01/2021
-- #CLASIFICATION:
--        000-SISTEMA
-- #DESCRIPTION:
--        Personalización necesaria para devolver los campos necesarios para mostrar los artículos por familia ordenados por descrip
-- #PARAMETERS: 
--      
-- #OBSERVATIONS:
--      
-- #CHANGES: 
--      
-- #EXAMPLE: 
--      
-- =============================================
SELECT * FROM 
(
  SELECT 
    A.IdCaja, A.IdArticulo,A.IdFamilia, A.Descrip, A.IdDoc, 0 Precio, I.NombreFichero, dbo.Valor_Parametro('PATHIMAGENES', USER) + '\' + I.NombreFichero as PathImagen, '' as imgData, 1 AS Favoritos 
  FROM  vTPV_Cajas_Favoritos_Asociados A 
    LEFT JOIN vImagenes_Articulos I ON A.IdArticulo = I.IdArticulo and I.Principal = 1 
  WHERE AsociadoACaja = 1 
    UNION ALL
  SELECT 
    F.Idcaja, A.IdArticulo,A.IdFamilia, A.Descrip, A.IdDoc, 0 Precio, I.NombreFichero, dbo.Valor_Parametro('PATHIMAGENES', USER) + '\' + I.NombreFichero as PathImagen, '' as imgData, 0 AS Favoritos
  FROM vTPV_Cajas_Familias_Asociadas F 
    INNER JOIN Articulos A ON A.IdFamilia = F.IdFamilia
    LEFT JOIN vImagenes_Articulos I on A.IdDoc = I.IdDocObjeto AND I.Principal = 1  
  WHERE F.AsociadoACaja = 1 -- el valor correcto es 1
) X ORDER BY Descrip OFFSET 0 ROWS;
GO

ZPERMISOS 'vPERS_TPV_Articulos_Familias'
GO

sp_refreshview 'vPERS_TPV_Articulos_Familias'
GO

update objetos set SQL = 'Select * from vPERS_TPV_Articulos_Familias' where objeto ='TPV_Articulos_Familias'

GO



Es importante tener en cuenta que este código sirve para ordenar los artículos devueltos al pulsar en una familia en el entorno táctil.


Si, por otra parte, se quiere personalizar el orden de las familias, se debe personalizar el procedimiento almacenado pTPV_Articulos_Familias_Personalizado, indicando aquí el orden deseado. Esta opción está disponible desde la versión 4.4.2300 hotfix 32.


A continuación, se muestra un ejemplo para mostrar las familias por orden descendente.


IF EXISTS (SELECT 1 FROM sys.Objects WHERE Object_id = OBJECT_ID('pTPV_Articulos_Familias_Personalizado'))
  DROP PROCEDURE [dbo].[pTPV_Articulos_Familias_Personalizado]
GO

CREATE PROCEDURE [dbo].[pTPV_Articulos_Familias_Personalizado]
  @IdCaja INT, 
  @oXML XML OUTPUT
-- =============================================
-- #AUTOR:    
--        CEESI
-- #NAME:      
--        pTPV_Articulos_Familias_Personalizado
-- #CREATION: 
--        03/03/2021
-- #CLASIFICATION:
--        TPV
-- #DESCRIPTION:  
--        Personalizado de pTPV_Articulos_Familia
-- #PARAMETERS: 
--
-- #OBSERVATIONS:  
--        Se llama desde pTPV_Articulos_Familia
--        Retorno:  0 Error
--              -1 OK y que SÍ siga con el proceso estándar
--              -2 OK y que NO siga con el proceso estándar
-- #CHANGES: 
--            
-- #EXAMPLE: 
--            
-- =============================================
AS

DECLARE @PathImagenes VARCHAR(255)

BEGIN TRY
  
  SELECT @PathImagenes = Valor FROM dbo.funTblValorParametro('PATHIMAGENES')

  SET @oXML = (
    SELECT 
      F.IdFamilia, F.IdDoc, F.Descrip, IdFamiliaPadre, I.NombreFichero, @PathImagenes + '\' + I.NombreFichero AS PathImagen, '' AS imgData, 1 Nivel, 
      CAST((
        SELECT 
          F2.IdFamilia, F2.IdDoc, F2.Descrip,  F2.IdFamiliaPadre, I2.NombreFichero, 
          @PathImagenes + '\' + I2.NombreFichero AS PathImagen, '' AS imgData, 2 Nivel 
        FROM Articulos_Familias F2 
          LEFT JOIN vImagenes_Articulos_Familia I2 ON F2.IdFamilia = I2.IdFamilia AND I2.Principal = 1  
        WHERE 
          F2.IdFamiliaPadre = F.IdFamilia 
          AND F2.NumeroNivel = 2 
          AND EXISTS (SELECT 1 FROM TPV_Cajas_Familias_Asociadas WHERE IdFamilia = F2.IdFamilia AND IdCaja = @IdCaja)
        ORDER BY F2.Descrip DESC
        FOR XML PATH('R')
      ) AS XML) Familias
    FROM Articulos_Familias F 
      LEFT JOIN vImagenes_Articulos_Familia I ON F.IdFamilia = I.IdFamilia AND I.Principal = 1  
    WHERE F.NumeroNivel = 1 AND EXISTS (SELECT 1 FROM TPV_Cajas_Familias_Asociadas WHERE IdFamilia = F.IdFamilia AND IdCaja = @IdCaja)
    ORDER BY F.Descrip DESC
    FOR XML PATH('R'), ROOT('Familias')
  )


  RETURN -2

END TRY

BEGIN CATCH
  IF @@TRANCOUNT >0 BEGIN
    ROLLBACK TRAN 
  END

  DECLARE @CatchError NVARCHAR(MAX)
  SET @CatchError = CASE WHEN ERROR_NUMBER()=3609 OR ERROR_NUMBER()=266 THEN 'Error en procedimiento' ELSE ERROR_MESSAGE() END
  SELECT @oXML = CAST('<Resultado><Respuesta><Estado>error</Estado><Mensaje>' + @CatchError + '</Mensaje></Respuesta><data /><view /></Resultado>' AS XML)

  RETURN 0

END CATCH
GO

ZPermisos 'pTPV_Articulos_Familias_Personalizado'
GO


¿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