none
Modelar lista de precios RRS feed

  • Pregunta

  • Hola

    Estoy modelando una lista de precio en la cual un producto puede tener diferentes precios según la cantidad de productos aplica un porcentaje de descuento.

    Tengo el siguiente bosquejo en el cual tendría una cabecera y un detalle.

    Donde porcentaje es el descuento que se aplica por cantidad del producto, quisiera alguna recomendación o corrección sería de mucha ayuda.

    Nota: ¿Que pasaría si el precio cambia con el tiempo, debería hacer otra lista de precio?

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    miércoles, 15 de mayo de 2019 19:52

Respuestas

  • Hola Pedro Ávila:

    Una posible aproximación a un posible desarrollo, donde siempre hay muchas más particularidades, ya que se ve que es un artículo con tallajes, y eso es un primer hándicap, y hay muchos otros que depende de como estés desarrollando la aplicación, puede ir en un sentido u otro.

    CREATE TABLE product
    (id          INT
    , descripcion VARCHAR(10)
    );
    GO
    INSERT INTO product
    (id
    , descripcion
    )
    VALUES
    (1, 'camisa');
    GO
    
    CREATE TABLE tipoPrecio
    (tipo        INT
    , descripcion VARCHAR(100)
    );
    GO
    
    INSERT INTO tipoPrecio
    (tipo
    , descripcion
    )
    VALUES
    (1, 'General'),
    (2, 'Sucursales Zona norte'),
    (3, 'Web standard'),
    (4, 'rebajas');
    GO
    
    CREATE TABLE precios
    ( id                 INT
    , tipo               INT
    , costeGeneral       DECIMAL(10, 2)
    , ventaPublico       DECIMAL(10, 2)
    , tipoImpuestoCompra INT
    , tipoIMpuestoVenta  INT
    , Is_PVP             BIT
    );
    GO
    INSERT INTO PRECIOS (id, tipo, costeGeneral, ventaPublico, tipoImpuestoCompra, tipoIMpuestoVenta, Is_PVP)
    values
    (1,1,100.35,199.95,1,2,1),
    (1,2,100.35,120.00,1,1,0),
    (1,3,100.35,165.00,1,3,1),
    (1,4,100.35,150.25,1,4,1);
    GO
    CREATE TABLE DTOSVOLUMEN
    (ID            INT
    , IDPRODUCTO    INT
    , LINEA         INT
    , RANGOMIN      INT
    , RANGOMAX      INT
    , IS_PORCENTAJE BIT
    , IS_MONETARIO  BIT
    , PORCENTAJE    FLOAT
    , MONEDA        DECIMAL(10, 2)
    );
    GO
    CREATE TABLE HISTORICO_PRECIOS (
      id                 INT
    , tipo               INT
    , costeGeneral       DECIMAL(10, 2)
    , ventaPublico       DECIMAL(10, 2)
    , tipoImpuestoCompra INT
    , tipoIMpuestoVenta  INT
    , Is_PVP             BIT
    , StarDate		 DATETIME2
    , EndDate			 DATETIME2
    , ModifiedDate		 DATETIME2
    );
    CREATE TABLE HISTORICO_DTOS
    (ID            INT
    , IDPRODUCTO    INT
    , LINEA         INT
    , RANGOMIN      INT
    , RANGOMAX      INT
    , IS_PORCENTAJE BIT
    , IS_MONETARIO  BIT
    , PORCENTAJE    FLOAT
    , MONEDA        DECIMAL(10, 2)
    );

    Todas las tablas tienen que tener más columnas, pero como aproximación esta puede ser una idea. 

    Una tabla de tipos de precio. donde podrías dar cabida, a ubicaciones, como personal, como precios mayoristas, minoristas....y muchas otras, cosas, ya que este registro marcará la elección, general del precio de la siguiente tabla.

    La tabla precios, un id=a Product_id, y un tipo, por cada uno de los que creas en esta tabla de apoyo. (te puse 4 ejemplos simples), un precio de coste (Lo lógico es que el precio, lo determinen las compras, pero podría ser un punto general de información. Un precio de venta. (si la tarifa es pvp, será el mismo, y sino será el precio sin impuestos. Luego los tipos de impuesto que aplicaría este precio por el tipo.

    Luego a posteriori de seleccionar el precio general del ítem, cuando se pone en la venta o movimiento de la mercancía, una cantidad, entonces se recoge de la tabla de dtos, lo que corresponda para este producto, por la cantidad introducida, bien sea en porcentaje, o en descuento. (Si compras 100 en vez de a 5 euros, a 4,5 euros)

    Y dos tablas de históricos, tanto para los precios, como para los dtos, por volumen.

    Aún quedan muchos flecos, del tipo, precios por rangos de fechas o temporadas.

    Precios por tallas, por días, por colores....

    Espero te ayude

    • Marcado como respuesta Pedro Ávila miércoles, 15 de mayo de 2019 21:16
    miércoles, 15 de mayo de 2019 20:53

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te hago la recomendación de ingresar al siguiente enlace en donde puedes encontrar una posible solución para tu problema.

    https://social.msdn.microsoft.com/Forums/es-ES/da5e5802-3e04-46b1-88e1-b639311e4a20/lista-de-precios?forum=sqlserveres

    https://social.msdn.microsoft.com/Forums/es-ES/19ab876b-ee8a-4b8c-b0af-46d4c88662d1/modelado-lista-de-precios-y-promociones?forum=vcses

    Gracias por usar los foros de MSDN.

    Carlos Ruiz
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    miércoles, 15 de mayo de 2019 20:42
  • Hola Pedro Ávila:

    Una posible aproximación a un posible desarrollo, donde siempre hay muchas más particularidades, ya que se ve que es un artículo con tallajes, y eso es un primer hándicap, y hay muchos otros que depende de como estés desarrollando la aplicación, puede ir en un sentido u otro.

    CREATE TABLE product
    (id          INT
    , descripcion VARCHAR(10)
    );
    GO
    INSERT INTO product
    (id
    , descripcion
    )
    VALUES
    (1, 'camisa');
    GO
    
    CREATE TABLE tipoPrecio
    (tipo        INT
    , descripcion VARCHAR(100)
    );
    GO
    
    INSERT INTO tipoPrecio
    (tipo
    , descripcion
    )
    VALUES
    (1, 'General'),
    (2, 'Sucursales Zona norte'),
    (3, 'Web standard'),
    (4, 'rebajas');
    GO
    
    CREATE TABLE precios
    ( id                 INT
    , tipo               INT
    , costeGeneral       DECIMAL(10, 2)
    , ventaPublico       DECIMAL(10, 2)
    , tipoImpuestoCompra INT
    , tipoIMpuestoVenta  INT
    , Is_PVP             BIT
    );
    GO
    INSERT INTO PRECIOS (id, tipo, costeGeneral, ventaPublico, tipoImpuestoCompra, tipoIMpuestoVenta, Is_PVP)
    values
    (1,1,100.35,199.95,1,2,1),
    (1,2,100.35,120.00,1,1,0),
    (1,3,100.35,165.00,1,3,1),
    (1,4,100.35,150.25,1,4,1);
    GO
    CREATE TABLE DTOSVOLUMEN
    (ID            INT
    , IDPRODUCTO    INT
    , LINEA         INT
    , RANGOMIN      INT
    , RANGOMAX      INT
    , IS_PORCENTAJE BIT
    , IS_MONETARIO  BIT
    , PORCENTAJE    FLOAT
    , MONEDA        DECIMAL(10, 2)
    );
    GO
    CREATE TABLE HISTORICO_PRECIOS (
      id                 INT
    , tipo               INT
    , costeGeneral       DECIMAL(10, 2)
    , ventaPublico       DECIMAL(10, 2)
    , tipoImpuestoCompra INT
    , tipoIMpuestoVenta  INT
    , Is_PVP             BIT
    , StarDate		 DATETIME2
    , EndDate			 DATETIME2
    , ModifiedDate		 DATETIME2
    );
    CREATE TABLE HISTORICO_DTOS
    (ID            INT
    , IDPRODUCTO    INT
    , LINEA         INT
    , RANGOMIN      INT
    , RANGOMAX      INT
    , IS_PORCENTAJE BIT
    , IS_MONETARIO  BIT
    , PORCENTAJE    FLOAT
    , MONEDA        DECIMAL(10, 2)
    );

    Todas las tablas tienen que tener más columnas, pero como aproximación esta puede ser una idea. 

    Una tabla de tipos de precio. donde podrías dar cabida, a ubicaciones, como personal, como precios mayoristas, minoristas....y muchas otras, cosas, ya que este registro marcará la elección, general del precio de la siguiente tabla.

    La tabla precios, un id=a Product_id, y un tipo, por cada uno de los que creas en esta tabla de apoyo. (te puse 4 ejemplos simples), un precio de coste (Lo lógico es que el precio, lo determinen las compras, pero podría ser un punto general de información. Un precio de venta. (si la tarifa es pvp, será el mismo, y sino será el precio sin impuestos. Luego los tipos de impuesto que aplicaría este precio por el tipo.

    Luego a posteriori de seleccionar el precio general del ítem, cuando se pone en la venta o movimiento de la mercancía, una cantidad, entonces se recoge de la tabla de dtos, lo que corresponda para este producto, por la cantidad introducida, bien sea en porcentaje, o en descuento. (Si compras 100 en vez de a 5 euros, a 4,5 euros)

    Y dos tablas de históricos, tanto para los precios, como para los dtos, por volumen.

    Aún quedan muchos flecos, del tipo, precios por rangos de fechas o temporadas.

    Precios por tallas, por días, por colores....

    Espero te ayude

    • Marcado como respuesta Pedro Ávila miércoles, 15 de mayo de 2019 21:16
    miércoles, 15 de mayo de 2019 20:53
  • Hola @Javi Fernández

    Gracias por tomarte el tiempo en responder, muy valiosa la información que me compartes es un buen punto para comenzar para diseñar algo básico que vaya creciendo según las reglas de negocio, dependiendo de las exigencias que demande el caso, por lo general que sea flexible. 


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    miércoles, 15 de mayo de 2019 21:14
  • Hola como se utilizaría la tabal historico?

    Cada que de de alta un registro inserte en la tabla de historico un registro nuevo 
    Y cuando modifique el precio agregue otro nuevo registro en Historico salvo que en el registro anterior del mismo producto
    verifique que sea el mismo código y la FechaFin == null para ponerle la fecha de fin mediante un update

    Aclarando que por cada cambio de PrecioCompra y Precio venta se creara un nuevo registro en historico así como cuando de de alta un nuevo Producto

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    lunes, 20 de mayo de 2019 17:30
  • Hola Pedro Ávila:

    Yo pensaba más bien, cuando vayas a hacer el primer cambio.

    Insertas en tabla normal. Cuando vayas a modificar un precio, trasladas el registro de tabla normal a histórico, haciendo un insert siempre, y en tabla normal, una update.

    También lo puedes hacer con una tabla versionada, si tienes SQL 2016, que básicamente es, no haces nada, porque el sistema lo hace solo.

    Versionado de tabla

    https://javifer2.blogspot.com/search/label/versionado

    lunes, 20 de mayo de 2019 18:42
  • Hola @Javi Fernández F

    Me parece bien como lo vez tu, mas práctico.

    Trabajo con SQL Server 2014

    Insertas en tabla normal. Cuando vayas a modificar un precio, trasladas el registro de tabla normal a histórico, haciendo un insert siempre, y en tabla normal, una update.

    ¿Si es así como manejas la fecha de inicio, fecha de fin y fecha de actualización?

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú



    lunes, 20 de mayo de 2019 19:40