#Error en informes...

Feliz Año, antes de nada y muchas gracias por la ayuda que nos prestas a todos.
Mi problema es este:
Tengo dos subinformes que están dentro de un informe principal. Los dos tienen un campo precio y otro campo cantidad.
Cuando el informe no tiene datos en uno de los dos subinformes, la operacion matematica precio * cantidad da cero y se coloca en un campo independiente que se llama importe con la formula siguiente:Importe:=nz([precio]*[cantidad];0). Que es lo que quiero, pero quiero otro campo independiente que me de la suma del campo importe porque ocurre que a veces tengo más de una linea en el detalle del subinforme y necesito que lo sume, pero siempre me da el mismo resultado : #Error aplicando la siguiente fórmula: Suma Importe:=nz(Suma([precio]*[cantidad]);0)
¿Se puede hacer lo que te comento?
¿Es posible que si no existen registros que aparezca un cero o que una operación matemática diga que la suma de cero es cero?

1 respuesta

Respuesta
1
La fórmula de la suma ¿Dónde la pones?
Me cuentas.
Buenas tardes de nuevo.
La fórmula la tengo puesta en el informe en un apartado que pone pie del informe.
Muchas gracias por ponerte en contacto conmigo.
Saludos, Roge.
Pues no se... debería de funcionar.
Si quieres mándame la BD (en access 2003 y con algún registro para que pese poco) y la echo un vistazo.
[email protected]
Hola Angeles, acado de enviar la base de datos.
Muchas gracias.
Saludos.
Ya la he recibido, la miro y te cuento
Muchas gracias.
Saludos.
Creo que el error viene en que al no haber registros (en la consulta en que basas el informe pones que cantidad>0) te da el error en la suma ya que la consulta no devuelve ningún resultado. Lo puedes resolver con una función condicinal SiInm:
=SiInm([cantidad]<>0 Y [preciosuple]<>0;Suma([cantidad]*[preciosuple]);0)
Así obligas a que la cantidad y el precio tengan un valor, sino que ponga 0.
Me cuentas.
Hola Angeles muchas gracias por tu ayuda...
La fórmula que me has enviado funciona en el subinforme, pero ahora tengo otro problema, intento de recogerlo para pasarlo al informe principal y ahora me da error en el informe principal.
Sabes cual puede ser el problema.
Lamento molestarte de nuevo.
Saludos.
No se exactamente porque te da el error, ¿los nombres de los campos de texto son cantidad y preciosuple? ¿Pones la función en pie de informe o en un pie de grupo?
Me cuentas, Angeles
Hola de nuevo...
Espero que se hayan portado bien los reyes...
He hecho lo siguiente:
En el informe principal he creado un cuadro de texto en el pie del
=[Detalle_Supl_Presup_Res_Fact].[Informe]![Texto35]
Texto35 es el cuadro de texto del subinforme con la fórmula que me enviaste y que en el subinforme funciona perfectamente. Pero en el informe principal no recoge el valor del subinforme.
¿Lo estoy haciendo mal?
Muchas gracias por tu ayuda.
Como coges el valor del cuadro de texto del subinforme tendrás que referirlo a ese subinforme:
=Subinforme!NombreDelsubInfome!NombreCuadrodeTexto
Me cuentas, Angeles
Hola de nuevo...
Entonces, si el informe principal se llama Presupuesto, el subinforme Detalle_Suple_Presupuesto y el campo de texto texto35 no debería ser:
=[Detalle_Suple_Presupuesto].[Informe]![Texto35]
Cómo el cuadro de texto lo tienes en el subinforme, tendrás que referirlo a ese subinforme, no al informe.
=SubInforme![Detalle_Suple_Presupuesto!NombreDelCuadroDeTextoDelSubinforme.Value
Hola de nuevo Angeles...
He podido recoger el valor en un subformularios pero en los otros no.
Pero no se porque.
Ademas, tengo un problema, el valor que recojo del subformulario si tiene valores me recoge el valor pero si no tiene valores me da error otra vez en vez de cero.
¿Podrías ayudarme en algo?
Lamento molestarte de nuevo.
Hola Angeles...
Te cuento mis progresos...
Ya recojo bien los importes de los subinformes desde el informe principal si existen datos en sus cuadros de texto.
Lo único que necesito es que el informe principal me ponga un cero si al acudir a ese cuadro de texto del subinforme pone #error po no existir datos.
He probado esto:
=SiInm([Subinforme Detalle_Presup_Res_Fact].[Informe]![Texto26];0)
Pero siempre me coloca un cero, existan o no importes en el cuadro de texto del subinforme.
¿Me podrías ayudar de nuevo por favor?
Muchas gracias. Saludos.
Prueba de esta forma:
=SiInm(IsNull([Subinforme Detalle_Presup_Res_Fact].[Informe]![Texto26]);0;[Subinforme Detalle_Presup_Res_Fact].[Informe]![Texto26])
La función SiInm tiene 3 argumentos;
SiInm(Condición;Valor si es verdad; Valor si es falso)
Hola de nuevo...
Muchas gracias por responder.
Me sigue dando error si no tiene datos y el importe aparece bien si existen datos.
Es decir que la función SiInm la ejecuta bien... entonces el error tiene que estar en como metemos el 0, no tiene mucho sentido, ya que es numérico pero prueba "0"
Un momento...
Nunca he probado en un cuadro de texto la función Nz() esta función que se utiliza en sql lo que hace es devolver 0 si el campo es nulo. Prueba a ver:
Nz([Subinforme Detalle_Presup_Res_Fact].[Informe]![Texto26])
Olvidándote de la función SiInm
Ya te digo que nunca lo he probado en cun cuadro de texto
Hola de nuevo...
De las dos opciones que me indicas he probado la segunda y sigue igual.
Ya no se como solucionarlo de esta manera. ¿Se te ocurre alguna opción para recuperar ese importe aunque no sea de esta forma?
Si necesitas la base de datos, podría enviártela para que la veas por si tiene algún error.
Muchas gracias por tu interés.
Ahora mismo no se si tienes mi correo si es así envíamela, sino dame tú correo y me pongo en contacto.
Hola Angeles...
Buenas tardes.
Tengo un correo tuyo: (xxxxxx)
¿Podría enviártela?
Saludos.
Envíamela y lo miro
Muchas gracias.
Mi correo es (xxxxxx) y aparece como remitente Rogelio del Amo Sánchez.
Saludos.
Lo he recibido, en cuenta pueda me pongo con ello.
Creo que el error está en que al tener en la consulta en la que basas el subinforme un criterio de número de buses>0 si esta consulta no te devuelve ningún resultado el subformulario no se ejecuta y el cuadro de texto en el que luego basas los cuadros del pie del informe digamos que es como si no existiese.
Podrías quitar el filtro de la consulta y según esta devuelva registros o no que el subinforme sea visible o no. También podrías hacer en la acción Al abrir el informe chequear que las consultas de los formularios devuelven o no registros, si devuelven que no haga nada y si no devuelven yo pondría el valor de los cuadros de texto=0
Me cuentas.
Hola Angeles, he quitado el filtro tal como me aconsejas y es cierto que me pone el resultado, pero no se como hacer para que cuando un subinforme sea o no visible según tenga registros o no.
¿Podrías decirme como hacerlo?
¿Si no es visible me pondrá el 0 o lo devolverá como un error?
En las propiedades del informe, en la acción al abrir ---> Procedimiento de Evento
Private Sub Report_Open(Cancel As Integer)
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Detalle_Presup_Res_Fact WHERE Numero_Buses_Marr>0")
If rs.EOF Then
Me![Subinforme Detalle_Presup_Res_Fact_Marr].Visible = False
End If
End Sub
Hola Angeles
He probado lo que me has comentado y funciona en parte. Veras, Detalle_Presup_Res_Fact es una tabla y los 3 subinformes recogen datos de esa tabla y aunque no tengan valores me muestra lineas en el subinforme porque están vinculadas por el mismo campo presupuesto.
No se si se podría ocultar estableciendo una condición en algún campo para que no muestre el registro.
No se si me he explicado.
Gracias...
La verdad... No me he enterado
Hola de nuevo Angeles.
No se explicártelo mejor lo voy a intentar y si no me vuelves a entender podría volver a mandártela con un ejemplo si no te es molestia.
Yo creo un registro en la tabla principal que es Presup_Res_Fact y me crea por ejemplo el Presupuesto 1 todo desde un formulario.
En el formulario tengo tres subformularios con los mismos campos que has visto en los subinformes y cuando los voy rellenando se crean en la tabla Detalle... tantos registros (filas) como voy rellenando en los subformularios.
Al recoger los datos con el informe como están vinculados a la tabla Presup... me muestran los subinformes tantas filas como registros estén vinculados al presupuesto unos con sus precios y otros a precio 0, que es por lo que puse el filtro. Si no me explico te mando un ejemplo de como sale el informe.
Mándame el ejemplo
Las sql de los formularios déjalas como las tenías, porque sino efectivamente salen registros absurdos (=0), en el cuadro de texto Texto136 quítale el origen del control ya que el valor se lo vamos a dar Al Activar el formulario:
Private Sub Report_Activate()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Detalle_Presup_Res_Fact WHERE Numero_Buses_Marr>0")
If rs.EOF Then
Me.Texto136.Value = 0
Else
Me.Texto136.Value = Me.Subinforme_Detalle_Presup_Res_Fact_Marr!Texto29
End If
End Sub
Hola de nuevo Angeles...
Ahora me pasa algo muy curioso...
Si no hay registros me pone el 0 con lo que funciona bien...
Si hay me pone la misma cantidad en todos los informes...
¿Y una ultima cosa para que haga lo mismo en el subinforme de suplemento se puede copiar y pegar lo que me has pasado a continuación de lo que hay cambiando los campos?
Disculpa que te moleste de nuevo...
Hola de nuevo Angeles, estoy pensando que parece bastante complicado este asunto y se me ha ocurrido una idea que no se si puede hacer.
¿Cómo en el formulario tengo el campo ya calculado, se puede guardar el valor de cada subformulario calculado en un campo de la tabla principal para recogerlo desde el informe?
De esa forma crearía los tres campos en la tabla y que el formulario sea el que guarde el importe calculado.
Muchas gracias de nuevo y disculpa todas molestias que te pueda estar causando.
Podría ser una solución ya que supongo que la tabla la cargas desde el formulario. Desde luego así no tendrías problemas en el informe.
Me cuentas.
Hola Angeles... Muchas gracias por contestar tan pronto...
He creado 3 campos en la tabla principal (Presup_Res_Fact) en los cuales deseo guardar la suma de los tres subformularios con valor predeterminado=0 para que parta con un importe y no este nunca vacío.
En el formulario tengo los tes campos ya con los importes calculados.
¿Cómo se guarda ese valor calculado en el campo de la tabla?
¿Se actualiza ese valor si se modifican importes en subformularios?
Muchas gracias.
Para guardar sql Insert Into, supongamos que los campos de la tabla NombreTabla se llaman Campo1, Campo2 y Campo3 y los campos del formulario Texto1, Texto2 y Texto3
La sql sería:
DoCmd.Runsql "Insert Into NombreTabla (campo1, campo2, campo3) Values (" & form!Texto1.value & ", " & form!Texto2.value & ", " & form!Texto3.Value ")
Buenas noches Angeles.
Funciona!
Muchas gracias por todo. Te estoy muy agradecido.
Como soy de Málaga, si pasas alguna vez por aquí que menos que invitarte a pescaditos. Así que avisame.
Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas