Dsuma formulario campos entre tablas

Aquí me encuentro nuevamente con una inquietud.  Tengo tres tablas: empleados (idempleado,  nombre) , conceptos (idconcepto, concepto, tipo (en tipo es ingreso o egreso))  y detalles (iddetalle,  idempleado,  idconcepto,  valor)  tengo en el formulario detalles un subformulario y quiero obtener en un textbox (txtingreso) la suma de todos los ingresos de un registro de un empleado y en otro textbox (txtegreso)  una suma de los egresos mediante el contenido del campo tipo,  la situación es que me suma el valor tanto de los ingresos como los egresos sin hacer el filtro este es el orden como lo estoy haciendo en el origen de control txtingreso =dsuma("[valor]","detalles","[conceptos].[tipo]='ingreso'" y en el txtegreso =dsuma("[valor]","detalles","[conceptos].[tipo]='egreso'"

1 respuesta

Respuesta
1

Con DSuma (y el resto de funciones agregadas de dominio) no puedes mezclar datos de distintas tablas, o al menos, no directamente.

La solución fácil a tu problema es crearte una consulta con los campos que necesites de las tres tablas, guardarla y usar el DSuma en esa consulta.

Por ejemplo, si a tu consulta la llamas CAux y coges los campos idempleado y nombre (de empleados ), concepto y tipo (de conceptos) y valor ( de detalles ), el DSuma sería:

DSuma("Valor","CAux", "Tipo='Egreso'")

Aunque para saber el total de ingresos y egresos de un empleado, deberías añadirle también el Idempleado:

DSuma("Valor","CAux", "Tipo='Egreso' AND Idempleado=1")

¡Gracias por tu pronta respuesta. te plantearé cual es mi verdadera situación. quiero realizar un comprobante de pago.

Tengo las tablas Pagos(idpago, Fecha,codplanilla,total) Planillas ( idplanilla, fechainicio, fechafin) empleados (idempleado, nombre) Conceptos (idconcepto, concepto, tipo, donde tipo solo puede ser Asignaciones o aportaciones) Detalles (iddetalle, idpago, idconcepto,valor).

Tengo un subform agregado con los valores (iddetalle, idconcepto, conceptos.tipo, valor).

lo que necesito es calcular en un textbox el total de asignaciones recibidas por empleado y en otro textbox el total de deducciones por empleado, con ello obtener el salario neto a pagar. Espero haberme explicado bien. a manera de ejemplo adjunto imagen de muestra

Con los datos que aportas, poco más te puedo decir que lo señalado en mi primera respuesta: para usar DSuma, todos los elementos que pongas en lso 3 parámetros de la función deben estar en la misma tabla/consulta, y con lo que dices que tienes, he de suponer que no lo están.

No hay nada que te impida hacer una consulta como la que te comentaba, y usar la DSuma como te indico.

Otra posibilidad sería en que tu subformulario añadieses dos cuadros de texto ocultos y en ellos calcules las dos sumas, pero usando simplemente la función Suma() con un pequeño "truquillo" para que te sume solo los conceptos que quieres en cada caso, algo así:

=Suma(SiInm([Tipo]='Asignaciones',[Valor],0))

=Suma(SiInm([Tipo]='Deducciones',[Valor],0))

¡Gracias! Me funciona perfecto.. utilizo la consulta para realizar el reporte y =Suma(SiInm([Tipo]='Asignaciones',[Valor], 0)) para el formulario... solo una consulta más y disculpa mis molestias, pero se puede realizar Suma(SiInm([Tipo]='Asignaciones',[Valor], 0)) desde código vba y no con el generador de expresiones

Con VBA tienes que usar otra expresión, pues no existe la función Suma (ni Sum). En su lugar tendrías que usar DSuma y como criterios ponerle el tipo y además otro para identificar al empleado. Por ejemplo, con la consulta que te comentaba:

Me.CuadroTexto=DSuma("Valor","CAux","Tipo='Egreso' AND IdEmpleado=" & me.idempleado)

El código lo pondrías en el evento "Al activar registro" del form principal

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas