Bueno hemos llegado al caso práctico número tres vamos a hablar en este caso de un sistema de costos
y precios.
Es más cortito tiene unas seis tablas en total.
Vamos a arrancar con nuestra tabla producto ya la hemos creado en el capítulo anterior para tomarla
como base y no tener que digitar nuevamente y vamos a saber cómo crear nuestras listas de costos y nuestras
nuestras listas de precios.
Los costos son los que nosotros tenemos con nuestros proveedores es el precio de la mercadería que nos
da el proveedor que nos provee la mercadería y el precio es el precio que nosotros usamos para vender
esa mercadería.
Son dos listas diferentes.
Hay sistemas que las unen no es aconsejable de acuerdo a mi experiencia y vamos a ver por qué.
Porque en realidad tienen campos muy diferentes y además quizás tenga mi sistema un tema de permisos.
Entonces no todos los empleados quieren que vean los costos de la mercadería los costos es algo muy
sensible en una empresa.
Entonces quizás tengan empleados calificados viéndolos costos y tengan a otros empleados colocando márgenes
y precios.
Vamos a arrancar en este capítulo vamos a ver la parte de costos y en el capítulo siguiente van a ser
solo dos capítulos vamos a ver el tema de los precios.
Vamos a correr un poquito a un lado nuestros productos y vamos a comenzar con una tabla intermedia entre
los productos.
En realidad es una tabla maestra más.
No es una tabla intermedia es una tabla maestra más que la vamos a llamar listas de costos precios.
Yo ahora les voy a explicar paso a paso campo por campo qué significa vamos a crear nuestra tabla la
vamos a llamar listas costos precios y para qué nos va a servir para nosotros ir creando nuestras listas
de precios y de costos.
Por ejemplo vamos a tener una lista de precios llamada precio público otra va a ser precio mayorista
otra va a hacer precio especial para empresas así vamos a ir creando distintas listas de precios.
Aquí no va a haber valores ni costos ni nada simplemente es una definición un mapa lo que estamos creando
vamos a colocar la prima ariki listas Costos Precios aided aquí vamos a poner un Molin porque van a
haber pocas listas de precios a lo sumo puedo tener no sé.
Vamos a con toda la furia 20 listas de precios diferentes para distintos tipos categorías de clientes
para distintos tipos de empresas que le estoy vendiendo si es mayorista o es minorista bueno y en costos
lo mismo no vamos a tener tantas listas de costos vamos a colocar sus Molinet de cuatro por las dudas
auto incremento Ansina muy bien vamos a ampliar esto aquí vamos a colocar un nombre este nombre que
yo les estaba diciendo por ejemplo lista publicó lista mayorista.
Entonces dependiendo nuestro cliente o la venta que estamos haciendo vamos a vender usando una lista
determinada de costos o de precios se entiende como empresa como negocio puedo llegar a tener una sola
lista de precios pero lo habitual es que no lo habitual es tener muchas listas de precios porque no
todos los clientes son buenos clientes.
Quizás tenga unos precios de lista como para la gente común y casual de mi empresa y para los buenos
clientes tenga una lista especial con descuentos y demás.
Entonces aquí vamos a colocar un campo nombre lo vamos a dejar así como está.
Vamos a agregar esto es un lo que estoy preguntando en ese campo es esta lista que es de costo o de
precios vamos a tener un char podría tener un ENUM tranquilamente podría tener un ENUM de si es C o
si Espe ese puede ser mi ENUM.
Vamos a subir esto así vamos introduciendo también otros tipos de datos.
Vamos a tener un campo que va a ser estátus nuestro viejo estatus por si esta lista de precios ya no
corre más.
La vamos a tener totalmente fuera de juego con nuestros datos muy bien y ahora dos campos que son muy
habituales cuando hablamos de lista de precios que es fecha desde y fecha hasta desde cuándo va a tener
vigencia esta lista y hasta qué fecha le voy a dar vigencia si va a ser una lista que la voy a manejar
siempre.
Por ejemplo creo una lista que es lista mayorista y sé que siempre voy a usar esa lista le pongo una
fecha hasta dentro de 40 años vamos a fecha desde le vamos a poner un dato un dato y aquí fecha hasta
otro dato muy bien.
Ahora ya tenemos nuestra estos son todos los campos no hay más campos que esto.
Quiero que entiendan el concepto.
Estos son títulos lo que estoy creando aquí son títulos son secciones que voy a crear para luego cuando
creé mis costos voy a decirle este costo a qué lista pertenece este precio con este margen a qué lista
pertenece a este precio pertenece a la lista mayorista.
Este otro pertenece a la lista minorista.
Bueno muy bien aquí tengo mis dos tablas maestras estas dos tablas son las únicas dos tablas maestras
que voy a tener en este esquema lo que vamos a crear ahora es las dos listas de costos por qué vamos
a tener dos listas de costos.
Vamos a tener una lista de costo una tabla con costos vigentes y otra tabla con los costos históricos.
Cada vez que yo modifique un dato de mi costo eso y esa información va a ir grabada en una tabla histórica
por qué.
Porque el día de mañana quiero saber cuál era el costo de un producto a una fecha determinada y voy
a poder acceder a ese dato.
Digamos que por motivos de seguridad y por motivos de estabilidad siempre en todo sistema administrativo
cada vez que yo cambio un precio el precio anterior y el precio nuevo tienen que ser guardados en una
tabla histórica en un blog en algo que yo pueda consultar para saber por qué ahora tengo un precio inclusive
por motivos de seguridad para que alguien pueda supervisar de por qué se bajó un precio o por qué se
cambió a un precio determinado.
Cuándo a qué hora qué terminal qué usuario y demás.
Bueno vamos a crear nuestra tabla costos la tabla más larga es una tabla que debe tener unos 20 campos
más o menos.
Vamos a crear la que arriba muy bien vamos a llamarla costos vamos a crear nuestra prima ariki costo
aided.
Aquí voy a grabar un Binet de 10 porque porque cómo voy a poder tener muchas listas de costos y a su
vez voy a tener un registro por cada producto de mi empresa puedo llegar a tener un montón muchos registros
un montón salvo ha dicho en Argentina.
Voy a poder tener muchos registros.
Entonces luego de la clave primaria lo que voy a hacer es no voy a no voy aquí a decirle que la lista
es la lista de precio minorista.
Voy a ser una Foreing a esta lista.
Aquí está toda la información que yo necesito.
Entonces lo que voy a hacer aquí es costo LCP.
Ahí.
Fíjense que estamos hablando de esto y obviamente se haga dice molín de 4 tengo que poner molín de 4
Ancic muy bien esta tabla va a ser hija de esta tabla padre por cada registro que haya aquí puede haber
N y va a haber muchos registros en la tabla costos.
Ahora vamos a empezar con los datos que nos interesan.
Ya unimos las dos tablas ya tenemos nuestra primarily el primer campo es obviamente el código de producto
porque el registro todo el registro de la tabla va a hacer referencia a un producto el precio de un
costo de un producto entonces aquí viene el pero deudor y aquí vamos a poner que es de tipo entero muy
bien.
Ya tenemos otra Foreing que va a unir.
Tenemos la primera que va a unir costos con listas costos precio y otro campo que va a unir costos con
productos muy bien.
Ahora ya tengo eso identificado vamos a los campos que tienen que ver con los costos.
El primero es el precio de lista este precio lista es el precio de lista de nuestro proveedor a cuánto
vende el producto al proveedor pero no nos confundamos no es a cuánto nos vende a nosotros a cuánto
vende él el producto.
Es muy común que los proveedores nos manden archivos Excel o pdf con sus listas de precios con sus listas
de costos y nosotros tengamos que cargar el costo bruto así como lo tiene él luego el proveedor nos
va a dar descuentos va a decir bueno sobre ese precio lista te hago un descuento del 20 más el 5 o más
el 4 y nosotros cargaremos esos descuentos en el sistema para obtener nuestro costo.
El costo final cuánto nos cuesta a nosotros lo que el proveedor nos está vendiendo pero el precio de
lista es muy común copiarlo textual de cómo vienen en esas planillas Excel o en esos PDF que nos envían
muy bien.
Nunca va a ser negativo así que le colocamos un Ansina luego del precio de lista y esto es muy importante.
Vamos a poner un campo cotizacion.
Por qué.
Porque el proveedor nos puede mandar una lista que está en otra moneda que no es la nuestra.
Vamos a suponer nosotros en la Argentina tenemos el peso argentino.
Creo que México es el peso mexicano.
Espero no confundirme para no ofender a nadie en Chile está el peso chileno.
Entonces por ahí el proveedor nos manda una lista que está en dólares está dolarizada.
Entonces en el mismo registro yo voy a colocar la cotización de de la moneda en la que está expresada
ese costo es a precio de lista aquí le voy a poner va a ser el único campo que le voy a poner un valor
de Foll y le voy a poner uno por qué.
Porque si el precio de lista viene en mi moneda habitual no tengo que cargar la cotización ya sabe que
al multiplicar por uno aquí donde yo voy a colocar un costo que se va a llamar moneda corriente va a
ser el mismo precio ahora lo vamos a lo vamos a ver yo este campo lo llamé costo moneda corriente significaría
el costo de ese producto en la moneda que yo trabajo.
Yo soy argentino trabajo y puedo facturar en pesos pero el proveedor que es un importador que trae mercadería
afuera me da una lista de precios en dólares.
Entonces supongamos que me da un producto 100 dólares y me dice que la cotizaciones 43 pesos.
Voy a cargar aquí un 43 y el sistema lo que va a hacer es multiplicar el precio holista por la cotización
y en moneda corriente me va a agravar el costo en mi moneda corriente.
Se entiende entonces si aquí no hubiera cambio porque me están vendiendo a la misma moneda.
Va a multiplicar por 1 y el resultado va a ser el mismo muy bien una vez que yo ya tengo traducido el
costo porque todos mis costos lo voy a tener que tener a la misma moneda porque cuando yo tenga que
valorizar y tenga que hacer muchas cosas voy a tener que tener todo a la misma moneda.
Otra cosa habitual que se suele hacer y esto es muy difícil estandarizar esto porque porque cada empresa
es un mundo algunas algunos sistemas lo que nos piden hacer es que la cotización no esté aquí sino que
esté en un parámetro del sistema o del proveedor mejor dicho en la ficha del proveedor en la tabla de
proveedores que haya un parámetro de cotización donde nosotros vayamos cambiando de acuerdo a lo que
porque cada proveedor nos dice una cotización diferente cada uno toma su moneda extranjera en el valor
que se le ocurre algunos toman una cotización de un banco otros toman una cotización de otro.
Entonces en algunos sistemas la cotización no está ahí sino que está en la ficha de proveedor y eso
hace que también haya que mantenerlo.
Obviamente lo mismo aquí si aquí tenemos una cotización y el proveedor nos dice a partir de ahora la
cotización cambio tenemos que tener la opción en el sistema como para barrer rápidamente todos los productos
de ese proveedor y actualizar la cotización muy bien.
Está claro que esto que estamos creando es para que detrás de esto haya un sistema informático.
Esto por sí solo no nos resuelve nada que tenga Campos creado en una tabla no nos resuelve nada o sea
arriba de esto tiene que haber un desarrollo de un lenguaje de programación que sobre estas tablas trabaje
y haga cálculos y grabe lo que corresponda se entiende muy bien.
Ahora después de moneda corriente vamos a tener cinco columnas dedicadas a los descuentos lo máximo
que yo he visto son seis descuentos pero fue algo totalmente excepcional.
Generalmente más de cinco no se ven y cómo estos bases de datos donde ustedes quieran agregar una columna
le agregan sin perjuicio de toda la información que ya esté grabada una vez que yo tengo miles millones
de registros en una tabla quiero agregar una columna nueva no me va a borrar la información que esta
grabada va a agregar una columna nueva vacía entonces aquí viene descuento 1 y esto lo vamos a definir
como 4,2 de descuento no va a ser nunca un 1000 por ciento de descuento más de 100 no va a llegar y
él no llega nunca se los aclaro costo descuento 2 va a ser lo mismo va a ser un decimal de 4,2 costo
descuento 3 decimal 4,2.
Vamos a bajar un poquito acá costo cuatro y costo 5 Muy bien ahora qué viene después de costo.
Todo esto es opcional y tiene que ver también con la idiosincrasia de cada país en la que ustedes estén.
Este curso está siendo visto por personas de 56 países diferentes.
Entonces yo voy a explicar algo que ustedes lo van a poder transformar.
Quizás esto tenga que ver con los países de Latinoamérica en otro o en Europa se maneja diferente o
se agregan nuevos campos.
Ahora lo que yo he tenido que hacer mucho también es aquí agregar un campo llamado transporte.
Esto es porque algunos proveedores nos cobran un extra un porcentaje extra por el costo de transporte
de la mercadería en lugar de meter el costo del transporte en el costo del producto y decir bueno el
producto te lo vendo más caro.
Lo que hacen muchas compañías es decir el precio más bajo que puedo hacer de este producto es éste te
hago todos los descuentos pero te voy a recargar a diferencia de los campos anteriores.
Estos campos descuento uno a descuento sin pocón son campos que van a restar de mi costo van a quitarle
valor al costo lo van a hacer cada vez más económico.
Ahora es al revés es un recargo va a ser algo que va a sumar a mi costo le va a cargar valor a mi costo.
Entonces lo que viene ahora es el IVA y ustedes dirán por qué el IVA casi el IVA es uno solo.
No la verdad que no hay productos que tienen un IVA hay productos que tienen otro IVA hay productos
que son exentos de IVA.
Esto ocurre en varios países cuando quieren promocionar un producto determinado le quitan el IVA y uno
lo puede vender sin IVA.
Entonces nosotros en cada producto tenemos que rectificar qué porcentaje de IVA tiene otro 4,2.
Ahora qué viene después del IVA.
Muy bien después del IVA como tenemos todos estos campos que van a ir haciendo cálculos sobre mi moneda
corriente.
Una vez que el sistema calcula moneda corriente en base a la cotización y el precio de lista luego le
empieza a quitar los descuentos que encuentre si encuentra le suma un trasporte si encuentra le suma
un IVA y todo ese cálculo yo lo voy a gravar en un campo que es costo con IVA.
Voy a gravar dos campos y aquí voy a gravar costo sin IVA.
Ahí voy.
Ahora les voy a explicar por qué yo podría no gravar estos dos campos.
Podría terminar mi tabla en IVA y se terminó.
Y cuando yo quiera conocer cuál es el costo con IVA de mis productos o sea llegar hasta transporte y
una vez que llega transporte sumarle el IVA porque hay cosas que las voy a tener que valorizar con IVA
y hay cosas que las voy a tener que valorizar sin IVA.
Entonces estos dos campos yo los puedo calcular el problema y esto se suscita muy a menudo.
Es que como en la tabla costos y encima estar ligado exponencialmente a cuantas listas de costos yo
maneje cuando yo tenga que hacer un un por ejemplo un inventario de toda la mercadería de mi de mi empresa
imagínense los miles de productos multiplicado por todos los registros que encuentra de lista de costos
y encima con cada registro que encuentra tiene que hacer el trencito del cálculo de cada uno de los
descuentos.
Esto va a hacer que se me cuelgue la aplicación entonces que se me cuelgue o que demore horas en hacer
un cálculo de inventario.
Entonces lo que se hace es se graban dos campos uno con IVA y sin IVA.
Ustedes podrían obviar uno de los dos y en definitiva podían gravar sin IVA y después calcular en base
al IVA que diga acá.
Yo por experiencia me he metido a grabar un par de campos más que no va a jugar mucho en la performance
de la tabla y lo que hago ya tengo el dato ya cocinado una vez que tengo el dato aquí ya calculado y
cocinado ese dato lo puedo usar desde cualquier consulta desde cualquier sistema.
Ustedes piensen que el costo de un producto es uno de los datos más consultados dentro de un sistema
para hacer cualquier cosa para valorizar mercadería para valorizar diferencias de inventario para valorizar
un remito que yo estoy enviando a mercadería de vuelta al proveedor para valorizar una orden de compra
que me viene con mercadería del proveedor o que voy a solicitar al proveedor.
Esto es yo les puedo les puedo hablar de cientos y cientos de módulos o de opciones en un sistema administrativo
que van a consultar este dato entonces conviene tenerlo ya listo listo para no perder para no perder
en performance y que nuestros sistemas no se queden sentados esperando que se hagan todos los cálculos
muy bien yo ya tengo esos dos campos y vamos a agregar el último que es la fecha la fecha me va a indicar
cuál fue la fecha.
Voy a grabar un daytime cuál es la fecha en que se modificó fecha y hora de la última actualización
de ese registro o qué me va a permitir fácilmente decir Bueno mirá el costo de ese producto es 25 con
50 pero no hace tres meses que no está modificándose así que lo tengo que corroborar con el proveedor.
Esto es un dato muy útil también y fundamental en cualquier lista de costos.
Cuál fue la fecha de la última modificación de ese registro.
Bueno muy bien vamos a ver la última tabla de este capítulo y después vamos a ir al siguiente capítulo
para ver lo que tiene que ver con listas de precios.
Lo que vamos a grabar ahora es una tabla historial la tabla historial lo vamos a grabar aquí.
Recuerden que yo les dije que si ustedes modificaban cualquiera de estos campos en un momento en un
proceso de cambio de precios el dato anterior yo lo voy a tener que grabar en algún lado porque si yo
quisiera revertir supongamos y esto es muy común que el proveedor nos diga Bueno la lista que te acabo
de mandar y que cambiaste todos los precios hay que revertirla porque ese cambio no lo vamos a hacer
vamos a dejar los precios al mes pasado.
Entonces nosotros nos vamos a querer matar si no tenemos un backup de eso cómo se hacen en los sistemas.
Bueno muy simple vamos a crear una tabla llamada costos historia ustedes pongan el nombre no tomen los
nombres que yo pongo como que si no los hacemos así no funciona.
Los nombres de tablas los nombres de campos si ustedes en el país que ustedes viven tienen algún impuesto
especial que lograban los libros de costos y de precios lo incluyen también.
No lo tomen como algo que si no lo hacen de esta manera.
Esto es una ayuda es expandir la mente de ustedes para que entiendan todo el mundo administrativo que
hay detrás de un sistema y qué cosas tienen que tener en cuenta y que cosas no. Entonces vamos a poner
costo h aided nuestra prima ariki Beguin de 10.
Esto son tablas que van a crecer indiscriminadamente.
Por eso uso un Beguin de 10.
Estamos hablando de miles de millones de registros que los pueden dependiendo de la de la empresa en
la que estén.
La cantidad de proveedores que tengan la cantidad de clientes que tengan y el tiempo que transcurra
desde que hacen el sistema va a pasar de que se va a llenar de millones de registros y tienen que estar
preparados.
Por supuesto es una tabla que pasado un tiempo ustedes mismos van a crear un módulo para depurarla todo
lo que sea anterior a tres años atrás dos años atrás.
Ya sé que no voy a volver.
El precio o avalar y valorizar algo a tres años atrás entonces ahí borran abusan el Lilit como sentencia
o una aplicación o lo que tengan a mano para depurar registros.
Aquí vamos a colocar el costo de ID y este costo es éste o sea el historial gastar cada registro de
la historia y el historial va a estar apuntando a un registro maestro de esta tabla y van a ver que
por cada registro maestro de esta tabla puede haber 15 registros en esta tabla.
Por qué.
Por qué yo no voy a grabar todos estos campos porque tendría que grabar por ejemplo precio lista anterior
precio lista nuevo cotización anterior cotización nueva y así sucesivamente descuento 4 anterior descuento.
4 nuevo sería una tabla de 80 campos más o menos entonces lo que vamos a hacer.
Recuerdan que yo cuando vimos buenas prácticas y normalizacion en un momento dije es mejor más registros
que muchos campos entonces en lugar de crecer en nombres de campos y hacer la tabla interminable de
campos vamos a crecer en registro vamos a tener más registros mucho más delgados o sea con poquitos
Campos que ocupen poca memoria pero van a hacer muchos registros entonces con esto yo ya apunté a la
tabla de costos original.
Ahora lo que vamos a poner aquí en la ficha la fecha que estoy cambiando el precio la fecha que yo estoy
cambiando el precio o no a hora minuto y segundo y esto me va a permitir tener un orden no fijense voy
a tener toda la lista toda la lista del Registro número 1 que pertenece a una lista de costos precios
llamada minorista del producto número 1 un producto no sé la descripción que ustedes quieran lo voy
a tener todo ordenadito acá y a partir de ahí debajo ordenados por fecha todos los cambios de ese producto.
Todos los cambios de un producto todos juntos porque es mucho más fácil y menos costoso para el motor
cuando yo quiera ir a buscar un producto determinado y saber todo el historial de cambios que tuvo que
si el producto está mezclado en medio de toda la vorágine de millones de registros entonces el orden
que le damos a los campos también influye sobre todo cuando vamos a crear índices para el ordenamiento
de los datos.
Entonces vamos a aquí vamos a colocar un campo que se va a llamar campo y que es este campo este campo
va a ser un dato de tipo Tiny Hint de 2.
A ver si se dan cuenta es un campo numérico que va a tener a lo sumo 99 que en realidad si hubiera podido
ponerlo de uno lo ponía pero como no puedo por qué.
Porque tengo más de diez campos acá entonces el dato que va a ir grabado acá me va a hacer referencia
si estoy hablando de precio lista de cotización de moneda corriente este va a ser el valor 1 Este va
a ser el valor 2 3 4 5 6 7 8 9 10 11 12 en realidad podríamos llegar hasta aquí porque estos son calculados
12 campos.
Entonces aquí va a haber 12 campos con el campo le voy a estar diciendo el valor que vamos a ver ahora
en realidad pertenece al descuento 4 entonces aquí vamos a poner valor anterior y aquí vamos a poner
valor posterior.
Se entiende cuando yo modifique el descuento a 3 estoy haciendo un cambio de precios y me tocó modificar
los costos y tengo que modificar la columna que dice descuento 3 cuando yo el sistema detecta que modifiqué
ese dato cuando graven el historial me va a grabar un registro de que del campo 1 2 3 4 5 6 del campo
6 va a grabar un registro del Campo 6 me va a poner el valor anterior que tenía el descuento 3.
Aquí vamos a para que se entienda pero vamos a colocar como corresponde el valor anterior y el nuevo
valor y aquí ustedes me dirán Pero por qué decimal de diez coma cuatro si acá es 4,2.
Ok pero yo tengo que como aquí no voy a no voy a tener en claro si es un decimas si es un descuento
si es un Univa que tiene 4,2 si es un transporte o si es simplemente un precio holista que es diez coma
cuatro tengo que poner la capacidad máxima diez coma cuatro adentro ir a un porcentaje de descuento
no importa.
El problema es si yo Cacau aquí coloco 4,2 y luego quiero grabo un precio holista me lo va a truncar
mal me va a dar error o no o no.
O peor me va a grabar un dato truncado y erróneo entonces vamos nuevamente vamos a verlo aquí que está
más visible.
Tenemos una clave principal que es auto incremento.
Tenemos una Foreing que me va a unir costo historial con costos OK con el registro de costo el registro
que tiene toda la información referente a A qué tipo de lista es qué código de producto es y todos los
valores que el proveedor me ha dado para ese producto.
Luego tiene la ficha de cambio cuando se hizo el cambio cuando yo quiero ir para atrás y quiera ver
el cambio aquí me va a decir bueno este registro desde el 2 de enero del 4 de abril me va a ir mostrando
todos los cambios como si fuera una bitácora de ese producto qué valor tenía antes y qué valor tiene
ahora de que del campo que corresponda cuando el sistema que yo desarrolle lea un campo numérico aquí
va a tener que interpretar quizás esto va a tener que estar carcomía en el código como se dice este
va a tener que traducir el número que dice ahí me va a tener que mostrar por pantalla va decir el descuento
3 antes era 15 por ciento y ahora es un 20 se entiende.
Esto es costo historial Bueno ahora nos vamos a el próximo capítulo y vamos a ver lo que tiene que ver
con la última sección que es los precios y las listas de precios.
Nos vemos en el próximo capítulo.