Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Script Varios
Script Varios
Crear bases asociadas para aplicacin de clientes Poner un contador de registros Poner el foco y el cursor en un campo concreto Imprimir una vista en modo silencioso Numerar los registros de un listado Que al entrar en approach lo haga a una vista en concreto y no a la primera Que al entrar en approach lo haga a una vista en concreto y no a la primera y que ejecute algun comando Llamar a una pagina web desde una macro Hacer los campos solo de lectura por medio de un script Controlar si se introducen un nmero determinado de digitos en un campo Numerador y bucles Abrir un archivo inscrustado en un campo miscelaneo Poner en blanco un campo Buscar por fecha variable Script para presentacin preliminar Crear carpeta Bloquear un registro dependiendo del valor de un campo Encontrar el numero mayor que hay en un campo Visualizar los archivos de una carpeta y si esta no existe, se crea Titulo variable en informes
CREAR BASES ASOCIADAS PARA APLICACIN DE CLIENTES Vamos a ver, necesitas para eso 3 tablas: CLIENTES.DBF CIF (Clave primaria de esta tabla que utilizars en asociacin) Nombre Domicilio etc... CLIENTE-ARTICULOS.DBF Id_CIF (Asociado al CIF de CLIENTES.DBF) Id_CodigoArticulo (Asociado a CodigoArticulo de ARTICULO.DBF) Cantidad Precio artculo ARTICULOS.DBF Codigo (Clave primaria que utilizars para asociar) Nombre artculo Creas estas 2 asociaciones: Cliente.CIF---->Cliente-Articulos.Id_CIF
Articulos.Codigo--->Cliente-Articulos.Id_CodigoArticulo y en el formulario en el que vas a crear el Panel de Repeticin (tabla principal CLIENTES.DBF) aades los campos de la tabla CLIENTES.DBF y en el panel de repeticin los de las otras 2 tablas (a gusto del consumidor). PONER UN CONTADOR DE REGISTROS 1.- Crear un campo variable numrico llamado 'NumRegistros' 2.- En el editor de Scripts, crear una funcin global copiando el siguiente texto: Sub getCount currentview.body.NumRegistros.text = Format$ (CurrentWindow.NumRecordsFound, "#0") End Sub
3.- Crear un botn de macro. Localizar el nombre del objeto y en el editor de script copiar el siguiente texto: Sub Click(Source As Button, X As Long, Y As Long, Flags As Long) getCount End Sub PONER EL FOCO Y EL CURSOR EN UN CAMPO CONCRETO source.body.TUCAMPO.setfocus
NUMERAR LOS REGISTROS DE UN LISTADO CurrentDocument.Window.FindAll CurrentWindow.FirstRecord For A=1 To CurrentWindow.NumRecordsFound CurrentView.Body.NumRegistro.Text = A
CurrentWindow.NextRecord Next -------------------------------------------------------------------------Te explico por lneas: 1 Busca todos los registros en la vista actual 2 Va al primer registro 3 Aqu empieza el bucle For Next, donde empieza a contar "A" con el valor 1, hasta el total de registro que encuentre. 4 El campo NumRegistro toma el valor de A 5 Pasa al siguiente registro 6 Vuelve a ejecutar la lnea 3 hasta el total de registro, pero ahora el valor de A es 2, con lo que el campo NumRegistro toma el 2. QUE AL ENTRAR EN APPROACH LO HAGA A UNA VISTA EN CONCRETO Y NO A LA PRIMERA En modo diseo presionas las teclas CTRL + K ( para abrir el editor de scripts) en la opcion objetos seleccionas APPROACH y al lado derecho en SCRIPT seleccionas el estado DOCUMENTOPENED Y entre el sub y endsub pegas esto: Set currentwindow.activeview = currentdocument.Inicio CurrentWindow.Browse Donde Inicio es el nombre de la vista con la cual siempre se abre la aplicacin .Browse es en modo resgistro. QUE AL ENTRAR EN APPROACH LO HAGA A UNA VISTA EN CONCRETO Y NO A LA PRIMERA Y QUE EJECUTE ALGUN COMANDO Te vas a modo diseo, en la vista que quieras que te abra, -en el cuadro de Propiedades > macros, (definir macro) aqui creas una macro nueva, como nombre le pones OPEN , asi, con maysculas, y le das los parmetros que quieras, como que te cree un nuevo registro, o te abra en el ltimo, o que ejecute algo (es tu gusto)
LLAMAR A UNA PAGINA WEB DESDE UNA MACRO Suponemos un campo, PaginaWeb, de texto donde se introduce la URL completa. Creamos una macro con el comando Abrir Especificar ahora el archivo que se abrir al ejecutar la macro En vez de seleccionar un archivo escribimos el nombre del campo donde se escribe la URL dentro de unas dobles flechas
<<PaginaWeb>> Si hay bases asociadas en la aplicacin, se escribe de esta manera, suponiendo que nuestra base se llamara Proveedores <<Proveedores.PaginaWeb>>
HACER LOS CAMPOS SOLO DE LECTURA POR MEDIO DE UN SCRIPT Hacer que un campo sea de slo lectura: CurrentView.NOMBRE_DE_VISTA.Body.NOMBRE_DE_CAMPO.ReadOnly = 1 Hacer que un campo pueda ser modificado: CurrentView.NOMBRE_DE_VISTA.Body.NOMBRE_DE_CAMPO.ReadOnly = 0 NOMBRE_DE_VISTA es el nombre de la vista tal y como aparece en la linea de estado. Es recomendable que NOMBRE_DE_VISTA no contenga espacios. NOMBRE_DE_CAMPO es el nombre de campo tal como aparece en "Nombre del objeto" en la pestaa "Macros" de las propiedades del propio campo. ReadOnly es la propiedad que define si un campo se puede modificar (0), o no (1). Body es el cuerpo de la vista. Todos los campos que no pertenecen a un panel de repeticin, pertenecen a "Body". Los paneles de repeticin (si hay ms de uno) se nombran como "RepeatingPanel", "RepeatingPanel1", "RepeatingPanel2", etc. de modo que la referencia a un campo que est dentro de un panel de repeticin sera: CurrentView.RepeatingPanel.NOMBRE_DE_CAMPO Con lo que dependiendo de la condicin que se establezca: If CurrentView.Body.ESTATUS.Text = "Pagado" then CurrentView.Body.CAMPO1.ReadOnly = 1 CurrentView.Body.CAMPO2.ReadOnly = 1 CurrentView.Body.CAMPO3.ReadOnly = 1 CurrentView.Body.CAMPO4.ReadOnly = 1 else CurrentView.Body.CAMPO1.ReadOnly = 0 CurrentView.Body.CAMPO2.ReadOnly = 0 CurrentView.Body.CAMPO3.ReadOnly = 0 CurrentView.Body.CAMPO4.ReadOnly = 0
End if Y ya est. CONTROLAR SI SE INTRODUCEN UN NMERO DETERMINADO DE DIGITOS EN UN CAMPO Tengo un campo numrico con 12 dgitos, donde quiero que al "salir" o "despus de actualizar" si no se introducen los 12 digitos no salga del campo. El cdigo ha introducir puede ser 008325789452, es decir, que pueden ir ceros delante. En definicin de campos -> Opciones -> Pestaa de validacin: Para el campo en cuestin: - Activar relleno y Frmula verdadera, y en el botn "Frmula" poner la siguiente frmula: LONGITUD(nombre_de_campo)=12 Ya no te dejar abandonar el campo hasta que introduzcas 12 dgitos en el.
Gracias Manolo por la ayuda, pero cuando el nmero va con ceros delante (008325789452) como en el ejemplo que comento arriba, no me reconoce los 12 dgitos.
Tienes que definir el campo como texto. No vale numrico. Una vez que lo tengas como texto, en la ventana de propiedades del campo (modo diseo), en la pestaa "#" poner "Tipo de formato": Numrico "Formato actual": Seguridad Social y despues pinchar "Editar Formato" y en cdigo de Formato: 000000000000 (12 ceros). Esto har que en el campo slo deje introducir nmeros aunque sea un campo de texto. Y as tiene en cuenta los ceros de la izquierda, y la frmula LONGITUD(CAMPOX)=12 ya no deja introducir menos de 12 dgitos. NUMERADOR Y BUCLES
Tengo una aplicacin donde tengo un campo "NUMERADOR" activado para que sume cada vez un nmero ms, Pero...necesito algo as como una macro o una Script que me condicione que cuando llegue a mil y luego comience en uno nuevamente.
Cualquier instruccin de bucle te servira. Bucle finito (While....Wend): NUMERADOR = 1 While CONDICION {Operaciones con NUMERADOR} If {condicion de salida del bucle} then Exit While
End if NUMERADOR = NUMERADOR +1 If NUMERADOR > 1000 then {Operaciones} (supongo que NUMERADOR = 1) End if Wend Este sera un ejemplo de bucle finito que se terminara cuando se cumpla {condicion de salida del bucle} o bien CONDICION. Tambin te servira un bucle infinito (Do......Loop): DO {instrucciones} IF {condicion de salida del bucle} EXIT DO End if LOOP Que slo terminaria cuando se cumpla {condicin de salida del bucle} ABRIR UN ARCHIVO INSCRUSTADO EN UN CAMPO MISCELANEO Busco donde est el documento .PDF, le doy "copiar", regreso al .APR y le doy un clik al campo miscelneo para que se active y voy a "edicin>pegado especial", me aparece un cuadro de dilogo y le marco "pegar" o "pegar vnculo", y "aceptar". Ahora si, le doy dos "Cliks" al campo miscelaneo y me sale el documento abierto con su aplicacin. PONER EN BLANCO UN CAMPO Supongo que te referirs a un campo variable definido en la BD, y que has agregado a un formulario. Si es as, y la definicin del campo es: VAR_FECHA Variable Fecha Para dejarlo "vaco": CurrentView.Body.VAR_FECHA.Text = "" Si te refieres a una variable predefinida dentro del script: Dim VAR_FECHA as Variant
Para modificar su valor: VAR_FECHA = "" BUSCAR POR FECHA VARIABLE Creas un campo tipo "Variable" y formato Fecha. En el ejemplo que pongo la BD se llamar BASEDAT, el campo dentro de BASEDAT dnde estn las fechas que hay que buscar, se llamar BD_FECHA y el campo "variable" fecha para la bsqueda se llamar "FECHA_BUSQUEDA". Aades el campo "variable": FECHA_BUSQUEDA a un formulario. Aades tambin un "botn" para llamar a la funcin de bsqueda. Abres el editor de Scripts, y haces doble click en el objeto botn. Aparece la propiedad "Click" del botn, y ah introduces: FECHA = CurrentView.Body.FECHA_BUSQUEDA.Text Dim fFind as new Find fFind.And "BASEDAT:BD_FECHA", FECHA CurrentWindow.FindSort fFind Y ya tienes la seleccin de registros con la fecha que pongas en el campo FECHA_BUSQUEDA. Cuando quieras anular la seleccin: CurrentWindow.FindAll Un saludo. SCRIPT PARA PRESENTACION PRELIMINAR As de fcil CurrentWindow.PrintPreview ---> Presentacin preliminar CurrentWindow.Zoom(100) ---> Vista 100% CREAR CARPETA Mkdir "c:\carpeta\" BLOQUEAR UN REGISTRO DEPENDIENDO DEL VALOR DE UN CAMPO
Quiero bloquear un registro una vez que se le ha puesto una fecha de resolucin. Solo el registro que tenga una fecha de resolucin y no otro. Es decir, los dems registros pueden ser modificados hasta que se le ponga la fecha de resolucin.
puedes utilizar este script: if source.fecharesolucion="" then source.otroscampos.readonly=false else source.otroscampos.readonly=true end if le pones readonly a todos los campos que quieres que se bloqueen cuando tienes la fecha. ENCONTRAR EL NUMERO MAYOR QUE HAY EN UN CAMPO
Esto funciona perfectamente con cualquier campo de cualquier .dbf Un SELECT ordenado por el campo que quieras, accedes al ltimo registro, y ya tienes el valor ms alto. Infinitamente ms rpido que cualquier barrido de registros. Es instantneo. Puedes copiar y pegar y cambiar slo la ruta, el archivo y el nombre del campo. Crea un botn, abre la edicin de scripts y pega la secuencia en el evento 'Click' del botn que acabas de crear.
'================== secuencia de instrucciones DIM QRY As Query DIM RST As ResultSet DIM CON As Connection DIM Path As String DIM File As String CD=chr(34) 'comillas dobles Path="ruta completa a la carpeta del archivo" 'tu ruta File="archivo.dbf" 'tu archivo Set CON = New Connection Set QRY = New Query Set RST = New ResultSet CON.ConnectTo("dBASE IV") Set QRY.Connection = CON QRY.TableName = Path + File Set RST.Query = QRY Table = Path + File QRY.SQL = "SELECT *" & " FROM " & CD & Table & CD & " ORDER BY gestion" Set RST.Query = QRY RST(2).Execute RST(2).LastRow Messagebox "El ltimo nmero es:" & RST(2).GetValue("gestion") '=================== fin de la secuencia
'en la clusula ORDER BY tienes que poner el nombre de campo del .dbf 'en la funcin GETVALUE del RST(ResultSet) es tambin el nombre de campo del .dbf
VISUALIZAR LOS ARCHIVOS DE UNA CARPETA Y SI ESTA NO EXISTE, SE CREA En el script del botn desde donde ejecuta poner: En [Declarations] Dim newdir As String, check As String Dim valor2 As String Dim taskId As Integer Dim pathName As String, fileName As String Dim valor As String
En [Click] Sub Click(Source As Button, X As Long, Y As Long, Flags As Long) Dim pathName As String Dim taskId As Integer Dim valor As String Dim valor2 As String Dim miTexto As String miTexto=Inputbox("Inserte la Unidad donde estn los Anexos","Path de los Anexos","i",200,300) If miTexto$="I" Or miTexto$="i" Then ruta$="i:/_Diario/Negocio/Aplicaciones/Anexos/" rutawin$="i:\_Diario\Negocio\Aplicaciones\Anexos\" End If If miTexto$="D" Or miTexto$="d" Then ruta$="d:/Descargas/Negocio/Aplicaciones/Anexos/" rutawin$="d:\Descargas\Negocio\Aplicaciones\Anexos\" End If If miTexto$="" Then End End If valor2$=source.numeroparte.text newdir$ = ruta$&valor2$ check$ = Dir$(newdir$,16) If check$="" Then Mkdir newdir$ End If
valor$=source.numeroparte.text pathName$ = "explorer.exe "&rutawin$&valor$ taskId% = Shell (pathName$, 5) ruta$="" rutawin$="" End Sub