Abrir archivo .odt cuyo nombre es el valor de un texbox

Discute sobre las herramientas de la base de datos

Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor victorleyva » Vie Nov 15, 2019 5:04 pm

Hola, llevo tiempo resolviendo mis dudas en el foro y nunca me he atascado en nada, pero ahora no doy con la clave. Estoy intentando algo que estoy seguro de que es muy sencillo, tengo una base de datos y uno de los valores que se muestran en una caja de texto quiero enviarlo a una variable para que al pulsar un botón se abra un archivo externo a la base de datos, un odt previamente hecho por otro lado y su nombre es el mismo que el valor de la mencionada caja. Hasta ahora solo he conseguido hacer una macro en vb pero con la ruta estática introducida en el código:

Código: Seleccionar todo   Expandir vistaContraer vista
REM  *****  BASIC  *****

Sub Main





Dim sTest as String

sys = CreateUnoService("com.sun.star.system.SystemShellExecute")

    sTest = "c:\fichas\222.odt"


    sys.execute( sTest, "", 0)

End Sub


Lo que quiero es que el valor "c:\fichas\222.odt" lo obtenga de una caja de texto, he buscado por el foro y he visto algo pero no acabo de conseguir que funcione, con saber como mandar de la caja de texto a una variable sin que me de error... el resto ya sigo yo, gracias!
Libreoffice 6.1.4.2 (x64) Windows 10
victorleyva
 
Mensajes: 1
Registrado: Vie Nov 15, 2019 4:57 pm

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor Longi » Mié Nov 20, 2019 9:43 am

Buenas!

Si tienes un formulario con una caja de texto que yo he llamado 'txtDocumento' y tienes un botón en el mismo formulario, si le aplicas la macro siguiente en el evento 'Botón de ratón pulsado' te abriría cualquier documento (.odt) que en su ruta contenga el texto del campo de texto y además se encuentre en la ruta que indicaste ('c:\fichas\')

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Texto (Event)

    Dim mArg()   
    oForm= Event.Source.Model.Parent
    oText= oForm.getByName("txtDocumento").Boundfield.getString
    RutaDocumento= ConvertToURL("c:\fichas\"& oText &".odt")
    oDocumento = StarDesktop.loadComponentFromURL( RutaDocumento, "_blank", 0, mArg() )

End Sub


También puedes consultar en https://wiki.openoffice.org/wiki/ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/TrabajandoConOOo/TrabajandoConDocumentos

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Longi
 
Mensajes: 655
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor jftejeiro » Dom Ago 02, 2020 9:14 am

Sigo sin poder conseguir lo que quiero hacer.
Espero que vuestra sabiduría ponga luz a mi oscuridad, teniendo en cuenta que soy muy novato en esto y no entiendo nada.

Lo que llevo logrado hasta ahora para mi es un gran avance y aprendí mucho en este foro, analizando bases que vais colgando y leyendo y leyendo post, pero esto ya me supera y estoy mas perdido que un pulpo en un garaje.

Tengo una base llamada Base Laboratorio. Esta base, es de un laboratorio que recibe artículos para analizar. Con ellos recibo documentación y también la envío.
Tengo tres formularios relacionados entre si con un campo que se llama ID_REG.

Cada artículo que llega lo grabo en el formulario principal llamado frmREGISTRO_ENTRADA
, y le doy un número en un campo llamado CASO LABORATORIO (ID_LAB), cuyo valor es correlativo e introduzco a mano y es 001, 002, 003, 025, 126 etc.…

Todos estos artículos traen documentación varia y que guardo en formato PDF en la carpeta del caso del laboratorio y que quiero guardar en un campo se texto del formulario principal llamado “txtDOCUMENTACION_ENTRADA”

Los otros dos formulario son para comunicaciones que hago con distintos departamentos y se llaman frmDOCUMENTACION_ENVIADA y frmDOCUMENTACIÓN_RECIBIDA, que se relacionan con el formulario principal por el número que introduzco a mano 001, 002, 003, 025, 126 etc.…

Dentro de estos formularios, tengo un campo en cada uno de ellos llamados con el mismo nombre (no me rompí mucho la cabeza :) “ txtDOCUMENTOS_ENVIADOS “ y “txtDOCUMENTOS_RECIBIDOS”.

Bueno, la idea es que en estos tres campos, se puedan guardar distintos documentos que se generan a lo largo del tiempo, todos ellos guardados en formato PDF (correos, informes, análisis, registros, facturas, notas, etc..)

Todos los documentos relativos a cada caso, se guardan en carpetas dentro del directorio raiz de la base, con el nombre del caso del laboratorio Base Laboratorio/Documentos/001, 002, 003, 025, 126 etc.…

La idea es que cada vez que doy de alta un documento o lo envío, puede pulsar dentro del campo que lo va a guardar “ txtDOCUMENTOS_ENVIADOS “ y “txtDOCUMENTOS_RECIBIDOS”, y se me abra el explorador de archivos para buscar las rutas donde están guardados los documentos en sus respectivas carpetas y pueda seleccionar el documento en cuestión y al aceptar que se quede guardada la ruta con el nombre del documento en el campo de texto “ “xtDOCUMENTACION_ENTRADA”, “txtDOCUMENTOS_ENVIADOS “ y “txtDOCUMENTOS_RECIBIDOS”

Después quiero un botón que me permita abrir el documento cuya ruta este en el campo de texto en cada momento. No se si visualizarlos dentro de cada formulario mediante un subformulario, en modo de vista tabla, que muestra todos los documentos guardados y poder pulsar encima de cada ruta y que ya se abra el documento, o poner un botón por cada uno de ellos.

En Access es sencillo porque hay un campo llamado hipervínculo que lo hace todo solo, pero aquí en LibreOffice no.
Tengo casi toda la base finalizada a excepción de esto que me atasqué

LA IDEA SERIA PONER ALGO ASI, PERO ME PIERDO RutaDocumento= ConvertToURL("E:\DOCUMENTACION\" & txtID_LAB"\"& oText &".pdf")
Me da un error, supongo que esta mal la formula. Seria poner el directorio E:\DOCUMENTACION\ y que coja del campo ID_LAB el número de la carpeta 001, 002 etc.. para cargar el documento.
Claro que en la formula esta que me comentáis yo le tengo que poner la ruta y el nombre del documento, por eso seria mas cómodo y efectivo, que pulsando en el campo de texto, se abriese el explorador de archivos, seleccionase el documento que quiero meter en el campo y se salvase automáticamente la ruta en el campo.
Libre Office 6.5.4 en Windows 10
jftejeiro
 
Mensajes: 15
Registrado: Mié Jul 15, 2020 6:39 pm

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor RMG » Dom Ago 02, 2020 10:51 am

Hola,

Con tanta explicación me pierdo, puedes adjuntar un pequeño ejemplo donde veamos lo que explicas. Creo que la solución de Longi es apropiada.

Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor jftejeiro » Dom Ago 02, 2020 11:43 am

Te adjunto la base, esta por terminar, esta el formulario principal y el de Documentación recibida.
Lo hice deprisa para vieras cual es el problema. Espero que se entienda
Adjuntos
BASE LABORATORIO LIBREOFFICE.rar
(121.79 KiB) 3 veces
Libre Office 6.5.4 en Windows 10
jftejeiro
 
Mensajes: 15
Registrado: Mié Jul 15, 2020 6:39 pm

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor RMG » Lun Ago 03, 2020 10:15 am

Hola,

Mira si es esto es lo que quieres hacer. En el formulario DOCUMENTACION RECIBIDA, he puesto las dos opciones, una que desde el control cuadro dialogo "Examinar" puedas elegir un documento y abrirlo (puede ser de cualquier extensión) o con un control tabla en un subformulario donde tengas los documentos almacenadas y puedas abrirlos (he creado una tabla de apoyo).

Saludos
Adjuntos
BASE LABORATORIO LIBREOFFICE1.zip
(121.17 KiB) 5 veces
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor jftejeiro » Lun Ago 03, 2020 10:46 am

Hola lo primero gracias por dedicar tu tiempo a ayudarme.
Me descargue la base y en el apartado con el botón examinar, me sale este mensaje de error cuando pulso el botón Abrir Documento
Imagen

En la segunda opción la de la tabla, me sale el mensaje de la segunda imagen , cuando pulso el botón de insertar documento

Imagen

No se si es, que deben de faltar las macros que hacen esas acciones.
Si te acuerdas, sube las macros por favor
Última edición por jftejeiro el Lun Ago 03, 2020 11:34 am, editado 1 vez en total
Libre Office 6.5.4 en Windows 10
jftejeiro
 
Mensajes: 15
Registrado: Mié Jul 15, 2020 6:39 pm

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor Longi » Lun Ago 03, 2020 11:19 am

Buenas!

He visto que RMG ya te respondió, pero no me ha dado tiempo a leer la respuesta.
Yo he colocado en el formualrio principal tres botones:
1- el de "DOCUMENTOS" te abre la carpeta del registro que estás viendo en el formulario
2- el de "COPIAR DOCU" te manda a un buscador para que encuentres el documento y te pide que lo nombres de algún modo (un mínimo de 5 caracteres) y lo copia hacia la carpeta del registro que está a la vista en el formulario.
3 el de "IMPORTAR DOCU" hace casi lo mismo, solo que en este caso no le puse el límite de caracteres y hace desaparecer el documento de la posición original (si lo tenías en escritorio ahora solo lo tienes en la carpeta del registro del formulario. La otra macro hace una copia y deja uno en cada lado).

Supongo que con estos tres ejemplos podrás ir hilando un poco lo que quieres.
Considero que sería bueno que diese numeración automática al hacer un nuevo registro y que se generasen las carpetas así mismo de forma automática (evitamos errores), pero esto para versiones posteriores....

A ver si te convence!

Un saludo! ;)
Adjuntos
BASE LABORATORIO LIBREOFFICE.7z
(88.42 KiB) 6 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Longi
 
Mensajes: 655
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor jftejeiro » Lun Ago 03, 2020 11:32 am

Hola y gracias Longui.
Esta genial, me valen las dos opciones, la tuya y la de RMG.
Esta bien que se pueda abrir la carpeta y ver los documentos subidos. Lo ideal seria que en un subformulario tipo tabla se viesen todos los documentos que se han subido. Así de un vistazo tienes en pantalla toda la información y que al pulsar sobre uno de ellos se abriese automáticamente.

Supongo que esto mismo vale y es aplicable para el formulario Documentación Recibida y formulario Documentación Enviada ?
Gracias
Libre Office 6.5.4 en Windows 10
jftejeiro
 
Mensajes: 15
Registrado: Mié Jul 15, 2020 6:39 pm

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor RMG » Lun Ago 03, 2020 4:32 pm

Pues no se que ha podido pasar, en mi ejemplo también han desaparecido las macros. Estas son, en Modulo1, recuerda abre cualquier tipo de archivo.

Código: Seleccionar todo   Expandir vistaContraer vista
Option Explicit

Sub InsertDoc(Event As Object)
   Dim oFormD As Object
   Dim oDialFP As Object
   Dim sURL As String
   oFormD=Event.Source.Model.Parent
   sURL = ConvertToURL(oFormD.Columns.GetByName("Documento").GetString)
   If sURL <>"" Then
      MsgBox "No se permite insertar URL en un registro con datos"
      Exit Sub
   End If
   oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.FilePicker")
   oDialFP.Title = "Elija un documento"
   If Dir(sURL)<>"" Then oDialFP.DisplayDirectory=sURL
   If oDialFP.Execute Then
      sURL=oDialFP.Files(0)
      oFormD.Columns.GetByName("Documento").UpdateString(sURL)
   End If
   If oFormD.IsModified Then
      If oFormD.IsNew Then oFormD.InsertRow Else oFormD.UpdateRow
   End If
End Sub

Sub AbreDoc(Event As Object)
   Dim oFormD As Object
   Dim sURL As String
   Dim sAbrir As Object
   On Error Goto Err_sAbreDoc
   oFormD=Event.Source.Model.Parent
   sURL = ConvertToURL(oFormD.Columns.GetByName("Documento").GetString)
   If Dir(sURL)="" Then
      MsgBox "No se encuentra el archivo: " & sURL
      Exit Sub
   End If
   If FileExists(sURL) Then
      'abre el archivo si lo encuentra
      sAbrir = CreateUnoService("com.sun.star.system.SystemShellExecute")
      sAbrir.execute( sURL, "", 0)
   Else
      'no encuentra el archivo
      MsgBox "No existe el archivo " & sURL
   End If
   Exit Sub
Err_sAbreDoc:
   MsgBox "Error al abrir el archivo: " & sURL
   On Error Goto 0
End Sub

Sub BotonAbreDocumento( Evento )
Dim sRuta As String
Dim sArchivo As String
Dim sAbrir As Object
   'El control donde esta el nombre del archivo
   sArchivo = Evento.Source.Model.Parent.getByName("Selector").Text
   If IsNull(sArchivo) Or sArchivo = "" Then
      MsgBox "Revisa que existe el archivo en el campo"
   Exit Sub
   End If
   'Busca el archivo correspondiente
   If FileExists(sArchivo) Then
      'abre el archivo si lo encuentra
      sAbrir = CreateUnoService("com.sun.star.system.SystemShellExecute")
      sAbrir.execute( sArchivo, "", 0)
   Else
      'no encuentra el archivo
      MsgBox "No existe el archivo " & sArchivo
   End If
End Sub


Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor jftejeiro » Lun Ago 03, 2020 4:55 pm

La única duda que me surge es, que cuando selecciono el documento que quiero guardar, se me queda toda la ruta de las carpetas en donde esta guardado el documento.
Es posible que aparezca en la casilla que almacena el documento, únicamente el nombre del documento en lugar de toda la ruta completa?
Es que si el campo donde va a ir el documento es muy pequeño, no se ve el nombre del archivo que esta ahí guardado, sobre todo en la tabla
Por lo general las carpetas donde van a ir guardados todos los documentos va a estar en el directorio raiz donde este la base de datos.
BASE DE DATOS/ BASE.ODB y un directorio llamado DOCUMENTACION/ 001,002,003 etc...

Imagen

Por lo demás, sino se puede, vuestras respuestas me han servido de gran ayuda.
Entre los dos me habéis dado las mejores opciones.
Gracias por vuestro Tiempo.

nota:
No puedo poner RESUELTO por que no inicié yo el post.
Libre Office 6.5.4 en Windows 10
jftejeiro
 
Mensajes: 15
Registrado: Mié Jul 15, 2020 6:39 pm

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor jftejeiro » Lun Ago 03, 2020 7:29 pm

Muchas Gracias, funciona Genial. Esto me soluciona muchos problemas , aunque me gustaría ver todos los documentos subido en una tyabla y pulsar sobre el que quiero abrir.
No esta mal porque se suple con la opción de abrir la carpeta que los contiene, pero no podría ver en pantalla si me falta alguno por subir tanto que me hayan enviado como que lo haya enviado yo.

Muchos de los documentos los genero yo y los envío, guardando una copia, otros me los envían y los guardo en su carpeta

Un saludo! ;)

Longi escribió:Buenas!

He visto que RMG ya te respondió, pero no me ha dado tiempo a leer la respuesta.
Yo he colocado en el formualrio principal tres botones:
1- el de "DOCUMENTOS" te abre la carpeta del registro que estás viendo en el formulario
2- el de "COPIAR DOCU" te manda a un buscador para que encuentres el documento y te pide que lo nombres de algún modo (un mínimo de 5 caracteres) y lo copia hacia la carpeta del registro que está a la vista en el formulario.
3 el de "IMPORTAR DOCU" hace casi lo mismo, solo que en este caso no le puse el límite de caracteres y hace desaparecer el documento de la posición original (si lo tenías en escritorio ahora solo lo tienes en la carpeta del registro del formulario. La otra macro hace una copia y deja uno en cada lado).

Supongo que con estos tres ejemplos podrás ir hilando un poco lo que quieres.
Considero que sería bueno que diese numeración automática al hacer un nuevo registro y que se generasen las carpetas así mismo de forma automática (evitamos errores), pero esto para versiones posteriores....

A ver si te convence!

Un saludo! ;)
Libre Office 6.5.4 en Windows 10
jftejeiro
 
Mensajes: 15
Registrado: Mié Jul 15, 2020 6:39 pm

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor jftejeiro » Lun Ago 03, 2020 8:14 pm

Encontré un problema en la Macro. Resulta que en el campo de buscar cuando pulsas Examinar cargas el documento y lo puedes visualizar cuando le das al botón Abrir documento, pero el problema está en que no queda grabada la ruta seleccionada del archivo, ya que si cierras el formulario y vuelves a entrar, la ruta del archivo desapareció y no se guardó en el campo

RMG escribió:Pues no se que ha podido pasar, en mi ejemplo también han desaparecido las macros. Estas son, en Modulo1, recuerda abre cualquier tipo de archivo.

Código: Seleccionar todo   Expandir vistaContraer vista
Option Explicit

Sub InsertDoc(Event As Object)
   Dim oFormD As Object
   Dim oDialFP As Object
   Dim sURL As String
   oFormD=Event.Source.Model.Parent
   sURL = ConvertToURL(oFormD.Columns.GetByName("Documento").GetString)
   If sURL <>"" Then
      MsgBox "No se permite insertar URL en un registro con datos"
      Exit Sub
   End If
   oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.FilePicker")
   oDialFP.Title = "Elija un documento"
   If Dir(sURL)<>"" Then oDialFP.DisplayDirectory=sURL
   If oDialFP.Execute Then
      sURL=oDialFP.Files(0)
      oFormD.Columns.GetByName("Documento").UpdateString(sURL)
   End If
   If oFormD.IsModified Then
      If oFormD.IsNew Then oFormD.InsertRow Else oFormD.UpdateRow
   End If
End Sub

Sub AbreDoc(Event As Object)
   Dim oFormD As Object
   Dim sURL As String
   Dim sAbrir As Object
   On Error Goto Err_sAbreDoc
   oFormD=Event.Source.Model.Parent
   sURL = ConvertToURL(oFormD.Columns.GetByName("Documento").GetString)
   If Dir(sURL)="" Then
      MsgBox "No se encuentra el archivo: " & sURL
      Exit Sub
   End If
   If FileExists(sURL) Then
      'abre el archivo si lo encuentra
      sAbrir = CreateUnoService("com.sun.star.system.SystemShellExecute")
      sAbrir.execute( sURL, "", 0)
   Else
      'no encuentra el archivo
      MsgBox "No existe el archivo " & sURL
   End If
   Exit Sub
Err_sAbreDoc:
   MsgBox "Error al abrir el archivo: " & sURL
   On Error Goto 0
End Sub

Sub BotonAbreDocumento( Evento )
Dim sRuta As String
Dim sArchivo As String
Dim sAbrir As Object
   'El control donde esta el nombre del archivo
   sArchivo = Evento.Source.Model.Parent.getByName("Selector").Text
   If IsNull(sArchivo) Or sArchivo = "" Then
      MsgBox "Revisa que existe el archivo en el campo"
   Exit Sub
   End If
   'Busca el archivo correspondiente
   If FileExists(sArchivo) Then
      'abre el archivo si lo encuentra
      sAbrir = CreateUnoService("com.sun.star.system.SystemShellExecute")
      sAbrir.execute( sArchivo, "", 0)
   Else
      'no encuentra el archivo
      MsgBox "No existe el archivo " & sArchivo
   End If
End Sub


Saludos
Libre Office 6.5.4 en Windows 10
jftejeiro
 
Mensajes: 15
Registrado: Mié Jul 15, 2020 6:39 pm

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor RMG » Mar Ago 04, 2020 4:32 pm

Hola,

Eso es lo que hace ese control, solo sirve para seleccionar y momentaneamente abrir lo seleccionado, para almacenar datos hay que usar un campo y un Texbox.

Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Abrir archivo .odt cuyo nombre es el valor de un texbox

Notapor Longi » Mar Ago 04, 2020 4:42 pm

Buenas!
Te dejo aquí una nueva versión de la macro 'CopiarDoc'.
Detecté que cambiaste la numeración del formulario principal por un autonumérico, lo cual hace que la versión anterior no detecte las carpetas (antes era un texto del tipo '00X' a 'XXX'), por lo que en esta versión traduce la numeración (autonumérico) a texto seriado.
Por otro lado uso ese texto seriado para generar la carpeta en caso de que no exista aún, por lo tanto, al copiar (importar) documentos desde el formulario principal se genera primero la carpeta y luego guarda el documento con el nombre que le hayas querido asignar
Por último, al final hay un SQL de inserción, que mete el documento en la tabla de documentos recibidos, aunque de forma incompleta. Para meter el resto de campos será ejercicio para tí.
Remarcar que el rellenado de la tabla de documentos recibidos tienes que cambiarla para los emitidos, ya que es otra tabla, pero con los mismos conceptos.
Esta misma versión puede ser implementada para 'ImportarDoc'.
Quedaría algo así:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub CopiarDoc(Evento As Object)

    GlobalScope.BasicLibraries.LoadLibrary("Tools")                                             ' Descargamos la biblioteca 
    '------------------------------------------------------
    ' Elementos con los que vamos a trabajar
     
    oForm = Evento.Source.Model.Parent                                                           ' El formulario activo
    numero= oForm.GetByName("txtID_LAB").BoundField.String                                      ' Número del expediente
    '-----------------------------------------------
    ' Traducimos el número hacia un texto progresivo
       
    If len(numero)=1 Then                                                                       ' Si tiene un dígito
      numero= "00" & numero                                                                     ' Le ponemos dos ceros
    End if

    If len(numero)=2 Then                                                                       ' Si tiene dos dígitos
      numero="0"& numero                                                                        ' Le ponemos un cero delante
    End if

    If len(numero)=3 Then                                                                       ' Si tiene tres dígitos
      numero= numero                                                                            ' No le ponemos nada
    End if       

    IDReg= oForm.GetByName("fmtID_REG").Boundfield.String                                       ' Lo que está en el formulario
    FechaEnt= oForm.GetByName("datFECHA_ENTRADA").Boundfield.String                             ' Lo que está en el formulario
    '-----------------------------------------------
    ' Creamos la carpeta

    oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )                 ' Servicio para acceso a archivos
    Carpeta=ConvertToURL(DirectoryNameoutofPath (ThisDatabasedocument.getURL(),"/",0) &"/DOCUMENTACION/"& numero)
    If Not FileExists(carpeta) Then                                                             ' Si no existe
    oSimpleFileAccess.createFolder(Carpeta)                                                     ' La creamos
    End if                                                                                      ' Acabamos la condición
    '-----------------------------------------------------------------------
    ' Iniciamos búsqueda de un documento

   oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.FilePicker")                             ' Creamos el servicio FilePicker
   oDialFP.Title="Elija un documento"                                                          ' Título del cuadro de diálogo
   If oDialFP.Execute Then                                                                     ' Si se ejecuta el FilePicker
    Nombre = InputBox("¿Con qué nombre guardamos el documento?")                                ' Pregunta por el nombre con el que queremos guardar el documento
    '------------------------------------------------------------------
    ' Precisamos una longitud superior a cuatro caracteres para grabar el documento con un nombre
   
   if len(Nombre)<5 Then                                                                       ' En caso de que tenga menos de 5 caracteres
    do                                                                                          ' Inicia un bucle
   msgbox "El nombre debe tener más de cuatro caracteres, No se guardará nada"                 ' Nos avisa de que no lo guardará
    RespuestaLongitud=1                                                                         ' Variable arbitraria
   Nombre = InputBox("¿Con qué nombre guardamos el documento?")                                ' Pregunta por el nombre con el que queremos guardar el documento
    if len(Nombre)<5 Then                                                                       ' Si la longitid del nuevo nombre sigue siendo menor de 5 caracteres
    RespuestaLongitud=1                                                                         ' La variable sigue siendo 1
    Else                                                                                        ' En caso de que tenga más caracteres
    RespuestaLongitud=2                                                                         ' Cambiamos el valor de la variable a 2
    End if                                                                                      ' Acabamos la condición de que tenga menos de cinco caracteres
    Loop While RespuestaLongitud = 1                                                            ' Hace el bucle mientras la variable no cambie de valor
   End if                                                                                      ' Acabamos la primera condición de que tenga menos de cinco caracteres
   '------------------------------------------------------------------
   ' Si conseguimos que el nombre tenga más de 4 caracteres (5 ó más)
   
    if len(Nombre)>4 then                                                                       ' Si tiene más de 4 caracteres
   NombreDocumento= Nombre & "." &  Right (oDialFP.Files(0),3)                                 ' Nombre completo que tendrá el documento
   RutaDocumento = ConvertToURL(DirectoryNameoutofPath (ThisDatabasedocument.getURL(),"/",0) &"/DOCUMENTACION/"& numero &"/" & NombreDocumento)' Ruta del documento
   Documento=ConvertFromURL(oDialFP.Files(0))                                                  ' Convertimos la ruta a URL
    '------------------------------------------------------
    ' Control de existencia del documento

    If FileExists(RutaDocumento) Then                                                           ' Si el documento existe
    Respuesta=msgbox ("El documento ya existe" & Chr(13) & "¿quiere sobreescribirlo?",36,"¡AVISO IMPORTANTE!")' Aviso en pantalla
    if Respuesta=7 Then                                                                         ' Si se contesta que no
    Exit Sub                                                                                    ' Salimos de la macro
    End if                                                                                      ' Acabamos la condición
    If Respuesta=6 Then                                                                         ' Si se contesta que si
    Kill (RutaDocumento)                                                                        ' Eliminamos el documento
    FilecopY(Documento,RutaDocumento)                                                           ' Recogemos el documento y lo renombramos, dejándolo bien guardadito
    Exit Sub                                                                                    ' Salimos de la macro
    End if                                                                                      ' Acabamos la condición de respuesta positiva
    End if                                                                                      ' Acabamos la condición de si el documento existe
    FilecopY(Documento,RutaDocumento)                                                           ' Renombramos el documento para guardarlo
    '-------------------------------------------------
    ' Guardamos la ruta del documento en la tabla de documentación recibida

    oCon = ThisDatabaseDocument.CurrentController.ActiveConnection                              ' Activamos la conexión
    oStat = oCon.CreateStatement                                                                ' Creamos el Statement
    sSQL = "INSERT INTO ""tbl_DOC_RECIBIDA"" (""ID_RECIBIDA"",""SE_RECIBE"",""FECHA_RECEPCION"",""HIPERVINCULO"",""INDICIOS_RECIBIDOS"")VALUES('"& IDReg &"', 'TRUE','"& FechaEnt &"','"& RutaDocumento &"', 'FALSE')"
    oStat.ExecuteUpdate(sSQL)                                                                   ' Ejecutamos el SQL
    End if                                                                                      ' Acabamos con la condición del FilePicker
    End if

End Sub


También sugiero que, aprovechando el código metido, hagas pruebas y generes dos carpetas dentro de la que ya se generó, uno para documentos recibidos y otra para documentos emitidos, pero tienes que ser cuidadoso con las rutas, ya que, aunque puedas subir un documento tanto recibido como generado, tendrías que guardarlo en una carpeta u otra.
Otra posibilidad es la de incluir en el nombre un texto que los diferencie, pero eso son gustos personales.
Espero que no haya errores inesperados (en mis pruebas iba bien).

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Longi
 
Mensajes: 655
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España


Volver a Base

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados