Como sumar datos de un formulario dependiendo la fecha en access

Tengo un formulario en access donde se ingresan facturas dependiendo el tipo de pago si es (efectivo cheque deposito o transferencia lo que quiero es que me muestre en ujn cuadro aparte cuanto monto va de cada tipo de pago osea me sume el monto de cada tipo de PAGO

3 respuestas

Respuesta
1

Si se guarda el método de pago la solución es sencilla:

Se compara el tipo (o uno de los tipos) de pago con el de las facturas, Access devolverá por y para cada comparación un verdadero (-1) o falso (0).

Si se cumple que al multiplicar un numero por la unidad esta no varia, y si se multiplica por cero se convierte en cero, esta formula deberá funcionar, en el ejemplo la suma de las facturas pagadas al contado (guarda 'Contado' como tipo de pago)

Total_Contados = DSum("[IMPORTE] * ABS([Tipo_Pago] = 'Contado')", "Facturas")

No se aplican condiciones, ese detalle queda a discreción del programador 

Nota: ABS devuelve el valor absoluto de un numero para que un TRUE= 1 y un False = 0

este es el formulario donde se van ingresando las facturas

Si las facturas a sumar están en el formulario, se puede simplificar, como origen de los cuadros de texto para cada total:

=Suma ([Monto] * Abs([FactCondTip] = "Efectivo"))

Para cada total: se repite lo mismo con la condición adecuada

Si todos los datos as sumar no están en el formulario, se tiene que utilizar la función de dominio y como condición, el periodo a sumar (el día actual, el mes actual, el trimestre o la campaña).

Eso es lo que necesito también que al iniciar otro dio otro documento me vuelva a todo blanco

el codigo mke da error

=Suma ([Monto] * Abs([FactCondTip] = "Efectivo"))

no se si me doy a entender

Desconociendo los datos reales (he supuesto que el referente es el valor que se muestra en el combo) he utilizado a modo de ejemplo ese dato, lo adecuado seria utilizar el que queda guardado en la tabla (que incluso puede ser un numero, su ID).

Si los resultados son de todo el día (y no están todos en ese formulario), se ha de utilizar la función de dominio (DSum) y como condición (su tercer parámetro el que no utilice en mi primera respuesta) la fecha del sistema, esto es: el día actual.

Aclarando:

Todos los datos en el formulario (aunque tenga diez páginas) ==> la función Sum

Solo parte de los datos en el formulario  ==> la función DSum que utilizara la tabla como origen.

Te agradezco tus comentarios lastimosamente no se mucho de access y no logro resolver lo que necesito de igual manera de lo agradezco

Se puede llegar a la solución por diferentes caminos, solo hay que ponerse de acuerdo en cual es el mas adecuado y sencillo.

Los datos comunes son:

.- El campo a sumar (que se supone que es 'Monto')

.- El campo que guarda la forma de pago (puede ser 'Codici ...' o 'FacCondTipo') y los datos que puede guardar (Efectivo/Tarjeta/ .... ==> Texto)  o el ID de ese concepto (1/2/3 ... ==> numero)

El formulario seria mas sencillo si se cumplen las condiciones mínimas: que todos los datos a sumar estén en el formulario (en el la fecha carece de importancia, si no esta, no entra en la suma).

En la tabla estaran todas las fecturas de todas las fechas, por lo que es imprescindible definir el intervalo (el día, la semana el mes ...)

Se compara el campo con la fecha (que puede ser 'Fecha' o 'FecReg') con el intervalo (que puede ser la del sistema si el calculo es diario, cada día comenzará en cero) o la del mes (que también puede implicar al año si hay o puede haber varios años)

Y para obtener una respuesta apta para copiar y pegar se necesitan los nombres reales de los campos y los diferentes datos que pueden llegar a tener y en el caso de trabajar con la tabla... también su nombre (puede llamarse 'facturas' o 'Facturas del año 2023' o 'Facturas de la tienda principal') y eso lo has de aportar o ... tendrás que 'traducir' las respuestas (y donde yo le llamo 'Pepe' tu le pones 'Juán' y con suerte es el padre y no su tío).

En fin, comienza por lo básico y paso a paso comenzaras a dominar a la maquina entendiendo lo que haces.

Respuesta
1

Por si le sirve le dejo este ejemplo:

Lo hago con una función la cual es el origen de datos de los campos EFECTIVO, TARJEETA ETC.

Funcion a nivel de formulario

Function montotipo(mtipo As Byte) As Double
 Dim strSQL As String
 Dim rs As Recordset
strSQL = "SELECT Sum(tblfacturas.monto) AS VALOR FROM tblfacturas" & vbCrLf
strSQL = strSQL & "   WHERE tblfacturas.fechafac =#" & Format(Me.ctlFecha, "mm/dd/yyyy") & "#" & " AND tblfacturas.factcondTipo=" & mtipo & ";"
Set rs = CurrentDb.OpenRecordset(strSQL)
 montotipo = Nz(rs("VALOR"))
 rs.Close
 Set rs = Nothing
End Function

A la función le paso el tipo asi: 1 Efectivo, 2 Tarjeta 3 Trans etc. Ver imagen siguiente

Y en el campo monto hago un Recal

Me. Recal

Esta es una idea se puede modificar para recalcular cuando se cambie el valor del cuadro combinado factcondTipo.

Te envié correl

Le envíe el ejemplo a su correo.

Respuesta

Lo mejor sería que pusieras una imagen, o de la tabla o del formulario. Ya que lo puedes hacer de muchas formas, dependiendo de los campos. Por ejemplo, podrías poner un cuadro de texto Efectivo y en cualquier evento poner, por ejemplo

Efectivo=dsum("importefactura","facturas","tipopago=""Efectivo""")

Lo mismo para Transferencia o ChequeDepósito

Suponiendo que hay algún campo en la tabla que se llame TipoPago

Por eso es necesario saber como diferencias el tipo de pago.

este es el formulario

Entonces, en el evento Después de actualizar del cuadro de texto Monto, crea un procedimiento de evento y entre Private Sub y End Sub ponle

Efectivo=Dsum("monto","facturas","fatcondtip=""Efectivo""")

Tarjeta=Dsum("monto","facturas","fatcondtip=""Tarjeta""")

Y así los otros, de forma que cuando escribas una cantidad en monto y pulses Enter, te pondrá en cada cuadro de texto su valor "actualizado"

Te aconsejaría también que en las propiedades del formulario-eventos-al activar registro crearas también un procedimiento de evento y entre Private Sub... y End Sub pusieras

If not isnull([monto]) then

Efectivo=Dsum("monto","facturas","fatcondtip=""Efectivo""")

Tarjeta=Dsum("monto","facturas","fatcondtip=""Tarjeta""")

...

End if

Esto es para que cada vez que abras el formulario, aunque no hayas escrito todavía un registro nuevo, en los cuadros de texto te aparezca su valor hasta ese instante.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas