Principales respuestas
Modelar lista de precios

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ú- Editado Pedro Ávila miércoles, 15 de mayo de 2019 19:58
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
Todas las respuestas
-
Hola
Gracias por usar los foros de MSDN.
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.
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. -
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
-
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ú -
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 ProductoPedro Ávila
"El hombre sabio querrá estar siempre con quien sea mejor que él."
Lima - Perú -
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
-
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ú
- Editado Pedro Ávila lunes, 20 de mayo de 2019 19:48