Guardar datos calculados

Hola, he estado buscando en respuestas anteriores y por internet, para solucionar el problema con el que me he encontrado, pero después de probar con varias cosas no lo he conseguido, por eso recurro a ti esperando que me puedas ayudar.
Estoy haciendo una base para llevar el control de gastos y facturación de un pequeño negocio. Consta de 6 tablas (Clientes, Compras, MisDatos, NºFactura, Productos, Ventas), 2 Formularios (Clientes, Gestión de Facturas) este ultimo formulario, tiene 3 Subformularios (NºFacturas, Ventas y Ventas1) La relación entre las Tablas es
Clientes  IdCliente (Autonumerico) con NºFacturas tblClientesid (numero entero largo) uno a varios con integridad referencial
NºFacturas factNumero (Autonumerico) con Ventas tblNFactura (numero entero largo) uno a varios con integridad referencial
Clientes  IdCliente (Autonumerico) con Ventas tblClientes (numero entero largo) uno a varios con integridad referencial
El Formulario "Gestión de Facturas" tiene como Origen de Control la tabla Clientes. Dentro de este formulario, el 1º de los SubFormulario es NºFactura con Origen de Control la tabla NºFactura, el 2º Ventas1 tiene de Or de Ctlol la tabla Ventas y vista predeterminada "un único formulario", el 3º Ventas tiene de Or de Ctlol la tabla Ventas y vista predeterminada "Hoja de Datos". Tengo varias instrucciones de código que cuando los campo reciben el foco se van realizando cálculos, de esta forma con otros cogido que tengo también, al terminar de meter los datos en Ventas1 se actualiza automáticamente Venta y así ver todos los registro de la factura que estamos haciendo.
Mi problema es que en Venta1 tengo tres cuadrotxt independiente que mediante expresión en el Origen de Control me calculan, el 1º SumaBase, =Suma([ventTotBase])" el total de los registro antes de Iva, el 2º SumaIVA, =Suma([ventsubTotIVA]) el total de las cantidades de IVA de las lineas de registro y el 3º SumaTotal =Suma([ventsubTotal]) el total de la cantidades de la lineas de registro resultalte de la suma de los dos comceptos.
Me gustaría, los calculo que realizan esos cuadros mediante la expresión, las pudiera realizar por código para poder cambiales así el Origen de registro y poder guardar los resultado en la tabla
La otra opción que veo, es poner en NO visible los 3 Cuadros y pasar el resultado final mediante código a tres cuadrostxt con origen de registro a tabla NºFacturas, en el Subformulario NºFactura.
Espero que puedas ayudarme. Un Saludo
P.D. Si necesitas alguna información más que te pueda se de utilidad, no dudes en pedírmela

2 respuestas

Respuesta
1
Entiendo que lo que quieres es que en un momento dado -a través de un botón o al actualizar un registro- te realice un cálculo determinado (en este caso una suma de un campo) para poder incorporarlo a una tabla.
La función con la que se trabaja a través de código sería
DSum("[Campo_que_quieres_sumar]", "Tabla_en_la_que_operas", "[Campo] = Condicion")
Este comando de visual te suma el Campo_que_quieres_sumar de la tabla Tabla_en_la_que_operas con la condición que le pongas.
Después de tu explicación tan detallada, no sé si esta respuesta solventa tu problema, si no es así coméntamelo y lo vamos mirando. Otra solución sería que me mandaras la BD comprimida con algún dato de ejemplo e intentaría generar el código.
[email protected]
Una aperta.
Hola experto, puede que por mi explicación anterior, haya podido dar la impresión que tengo alguna idea sobre visual basic, o tal vez no, en definitiva, no he podido comprobar si el código que me pones funciona por que no se como adaptarlo.
Este es el código que tu me has mandado
DSum("[Campo_que_quieres_sumar]", "Tabla_en_la_que_operas", "[Campo] = Condicion")
Esta es mi intento de adaptación.
DSum("[ventTotalBase]", "Tabla_en_la_que_operas", "[Campo] = Condicion")
En tabla en la que opera, no se que poner
[Campo] No se que poner y en Condición esto no se ni lo que es
Como ves parece broma pero no lo es, llevo utilizando access unos 8 meses y lo poco que sé lo he aprencido solo y buscando por internet.
Siento no dar para más, Gracias
Parece que has hecho un buen trabajo de relación de tablas lo que me da a entender que no eras novato. En cuanto al visual basic es la opción para solucionar mediante programación prácticamente todas las necesidades, por lo que te animo a estudiar programación.
Para intentar solucionar este problema iremos por partes.
Al querer sacar un dato a través de código crearemos un botón pulsando Botón en el cuadro de herramientas y dibujamos el botón donde queramos. En este caso no incorporaremos ninguna opción a realizar por lo que tras dibujarlo y que nos abra el wizard le daremos a cancelar.
Luego con el botón derecho marcamos Generar evento>Generador de códigos y nos abre la ventana de módulos de visual basic.
Para probar fórmulas se suelen incorporar después de una orden denominada MSGBOX que hace que nos visualice el resultado en una ventana.
Por lo que incorporaremos la fórmula de la suma después de un MSGBOX y veremos que nos sale.
Supongamos que tenemos una tabla llamada Tbl001, con un campo numérico Numero y una campo texto Letra. Introducimos en el campo Numero datos del 1 al 26 y en letra de la A a la Z.
Si incorporamos el código siguiente
msgbox DSum("[Numero]", "Tbl001", "[Letra] >'F'")
Cerramos la ventana del módulo y en vista formulario pulsamos el botón creado, nos abrirá una ventana con el dato 330 que es la suma del campo Numero de la tabla Tbl001 con la condición de que el campo Letra sea mayor que F.
Readaptando este ejemplo a tus tablas, puedes visualizar las sumas que deseas.
Vamos probando esto y después damos un paso más.
Gracias Experto. Tengo que decir que estoy contento por haber conseguido adaptar tu código a mis tablas y que funcione, este es el código que he colocado.
Private Sub Comando33_Click()
MsgBox DSum("[ventTotBase]", "Ventas", "tblNFactura")
End Sub
Pero, siempre hay un pero ¡Verdad!. El Campo ventTotBase de la tabla Ventas es el primero que quiero sumar, al colocar el campo tblNFactura de la tabla Ventas (este campo lo tengo para relacionar esta tabla con la tabla NºFactura) pretendía que me sumara el total del campo ventTotBase, que coincidiera con un determinado numero de factura (el que estaba activo en el formulario) del campo tblNFactura, pero es evidente que algo me falta de poner, porque me suma el total de todos los registros del campo ventTotBase que contiene registros de varias facturas y no el total de una determinada factura que era mi intención.
Ademas ese resultado que me da no se guarda en ningún sitio y me gustaría que se guardara en el campo Base de la tabla NºFactura
Y ademas, ya para rizar el rizo, me gustaría que el resultado de la operación apareciera en lugar de en una ventana emergente, apareciera en un textbox, que estaría colocado en el Subformulario Ventas1 que esta dentro del Subformulario NºFactura que a su vez está dentro del Formulario GestionFacturas.
Espero no pedirte demasiado.
De todos modos Muchas Gracias
Como te dije, vamos a ir por partes.
Si quieres que te realice una suma de un determinado número de factura te falta poner la condición de filtro que estaría en donde pones "tblNFactura"
MsgBox DSum("[ventTotBase]", "Ventas", "[CampoDeLaTablaVentas]='" & Me.CampoFiltro & "'")
CampoDeLaTablaVentas sería el nombre de la factura (creo) y el CampoFiltro sería el del registro activo que quiero calcular.
Con respecto a grabar el dato en algún campo, no tienes más que cambiar MSGBOX por el nombre del campo.
Campo001=DSum("[ventTotBase]", "Ventas", "[CampoDeLaTablaVentas]='" & Me.CampoFiltro & "'")
Este tipo de dudas son complicadas de explicar en los dos bandos, por ello te pedía la aplicación por correo para poder solucionar tus problemas de forma más efectiva.
Una aperta.
Respuesta
1
Tenemos una tabla TotalSumas con los campos Suma_Base, Suma_Iva, Suma_Total. En el formulario pondremos un botón con el siguiente código:
DoCmd.RunSql "Insert Into TotalSumas (Suma_Base, Suma_Iva, Suma_Total) Values (" & Form!SumaBase & ", " & Form!SumaIva & ", " & Form!SumaTotal & ")
Hola Angeles, Gracias por contestar.
Sobre la solución que me has ofrecido, decirte que no se porqué me no me funciona, al hacer click en el Botón, me sale un error que me dice:
Se ha Producido el error ´3061´en tiempo de ejecución
Pocos parámetros, se esperaba 2
A causa de mi desconocimiento de Visual Basic, para mí este mensaje, es como si me lo hubieran escrito en chino.
Gracias
Olvidé las " del final:
DoCmd.RunSql "Insert Into TotalSumas (Suma_Base, Suma_Iva, Suma_Total) Values (" & Form!SumaBase & ", " & Form!SumaIva & ", " & Form!SumaTotal & ") "
Si no es eso, quita los paréntesis de los valores:
DoCmd.RunSql "Insert Into TotalSumas (Suma_Base, Suma_Iva, Suma_Total) Values " & Form!SumaBase & ", " & Form!SumaIva & ", " & Form!SumaTotal & "
Si así tampoco, no se lo que puede fallar, si quieres te mando mi correo y echo un vistazo a tu BD (en access 2003)
Hola Angeles, gracias de antemano por las molestias que te estas tomando conmigo.
Sobre tu respuesta anterior, lo he vuelto a intentar como me comentabas en la ultima aclaración y no me ha funcionado. He creado la tabla TotalSumas con los campos, he creado el botón con el código 1º de la respuesta de día 13 y al ejecutarlo me sale el mensaje de error:
Se ha Producido el error ´3346´en tiempo de ejecución
El numero de valores de consulta y el numero de campos de destino son diferentes
y si le quito los paréntesis a los valores me dice Error de sintaxis en la instrucción INSERT INTO
Si te sale ese error es porque tienes más campos destino que valores o viceversa, mira bien las, que separan los campos.
¿Puedes copiar y pegar la sql?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas