LibreOffice Writer error Formulario

¡Hola!

Hace tiempo reporté un bug para LibreOffice Base:
https://bugs.documentfoundation.org/show_bug.cgi?id=164465

Como no se solucionaba realicé una prueba en LibreOffice Writer, creando un formulario con los mismos objetos que daban el error en la macro.
El bug es:
https://bugs.documentfoundation.org/show_bug.cgi?id=167189

Me indican que está solucionado. Qué la macro tiene errores.
Pero no sé dónde.

MACRO

Sub ActualizarFechaAnterior( Event )

obj = Event.Source.Model
fecha_seleccionada = obj.Text
fecha_anterior = DateAdd(“d”, -1, fecha_seleccionada)
frm = obj.Parent
obj_fecha_seleccionada = frm.getByName(“fecha_inicial”)
obj_fecha_seleccionada.BoundField.UpdateString(Format(fecha_seleccionada,“YYYY-MM-DD”))
obj_fecha_anterior = frm.getByName(“fecha_anterior”)
obj_fecha_anterior.BoundField.UpdateString(Format(fecha_anterior,“YYYY-MM-DD”))
frm.UpdateRow

End Sub


ERRORES

“Tipo de datos o valor indamisible. Discrepancia del tipo de datos.”
“Error de ejecución de BASIC. Variable de objeto no establecida.”
(Los errores los da en español. Abajo la traducción que he realizado.)
“Data type or indamisible value. Data type discrepancy.”
“BASIC execution error. Object variable not set.”

Respuesta de Mike Kaganski, en los comentarios del bug reportado:

"And it seems to me, that your initial “Data type or indamisible value. Data type discrepancy” is bug 166342, fixed in 25ant2.4 - which message I indeed don’t see in my 25.2.4.
… and it was already resolved duplicate, of that exact same bug. The bug was fixed, as mentioned; and version 25.2.4 with the fix is released; but you file this bug again.

OK, you report it in Version: 25.2.4.3; but your example does not show the error “Data type or indamisible value. Data type discrepancy” in it; and the “Object variable not set” is not a bug, but the matter of fact. How can the bug be reproduced? Is the “obj_fecha_seleccionada” and its “BoundField” relevant at all? Will a simple MsgBox, or another built-in function, be enough?"

Adjunto el formulario de Writer.

Gracias y un saludo.
Macros_pruebas.odt (13,1 KB)
Bancos_prueba_Firebird.odb (600,5 KB)

Hola,
Entiendo que esas fechas se deben grabar en alguna tabla de alguna base de datos.

En el fichero que has subido no existe ningún vinculo con una base de datos, fichero “.odb”
En las propiedades del Form, el valor del campo Data Source está vacio asi como el nombre de la tabla de la base de datos.

Si puedes, sube el fichero de Base “.odb” sin información confidencial.

Buenos días.
Acabo de subir el Fichero odb.
Está en el post original, a continuación del fichero Writer.
El Formulario es “Informe”.
Los datos están en la tabla “Parametros”, cada vez que se modifica se sobreecriben los datos.
Saludos,

Buenos dias,
Como comentado en mi anterior post, la macro que incluyes en el fichero odt no puede funcionar ya que no existe base de datos, ni tabla, ni campo …, en el que pueda modificar o añadir datos.

Con respecto al fichero odb, en mi caso funciona sin errores, la fecha anterior es 1 dia menos que la fecha actual.
LO Version: 25.2.4.3 (X86_64)
OS: Linux.

Sugerencias:

Sería conveniente:

Que declares todas las variables que utilizas.

Que especifiques para mayor claridad el tipo de evento,

 Evento As Object.

Utilices variables con prefijo o (para objetos), d (para fechas), s (para cadenas).

Por ejemplo:

Sub ActualizarFechaAnterior(Evento As Object)
    Dim oDoc As Object
    Dim oForm As Object
    Dim oFechaSeleccionadaControl As Object
    Dim oFechaAnteriorControl As Object
    Dim dFechaSeleccionada As Date
    Dim dFechaAnterior As Date
    Dim sFechaFormateada As String

En lugar de obj.Padre a fin de obtener correctamente el formulario utilizar:

 oForm = Evento.Source.Model.Parent, 

No es conveniente utilizar de BoundField.UpdateString, actualiza el control directamente:

En campo de fecha asigna directamente el valor Date a la propiedad Model.Date:

 oFechaSeleccionadaControl.Model.Date = dFechaSeleccionada.

En un campo de texto que muestra una fecha, asigna la fecha formateada a la propiedad Text:

 oFechaSeleccionadaControl.Text = sFechaFormateada.

Después de modificar el valor de un control es conveniente llamar a commitChanges() para asegurar que los cambios se reflejen en el modelo de datos subyacente

 oControl.commitChanges()

Gracias por la respuesta.
Estoy intentando terminarla.
Aún me da errores.
Tengo poca idea de programación, pero a ver si con prueba y error lo consigo.