Cálculos diarios rotación stocks


([N1] Synetic) #1

Hola a todos,
En una tabla estoy acumulando estadísticas por almacén de artículos para sacar índices de rotación, stock medio, etc...
El caso es que puedo generar esas estadísticas cada vez que haya un movimiento en el almacén, por medio de actualizaciones, pero necesito el dato diariamente, y hay días que no están esos datos porque no hay movimientos.
El problema viene en que son más de 70.000 referencias, 5 almacenes con histórico de dos años atrás.

- He pensado en generar un fichero de texto generando los días que faltan, pero el proceso más optimizado me tarda al menos15 horas y me genera un fichero de texto inmanejable de 12 gigas.
- Lanzar diariamente un proceso que rellene los días sin movimiento. No lo veo muy óptimo porque es posible que no de tiempo a finalizar en una noche.

Alguna idea, gracias.


([N4] eic) #2

Hola.

Creo que hay que distinguir entre el proceso para rellenar los días que te faltan en esos dos años, y el proceso para actualizar diariamente los datos de ese día que te puedan faltar.

Para el primero, en vez de buscar día a día si el registro está o no está, puedes optar por lo siguiente:

Set FECHA_INI
Set FECHA_TEMP, FECHA_INI
Cargar lista ESTAD (ordenada por almacén, articulo, fecha)
Recorrer lista solo lectura
If #FECHA > FECHA_TEMP
Dar de alta todos los registros hasta #FECHA, para ese artículo y almacen
Set FECHA_TEMP, AñadirDias(#FECHA, 1)

Como sólo abres una tabla, y no realizas búsquedas, puede estar más optimizado.

Saludos,

Fran Varona


([N1] Pepeto) #3

¿Rellenar registros con fechas que no han tenido movimiento?
¿Para que?
:(

Creo que lo que necesitas es esto:
http://velneo.es/info_v7_77_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/proyecto_de_datos/tabla/enlace
mira los "punteros singular de plural por indice", creo que es lo que necesitas
y si una fecha no ha tenido movimiento, busca la ultima fecha con movimientos de ese articulo para mostrar el stock.

Luego nos cuentas el resultado

un saludo
Jose Luis
http://www.ascsl.com
http://ascsl.net


([N1] Synetic) #4

Hola Pepeto,
Ahora estoy trabajando sobre una tabla de estadísticas que se rellena por actualizaciones y utilizo punteros a hermanos para recorrerla.

Los registros con fecha sin movimientos me hacen falta sobre todo por estadística. Por ejem. Para conocer el stock medio en un rango de fechas de un artículo tengo que contar con el stock medio diario de los movimientos, pero también con el stock existente los días que no hay movimientos. Los días que no hay movimientos su stock medio es el stock medio del último movimiento, su hermano anterior.
Calcularlo al vuelo se está haciendo imposible por la cantidad de datos. Sigo con ello y pondré la solución...cuando la tenga.
Saludos.


([N1] Juan) #5

Hola Fernando, creo que como dice Pepeto para el caso de stocks medio no se necesita rellernar, hay que calcular entre cada periodo de pedidos de compra ref( http://www.mcgraw-hill.es/bcv/guide/capitulo/8448199316.pdf) luego segun te pidan el rango a consultar aplicas la formulita de la pagina 8 la ponderada que creo q es la q mas se ajusta a cualquier realidad. Creo que las fechas que te pidan como rango tendrias que ubicarlas en las linea de tiempo de como realmente se dieron los movimientos, por ejemplo en la fecha que no tengas movimientos con este metodo siempre tendras Stock medio por que no depende de las fechas sino de los periodos de aprovisionamiento.La tablita de estadisiticas deberia contener campo: Fecha por cada Pedido de compra q existio, y el stock minimo que hubo en esa fecha y asi incluso podrias graficarlo y mostrarlo.
Slds Juan


([N1] Synetic) #6

Gracias Juan, excelente manual. He comprobado las fórmulas y más o menos había llegado a los mismos cálculos que propone.
El problema lo tengo sobre todo cuando el periodo solicitado no tiene movimiento.
Por ejemplo, quiero el stock medio por mes de un artículo. Si en enero hay movimiento podré calcularlo (con las fórmulas del manual o bien las aplicadas por mi hasta ahora) pero, si en febrero no hay movimientos el cálculo será cero cuando realmente existía un stock residual ese mes.

Gracias de nuevo por tu ayuda y un saludo.


([N1] Juan) #7

Mira eso depende de muchas cosas por ejemplo: no es lo mismo vender clavos todo el ano que ropa de invierno que es x temporada ejemplo digamos que en febrero no se vende NUNCA ese articulo entonces eso varia tu promedio totalmente dejandote sin abastecimiento para temporadas altas, ahora depende de si el 1ero de Marzo repones si es asi tu periodo abarca hasta este dia recuerda que la formula es entre PERIODOS DE REPOSICION sin embargo si no lo hubiera inclusive tienes que evaluarlo hasta el siguiente punto de reposicion digamos 10 de marzo pero aun asi dependera de que paso realmente imaginate que febrero no vende NUNCA entonces podria considerarlo un punto de reabastecimento (el 1ero) y si mas bien febrero no se vendio por que la competencia me gano entonces debo ir hasta el 10 de marzo. Conclusion presentales una grafica y ellos interpretaran de acuerdo a su criterio.
slds
Juan


([N1] Pepeto) #8

@fernando.bricotec

Para periodos sin movimiento, siempre puedes generar registros de c ierre/apertura de periodos.
Con eso te aseguras que todos los articulos tienen al menos un registro, pero un registro por mes/año no es lo mismo que generar uno para cada fecha.

Un saludo
Jose Luis
http://www.ascsl.com
http://ascsl.net


([N1] Synetic) #9

Estoy buscando la manera más optimizada de hacerlo. Llevo bastantes cosas probadas pero con tal cantidad de datos es difícil encontrar la más recomendable. Si hubiese tenido la posibilidad de tener un registro diario de actividad de cada artículo la programación sería más sencilla, también porque después tengo otros cálculos que desarrollar como la desviación de ventas, índice de rotación, etc...
El caso es que tengo artículos que rotan todo el año y artículos que se hace una importación (una sola compra anual) de volumen y se vende durante el resto del año.
Voy a probar rendimiento con las fórmulas que me facilitó Juan y ver cuanto demora.
Gracias


([N4] mdelgado) #10

@Fernando

Buenas Fernando, te voy a decir lo que yo haría, y teniendo en cuenta el menor númeor de accesos a datos posible:

1) Crearía lógicamente una tabla de artículo (esa ya la tendrás)
2) Crearía también una tabla de movimientos (también la tendrás)
3) Crearía una tercera tabla de Movimientos_Dias con los campos: Artículo, fecha
4) En la tabla Movimientos creas un evento Anterior a un alta: En este evento deberás buscar el último registro creado en la tabla Moviemitos_Dias para ese artículo. una vez conocido este dato, en este evento deberás crear un registro por cada día que vaya desde la fecha del ultimo movimeitno hasta la fecha del movimiento actual del artículo. Con esto conseguiras que en la tabla Movimientos_Dias tengas todos los días a cero excepto los que realmente haya habido movimiento. En el peor de los casos, para un sólo alta al año, crearías en la tabla Moviemitnos_Dias 365 registros (uno por día). Esto no es una carga excesiva.
5) Para saber el último movimiento de la tabla Movimientos_Dias, puedes Cargar_Lista(Movimientos_Dias) por el campo Artículo. Luego SELECCIONAR_FICHA(SYSLISTSIZE), y te evitas recorrer la lista

Espero que te haya servido como solución.

Saludos
Miguel D.