** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Paso dato a fromulario WEB NO graba
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoPaso dato a fromulario WEB NO graba

 Responder Responder Página  12>
Autor
Mensaje
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 500
Enlace directo a este mensaje Tema: Paso dato a fromulario WEB NO graba
    Enviado: 03/Mayo/2019 a las 10:24
Hola,
De nuevo intentando acceder a una  pagina web desde Access, ahora no para leer datos sino para grabarlos. El caso es que le paso los datos al formulario WEB correctamente :


Dim desc as string, nLinha as integer
desc =" primera linea de factura"

for nLinha= 0 to 3   ' las primeras 4 lineas de una factura
      ie.Document.getElementById("sales_invoice_line_items_attributes_" & nLinha & "_description").Value = desc
next
 

si lo hago manualmente en el momento que pulso el caracter "p" que es el primero caracter de la variable "desc", se ejecuta un evento que hace con que se anada una nueva linea para introduccion de datos, y  que se grave el dato, si lo hago via VBA, el dato se recibe pero se pierde posteriormente.

intente crear un evento que simule la entrada de datos manual asi
 :
Dim ieEvent
Dim htmldoc as HTMLDocument
Set htmldoc = ie.Document

for nLinha= 0 to 3
      ie.Document.getElementById("sales_invoice_line_items_attributes_" & nLinha &     "_description").Value = desc

     Set ieEvent = htmldoc.createEvent("HTMLEvents")
     ieEvent.initEvent "change", False, True ' tambien probe con "keypress"
     ie.document.all.Item("sales_invoice_line_items_attributes_" & nLinha & "_description").dispatchEvent ieEvent

next
 

la verdade es que ya lo intente todo, y no hay forma. me pregunto si podeis ver la pagina, a ver si teneis alguna sugerencia. aunque existe login y password, os puedo enviar el link y password,  ya que se trata de un programa de facturacion WEB que no tiene datos reales ( es una demo)

Gracias colegas


Editado por cpampasPT - 03/Mayo/2019 a las 10:30
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3058
Enlace directo a este mensaje Enviado: 07/Mayo/2019 a las 09:05
Hola. Puedo revisarlo.
¿Que deseas hacer? ¿Llenar un formulario web desde una aplicacion de MAccess?
¿Que nivel tienes de JavaScript?
https://tucondominioaldia.net
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 500
Enlace directo a este mensaje Enviado: 07/Mayo/2019 a las 14:56
Hola
Gracias por tu respuesta. si lo que prtendo es llenar formulario desde access.
mi nivel de JavaScript es casi nulo. De todas formas me di cuenta que hay 2 elementos  en que cuando se entran datos manualmente se dispara un evento o dos que hacen un calculo y graban los datos, y es eso lo que yo no consigo replicar desde VBA

si te parece te envio por mensaje privada la informacion de la pagina y password, y segun si encuentras alguna solucion , lo comentamos aqui por el foro

Gracias
Saludos



Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3058
Enlace directo a este mensaje Enviado: 07/Mayo/2019 a las 22:20
?Has contemplado enviar la informacion directamente a la base de datos?
https://tucondominioaldia.net
Arriba
happy Ver desplegable
Moderador
Moderador


Unido: 29/Enero/2005
Localización: España
Estado: Sin conexión
Puntos: 3110
Enlace directo a este mensaje Enviado: 07/Mayo/2019 a las 23:35
¿Has probado de llamar a esos eventos que dices que realizan los cálculos desde VBA una vez hayas rellenado el campo con el valor de la variable desc?

También puedes probar de enviar con un SendKeys la pulsación de una tecla a ese campo (algo como un enter, un espacio o algo así) una vez hayas rellenado el campo mediante VBA ...

Saludos,

Juan M. Afan de Ribera
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 500
Enlace directo a este mensaje Enviado: 08/Mayo/2019 a las 12:12
Happy,
Lo de SenKeys tambien  ya lo probe pero sin resultado, en cuanto a llamar los eventos despues de rellenar los campos y de no existir otra forma ,   creo que es lo que estoy haciendo  con :


ie.Document.getElementById("sales_invoice_line_items_attributes_" & nLinha &     "_description").Value = desc
ie.document.all.Item("sales_invoice_line_items_attributes_" & nLinha & "_description").dispatchEvent ieEvent

de hecho  y por si acaso hago este mismo procedimiento despues de rellenar cada uno de los campos, pero no se disparan los eventos

Guarracuco,
Te refieres a grabar directamente en el backEnd sin pasar por el browser ? bueno no creo que sea posible ya que no tengo ninguna password para conectarme al servidor, solamente la password de accesso de usuario via browser

un Saludo
Carlos


Editado por cpampasPT - 08/Mayo/2019 a las 12:18
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 500
Enlace directo a este mensaje Enviado: 08/Mayo/2019 a las 21:45
Hola Guarracuco,
Gracias por haber testado la pagina web. Aqui transcribo tu respuesta para que los demas puedan acompanar el tema

Cita
Revisando el subformulario web, pude notar que el indice de la segunda y sucesivas lineas no es correlativo. 99% seguro que es un timestamp como para validar su tiempo de vida.


No estoy muy seguro de cual seria la solucion, pero quieres decir que problema pude deberse a que el el indice parece tener un numero aleatorio ? comprobe que el elementoID de cada una de las lineas


sales_invoice[line_items_attributes][0][id] -  primera linea
sales_invoice[line_items_attributes][1557341403558][id] - segunda linea
sales_invoice[line_items_attributes][1557341416557][id] - tercera linea

Quiere esto decir que no puedo pasar los datos por ElementID ?
Saludos

Editado por cpampasPT - 08/Mayo/2019 a las 22:00
Arriba
happy Ver desplegable
Moderador
Moderador


Unido: 29/Enero/2005
Localización: España
Estado: Sin conexión
Puntos: 3110
Enlace directo a este mensaje Enviado: 09/Mayo/2019 a las 10:42
Aunque el índice no es "correlativo", en el ejemplo que pones sí parece que va de menor a mayor, con lo cual, si realmente eso es así, también podrías localizar el control sales_invoice que te interese.

Igualmente, para hacer pruebas y no saltar de una cosa a otra, deberías tomar uno de los controles e intentar lanzar los eventos del que te interese en concreto para ir despejando todas las dudas. Ahora mismo, se ha hablado de que puede ser que la página no detecte los valores que le introduces al control y por tanto tampoco lance el/los eventos de cálculo correspondientes. También se ha hablado del Id de los controles (cosa que no me cuadra con lo que comentabas al principio, pues decías que sí le podías pasar el valor de la variable desc ... si no localizas el Id porque es aleatorio o lo que sea, no veo cómo puedes pasarle el valor de la variable desc ... en fin). Siempre hay que ir despejando las dudas una a una como si fuera un check list y así vas "arrinconando" el problema real, hasta que das con la solución


Editado por happy - 09/Mayo/2019 a las 10:42
Saludos,

Juan M. Afan de Ribera
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 500
Enlace directo a este mensaje Enviado: 09/Mayo/2019 a las 16:44
Hola
Siguiendo el consejo de Juan, de intentar resolver un tema de cada vez, me puse con lo dos indices aleatorios, y que hacian que solo pudiera pasar datos a la primera linea, hice lo siguiente para apuntar hacia el indice correcto :


For Each ele In ie.Document.getElementsByTagName("input")
       If InStr(ele.Name, "sales_invoice[line_items_attributes]") > 0 Then
           If InStr(ele.Name, "][id]") > 0 Then           
                   nuevoID = ele.Name
           End If
       End If 
 Next

 ie.Document.getElementById("sales_invoice_line_items_attributes_" & nuevoID & "_description").Value = desc


el resultado es que ahora la pagina recibe todos los datos en todas las lineas sin errores.
Lo unico es que sigue sin ejecutar los eventos, que queria se hiciera con la siguiente linea


 ie.Document.getElementById("sales_invoice_line_items_attributes_" & nuevoID & "_description").all(0).dispatchEvent evt

Teneis alguna sugerencia, sobre como identificar el evento de forma a poder replicarlo? con F12 en la pagina, hay un boton de "evento" que tiene esto, me imagino en javascript :


function(e) {
  return "undefined" == typeof X || e && X.event.triggered === e.type ? t : X.event.dispatch.apply(s.elem, arguments)
}



Editado por cpampasPT - 09/Mayo/2019 a las 16:47
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton
Estado: Sin conexión
Puntos: 3418
Enlace directo a este mensaje Enviado: 09/Mayo/2019 a las 17:47
Imaginate que lo rellenas a mano, ¿como haces para que valide?, ¿pulsas un botón, pulsas la tecla "Enter", o qué haces?

Si es la tecla enter usa sendkeys, si es pulsar un botón algo similar a esto:

ie.document.getElementsByClassName("btnMedium btn-eqlRed pull-right")(0).Click


Luis
Estos son mis principios. Si no le gustan... tengo otros
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 500
Enlace directo a este mensaje Enviado: 09/Mayo/2019 a las 19:54
Hola Luis,
Cuando lo relleno a mano , uso la tecla TAB.
con SendKeys "{TAB}" se pasa al campo siguiente sin actualizar

si alguien le puede echar un vistazo, pues a lo mejor es algo simples pero no lo veo


https://www.dropbox.com/sh/5u3xxd5wg79gwm5/AAAM0YaVJ8Fm0KSrB4QST-zua?dl=0
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton
Estado: Sin conexión
Puntos: 3418
Enlace directo a este mensaje Enviado: 09/Mayo/2019 a las 21:49
No puedo conectar a dropbox, cosas del firewall de la empresa, pero antes de enviar el TAB, asegúrate que tienes el foco en la página con

ie.document.Focus


Luis
Estos son mis principios. Si no le gustan... tengo otros
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3058
Enlace directo a este mensaje Enviado: 11/Mayo/2019 a las 12:04
Le he dedicado tiempo a este caso y no he logrado insertar una nueva linea en el subformulario.
Por otro lado, declaro en la cabecera del formulario un objeto IE con eventos y puedo controlar sin utilizar temporizadores la pagina actual cargada y lanzar el correspondiente proceso.
Haciendo algunas pruebas se puede facilmente ejecutar funciones javascript creadas al vuelo. El objetivo es simular esos eventos desde vba.
Quizas para el lunes lo publico.
Si lograste generar la nueva linea, por favor indica como.


https://tucondominioaldia.net
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 500
Enlace directo a este mensaje Enviado: 11/Mayo/2019 a las 15:24
Hola Guarracuco,
Muy amable de tu parte de estudiar este asunto.
Si , desde el  ultimo post que envie consegui recojer el numero ID aleatorio que me referias antes ,  y a partir de la segunda linea, se anade otra linea, en el momento que se pierde  el foco o despues de cambiar el campo "quantity", aqui :

ie.Document.getElementById("sales_invoice_line_items_attributes_" & nuevoID & "_quantity").all(0).dispatchEvent evt

y digo que es aqui , porque si la quito, no se anade la nueva linea.
Si ves el ejemplo que mande en mi post hay una demo que si pulsas el boton del formulario se rellenan las 4 lineas en cuestion
Saludos





Editado por cpampasPT - 11/Mayo/2019 a las 15:30
Arriba
cpampasPT Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 500
Enlace directo a este mensaje Enviado: 11/Mayo/2019 a las 20:10
Guarracuco,

Cita
Por otro lado, declaro en la cabecera del formulario un objeto IE con eventos y puedo controlar sin utilizar temporizadores la pagina actual cargada y lanzar el correspondiente proceso

te refieres a que consigues executar los eventos que hacen el calculo de totales en la pagina, y grabar esos datos ?




Editado por cpampasPT - 11/Mayo/2019 a las 20:10
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable