FoxPro/Visual FoxPro - Formulario para Ventas

   
Vista:

Formulario para Ventas

Publicado por Mauro maurogoya@hotmail.com (1 intervención) el 03/04/2017 16:09:37
Hola, Qué tal?
Les comento, estoy realizando un sistema (mi primero) de gestion de stock y ventas de mercadería de Almacen.
Mis conocimientos sobre el lenguaje no son muy amplios, pero decidí empezar a crearlo e ir a aprendiendo a medida que voy avanzando (considero que es la única manera de aprender un lenguaje: llevándolo a la practica).
Resulta que tengo un problema a la hora de trabajar con el formulario de ventas.
Prosigo a detallar como están confeccionadas las tablas así me pueden entender luego.
Tengo dos tablas, una tabla Productos (t_prod) con sus campos que son (prod_idpro[pk], prod_nom, prod_stock, prod_preco [Precio Costo], prod_preve[Precio Venta]).
Y la siguiente tabla sería Ventas (t_vtas) sus campos son (vtas_id[pk], vtas_idpro, vtas_cant, vtas_fecha, vtas_total).
Ambas tablas se encuentran enlazadas por (prod_idpro - vtas_idpro)

Una vez dicho esto, paso a explicarles.
Tengo dos formularios, uno correspondiente a Productos donde se Agrega,Modifica y se Borra los productos.
Y el otro formulario correspondería a ventas, donde se confeccionaría toda la venta y el total de la misma.

Él ABM en Productos funciona fantástico, se puede realizar todas las acciones de agregar, modificar, etc etc. sin ningún problema.
El problema está en el formulario Ventas.
Mi idea en el formulario sería que dentro de un textbox al escribir el código del producto, automáticamente en un grid se actualice el mismo agregando el producto que escaneamos con su nombre y correspondiente precio de venta, sumado a la columna "cantidad" que vendría a tener luego la función de multiplacar "precio de venta * cantidad".

He intentado absolutamente de todo y no he podido encontrarle una solución. De hecho, cometí el error al principio de enlazar el grid con la tabla productos, pero la consecuencia es que me muestra los datos que hay en la tabla y esa no es la función que estoy requiriendo.
Si bien, he diagramado en mi cabeza como debería funcionar, el problema es el vacío de programación que tengo por el cual no puedo lograr que cumpla la función que quiero.

Espero haberme explicado bien y que me hayan entendido cual es mi problema y mi petición.
Agradecería muchísimo que me orienten o me den una mano en poder solucionar este problema porque ya vengo trabado sin poder avanzar en esto, unos varios días.

Saludos y muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Formulario para Ventas

Publicado por Fidel José (566 intervenciones) el 03/04/2017 21:33:04
Para un planteo mínimo de gestión de ventas necesitas al menos dos tablas, además de la tabla de productos.
1) Tabla cabecera de facturas
2) Tabla detalle de productos / servicios

Normalmente el el grid de facturación, asocias un cursor generado a partir de la tabla de detalle, por ejemplo:
SELECT * FROM DETALLE_VTAS WHERE .T. INTO CURSOR curDetalle

Thisform.grid.recordsource = "curDetalle"
En el archivo de cabecera deben ir al menos:
Fecha, Id_Cliente, IdentificadorFiscal, Comprobante, y los totales según los requisitos de tu país (para argentina, lo mínimo es Gravado, nogravado, exento, importe_Iva, percepción_Iva, Percepción_IngresosBrutos, Total_Factura.). Además condiciones de venta y lo que quieras agregar.

En el archivo de detalle van, obligatoriamente:
Comprobante, IdProducto, Cantidad, precio, Importe y conviene agregarle, fecha, id_cliente y algún campo más que se necesite para estadísticas.

A partir de ese cambio de paradigma, te queda solucionar: si trabajarás con ingreso de la cantidad en el grid o con un control aparte. De ello depende desde donde se pide el cálculo.
Pero piensa que el cálculo de precio puede tener algunas complicaciones luego (bonificaciones automáticas por cantidad o fórmulas específicas de cálculo) por lo que es mejor crear un método en el formulario que se ocupe de calcular precio para cada línea y total.

Cuando quieras grabar la factura, tendrás que actualizar el registro de cabecera y luego el de detalles. Este último lo puedes hacer con un simple append from o con alguna forma más sofisticada:

SELECT DETALLE_VTAS
APPEND FROM DBF("curDetalle")

Por último: Que el número de comprobante sea el enganche (relación) entre los archivos de cabecera y detalle puede ser una mala idea. Yo utilizo una secuencia interna (a infinito) que me permite independizarme de las locuras de la oficina fiscal. Ambos números deben calcularse justo antes de guardar el comprobante generado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad