Formulario Genérico

- En ocasiones necesitamos que el formulario que diseñamos interactúe con el formulario que lo llama. Ya sea pasándole un parámetro, o esperando una respuesta para refrescar un grid, por ejemplo.
En estos casos el AhoraProceso "AhoraScripts.AbrirFrmGenerico" no nos servirá.
Tendremos que utilizar el AhoraProceso "AhoraScripts.DameFrmGenerico".

Esta funcionalidad está presente desde la versión 4.0. Para utilizarla deberá de existir el registro en la tabla AhoraProcesos, de lo contrario debe pasar éste script de definición de AhoraProcesos.

IF NOT EXISTS (SELECT * FROM [Ahora_Procesos] WHERE [IdAhoraProceso]='AhoraScripts.DameFrmGenerico')
INSERT INTO [Ahora_Procesos] ([IdAhoraProceso],[Descrip],[IdTipo],[Libreria],[Clase],[Metodo],[IdLlamada],[RetornoTipo],[RetornoObjeto],[CheckParam],[Observaciones],[Macro],[Net])
VALUES('AhoraScripts.DameFrmGenerico','Devuelve el formulario FrmGenerico.',3,'AhoraScripts','Scripts','DameFrmGenerico',1,NULL,1,0,'Public Function Carga(ByVal aNombreForm As String, Optional aPropietario As Object = Nothing, Optional aModal As Boolean = True) As Boolean)',0,0)

Ver código ejemplo


COPIAR LISTAS DE PRECIO DE OTRO PROVEEDOR
- El siguiente ejemplo pretende crear un formulario donde el usuario seleccione un dato de un control de tipo Combo.
- Se creará un botón de Aceptar y otro de Cerrar.
- Si el usuario pulsa "Aceptar" llamará a una stored procedure en la base de datos y cerrará la ventana. A continuación el formulario que hizo la llamada refrescará el grid.

'* Código del formulario padre "Listas de precios Proveedor"
         Sub Show()
         'Creamos el botón que llamará al frmGenérico
         gform.Controls("Botonera" ).Botonadd "&Copiar de otra Lista de Precios", "botCopiarLista" ,,,,406
     End Sub

Sub Botonera_AfterExecute(aBotonera, aBoton)
     If aboton.name = "botCopiarLista" Then
        abrirFrmGen
     End If
End Sub

   Sub Initialize()
       gform.Controls("Botonera").ActivarScripts = True
   End Sub

Sub abrirFrmGen
    'gcn.ahoraproceso "AhoraScripts.AbrirFrmGenerico", False, "Pers_lpc_Combo", gcn.sesion.MainForm ,True
    'Instanciamos el formulario, haciendo la llamada al ahoraProceso
    Set lfrmGen = gcn.ahoraproceso ("AhoraScripts.DameFrmGenerico",False)
            If lfrmGen Is Nothing Then
               MsgBox "No se pudo instanciar el formulario genérico. Sólo está presente desde la versión 4.0." & Vbcrlf & " Si tiene esta versión o superior, debe solicitar el script SQL de creación de ahoraProceso presente en la documentación web"
Exit Sub
           End If
                  lfrmgen.tag = gForm.Controls("IdLista").text ' Pasamos el IdLista al formulario genérico a través de la propiedad "Tag" del formulario.
                  lfrmGen.carga "Pers_lpc_Combo",gform ,True ' Importante parámetros: "NombreForm", [Objeto formulario padre], [Modal]
                  gForm.Controls("grdLineas").refrescar ' Como el formulario es modal, al cerrarse se refrescará el grid
End Sub

'* Código del formulario genérico. --Atención, el control combo se crea mediante asistente, no se incluye script de creación de control en el ejemplo.

Sub Show()

     With gForm.Controls("Botonera")
     .activarscripts = True
     .SeguridadObjeto = 0 'No muestra los botones estándar de objeto
     .botonesMantenimiento = 5 ' Mostramos el botón de aceptar y cerrar
     .habilitaBotones
     End With
End Sub


Sub Botonera_AfterExecute(aBotonera, aBoton)
        Select Case aboton.Name
           Case "botAceptar"
              If "" & gForm.Controls("NuevoCombo1").text = "" Then
                MsgBox "Debe seleccionar una lista",VbExclamation,"Atención"
Exit Sub
             End If
                 If MsgBox ("¿Confirma que quiere copiar la lista de precios del proveedor escogido?",vbQuestion + vbYesNo + Vbdefaultbutton2, "Confirmación") = VbYes Then
                      Set lColParam = gcn.damenewcollection
                      lColParam.add gForm.Controls("NuevoCombo1").text
                      lColParam.add gform.tag

                If gCn.EjecutaStoreCol("pPers_Copia_ListasPrecios_Prov" ,lColParam) Then
                        MsgBox "Proceso ejecutado correctamente."

                Else
                       MsgBox "Hubo un problema al copiar la Lista de precios. Consulte con el dpto de TIC." ,vbExclamation,"Atención"
Exit Sub
               End If

abotonera.botonexecute "botCerrar" ' Cerramos el formulario genérico

              End If
End Select
End Sub

Sub Initialize()
        ' El control NuevoCombo1 se ha creado mediante asistente y la definición está en tablas.
        'gForm.Controls("NuevoCombo1").CaptionLink = True
End Sub

Autor: Daniel Ernesto Lutz Llano