En mi caso yo manejo en un campo las unidades y en otro campo las fracciones, con este método puedo manejar cualquier tipo de medida o fracciones, no necesariamente trabajando con la base 10, ya que hay fracciones de pares, docena, cientos, kilos, gruesa y cualquier otra medida que pueda existir como 1/8 de galón o 1/4 de galón y otras medidas más sin el mayor problema. Lo que debes adicionar en tu tabla de catalogo o maestro de productos es la cantidad de fracciones que contendrá tu producto ejemplo
Producto: Galletas x Caja
Fracciones: 10 significa que de esa caja puedes dividirlo en 10 partes
Producto: Bisagras
Fracciones: 2 porque se venden por pares puedes vender 1 par o una bisagra
Producto: Aceite en lata a granel x 6 litros
Fracciones: 1 si solo lo vendes sin dividir
6 si solo lo vendes por litros osea lo puedes dividir en 6 partes
6000 si lo puedes vender en diferentes medidas por litro, 1/2 litro un cuarto cualquier medida
Producto: Ganchos de Pelo x 12 unidades
Fracciones: 1 si no lo vas a dividir o vender por partes
12 si lo vas ha vender 1x1 cada parte significa que cada 12 hace una unidad
y así de esta manera no importa la cantidad de fracciones o tipo de producto fácilmente lo puedes manejar, y para sumar o restar de ese producto e muy sencillo, lo primero que necesitas es saber con cuantas fracciones vas ha trabajar para poder calcular correctamente lo que vas ha restar o incrementar, aquí te paso las funciones que debes trabajar para cada caso, lo que debes declarar antes de llamar a la función son unas variables new_saldo y new_frac las que contendrán el nuevo stock calculado, y ademas nstockunidades y nstockfracciones contendra el stock en unidades y fracciones actual del producto a trabajar.
function mastock
parameters nunidades, ncantfracc, nfracciones
nsaldo=(nunidades*nfracciones)+ncantfracc
new_saldo=(nstockunidades*nfracciones)+nstockfracciones
new_saldo=new_saldo+nsaldo
new_saldo=new_saldo/nfracciones
new_frac=(new_saldo-int(new_saldo))*nfracciones
new_saldo=int(new_saldo)
RETURN
function menstock
parameters nunidades, ncantfracc, nfraccciones
nsaldo=(nunidades*nfracciones)+ncantfracc
new_saldo=(nstockunidades*nfracciones)+nstockfracciones
new_saldo=new_saldo-nsaldo
new_saldo=new_saldo/nfracciones
new_frac=(new_saldo-int(new_saldo))*nfracciones
new_saldo=int(new_saldo)
RETURN
Si te das cuenta todo el stock se pasa a fracciones, tanto el que tienes en ese momento como el que estas adicionando o restando, así fácilmente se suma o se resta el valor actual con el nuevo, luego se vuelve a obtener los enteros y fracciones para obtener el nuevo saldo el cual sera indicado en la tabla de stock para referencia de consulta del producto.
Ademas con este criterio es fácil adicionar medidas adicionales al producto ose el mismo producto puede venderse o comprarse en otras medidas ademas de la medida principal por ejemplo
Producto: Galletas x Caja 10 unidades
Fracciones: 10
Medida adicional: Unidades
Partes de la medida principal
Unidades:0
Fracciones: 1
Medida adicional: Pares
Unidades: 0
Fracciones: 2
Producto: Aceite en lata a granel x 6 litros
Fracciones: 6000
Medida adicional: Litro
Unidades: 0
Fracciones:1000
Medida adicional: 1/2 Litro
Unidades: 0
Fracciones: 500
Medida adicional: 1/4 Litro
Unidades: 0
Fracciones: 250
Medida adicional: 1/2 Balde
Unidades:0
Fracciones: 3000
Medida adicional: Gruesa (por decir equivale a 10 latas de aceite)
Unidades: 10
Fracciones:0
Si te das cuenta de esta manera es muy fácil trabajar sobre un mismo producto diversas medidas. Para el manejo de las otras medidas debes tener una tabla adicional donde defines las medidas adicionales para cada producto, y en tu tabla de movimientos de salidas e ingreso un campo adicional para registrar el código de la medida adicional que estas usando, obviamente cuando esta en blanco significa que estas usando la medida base o estándar del producto.
Ahora en cuanto al kardex siempre lo visualizo en base a la medida base o principal, no en cuanto a otras medidas que se puedan haber adicionado a ese producto, osea en el kardex siempre se graba o registra en una sola medida que es la principal, para eso haces la conversión del caso antes de registrarse en kardex, mientras que en la tabla de movimiento de ingresos y salidas va tal como lo retirastes en la medida seleccionada.
Saludos
--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú