Bueno, muy bien, ahora tocó el turno de empezar con la historia compleja, la vamos a llamar códigos
a veces porque es lo que estamos determinando, entonces vamos a crear un nuevo, una nueva rutina almacenada
y aquí lo que vamos a hacer es colocarle obviamente códigos.
A veces de nombre no va a devolver ningún resultado.
Vamos a decirle que va a leer información de SQL, vamos a recibir los mismos parámetros.
Fecha desde que va ser una fecha.
Y estos mismos parámetros que va a recibir se los va a pasar como parámetro a la función que acabamos
de crear, pero obviamente tuve que crear primero la función, porque si va a ser llamada desde esta
estor presidium, tenemos que tenerla creada muy bien.
Voy a contarles un poquito para los que no saben el tema de los códigos, a veces los códigos a veces,
como les dije, es para categorizar productos y lo que tiene por filosofía es que a la parte mayor de
inventario, a los que más nos da ganancia, le pone un código a ahora.
Cómo determina ese código a lo que determina es en base a un porcentaje, el primer porcentaje.
El primer, por ejemplo, el primer 20 por ciento de estos valorizados le pone una o a los 20 al 20
por ciento de mis productos más rentables.
Luego, al siguiente 75.
Al siguiente 75 o al siguiente 80.
Al siguiente 75 o 70.
Esto cada empresa lo varía un poco, lo ajusta al siguiente 75 le pone una vez y el último 5 por ciento
le pone una C, o sea, trata de lo que ya no nos sirven.
Realmente no tiene rotación?
No. No vale mucho para nosotros.
No nos mueve el negocio, le pone una.
Es una manera de a la hora de ver determinadas estadísticas.
Si yo traigo esa información y ojo, este es un producto que es de categoría BEO o de categoría la persona,
el gerente que está leyendo las estadísticas sabe si lo tiene que tomar en consideración o no. En este
caso nosotros para este ejercicio vamos a usar la utilidad de los productos de acuerdo al rango de fechas
que le hemos puesto.
Vamos a leer toda nuestra tabla ventas, vamos a llamar esta función.
Quisimos que nos va a devolver un gran total porque nosotros tenemos que comparar lo que vamos leyendo
contra un gran total y una vez que nosotros determinamos los porcentajes que se los voy a decir, nosotros
vamos a poder determinar qué codificación va a cada producto.
Lo que yo voy a hacer ahora, lo que yo voy a hacer ahora es para el primer 20 por ciento.
Voy a hacerle categoría A para el primer perdón.
Lo que yo hice ahora es al revés.
Para el primero 80 por ciento le voy a poner una, para el próximo 15 por ciento le pongo una vez y
para el siguiente 5 por ciento le pongo una C.
Lo primero que tenemos que hacer son los declares en toda rutina almacenada.
Primero van las declaraciones y después va el código, así que vamos a hacer, declaró.
Vamos a hacer ganancia
donde vamos a grabar esto que decíamos, que me trae la función
muy bien y esto lo voy a copiar y lo voy a pegar porque tenemos cuatro ganancias diferentes.
Tenemos ganancia, ganancia y ganancia porque en base a lo que obtengan ganancia cuando me traigan la
utilidad de todo ese período, yo voy a tener que decir bueno, de esos 100 dólares ociosos 1000 dólares
el 80 por ciento.
O sea, 800 van a ser de tipo A. Para el resto, para, por ejemplo, los 150 dólares siguientes van
a servir y para los 5 dólares restantes van a ser C.
Este es un ejemplo nova.
No vamos a estar manejando esas cifras.
Vamos a hacer otro declare aquí.
Vamos a tratar con los únicos dos campos que va a manejar nuestro cursor, que es el código de artículo,
que va a ser de tipo entero y lo que vamos a hacer de tipo entero muy bien.
Y lo que vamos a hacer ahora es un declares de la utilidad que va a ser decimal diez coma dos.
Esto es lo que va a traer mi cursor ahora, cuando vean cómo lo voy procesando.
Luego va a haber un acumulado, porque a medida que voy leyendo los registros de mi detalle de ventas
lo voy a tener que ir acumulando en un stock total auxiliar para ver que de no pasarme de los topes
recuérdense que vamos a tener tres topes.
La ganancia será la ganancia y la ganancia.
En ese orden vamos a procesar primero lo que menos se vende.
Entonces vamos a colocar aquí un acumulado que no es más que una variable decimal diez coma dos.
Vamos a procesar una letra, una letra, que es la letra que vamos a terminar grabando.
Nuestra tabla de productos va a ser un chart 01, que es una variable.
La letra a veces va a tener una vez se va a tener una C, a veces batten una vez y vamos a tener el
final, que era para cuando encontraba fin de archivo en lo que es nuestro cursor, que va a ser un
Tin-Tin default cero.
Muy bien.
Ahora vamos a declarar el cursor, lo vamos a llamar cursor de utilidad Curutchet y ahora vamos a colocar
aquí.
Vamos a colocar la sentencia Select que va a alimentar nuestro cursor.
Entonces es muy parecida.
De hecho es la misma, la misma, lo mismo que tengo en la función, lo voy a hacer aquí.
Bueno, ya tenemos nuestra función, nuestro selleck, porque dije función, porque es exactamente igual
a la función que tuvimos antes, pero la diferencia que vamos a tener ahora por eso no ejecuto la función
y listo es que necesitamos agrupar los productos.
Por qué?
Porque yo necesito capturar la utilidad de cada uno de los productos y vamos a agregarle dos cláusulas,
una que es el GRUB.
Voy a que precisamente el producto.
Pero decidir y además vamos a hacer un orden Arbey para que para que me ordene de acuerdo a la utilidad
Order voy utilidad.
Esto es muy importante porque porque yo necesito procesar primero los productos que tienen la utilidad
más baja de todas, porque voy a comenzar con la C cuando ya tengo la utilidad más baja y veo que ya
me excedí del 5 por ciento.
Empiezo a considerar todo lo que viene después como productos de categoría.
Voy acumulando, acumulando, acumulando esa utilidad cuando veo que ya me excedí del tope de lo que
es categoría.
Para eso tengo las variables de ganancia gañan, ganancia y ganancia.
Cuando yo ya tengo que supere estos topes de ganancia, empiezo a cambiar la letra.
Empiezo con la C cambio a la vez y cuando me supero en clave pasa a ser un producto de tipo A.
Una vez que yo hice todos los declares, me falta el último que es el Candler por fin de archivo.
Recuerden que se siempre lo vamos a tener
o algún error puede ser fin de archivo.
Puede ser un error, pero lo que vamos a hacer es en este caso not found C.T.
Found set final.
Igual uno.
En este caso el not found, es cuando viene ejecutando el cursor y se encuentra con que hay un not found
no phone fin de archivo en lo que es la jerga de los cursores.
En mi muy bien.
Entonces ya tengo todos los de Heckler, ahora voy a hacer el select, voy a ejecutar lo primero que
tengo que ejecutar.
Lo primero que tengo que tener en claro son los totales.
Entonces voy a ejecutar nuestra función, que se llama utilidad total, y le voy a pasar los mismos
parámetros que recibe este estor.
Proseguir fecha desde así como los recibo, los paso, hago un baipás fecha hasta intro.
Ganancia muy bien.
Esto es lo único que hace ejecutar toda esa función que hemos creado antes y al total que nos devuelve
el retorno que tiene la función.
Ese valor lo va a grabar dentro de la variable ganancia.
Esa va a ser la ganancia total del período en que yo estoy ejecutando y ahora vamos a hacer algunos
sets, porque una vez que yo ya tengo la ganancia puedo calcular ganancia, ganancia y ganancia.
Vamos a hacer un set ganancia a es igual a ganancia a esta ganancia que acabamos de capturar por punto
80 o .8.
Es lo mismo que se me plantó una comisión muy bien.
Este punto 80 lo que hace es extraer de la ganancia total el 20 por ciento, el 80 por ciento.
Vamos a hacer ganancia?
Por supuesto, si esto lo quieren llevar al mundo real y ustedes quieren.
Cada empresa tiene su política, cada empresa ajusta estos números.
Los porcentajes los pueden cambiar.
Si para los productos de ganancia en lugar del 80 quieren determinar que sean el 50, lo pueden hacer
tranquilamente.
Y aquí estamos determinando que el 15 por ciento de la ganancia total va a conformar mi ganancia.
Ahora.
Ya tenemos ganancia y ganancia.
Lo que vamos a hacer ahora es sestear, precisamente ganancias cero
ganancia, se es igual la ganancia por puntos cero cinco, dejar el espacio muy bien.
Ahí ya tenemos nuestros tres pilares, nuestras tres postas ya armadas para cambiar de una letra a la
otra.
Lo que vamos a hacer ahora es el acumulado en cero, porque ahora vamos a tener que iterar en el cursor
y vamos a tener que ir sumando en este acumulado las utilidades que vamos encontrando y vamos a aceptar
la letra inicial mente como una C.
Lo primero que vamos a procesar es una C y es importante esto de grabarlo en una variable, porque cuando
pasemos ese total esa barrera va ahí.
Esta letra se le va a mover una vez.
Vamos ahora a trabajar con el cursor, vamos a hacer un wil final.
Es igual a cero como hicimos anteriormente.
Vamos a hacer un dúo, vamos a cerrar el lenguaje por ahora muy bien.
Esta va a ser nuestra estructura de integración.
Va a ejecutar hasta que final sea igual a uno, cuando va a ser final, igual a uno en el disparador,
en el handler, cuando detecte que el cursor llegó hasta el final, le va a mover un 1 a final y se
va a caer de este juego no va a procesar más.
Entonces ahora hacemos un fetch, que es nuestra instrucción para leer el cursor, para posicionarnos
en el próximo registro del cursor.
Recuerden que los cursores, a diferencia de la tabla en la sentencia Select, los cursores ELEN secuencialmente
registro por registro.
Entonces.
Muy bien tengo Fetch qur oti into.
Y ahora vamos a usar esas dos variables que habíamos creado que es, pero de ahí de utilidad, entonces
lo que leamos de nosotros, de nuestro cursor lo vamos a fijense porque aquello.
En definitiva, cuando hice el Select creé dos campos.
Dos campos utilidad y el paro deuda.
Esto mismo se tiene que replicar aquí.
Cuando leo el cursor va a grabar ni más ni menos por ahí de ir y lo vamos a grabar en utilidad.
Recuerden que le pongo en este caso un símbolo, un guion bajo para manejarlo como un campo y no como
una variable para darme cuenta que o es un parámetro o es un campo.
Y aquí vuelvo a preguntar si final es igual a cero.
Por qué?
Porque si yo no lo hago, va a ejecutar, aunque haya llegado al final del cursor, va a ejecutar lo
que esté debajo.
Recién cuando llegue al huay va a volver a hacer la comprobación.
Entonces, inmediatamente después del fetch tengo que preguntar si final es igual a cero.
Aquí voy a acumular.
Voy a decirle que he acumulado.
Es igual acumulado lo que tengo acumulado en ese momento, más la utilidad.
Muy bien.
Voy a ir leyendo registro y voy acumulando la utilidad.
Y ahora voy a tener que hacer una comprobación.
Si la letra es igual a C y acumulado, es mayor ganancia.
Sé qué va a ocurrir si yo estoy parado procesando los productos que los voy a determinar, como de tipo
C y ya me pasé del acumulado, ya pasé ese 5 por ciento de ganancia de utilidad.
Entonces esos productos nuevos que donde yo ya me pasé ya no pertenecen a la letra C, sino que son
productos que ya los puedo categorizar como de tipo BE.
Entonces aquí lo que hago es limpio.
El acumulado lo pongo en cero porque ahora voy a empezar a procesar productos de tipo.
En realidad aquí no lo pongo en cero, es de gran utilidad porque si no voy a estar perdiendo el registro
en el que estoy parado.
Total, que en el que estoy parado.
Entonces acumulado ya no lo sumo recursivamente, sino que le grabo la utilidad directamente y la letra
la voy a definir como de tipo ve muy bien.
Aquí me faltó un punto y coma.
Y aquí va un diff.
Muy bien.
Ya sé la letra C.
Pero ahora detectó que me pasé y tengo que procesar la letra.
Debajo voy a preguntar si la letra es igual a BE y el acumulado, que por ahora, como recién me pasé.
Lo único que tiene es la utilidad del registro en el que estoy parado, pero es importante hacer la
comprobación.
Si acumulado es mayor ganancia.
Ve entonces
muy bien?
A qué voy a hacer lo mismo?
Exactamente lo mismo, con la diferencia que la letra va a hacer una.
Y posterior a eso yo ya no tengo que preguntar nada más.
No tengo que preguntar nada más acumulado.
Se va a ir siguiendo aquí, moviendo, sumando, va a ser la letra y aquí voy a hacer que el ave de
la tabla producto, porque yo ya tengo la letra correspondiente al producto.
Entonces voy a hacer UNAB.
Qué feo que quedó eso.
AB Productos.
Y le voy a hacer un set de que a veces este campo nuevo que hemos creado y le voy a decir que ahí grabé
litera, donde es fundamental, porque tengo que decirle pero en qué producto tengo que poner la letra?
Muy bien en PROT Aided cuando Prodi dice a Iguala guión bajo, pero ahí dice que es nuestra, nuestro
campo, nuestra variable.
Muy bien.
Ahora vamos a cerrar Elif, porque nos quedó abierto
siempre con punto y coma dentro de una estor, prosiguió siempre.
Aquí también vamos a cerrar el
cursor, que era kurotsuchi muy bien.
Y aquí ya tenemos nuestra.
Vamos a agravarla.
Hay algo que no le gustó cursus puse.
Puse la palabra cursos, agallas, cursar perdón.
Y aquí olvídate productos letra.
Ni aquí me faltó un punto y coma, perdón, pero esto es real time, esto es tiempo real.
No le extraje algo que lo kopi pegué directamente.
Lo estamos haciendo en el momento muy bien.
Ya tenemos nuestro código abecé.
Les quiero mostrar algo.
Vamos a ir a nuestra tabla productos.
Tenemos nuestro producto y si vemos la tabla tiene todo.
Nul en la columna tiene todo un borde de foll.
NUL Yo ahora voy a procesar una fecha determinada, vamos a ejecutar nuestra rutina almacenada.
Esto códigos a veces lo tenemos aquí.
Aquí teníamos nuestra utilidad y vamos a usar esto mismo.
Vamos a poner un QOL.
Recuerden que al no devolver nada tengo que colocarlo dentro de un coche y aquí vamos a poner códigos
a veces y entre paréntesis los parámetros.
Le puedo poner punto y coma, nos es indistinto, lo ejecutamos.
Cursor is not open.
Me faltó algo para.
Seguro que me faltó abrir el curso tal cual.
Esto parece error de principiante.
Si no lo habrá, no lo puedo procesar una vez que yo lo declaré.
El Open lo que hace es el Open.
Ejecutã todo esto.
El Open se fija cuál es la declaración del cursor?
Ejecuta y lo carga.
Una vez que lo cargo lo puedo, lo puedo recorrer y luego lo cierro muy bien.
Lo grabo y ahora poder ejecutar esto sin problema va a demorar.
No me devuelve nada por pantalla.
Ahí dice que tardó 2 minutos, 2 segundos, casi tres segundos en la ejecución.
Salvo muy bueno, muy rápido.
Imagínense que todo lo que hemos hecho de cálculo, de recorrida, de ordenamiento de datos aquí y cómo
nos damos cuenta si está funcionando, vamos a ir a nuestros productos, vamos a venir aquí y vamos
a saber que algunos productos tienen un ave, una.
Ya estuvo categorizando para el resto.
Significa que en el período que le hemos dado ese producto no tuvo ningún tipo de venta.
Ahora, si esto lo va a ejecutar muy seguido, lo que voy a tener que hacer voy a tener que agregarle
a mi gestor presidio.
Conviene hacerlo al comienzo.
Vamos a ir a hacer esto, vamos a colocarlo
aquí y vamos a decirle que vamos a actualizar y lo vamos a poner un valor.
Nada, absolutamente nada.
Esto con esto estamos blanqueando todos los códigos, porque si hay un producto que en el período pasado
que yo procese le puso una y al nuevo período no tuvo venta, es el registro, no lo va a procesar y
me va a quedar el producto con una y es mentiroso para no meternos en podría ponerle aquí.
Nul y probamos que.
Muy bien, entonces vamos a correr esto.
Lo está ejecutando.
A todo le pone un Noll y luego me trae los valores.
Vamos a venir aquí, vamos a tomar por ejemplo, el código 100.
Vean que tiene una C y vamos a ejecutar nuevamente, pero les vamos a decir que solamente va a ser un
día como el primero de enero.
En ningún lado se trabaja.
Seguramente no tengo registros de venta al correrlo.
Teóricamente me tiene que blanquear toda la base de datos, toda la tabla, perdón, y le tiene que
poner a todo nivel.
Aquí va a refrescar, a recargar.
Perdón, fíjense que todo tiene Nul.
Entonces esto me permite el reprocesamiento de nuestro ástor.
Pero si hemos hecho algo traído del mundo real, algo muy complejo, muy complejo de entender y muy
complejo de hacer, hay que usar mucha algorithm, mucho pensamiento y la verdad que bueno, ha sido
un gusto.
Me voy a seguir metiéndole material al curso y ahora seguimos en la próxima sección.
El próximo capítulo nos vemos.