Como modificar un dato como cantidad de productos en una tabla de mi base de datos desde un formulario?

Estoy haciendo un proyecto de una ferretería, pero tengo una duda y necesito su ayuda.

En mi tabla de productos yo tengo los siguientes campos:
Cod_producto
nombre_producto
Cantidad
Precio
y otro campos...

Pero yo necesito crear un formulario para hacer una factura, pero en el programa se me pide que si por lo menos yo hago una compra en la ferretería de 50 taladros y en total yo tengo 100... Me descuente de la tabla de mi base de datos los 50 compre, en luego en la tabla me aparezcan los 50 restantes que quedaron, y en caso de ser mayor la cantidad a comprar de taladros a la existencia, mandar un mensaje que diga que la compra no se puede realizar.
Eso debo hacer con todos los productos.
Necesito mucho de su ayuda.

1 respuesta

Respuesta
1

Debes trabajar con 4 tablas;

1. PRECIOS: La lista de precios que además tendrá el stock y alicuota (IVA) del producto.

2. FACTURAS: La tabla de Facturas, que tendrá datos del cliente valores de iva, sutotal y total.

3. DETALLES: Tabla de Detalles que tendrá datos de cantidades y detalle de venta.

4. CLIENTES: Datos del Cliente.

En las tablas debe existir un campo relacional para vincular datos de las otras tablas; por ejemplo:

PRECIOS: IDarticulo, Detalle del producto, Cantidad, Precio, Alicuota

FACTURAS: IDfactura, Nº de Factura Fiscal; IDcliente, Nombre del Cliente, etc.

DETALLES: IDfactura, IDarticulo, Detalle, Cantidad, etc.

Te he resaltado los campos relacionales que permitiran vincular un dato con el otro de las diferentes tablas.

Ahora, respondiendo a la consulta de que al superar una cantidad no permita hacer la compra; pues bien, cuando buscas un artículo ya sea por su nombre o su código habrás localizado el registro que contiene la cantidad en existencia del producto; lo memorizas y al ingresar la cantidad de compra solo lo comparas para saber si es mayor al stock.

Ahora para el proceso de ingreso de datos de la factura, se me ocurre que podrías usar tablas cursor; por ej.:

Vamos a crear una tabla cursor (ya sabes que éstas son tablas temporales)...

Select 0
Create Cursor csrFacturas (IDfactura c(10), Factura c(13))

Verás que solo he creado 2 campos, puedes agregarle la cantidad que necesites y tratas a ésta tabla como cualquier otra... lo mismo haces con la tabla de Detalles.

Entonces ingresas todos los datos en éstas tablas temporales y con un boton de GUARDAR que al presionarlo use por ejemplo el comando Insert - SQL para copiar todos los datos de la factura a la tabla fija; la que debe tener la misma estructura que éstas tablas temporales.

Insert Into Facturas Select * from csrFacturas
e
Insert Into Detalles Select * from csrDetalles

Esto es básicamente lo que debes hacer; explicarte más en detalles es muy complicado por aquí... busca ejemplos de formatos de facturas en internet; por ej.:

Haz tu formulario en blanco sin relacionarlos con ninguna tabla y luego haces los procedimientos necesarios de a uno.

Muchas gracias, me sirvió mucho

Otra consulta, ya meramente cuando facturo, obviamente facturo cierta cantidad de artículos, no me queda muy claro aun como descontar esa cantidad de artículos que facturo de la cantidad existente en mi tabla de la base de datos, se que es complicado explicar eso por acá, pero igual espero tu respuesta.

gracias de antemano

Una vez terminas de cargar toda la factura y le das al botón de guardar; y siguiendo con el ejemplo de que la tabla temporal (tabla cursor) es "csrDetalles" y ésta tabla temporal contiene un campo de "Cantidad" que equivale a la cantidad de compra, entonces haces un SCAN ENDSCAN de dicha tabla...

Veamos; dijimos que los datos de las tablas son los siguientes:

PRECIOS: IDarticulo, Detalle del producto, Cantidad, Precio, Alicuota, Stock

DETALLES: IDfactura, IDarticulo, Detalle, Cantidad, etc.

NOTA: Algo que se me olvidó indicar es que la tabla "Precios" debería tener creado un indice sobre el campo IDarticulo. (INDEX ON IDarticulo TAG IDarticulo), de éste modo las búsquedas se harán más rápidas.

... Y la tabla temporal "csrDetalles" contiene la misma estructura que "Detalles", entonces:

Use Precios Order IDarticulo
Select csrDetalles
Scan
   Select Precios
   Seek csrDetalles.IDarticulo
   If Found()
      Replace Precios.Stock With Precios.Stock-csrDetalles.Cantidad
   Endif
Endscan
Return

Lo que hace esto es Ir registro a registro en la tabla temporal "csrDetalles" y en cada uno de ellos toma el valor relacional del artículo "IDarticulo", busca dentro de la tabla precios hasta que lo encuentra y se posiciona en dicho registro de la tabla "Precios", luego solo reemplaza el valor del Stock restando el valor actual del Stock menos el valor de cantidad vendida.

Muchísimas gracias!

Me fue de mucha ayuda

Otra pequeña consulta, ¿es necesario programar algo en el formulario para poder correr esta factura?

Ahí disculpa, soy nuevo en esto

Me alegro te haya sido de utilidad. Con respecto a la consulta, no, no debes programar nada, solo crea los objetos TextBox, Grid, CommandButton, ComboBox o cualquier otro que desees agregar y ya; a cada objeto le das la acción que necesites y seria todo; aunque no es así de simple en realidad.

Lamento no poder ser más específico pero sería muy, muy extenso.

Me marca error ahí mira, y me dice files in use, y no esta abierta ni nada la tabla
¿Qué podrá ser?

Si te da error de que está en uso sin dudas estará en uso...

Puede que esté abierto en Data Environment... para identificar ésto prueba hacer clic con el boton derecho el mouse sobre alguna parte del formulario (no sobre un objeto) verás un desplegable en donde podrás ver una de las opciones que indica Data Environment (haz clic sobre ésa opción). Si al abrirla no vez ninguna tabla allí habrá que analizar otro sitio donde puedas haber abierto ésta tabla. Si está allí solo la quitas.

Por otro lado puedes también resolver el problema reemplazando la primera linea que es...

USE Producto ORDER cod_producto

por ésta otra..

IF USED(productos)
   SELECT productos
ELSE
   USE productos
Endif
SET ORDER TO cod_productos

Me corrijo, es así...

IF USED("productos")
   SELECT productos
ELSE
   USE productos
Endif
SET ORDER TO cod_productos

ahora me tira ese error

disculpa el molestarte tanto pero solo esto me esta atrasando

gracias!!!!!

Veo 2 posibles errores..

Podes verlo en el las siguientes líneas..

IF USED("productos")
   SELECT productos
ELSE
   Select 0   
   USE productos
Endif
SET ORDER TO cod_producto

Quiero darte las gracias por la ayuda que me has brindado. Ya logré terminar todos mis formularios y sin tu ayuda no hubiera sido posible.

Muchísimas gracias, y éxito en todo lo que haces.

Me alegró saber que pudiste resolver tus dudas. Lo mismo te deseo, muchos Éxitos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas