** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Ayuda Do until en vba
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAyuda Do until en vba

 Responder Responder Página  <123>
Autor
Mensaje
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 883
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 17:10
La cabecera de la función Enviar_Email_Envioprimera es esta:

Private Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, Oficina, FECHA_1_RECLAMACION, CLIENTE, CONTRATO, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)

Y tú la llamas así cuando te da error de número de argumentos incorrecto:

Enviar_Email_Envioprimera rs("NUMERO_DE_CONTRATO"), rs("OFICINA"), rs("FECHA_1_RECLAMACION"), Date, rs("CLIENTE"), rs("CONTRATO"), rs("CCM"), rs("SEGURO"), rs("GARANTIA_RECOMPRA"), rs("ENVIO_RENT_and_TECH")

Si cuentas el número de argumentos, en la cabecera o declaración tienes 9; y cuando la usas "metiendo" el Date, le pasas 10 valores. Es normal que se queje: estás pasando más argumentos de los declarados, y no sabe qué hacer con ellos. Si quieres usar la función Date, tienes que quitar el dato que te sobra. Que en un principio, y si he leído el hilo bien, debe ser el campo de la fecha, rs("FECHA_1_RECLAMACION").

Y digo en un principio, porque dices que con ese campo y sin el Date, te da otro error: No se encontró el elemento en esta colección. Entiendo que el error te lo daba desde el principio, porque en tu último mensaje te has "comido" una "C": FECHA_1_RELAMACION. Aunque en el primer mensaje sí que aparece.

Así que suponiendo que sólo es una errata, vamos a ver otro error: cuando Xavi pensó que EnvioPrimera era una tabla y no una consulta, te dijo que la filtrases, algo así:

SELECT * FROM EnvioPrimera WHERE FECHA_1_RECLAMACION Is Null

Pero eso te daba otro error: Pocos parámetros, se esperaba 1. Si "troceamos" esa sentencia, tenemos:

- SELECT, FROM, WHERE, Is y Null: Son funciones y palabras que Access entiende en una sentencia SQL, así que por ahí no van los tiros.

- *: Devuelve todos los campos, nada de parámetros.

FECHA_1_RECLAMACION: Es, en teoría, el nombre del campo que hay en la consulta, y por el cual queremos filtrar. Y digo en teoría, porque Access no lo encuentra en la consulta. Y como no lo encuentra, te está diciendo que está esperando que al parámetro FECHA_1_RECLAMACION le asignes un valor para poder usar ese valor en donde está el parámetro.

Y esto nos lleva al otro error: No se encontró el elemento en esta colección. Como no existe el campo FECHA_1_RECLAMACION en la consulta, ni lo puedes usar, ni le puedes asignar valores, ni nada de nada.

Así, comprueba que el "campo" FECHA_1_RECLAMACION existe y se llama de esa forma en la consulta que estás usando en el código.
Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 17:27
Gracias a los dos por vuestras respuestas e intento ir por partes:

Si es cierto que en la cabecera tengo 9 y hago el decimo con Date, he quitado el fecha_1_reclamacion dejando 9 en total.

Y quitándolo me da el error de "No se encontró el elemento en la colección"
Era una errata lo de Reclamación.

Y por último sobre:

SELECT * FROM EnvioPrimera WHERE FECHA_1_RECLAMACION Is Null

Lo modifiqué, puesto que ya en la misma consulta pongo que solo me muestre aquellos cuya fecha 1 reclamacion sea null, por lo que he borrado desde where dejando solo:

Set rs = CurrentDb.OpenRecordset("Select * from EnvioPrimera")

Por último, he abierto la consulta y la he revisado, te pongo captura de la consulta abierta con los campos en un enlace.

https://drive.google.com/open?id=13t-Wt9FKMuWC0eJ41zOkssnWsTb0WZUl

Son pocos campos en la consulta.

Espero me podais dar alguna pista más
Mil Gracias!.


Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 17:31

Os dejo como está ahora mismo el código, y el inicio de la función Enviar_Email_EnvioPrimera

Private Sub Comando60_DblClick(Cancel As Integer)

    Dim rs As DAO.Recordset
    
    If MsgBox("Se va a proceder al envío de 1ª Reclamación, ¿Continuar?", vbYesNo + vbExclamation, "Atención") = vbNo Then Exit Sub
    
    Set rs = CurrentDb.OpenRecordset("Select * from EnvioPrimera")
    If rs.EOF Then
        MsgBox "No hay registros pendientes de reclamar.", vbInformation, "Atención"
    Else
        Do Until rs.EOF
            Enviar_Email_Envioprimera rs("NUMERO_DE_CONTRATO"), rs("OFICINA"), rs("CONTRATO"), Date, rs("CCM"), rs("SEGURO"), rs("GARANTIA_RECOMPRA"), rs("ENVIO_RENT_and_TECH")
            rs.Edit
            rs("FECHA 1 RECLAMACION") = Date
            rs.Update
            rs.MoveNext
        Loop
        MsgBox "Correos Enviados Correctamente.", vbInformation
    End If
    
    rs.Close
    Set rs = Nothing
End Sub
------------------------------------------------------------------------------------------------------------------
Private Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, OFICINA, FECHA_1_RECLAMACION, CONTRATO, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)

    On Error GoTo Err_CORREO_Click
    Dim dbs As Database, qdf As QueryDef, consulta As String
    Dim cuerpo As String, para As String, cc As String, asunto As String
    Dim comentario As String
    Dim CONTRATO As String
    Dim CCM As String, GARANTIA_RECOMPRA As String, SEGURO As String, _
        Anexo_1 As String, Anexo_2 As String, _
        Anexo_3 As String, Anexo_4 As String


Gracias de nuevo!
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 883
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 17:40
2 cosas:

1. En la consulta, pásala a vista SQL y copia y pega aquí la sentencia; para mí es más sencillo verla.

2. En la función Enviar_Email_Envioprimera, el tercer parámetro es las fecha, y tú le estás pasando en esa posición el contrato. Y al parámetro del contrato le estás pasando la fecha. Y si es posible, pega toda la función, no sólo el inicio (NOTA: si hay datos sensibles, cámbialos por algo ilógico).
Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 18:01
La consulta en vista SQL

SELECT [RESUMEN DOC PENDIENTE].[NUMERO DE CONTRATO], [RESUMEN DOC PENDIENTE].OFICINA, [RESUMEN DOC PENDIENTE].[FECHA 1  RECLAMACION], [RESUMEN DOC PENDIENTE].CONTRATO, [RESUMEN DOC PENDIENTE].CCM, [RESUMEN DOC PENDIENTE].SEGURO, [RESUMEN DOC PENDIENTE].[GARANTIA RECOMPRA], [RESUMEN DOC PENDIENTE].[ENVIO RENT and TECH]
FROM [RESUMEN DOC PENDIENTE]
WHERE ((([RESUMEN DOC PENDIENTE].[FECHA 1  RECLAMACION]) Is Null));


Ahora el código Enviar_Email_Primera:

Private Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, OFICINA, CONTRATO, FECHA_1_RECLAMACION, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)

    On Error GoTo Err_CORREO_Click
    Dim dbs As Database, qdf As QueryDef, consulta As String
    Dim cuerpo As String, para As String, cc As String, asunto As String
    Dim comentario As String
    Dim CONTRATO As String
    Dim CCM As String, GARANTIA_RECOMPRA As String, SEGURO As String, _
        Anexo_1 As String, Anexo_2 As String, _
        Anexo_3 As String, Anexo_4 As String
 
    Anexo_1 = ""
    Anexo_2 = ""
    Anexo_3 = ""
    Anexo_4 = ""
 
    If CONTRATO Is False Then
        Anexo_1 = vbCr & vbCr + "DOCUMENTO 1"
    End If
 
    If CCM Is False Then
        Anexo_2 = vbCr & vbCr + "DOCUMENTO 2"
    End If
 
    If GARANTIA_RECOMPRA Is False Then
         Anexo_3 = vbCr & vbCr + "DOCUMENTO 3"
    End If
 
    If SEGURO Is False Then
        Anexo_4 = vbCr & vbCr + "DOCUMENTO 4"
    End If
    
    asunto = "ASUNTO DE CORREO"
    
    
    texto = "Buenos días," & vbCr & vbCr + _
            "Texto de Correo:" & _
            vbCr & vbCr + OFICINA & _
            Anexo_1 & Anexo_2 & Anexo_3 & Anexo_4 & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "<b>Texto de correo" & _
            vbCr & vbCr + vbCr & "Gracias, " & _
            vbCr & vbCr + vbCr & "Un saludo. " 'MsgBox texto
            
    
    If IsNull(Usuario) Then
        MsgBox "No existe Email de Usuario para la operación: NUMERO_DE_CONTRATO"
        GoTo Exit_CORREO_Click::
    End If
    
    Set miCorreo = CreateObject("CDO.Message")

    With miCorreo
        
          '.from = "mi correo" & "< >"
          
          .from = "mi correo" & "<mi correo>"
        '.from = "mi correo"
        '.To = "mi correo"
        .To = "mi correo"
        .Bcc = "mi correo"
        .replyto = "mi correo"
        
        .Subject = asunto
        .TextBody = texto
        .Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
        "smtpbbva"
        .Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        .Configuration.Fields.Update
        '.display
        .Send
    End With
    
    Set miCorreo = Nothing
    
    
Exit_CORREO_Click:
    Exit Sub

Err_CORREO_Click:
    MsgBox Err.Description
    Resume Exit_CORREO_Click
End Sub


Solo he quitado las direcciones de correo y el texto del correo, lo demás está tal cual.

Gracias!
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 883
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 18:25
Ahora que tenemos más datos, vamos a hacer pruebas:

1. Si revisas bien el nombre del campo que te da problemas (en la consulta SQL), verás que hay 2 espacios entre el "1" y "RECLAMACION"; y estamos colocando 1 espacio en el código. Pon 2 espacios y vuelve a probar:

Enviar_Email_Envioprimera rs("NUMERO_DE_CONTRATO"), rs("OFICINA"), rs("CONTRATO"), rs("FECHA_1__RECLAMACION"), rs("CCM"), rs("SEGURO"), rs("GARANTIA_RECOMPRA"), rs("ENVIO_RENT_and_TECH")

2. Como tienes muchos espacios en los nombres de los campos, podemos probar a olvidarnos de los subrayados y usar los corchetes:

Enviar_Email_Envioprimera rs![NUMERO DE CONTRATO], rs![OFICINA], rs![CONTRATO], rs![FECHA 1  RECLAMACION], rs![CCM], rs![SEGURO], rs![GARANTIA RECOMPRA], rs![ENVIO RENT and TECH]

3. En la línea en la que actualizas la fecha, también tendrás que cambiar cómo haces referencia al nombre del campo:

rs("FECHA_1__RECLAMACION") = Date
rs![FECHA 1  RECLAMACION] = Date

P.D.: Siempre se recomienda evitar los caracteres extraños o símbolos de subrayado en los nombres de tablas, campos, formularios, … Dan más problemas que soluciones.

P.D.: En la función que envía el correo tienes varios objetos creados que no usas. Puede ser porque la has recortado para evitar que se vean datos sensibles. Si no es así, puedes eliminarlos.
Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 19:02
Vamos avanzando!!

He modificado las 2 lineas que me indicas con los corchetes tal como me lo has puesto, y ya no da el error, da otro:

Declaración duplicada en el  ámbito actual.

Y lo da sobre la linea 

Dim Contrato as String

Esa linea está en la función de envío de correo, te copio el inicio donde está la función (la tienes completa en el que te puse antes:

Private Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, OFICINA, CONTRATO, FECHA_1_RECLAMACION, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)

    On Error GoTo Err_CORREO_Click
    Dim dbs As Database, qdf As QueryDef, consulta As String
    Dim cuerpo As String, para As String, cc As String, asunto As String
    Dim comentario As String
    Dim CONTRATO As String
    Dim CCM As String, GARANTIA_RECOMPRA As String, SEGURO As String, _
        Anexo_1 As String, Anexo_2 As String, _
        Anexo_3 As String, Anexo_4 As String

Al indicar como duplicada, la borro directamente? o la modifico por ???

Gracias!!
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11736
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 19:10
El error viene porque un argumento se llama CONTRATO y, dentro de la función, tambien declaras CONTRATO (lo que decía pitxiku de declaraciones innecesarias)
Xavi, un minyó de Terrassa

Mi web
Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 19:15
Vamos avanzando, he ido borrando lo que me ha indicado duplicado, hasta llegar hasta este nuevo error:

Copio el código del correo tal cual está

Ahora el código Enviar_Email_Primera:

Private Sub Enviar_Email_Envioprimera(NUMERO_DE_CONTRATO, OFICINA, CONTRATO, FECHA_1_RECLAMACION, CCM, SEGURO, GARANTIA_RECOMPRA, ENVIO_RENT_and_TECH)

    On Error GoTo Err_CORREO_Click
    Dim dbs As Database, qdf As QueryDef, consulta As String
    Dim cuerpo As String, para As String, cc As String, asunto As String
    Dim comentario As String _
        Anexo_1 As String, Anexo_2 As String, _
        Anexo_3 As String, Anexo_4 As String
 
    Anexo_1 = ""
    Anexo_2 = ""
    Anexo_3 = ""
    Anexo_4 = ""
 
    If CONTRATO Is False Then
        Anexo_1 = vbCr & vbCr + "DOCUMENTO 1"
    End If
 
    If CCM Is False Then
        Anexo_2 = vbCr & vbCr + "DOCUMENTO 2"
    End If
 
    If GARANTIA_RECOMPRA Is False Then
         Anexo_3 = vbCr & vbCr + "DOCUMENTO 3"
    End If
 
    If SEGURO Is False Then
        Anexo_4 = vbCr & vbCr + "DOCUMENTO 4"
    End If
    
    asunto = "ASUNTO DE CORREO"
    
    
    texto = "Buenos días," & vbCr & vbCr + _
            "Texto de Correo:" & _
            vbCr & vbCr + OFICINA & _
            Anexo_1 & Anexo_2 & Anexo_3 & Anexo_4 & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "Texto de Correo" & _
            vbCr & vbCr + "<b>Texto de correo" & _
            vbCr & vbCr + vbCr & "Gracias, " & _
            vbCr & vbCr + vbCr & "Un saludo. " 'MsgBox texto
            
    
    If IsNull(Usuario) Then
        MsgBox "No existe Email de Usuario para la operación: NUMERO_DE_CONTRATO"
        GoTo Exit_CORREO_Click::
    End If
    
    Set miCorreo = CreateObject("CDO.Message")

    With miCorreo
        
          '.from = "mi correo" & "< >"
          
          .from = "mi correo" & "<mi correo>"
        '.from = "mi correo"
        '.To = "mi correo"
        .To = "mi correo"
        .Bcc = "mi correo"
        .replyto = "mi correo"
        
        .Subject = asunto
        .TextBody = texto
        .Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
        "smtpbbva"
        .Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        .Configuration.Fields.Update
        '.display
        .Send
    End With
    
    Set miCorreo = Nothing
    
    
Exit_CORREO_Click:
    Exit Sub

Err_CORREO_Click:
    MsgBox Err.Description
    Resume Exit_CORREO_Click
End Sub


En el texto que te marco en negrita me da el error:

"Error de compilación: No coinciden los tipos"

Se supone que si el cambo contrato es False, debe añadir una linea al correo (que he renombrado con Documento 1) y asi sucesivamente con los 4 anexos, para que al rellenar el formulario se marquen las casillas de la documentación que se posee, y se solicite en el correo aquella que falte.

Gracias!
Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 19:24
Señores, os invitaba a unas buenas cañas si pudiera, pero sin pensármelo!

FUNCIONA.

He cambiado False en el If por Null.

Solo me quedo con una duda, y es que al ir avanzando, me indica por dos veces una pantalla que dice.

"Se espera un objeto"

tras 2 aceptar, me termina la funcion y me indica que se han enviado correctamente.

Si bien es cierto, no puedo probarlo hasta el martes que vaya al trabajo, porque creo que hasta que no esté en la red no me va a enviar el correo.
Si sabeis porque aparece ese mensaje os lo agradecería, si el martes veo que no se envían cuando lo pruebe, vuelvo al foro con la duda.

Pero ya es un enorme avance el que no me de ningún error.

Gracias!
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 883
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 19:38
En la función que prepara y envía el correo, tienes un control e errores que muestra el mensaje de error y sale de la función.

Como ejecutas la función para cada registro, pero sólo sale el mensaje 2 veces, parece como que tienes 2 registros a los cuales les falta algún dato necesario.
Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 19:48
No va a ser casualidad, puesto que para la prueba hice 2 registros con la fecha 1 reclamación en blanco.

Solo tienen el número de contrato, lo demás está en blanco, quizá cambiar False a Null no era la solución.
Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 19:58
He puesto puntos de interrupción y la ventana aparece cuando llega a los If, en el primero me da la ventana de "se espera un objeto" y salta al siguiente, al ser solo 2 finaliza sin enviar nada.

Código:


    If CONTRATO Is False Then
        Anexo_1 = vbCr & vbCr + "DOCUMENTO 1"
    End If
 
    If CCM Is False Then
        Anexo_2 = vbCr & vbCr + "DOCUMENTO 2"
    End If
 
    If GARANTIA_RECOMPRA Is False Then
         Anexo_3 = vbCr & vbCr + "DOCUMENTO 3"
    End If
 
    If SEGURO Is False Then
        Anexo_4 = vbCr & vbCr + "DOCUMENTO 4"
    End If

Lo que hice fue modificar False por Null, con False me daba el error

Error de compilación: No coinciden los tipos.
Arriba
Xantus Ver desplegable
Nuevo
Nuevo


Unido: 07/Febrero/2019
Localización: Málaga
Estado: Sin conexión
Puntos: 41
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 20:18

Me autorrespondo

Código

He puesto puntos de interrupción y la ventana aparece cuando llega a los If, en el primero me da la ventana de "se espera un objeto" y salta al siguiente, al ser solo 2 finaliza sin enviar nada.

Código:


    If CONTRATO  Then
        Anexo_1 = vbCr & vbCr + "DOCUMENTO 1"
    End If
 
    If CCM  Then
        Anexo_2 = vbCr & vbCr + "DOCUMENTO 2"
    End If
 
    If GARANTIA_RECOMPRA  Then
         Anexo_3 = vbCr & vbCr + "DOCUMENTO 3"
    End If
 
    If SEGURO  Then
        Anexo_4 = vbCr & vbCr + "DOCUMENTO 4"
    End If

Al dejar el código así, ahora si deja de dar error.
Buscando, en los If si no especificas por defecto es False, de forma que al dejarlo así es exactamente lo que quiero.
Me indica que no es posible conectar con el envío del correo, pero eso si se que se debe a que es un correo de empresa al que puedo acceder solo desde alli, tenemos otro código que usa el mismo envío de correo y funciona perfectamente, por lo que el martes si debe funcionar sin problemas

El martes pruebo y vuelvo aunque solo sea para dar las gracias por las molestias.

Un saludo.
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 883
Enlace directo a este mensaje Enviado: 10/Febrero/2019 a las 20:21
Si no, también puedes probar con la función IsNull, más cómoda con valores nulos.
Arriba
 Responder Responder Página  <123>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable