Programa para registrar las facturas que recibo y las facturas que les doy a mis clientes

Hola, tengo una pregunta, estoy programando mi primer programa y se trata de los siguiente, es un pequeño sistema donde registro las facturas que recibo y las facturas que les doy a mis clientes, la tabla de entrada de facturas tiene los siguientes campos:
Campo tipo ancho
rznsocial txt 50
domicilio txt 50
ciudad txt 20
codigop num 8
rfc txt 15
nofactura num 5
fecha fecha 8
cantidad num 10
unidad txt 10
articulo txt 50
precio num 10
importe num 10
importetot num 10
iva num 10
total num 10
lo que quiero hacer es agregar una fila con todos estos datos, pero al hacer INSERT INTO con TODOS los datos no me lo acepta, necesito meterlos por tipo de datos, solo así lo acepta, pero cuando quiero meter los de tipo num me los inserta en una nueva fila, ¿cómo le puedo hacer para que me los inserte en la misma fila que tengo los de tipo txt?
El código que tengo en el botón del formulario "agregar" es este:
PUBLIC tRznSoc, tDomicilio, tCiudad, tRFC
PUBLIC nCP, nFactura, nImpTot, nIVA, nTotal, indice
PUBLIC fFecha
PUBLIC ARRAY nCant(15), nPrecio(15), nImporte(15)
PUBLIC ARRAY tUnidad(15), tArt(15)
&& Capturamos los datos Introducidos en "Datos de Factura" que son de tipo texto en la base de datos
tRznSoc = ThisForm.txtRznSoc
tDomicilio = ThisForm.txtDom
tCiudad = ThisForm.txtCiudad
tRFC = ThisForm.txtRFC
&& Capturamos los Datos introducidos en "no de Factura"
nFactura = ThisForm.numFactura
&& Capturamos los datos Introducidos en "Fecha"
fFecha = ThisForm.DateFecha
&& Capturamos los datos introducidos en "Articulos"
 indice=0
 FOR indice=1 TO 15
     IF nCant(indice) = ""
         exit
      ELSE
         USE regFacturas!Entradas
         INSERT INTO Entradas (nofactura) VALUES (ThisForm.numFactura)
         UPDATE regFacturas!Entradas SET rznsocial = ThisForm.txtrznSoc WHERE nofactura = ThisForm.numFactura        
         CLOSE tables
         CLOSE DATABASES
     ENDIF
 NEXT indice
Espero tu ayuda y gracias de antemano.

1 respuesta

Respuesta
1
Dices que al utilizar el Insert Into con todos los datos, no te los acepta, por lo cual concluyo que el sistema te mostrará un mensaje de error, ¿cuál es el error?
Este es el código que me da el error:
PUBLIC tRznSoc, tDomicilio, tCiudad, tRFC
PUBLIC nCP, nFactura, nImpTot, nIVA, nTotal, indice
PUBLIC fFecha
PUBLIC ARRAY nCant(15), nPrecio(15), nImporte(15)
PUBLIC ARRAY tUnidad(15), tArt(15)
&& Capturamos los datos Introducidos en "Datos de Factura" que son de tipo texto en la base de datos
tRznSoc = ThisForm.txtRznSoc
tDomicilio = ThisForm.txtDom
tCiudad = ThisForm.txtCiudad
tRFC = ThisForm.txtRFC
&& Capturamos los Datos introducidos en "no de Factura"
nFactura = ThisForm.numFactura
&& Capturamos los datos Introducidos en "Fecha"
fFecha = ThisForm.DateFecha
&& Capturamos los datos introducidos en "Articulos"
 indice=0
 FOR indice=1 TO 15
     IF nCant(indice) = ""
         exit
      ELSE
         USE regFacturas!Entradas
         INSERT INTO Entradas (rznsocial, domicilio, ciudad, codigop, rfc, nofactura, fecha, cantidad, unidad, articulo, precio, importe, importetot, iva, total) VALUES (ThisForm.txtrznsoc, ThisForm.txtDom, ThisForm.txtCiudad, ThisForm.numCP, ThisForm.txtRFC, ThisForm.numFactura, ThisForm.dateFecha, ThisForm.numCant(indice), ThisForm.txtUnid(indice), ThisForm.txtArt(indice),ThisForm.numPrecio(indice), ThisForm.numImpor(indice), ThisForm.numImporTot, ThisForm.numIVA, ThisForm.numTotal)
         CLOSE tables
         CLOSE DATABASES
     ENDIF
 NEXT indice
Y el error es:
"Incompatibilidad entre el tipo de operador y el tipo operando".
Espero respuesta.
Lo que suponía, estás asignando o evaluando dos valores que no son de un mismo tipo, en primer lugar debes revisar la línea IF nCant(indice) = "", pues cuando se crea una matriz en Visual FoxPro, esta se llena predeterminadamente con valores de tipo lógico (.F. Por defecto) y si no se ha trabajado sobre la misma asignándole valores, sus valores seguirán siendo de tipo lógico, si es así entonces deberías reemplazar la condición anteriormente mencionada por esta If Type("nCant(indice)") == "L", o si se ha trabajado previamente sobre la misma entonces se soluciona con la siguiente línea: If Empty(nCant(indice)) = .T., esta es en primer lugar la posible causa del error, ahora si el problema no está en dicha línea, entonces el problema está en que los tipos de datos que introduces a la tabla no corresponden al tipo de datos que tienen los campos de la misma, verifica que los valores capturados más que todo en los que ingresas valores numéricos y de fecha correspondan al mismo tipo de los campos de la tabla, ese problema se presenta más que todo en los cuadros de texto (textbox) que son los que en forma predeterminada sus valores son de tipo carácter si no están enlazados al campo de una tabla, entonces te voy a listar una serie de funciones que convierten tipos de datos y según sea el caso debes utilizar la adecuada para resolver el problema:
Str(): Convierte valores de tipo numérico a valores de tipo carácter.
Val(): Convierte valores de tipo carácter a valores de tipo numérico.
Ctod(): Convierte valores de tipo carácter a valores de tipo fecha.
Dtoc(): Convierte valores de tipo fecha a valores de tipo carácter.
Entonces revisa la línea de Insert SQL que con seguridad ahí estará el problema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas