Visual foxpro quiero aprender a insertar datos a un grid creando un curso como lo hago, quiero hacer una aplicación de factura

Estoy creando una aplicación de facturación la cual tienen un grid, yo quiero que el los campos co_arituclo, descripción cantidad precio, subtotal se vaya llenando cada ves que yo ingrese los datos de artículos y después que en el botón de guardar se me guarde, pero aplicando esto atreves de un cursor

1 respuesta

Respuesta
2

Para darte información más exacta me falta conocer bastantes datos; sin embargo intentaré darte unos parámetros que pueden guiarte en principio..

En el método Load, creas la tabla cursor con la estructura que deseas; por ejemplo:

Select Select(1)
Create Cursor csrDetalle (co_articulo c(10), descripcion c(50), ;
    Cantidad n(10,3), precio n(10,2), subtotal n(10,2)) 

En las propiedades del grid que contendrá el detalle del artículo haces:

RecordSource = "csrDetalle"
RecordSourceType = 1

Con esto estás listo para comenzar a cargar datos de otra tabla; en éste caso será una tabla de artículos y precios...

Para insertar ahora datos de tu tabla de artículos y precios haces (me inventaré los nombres de campos, así que entiende que no es literal).

Insert into csrDetalle (co_articulo, descripcion, cantidad, ;
    precio, subtotal)  values ;
    (Articulos.Codigo, Articulos.Descripcion, Articulos.Cantidad, ;
    Articulos. Precio, Articulos.Precio*Articulos. Cantidad)

Para guardar una vez que estés conforme con la lista haces... (nuevamente supondré que tienes una tabla llamada Facturas que contendrá el detalle antes cargado..

Insert Into Facturas Select * From csrDetalles

Espero pueda serte de utilidad. Dime cualquier duda.

Buenos días, agradezco el aporte que me acabas de dar y esto muy agradecido, sera que podrías mandarme un código completo sencillo donde se crear la tabla y se crear el grid y las funciones del código con el cursor porque he tratado de ver tutoriales en youtube y no me enseña esa forma de insertar datos al grid a través de cursor . soy muy novato en este tema y quería saber que recomendación me darías si estoy empezando a programar en visual fox pro .

No tengo nada como lo que me pides; tendría que ponerme a escribirlo desde cero; y como me pides una recomendación te digo que trates de comprender lo que te he escrito que te resolverá tu duda, además te servirá a ti mismo a futuro para resolver fácilmente los problemas ya que todo parte de un mismo concepto.

Una cosa que no te he mencionado considerando que podrías ya saberlo es que debes abrir las tablas de Artículos, Facturas y crear la misma tabla cursor.

Buenas tarde esto es lo que trato de hacer . pero esos datos que sale allí esta cargado en unas tablas pero yo no lo quiero hacer manual, yo quiero guandarlo con la opción del botón guardar me guarde la información

esta son mis tablas 

esta son mis propiedades

Te decía que la tabla cursor debes crearla en el evento load del formulario. Veo que los datos que mencionas están en una tabla "Temporal.dbf" y el RecordSource del grid apunta hacia ésta tabla... por lo tanto si deseas que el grid apunte hacia una tabla cursor debes primero crear esta misma tabla cursor y luego hacer que le propiedad RecordSource del grid apunte hacia hacia ésta última "csrDetalle".. Corrijo el ejemplo que te d que agregas en el evento Load del Formulario:

Select Select(1)
Create Cursor csrDetalle (Nguia c(6), ArtCod c(3), ArtDet c(40), ;
    PreUni n(7,2), Cant n(5), precio n(10,2), SubTotal n(10,2)) 

En el grid cambias la propiedad de RecordSource que sea "csrDetalle" (sin las comillas).

Hasta aquí no verás mucho cambio e incluso esa tabla temporal ya no la usarás más; ahora bien, para registrar los cambios (es decir guardar) tanto en la tabla "GuiaEnc" (que deduzco es la cabeza de factura) y en Guiadet (Detalles de la factura), haces lo siguiente:

Insert Into GuiaEnc (Nguia, ClieCod, IGV, Total) values ;
    (Thisform.txtNguia.Value, Clientes.ClieCod, ????, ;
    Thisform.txtTotal.Value)

NOTA: ¿Verás qué puse? Ya que no se que valor se registra en el campo IGV. Corrige por el dato que va allí.

Ahora, para insertar los valores de Detalles en la tabla "Guiadet" haces:

Insert Into Guiadet (Nguia, ArtCod, ArtDet, PreUni, Cant, Subtotal) ;
    Select Nguia, ArtCod, ArtDet, PreUni, Cant, Subtotal From csrDetalle

Noté que la tabla de "Temporal" tiene la misma estructura que la tabla de "Guiadet"; que yo use como ejemplo "csrDetalle" como nombre de tabla cursor (tu usa el que prefieras).. pero para seguir con la línea de explicación me seguiré refiriendo como "csrDetalle"...

Para evitar hacer modificaciones de estructura podrías crear en el evento Load del formulario la tabla cursor de la siguiente manera..

Use Guiadet
Select Select(1)
Select * From Guiadet Into Cursor csrDetalle Where .F. Readwrite

Si tienes que crear un índice a una tabla cursor hazlo sin problemas que cuando cierres esta tabla también desaparecerá el índice.

gracias por la información. tengo otro pequeño problemas . sabes que estoy gernerando un reporte que me muestre los clientes que generen  2 facturas en adelante . sabiendo que tengo  un reporte que elabore  que se llama FACTURA POR CLIENTE  . pero este reporte me muestra todas las facturas incluyendo el cliente  que tiene solo una factura pero yo no quiero que me muestre los clientes que tienen 1 factura si no los que tienen 2 facturas en adelante . lo trate de hacer asi pero no me hace lo que yo quiero  

SELECT * FROM Vreportes READWRITE
SELEC COUNT(Vreportes.fact_num)as contador,*FROM Vreportes GROUP BY Vreportes.Co_cli INTO CURSOR prueba
SELECT Vreportes * FROM Vreportes.prueba WHERE Vreportes.Co_cli=prueba.Co_cli AND Prueba.contador>1 INTO CURSOR Vreportes

SELECT Vreportes

Perdona José pero te importaría hacer ésta consulta en una nueva consulta, que al ser éste un medio de ayuda a los que vienen a aprender; si las consultas estuviesen mezcladas no hallarían lo que buscan.

En la consulta explícame un poco la estructura de Vreportes.

 

Buenas tarde como que la consulta? no entiendo lo que me tratas de decir

Lo que digo es que como esta pregunta fue cerrada deberías hacer una nueva pregunta para no mezclar.. pero deja; solo dime como es la estructura de la tabla vreportes para entender el por que de t select.

buen día . lo que pasa es que necesito encontrar la condición que me tome los clientes que tienes dos facturas en adelante .

Prueba lo siguiente..

Set Enginebehavior 70
Select Select(1)
Select Count(Co_cli) as Contador, * From vReportes Group By Co_cli ;
    Into Cursor csrConteo
Sele * From csrConteo Where Contador>2 Into Cursor vReportes
Set Enginebehavior 90

¿Buen día esta condición me tomara los clientes que posee 2 facturas en adelante? Y no me tome los clienets que poseen 1 facturas

SELECT * FROM Vreportes READWRITE
SELEC COUNT(Vreportes.fact_num)as contador,*FROM Vreportes GROUP BY Vreportes.Co_cli INTO CURSOR prueba
SELECT Vreportes * FROM Vreportes.prueba WHERE Vreportes.Co_cli=prueba.Co_cli AND Prueba.contador>1 INTO CURSOR Vreportes

SELECT Vreportes 

¿Esta fue la condición que yo le coloque esta mala? Porque no me funciono

Buen día le estoy colocando esta condición al reporte

Set Enginebehavior 70
SELECT * FROM Vreportes READWRITE
Select Count(Co_cli) as Contador, * From vReportes Group By Co_cli ;
Into Cursor csrConteo
Sele * From csrConteo Where Contador>2 Into Cursor vReportes
Set Enginebehavior 9 

Pero no me esta haciendo lo que yo quiero . quiero recordarte que yo tengo un reporte que se llama factura por cliente . este reporte me muestra todos los clientes que tienen una factura en adelante . que hice yo tome este mismo reporte y le cambie el nombre le puse clientes con más de dos facturas . pero cuando le coloco la condición pareciera que no me la tomara . porque me hace el mismo trabajo que hace el reporte ese que tengo que se llama factura por cliente . que me recomiendas tu

El error desde estar en esa tabla que usas de donde tomas la información "vReportes", posiblemente ya estén filtrados todos las facturas por 1 cliente.

Prueba hacer lo siguiente a ver que resulta..

Después del ejemplo que te he enviado, escribe lo siguiente..

..
Set Enginebehavior 90 && esta era la última línea.
Select vReportes
Browse

Esto te abrirá la tabla cursor como fue creada; debería existir un campo (el primero) denominado "Contador" que tendría que tener un número siempre mayor o igual a 2.

¿Este código que me enviaste es para hacer una consulta? ¿A la tabla factura? ¿factura.dbf?

En realidad solo uso la información que me envías; para ser más específico y poder responder con mayor certeza debes ser más claro en tus consultas... si miras bien, verás que la consulta es a partir de vReportes, como mencionaste al inicio de esta pregunta.

Desconozco la estructura de datos así que si no me indicas esta información solo podré darte explicaciones de acuerdo a lo que intuya.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas