de SQL a Velneo... a ver si voy bien.....


([N1] samuelblanquez.net) #1

Hola, a ver que mi cabeza aun se me va al SQL, vamos a ver si voy bien o mal...

lo que necesito: buscar en una tabla tarifas (fecha inicio, fecha fin) en su detalle, (tarifas_lin), articulo -> precio

quiero que dada una fecha el sistema me de el precio más bajo de entre todas las tarifas en vigor (las tarifas se pueden solapar en fechas)

vamos lo que sería en SQL:

select top 1 min(precio) from Tarifa_Lin tl inner join Tarifa t on t.IdTarifa = tl.IdTarifa where t.fechaInicio>= @fecha and t.fechaFin<= @fecha and IdArticulo = @Idarticulo

seguramente no voy bien porque me sale algo que no me gusta mucho:
proceso:
búsqueda tarifas entre fechas,...
salida de la búsqueda cargar lista buscando el articulo en cuestion y almacenar en una variable el precio, si es menor que el anterior (inicializado en 999999)
devolver valor....

voy bien o me dejo algún súper recurso de velneo que haga que no me parezca mucho mejor el SQL????


([N1] Roberto Blasco) #2

Hola samuelblanquez.net

Me temo que para búsquedas de este tipo, lo que tienes que hacer es desnormalizar las tablas, es decir, bajar los campos fecha de tarifa a la tabla de artículos ..., o eso o tirar de filtrado de listas con las consecuencias derivadas del rendimiento.

Sé que va en contra de todos los dogmas que se aprenden sobre base de datos y SQL, pero debes dejar de intentar aplicar SQL ya que con Velneo te darás de morros contra la pared.El otro problema que te vas a encontrar es que tendrás que mantener las fechas actualizadas en la tabla de artículos (utilizar eventos de tabla).

Velneo es muy potente, pero no es SQL.

Espero no haberme equivocado, sino que me rectifique cualquiera de los gurús de v7, que por estos lares los hay y muy buenos :-)

_________________
Guadalajara - España
E-Mail: roberto.blasco.serrano@gmail.com
Skype: roberto.blasco.serrano
Teléfono: (+34)625653066 [Viber][WhatsApp]


([N1] Pepeto) #3

Hola Roberto, te has expresado perfectamente.

@SamuelBlanquez
Como dice Roberto, seria conveniente que bajaras los campos Fecha a la misma tabla de Articulos.
Pero a diferencia de el , yo no pienso que eso sea desnormalizar las tablas, sino simplemente se trata de optimizar un analisis de la estructura de datos, que a mi modo de ver no es optimo.

A mi modo de ver, no es logico tener las fechas en la cabecera de la tarifa, sencillamente porque a menos que el cliente use una tarifa anual o por periodos cerrados, conozco cientos de casos donde lo normal, es que las fechas de inicio y fin de una oferta, tarifa o precico especial, son completamente diferentes para cada articulo, y en intervalos de tiempo que en ningun momento coinciden con el periodo correspondiente a dicha tarifa.
Luego como el caso que presentas, para mi, seria la excepcion, no contemplo esa estructura como optima. y por tanto no la uso.

A partir de este momento, en el que tengo fechas, articulos , precios y demas campos en una misma tabla, puedo hacer decenas de combinaciones con una sola busqueda y consigo perfectamente todo lo que necesito, simplemente condicionando los indices de la busqueda.

Y como te dice Roberto, para trabajar con Velneo no debes pensar en SQL, ¡Hay que cambiar el chip! :)

Un saludo
José Luis
http://www.ascsl.com


([N1] samuelblanquez.net) #4

si, ... :) ya me compré el libro.... 2 veces .... ;) (pdf+ papel), pero como aun no has sacado el... cambia el chip .. 2 !!!

Pues aun pregunto!!!! ;)

Gracias a los dos, me vale como solución.


([N1] Roberto Blasco) #5

Gracias pepeto por ayudarnos a entender V7. :-)

Pero sólo una pequeña acepción ... lo de desnormalizar las tablas no es mi apreciación, es una definición ;-).

Bien es verdad que las normas están para romperlas y que en bbdd con un gran volumen volumen de datos se hace necesario la desnormalización de algunas tablas por cuestión de rendimiento. Pero está claro que es una opción que toma el DBA para mejorar el acceso a las consultas. La diferencia es que en Velneo no es una opción ... es lo que hay.

En cuanto a lo de cambiar el "chip" me parece correcto ... pero no olvides de dónde vienes, nunca sabes cuándo tendrás que volver a utilizar SQL, además la gente que viene de SQL tiene mucha más facilidad a la hora de optimizar el diseño de las bases de datos estableciendo las formas normales necesarias en función del rendimiento.

Cambiar el "chip" sí, pero con moderación y no olvides que hay otro mundo tras Velneo.

_________________
Guadalajara - España
E-Mail: roberto.blasco.serrano@gmail.com
Skype: roberto.blasco.serrano
facebook:
Teléfono: (+34)625653066 [Viber][WhatsApp]


([N1] comercial) #6

Hola, de todas maneras y por si quieres otra opción, haz una prueba, en la tabla detalle al índice que contiene el campo del maestro le añades el campo PVP, en la tabla maestra añade un campo que puedes llamar 'menor-pvp' tipo singular del plural por indice, y en el modo a buscar le pones 'primero', y ya está, (si no me he pifiado, hablo de memoria), ya tienes un campo que apunta al menor de los valores de una tarifa, no búsquedas, no consultas, no procesos, solo Velneo.

Saludos.
Miguel.


([N1] Roberto Blasco) #7

Comercial.arhes2000

+1

_________________
Guadalajara - España
E-Mail: roberto.blasco.serrano@gmail.com
Skype: roberto.blasco.serrano
facebook:
Teléfono: (+34)625653066 [Viber][WhatsApp]


([N1] samuelblanquez.net) #8

Hola comercial. arhes2000 primero que todo gracias por responder, y segundo, no termino de ver como hacer tu solución, perdona.

Mi problema es que no solo hay una de menor PVP puede haber infinitas, pero no todas en vigor, es decir...

durante un periodo de tiempo, hay tantas ofertas como el usuario quiera, si el cliente compra algún articulo contenido en ellas, (se sabe si el cliente tiene un precio especial porque en la oferta está asignado el producto o no, y el cliente tiene asignadas todas las ofertas de las que se puede beneficiar), de todas ellas se le aplicará la más beneficiosa.

ah, y otra cosa mas sencilla, si tengo una búsqueda en la que los campos son fecha entrada en vigor y fecha fin vigor.
no se como buscar las que están en vigor,...
en sql si se, que la fecha buscada sea mayor que la inicial y menor que la final.
En velneo, no lo veo, creo un indice por la fecha inicial, otro por la final, y cuando le digo búsqueda entre limites, no se como poner mi fecha!!!

Limite inferior: indice fecha Ini
limite superior: fecha fin ??

se me está empezando a ir la pinza... con las búsquedas.. la verdad

esto lo voy a separar en otro post


([N1] Pepeto) #9

@Comercial.Arhes2000

+1

un saludo
José Luis
http://www.ascsl.com


([N1] samuelblanquez.net) #10

tras leerlo varias veces... entendido, gracias @Comercial.Arhes2000 !!!
Esto es lo que esperaba!

Sabia que era un fallo de falta de destreza, en la herramienta.


([N1] carlos2325) #11

Y como se resuelve yo tengo un problema parecido, tengo que calcular los costes, de una serie de transacciones que importo de otro sistema y y necesito aplicar a cada transacción un precio de coste pero este depende de el periodo entre dos fechas uqe ese producto para un proveedor tenia un precio de compra, que puede variar en diferentes fechas del año.