Problemita con valor en el campo de una tabla access

Tengo una base de datos de una heladería en access 2007 esta cuenta con 4 tablas
Factura (n° de factura, fecha, cedula, total venta)
Cliente (cedula, nombre, apellido)
Helados (helado, precio)
Y una de enlace detalle de factura (n° de factura, helado, cantidad vendidad, subtotal)

Donde tengo un control calculado que realiza lo siguiente:
En el formulario
n° De factura, nombre, cedula, apellido, tipo de pago del cliente
En el subformulario:
Helado -- cantidad vendida---valor por unidad---- total por helado (subtotal)
chocolate           3 helados               2 $                             6$
fresa                   2 helados               4 $                             8 $
En el formulario:
  total a venta:    14$ (esta  caja tiene la siguiente formula =[DETALLES DE FACTURASubformulario].[Subformulario]![Texto10]) Que me da la suma de los totales por helado (subtotal)
Efectivo dado 20$ (es la cantidad recibida de pago)
Cambio: 6 $ (es el cambio del cliente)
Ahora el problema es el siguiente en mi tabla de factura en el campo total venta debería reflejarse 14$ pero no es así esta en blanco creo que es porque es producto de una fórmula entonces como haría para que ese valor (14$) se almacene en el campo total venta de mi tabla factura y cuando habrá mi tabla este ese 14 allí y no en blanco
Respuesta
1
El problema es que supongo que la fórmula en el control total venta la has escrito en el renglón de "Origen del Control" de la ficha Datos. Para que te grabe el registro en la tabla este campo debe estar asociado directamente con la tabla. Es decir en ese apartado debe estar el nombre del campo en la tabla.
¿Cómo grabar entonces el cálculo?
Efectúalo en un evento del último control en el que introduzcas los datos, por ejemplo de pago y se lo asignas al control del formulario.
Hola y gracias por responder pero intente hacer lo que me dices y no hace nada:
Cambie el origen del control que antes era la fórmula y coloque total venta que es el campo
en la tabla y en eventos le coloque la fórmula (al hacer clic) pero cuando voy al formulario
nada no me genera ni la suma,
Ahora te explico algo en el suformulario específicamente al pie del subformulario tengo un
subtotal que también tiene la fórmula: =SUMA([CANTIDAD VENDIDA]*[PRECIO DEL HELADO]) ESO ME DA LA SUMATORIA DE LO VENDIDO EN ESA VENTA
y en el formulario en total venta con la fórmula =[DETALLES FACTURAS Subformulario].[Formulario]![texto10] Eso lo que hace es traerme el resultado que tengo en el subformulario de la suma de los subtotal
De verdad estoy confundida y no se si lo estoy haciendo
bien, te pido por favor si me aclares un poco más porque necesito que esos resultados estén también en los campos .. como me gustaría poder enviarte la
base de datos para que vieras lo que he hecho .. bueno espero puedas ayudarme
Gracias
¿En cuál control "Al hacer click" colocaste el evento? Y ¿Qué código colocaste?.
En lugar de insistir en colocar fórmulas en el Origen del control, aprovecha que ya tienes el dato en el subformulario (aunque habría que ver en que momento lo calcula) y si es posible (si es posterior a la introducción del dato), el código del evento sólo sería directamente:
me.nombredelcontroldelformulario=Forms!nombresubformulario![texto10]
Insisto en que en el Origen del Control del formulario debe estar el campo de la tabla (contando que lo que quieres es grabar el dato)
Hola y disculpa nuevamente he intentado lo que me dijiste y no funciona o es que yo no lo se colocar que es lo más seguro jajaja sera que me puedes dar tu correo y yo te lo envío es que no soy muy experta con access y apenas estoy comenzando y me preocupa porque tengo que entregárselo a mi profesor el lunes
Ya te he enviado la respuesta por correo. Cuando puedas.

2 respuestas más de otros expertos

Respuesta
1
Sólo con leer tu consulta me han entrado unas ganas de comer helado... je, je...
Aunque te has explicado clarísimamente tengo una duda: ¿Cuál es el origen del formulario donde trabajas? Quiero decir, sobre ¿qué tabla está basado?
Si no lo tienes muy claro puedes mirarlo poniendo el formulario en vista diseño, sacas las propiedades del formulario, pestaña Datos, Origen del registro:¿?
En cuanto lo hayas mirado me dices cosas e intento encontrarte una solución.
Te explico en el pir del subformulario tengo el campo subtotales cuyo origen de control es una fórmula que me suma todo lo que esta en el campo total por helado
ahora en el propio formulario en el campo total venta se me refleja el 14 porque tengo como origen otra fórmula (la que te explique anteriormente) que me llama el valor que esta en subtotales en el subformulario
pero mi problema es que no se como hacer que ese valor (como el ejemplo 14 $) se almacene en el campo y no me quede en blanco en la tabla
Hay que reconocer que a veces esto de interactuar en la distancia es un poco latoso ;)
Entiendo perfectamente (o eso creo ;) el funcionamiento del formulario y subformulario, y también veo claramente cuál es el problema que tienes.
Lo que intuyo, por lo que comentas, es que tu formulario de trabajo esta hecho a partir de la tabla "factura", y dentro del mismo has creado un subformulario basado en la tabla detalle de factura.
Te pedía el origen del formulario principal (sobre qué tabla está basado) para confirmar si mi intuición es correcta.
Haremos otra cosa: sitúa el formulario de trabajo en vista diseño y dale click al botón (en los botones de menú de arriba) "Agregar campos existentes". Dime si te salen disponibles los campos de la tabla "facturas" o, si no es así, qué tabla es la que te muestra (y qué campos tienes disponibles para añadir).
En cuanto me confirmes esto te digo cómo hacerlo, porque según tu respuesta tenemos varias opciones.
Ok. Me fue al formulario factura en vista de diseño y le di clic agregar campos existentes
Me mostró lo siguiente
Campos disponible para esta vista:
Cliente (esta es una tabla)
Cedula
Nombre
Apellido
Dirección
Factura
n° De factura
fecha_factura
Tipo de pago
Total venta (que es el campo donde esta la fórmula que me trae el resultado del subformulario)
Cedula cliente (para 1 cliente pueden emitirse varias facturas)
Eso me aparece de primero y más debajo aparece
Campos disponibles en tablas relacionada:
Detalles factura
Campos disponibles en otras tablas:
HELADOS (tabla que contiene solo 2 campos nombre del helado cod principal y su precio)
Y swichboart item que es la del panel
*bueno eso es lo que vi y como tu dices la distancia a veces es un obstaculo pero cuando uno quiere aprender tiene que recurrir a ello aunque como me gustaria enviarte mi bd por correo para que la vieras*
Ahora creo que lo tengo un poquito más claro. Empezaré por contestarte lo que comentas en el final de tu última consulta diciéndote que por mí no hay problema en ver tu BD, y que mi correo es [email protected] (please, si me la pasas pásamela comprimida en un ZIP).
De todas maneras te propongo una cosa: yo te explico cómo arreglar tu "problemilla" y tú lo intentas, a ver si sale. Si no te sale me remites la BD y yo le echo un vistazo, y si te sale y aún te apetece enviármela pues también me la envías y yo encantado la miraré. Si te lo propongo así es para que puedas aprender un par de cosillas que quizás puedan serte útiles en el futuro... quién sabe si dentro de unos meses eres tú el que tiene que responder a alguna consulta que yo pueda tener!   ;)
Para evitar sustos te recomiendo que hagas las pruebas en una copia de tu BD, para mantener "a salvo" el original.
Te lo explicaré con muchos detalles. Te pido disculpas si hay cosas que ya sabes, pero como yo no lo sé partiré del supuesto que no sabes mucho de Access (aunque para haber hecho formulario con subformulario alguna idea debes tener! ;) )
Manos a la obra:
Vamos a hacer unos pequeños cambios en el formulario, aunque intentaremos aprovechar el máximo de lo que ya tienes hecho.
1. Coges el campo "total venta" y vamos a cambiar sus propiedades. Para ello, las sacas (botón "Hoja de propiedades"), te vas a la pestaña "Otras" y donde pone "Nombre" le escribes (sin comillas): "txtSubtotal".
2. Le das click al botón "Agregar campos existentes" y, de todos los campos que me has comentado que te salen, clicas sobre el campo "total venta" y lo arrastras al formulario, a cualquier rinconcito del mismo que te quede libre. Le puedes borrar la etiqueta y dejar sólo el campo. Da igual donde lo pongas porque no se va a ver en la vista formulario. Sacamos sus propiedades como en el punto 1 y le pones de nombre (sin comillas): "total_venta".
3. Siguiendo en sus propiedades, te vas a la pestaña "Formato", propiedad "Visible" y la sitúas en NO.
---
Ahora tienes un campo, "txtSutotal", que te recogerá el resultado de la fórmula, y un campo "total_factura" que está en blanco. Necesitamos ahora un sistema para traspasar la información del primero al segundo.
Para ello vamos a utilizar un botón de comando.
---
4. En la barra de botones de menú seleccionas el dibujo del botón (que está debajo de uno que pone Aa). En el formulario "dibujas" un rectángulo debajo de "txtSubtotal", por ejemplo. Cuando sueltes el botón del ratón te aparecerá el asistente. Lo cancelas.
5. En el botón te aparecerá por titulo algo parecido a "Comando8". Clicas encima y lo cambias por otro texto, por ejemplo, "Cerrar venta".
6. Sacamos las propiedades de ese botón, nos vamos a la pestaña "Otras" y en la propiedad nombre le pones (sin comillas): "cmdCierraVenta"
7. Ahora nos vamos a la pestaña "Otras", a la propiedad "Punto de tabulación", y lo situamos en NO
7. Ahora nos vamos a la pestaña "Eventos" (seguimos en las propiedades del botón) y en la propiedad "Al hacer click" haces click sobre el botoncillo con puntos suspensivos. Te aparecerá una ventana. Le das a la opción "generar código"
8. En la nueva pantalla que se te abre copias el código. El resultado final tiene que ser idéntico:
---
Private Sub cmdCierraVenta_Click()
    Dim valorSubtotal As Variant
    Dim respuesta As Integer
    valorSubtotal = Me.txtSubtotal.Value
        'Si el valor está en blanco o es cero lanza un mensaje
'de aviso y permite que el usuario tome una acción
    If IsNull(valorSubtotal) Or valorSubtotal = 0 Then
        respuesta = MsgBox("La factura tiene valor cero. ¿Es correcto?", _
            vbYesNo + vbQuestion, "SIN VALOR")
                'Si no es correcto sale del procedimiento
            If respuesta = vbNo Then
                Exit Sub
                'Si es correcto asigna el valor cero a total venta y
                'marca en amarillo el subtotal
            Else
                Me.txtSubtotal.BackColor = vbYellow
                Me.total_venta.Value = 0
                Exit Sub
            End If
    End If
        'Coge el valor del campo txtSubtotal y lo pasa al campo total venta
        'El campo txtSubtotal se vuelve amarillo para saber que se ha realizado
'la captura del valor
    Me.txtSubtotal.BackColor = vbYellow
    Me.total_venta.Value = valorSubtotal
End Sub
---
Y eso es todo. Ahora sólo queda poner el formulario en vista formulario y hacer un par de pruebas para ver si todo te funciona correctamente. Al hacer click sobre el botón "Cerrar venta" te pasará el total de la factura a la tabla y, para saber que ya has hecho click, el campo que hemos llamado "txtSubtotal" se te pondrá en amarillo.
Y después de este "testamento" sólo me queda cruzar los dedos y esperar que todo te funcione correctamente.
Ya me dirás cosas, y suerte! ;)
Ops! Casi me olvido de un detalle. Cuando cierras la venta el campo txtSubtotal se pone en amarillo. Si añades un nuevo registro seguirá en amarillo. Para evitar eso te vas a las propiedades del formulario, pestaña eventos, y en el evento "Al activar registro" le pones este código:
---
Private Sub Form_Current()
    If IsNull(Me.total_venta.Value) Then
        Me.txtSubtotal.BackColor = vbWhite
    Else
        Me.txtSubtotal.BackColor = vbYellow
    End If
End Sub
---
;)
Excelente ya me dio pero no he podido quítale lo amarillo yo te añadí a mi msn soy (xxxxxx) te voy a enviar la BD para que la veas uy con todo y amarillo sale excelente
No te olvides de finalizar la consulta si no tienes más "problemillas" que resolver!
;)
Respuesta
1
Por lo que me escribes, el valor del total de la factura lo tienes en un valor calculado, y no esta asociado a ningún campo de la tabla factura. Por eso no se actualiza en el campo de total de la tabla factura.
Entiendo que esta actualización debe hacerse mediante VBA cada vez que añadas un registro a la tabla detalles factura
Hola disculpa mi ignorancia pero apeas estoy comenzando con esto de access apenas llevo 3 semanas con esto me puedes explicar un poco más sobre como hacer eso y a que te refieres con "Entiendo que esta actualización debe hacerse mediante VBA (no lo entiendo) cada vez que añadas un registro a la tabla detalles factura"
VBA es Visual Basic Access, es decir, que para estas cosas debes introducirte en la programación en Visual basic . Igualmente, si quieres, y dependiendo de la versión en la que trabajes, puedes revisar la aplicación que hay de ejemplo en el access ( recuerdo que para la versión 2003 era la base de datos neptuno, que era muy parecida a la aplicación que quieres hacer).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas