En el siguiente artículo aprenderás cómo crear un nuevo campo configurable en Ahora ERP.
Los campos configurables son campos nuevos que el cliente desea tener en los formularios de la aplicación. Estos campos podrán tanto editarse como explotar su información mediante listados.
Tenemos hasta tres opciones para añadir un campo configurable a un formulario de la aplicación.
- En una pestaña
- En un grid
- En el propio formulario
En una pestaña nueva del formulario
Decir que en los siguientes objetos, cuando agreguemos un campo configurable al objeto, en su formulario tendremos habilitada una nueva pestaña para visualizar y editar el nuevo campo.
- Artículos
- Maquinas
- Proyectos
- Proveedores
- Clientes
- Empleados
- Tareas
- Partes
- Seguimientos
- Ofertas, pedidos, albaranes y facturas de Cliente
- Albaranes y facturas de proveedor
- Albaranes de envío
Para añadir un campo configurable a un objeto de la aplicación y que se visualice en una nueva pestaña, elegiremos la opción del Admon -> Campos Configurables. A continuación del desplegable, elegiremos el objeto al cual deseamos añadirle un campo configurable. Observamos como tenemos un nombre de tabla. A continuación, rellenaremos los siguientes campos:
- Campo: Introduciremos el nombre del campo que se quedará guardado en la base de datos. Los nombres de campo no pueden ser valores numéricos.
- Descripción: Es el nombre que el usuario verá como campo configurable
- Tipo: Elegiremos el tipo de campo de base de datos. Para más información sobre los tipos de datos, consulte la documentación oficial proporcionada por Microsoft,
- Decimal: corresponde al tipo de SQL Server decimal, con 38 dígitos, contados a ambos lados del separador decimal y máximo 14 dígitos a la derecha de éste.
- Doble: corresponde al tipo de SQL Server float, permite datos en el intervalo de - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308.
- Entero: corresponde al tipo de SQL Server smallint, permite datos en el intervalo de -2^15 (-32.768) a 2^15-1 (32.767).
- Fecha: corresponde al tipo de SQL Server datetime
- Long: corresponde al tipo de SQL Server int, permite datos en el intervalo de -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647).
- Sí/No: corresponde al tipo de SQL Server bit: permite valores 0 y 1. Puede traducir los valores True en 1 y False.
- Texto: corresponde al tipo de SQL Server varchar, con la precisión indicada en el campo siguiente.
- Precisión: Si el tipo de dato elegido es texto, estableceremos el tamaño del campo.
- Default: El valor por defecto que tendrá el campo, tanto para objetos existentes como para nuevos objetos
- A: Habilitamos un asistente para este campo, ver más abajo la explicación.
Tenemos la posibilidad de enlazar un campo configurable bien con una nueva tabla o con una tabla / vista existente, para ello marcaremos el campo A de tipo check y en la parte derecha se nos habilitará un nuevo grid.
Debemos de pulsar los botones tabla nueva o tabla existente de la parte inferior para que podamos realizar las siguientes acciones:
- Tabla nueva: Si pulsamos este botón la aplicación nos pedirá el nombre de una tabla, a partir de aquí la aplicación crea la tabla con un campo clave por defecto, en la pestaña de datos rellenaremos la tabla nueva con los datos que por defecto que saldrán al pulsar el asistente (F3) sobre el campo configurable.
- Tabla existente: Veremos una lista con las tablas o vistas, según opción elegida de la base de datos donde nos encontramos, después de elegir la tabla veremos todos los campos de la tabla y tendremos que marcar el campo selección. Estos campos son los que se visualizaran.
Tanto para una tabla nueva como para una tabla existente en la pestaña de datos tenemos un campo de tipo check (S) para seleccionar que campos de la tabla se mostrarán en el asistente.
Una vez rellenados los registros de los campos configurables, deberemos de salir y volver a entrar en la aplicación para que los campos configurables se vean reflejados en los objetos modificados. Los campos que tienen asistente (F3) se indican al usuario de forma visual mediante un color diferente al habitual.
En el grid del objeto
Decir que esta forma de añadir campos configurables sólo es válida para aquellos objetos que utilizan una grid de usuario para su edición. Algunos ejemplos de colecciones de objetos que cumplen está condición podrían ser:
- Líneas de contratos
- Líneas de pedidos, tanto de venta como de compra.
- Líneas de una factura deudora o acreedora
- Líneas de cartera
- Líneas de contabilidad
- Líneas del parte(materiales)
Los pasos a seguir para añadir un campo configurable en el objeto serían los siguientes:
- Acceder al ADMON, link campos configurables y comprobar que para el objeto en cuestión no tenemos tabla de campos configurables, en ese caso debemos crear la tabla configurable insertando un nombre. Por ejemplo: Pers_Conf_Fact_Acree_Desglose.
- Al pulsar guardar el ADMON crea la tabla y además en la nueva tabla se añaden todos los valores de claves primarias que hay en la tabla origen. La tabla configurable tiene que tener tantos registros como la tabla origen.
- Si la tabla ya está creada o para el objeto ya tenemos tabla creada solamente debemos añadir los campos configurables que deseemos.
- Crear una vista que incluya tanto los campos de la tabla configurable, como los campos del propio objeto. No repetir las claves.
- Asignar permisos a la vista que hemos creado. Ejemplo: zpermisos NombreVistaPers
- Ir a la tabla objetos, filtrar por el objeto al que queremos añadir campos configurables y realizar los siguientes cambios en los campos:
- En el objeto: En el campo TablaOtra observar que está el nombre de la tabla que hemos creado, de lo contrario añadir el nombre de la tabla.
- En la colección del objeto: En el campo EdicionGrid introduciremos el nombre de la vista que hemos creado.
- Al crear la tabla desde el admon el proceso también ha creado los triggers asociados a esta tabla, sobre todo los triggers de insert y delete puesto que siempre tenemos que tener los mismos registros en la tabla del objeto como en la tabla configurable.
- En el formulario donde vamos a añadir el campo configurable iremos y escribiremos la siguiente instrucción de código dentro del procedimiento
Código VB6:
Sub Initialize gform.NombreDelGrid.EditarPorObjetoyVista =TRUE
Código C#:
public override void Initialize() { base.Initialize(); (gForm.Controls["NombreDelGrid"] as ICntGridUsuario).EditarPorObjetoYVista = true: }
- Sobre el grid del objeto, botón derecho del ratón sobre la esquina superior izquierda y elegimos la opción configurar…
- Añadir los campos de la nueva tabla en la grid inferior "Campos nuevos"
- Configurar los campos
- Establecer en este formulario de edición de las columnas de la grid, la seguridad para que todos los usuarios la puedan cambiar. Esto se realiza a través del menú Asignar --> Asignar Grupos de Seguridad. Añadiendo el registro de empresa "GRUPOAHORA"
Ejemplo de campos configurables para el objeto líneas de facturas de acreedor:
Objeto donde voy a añadir campos configurables: Factura_Acreedor_Linea que corresponde con la tabla Factura_Acreedor_Lineas cuyos campos clave son:
- IdFactura
- IdIva
- Idretencion
En el campo TablaOtra de la tabla objetos hemos puesto el nombre de la tabla que hemos creado: Conf_facturas_acreedor_lineas. Esta tabla contiene los campos clave de la tabla del objeto más dos campos configurables más:
- IdMaquina
- IdEmpleado
Asignamos permisos a la tabla y a la vista.
Rellenamos los campos de tablaotra y ediciongrid de la tabla y el objeto respectivamente
Creamos los nuevos triggers, con el formato de trigger de cliente:
- Trigger de delete de la tabla Facturas_acreedor_lineas: NombreCliente_Facturas_Acreedor_Lineas_UTRIG
DELETE Conf_Facturas_Acreedor_Lineas FROM Deleted, Conf_Facturas_Acreedor_Lineas WHERE Deleted.IdFactura=Conf_Facturas_Acreedor_Lineas.IdFactura and Deleted.IdIVA=Conf_Facturas_Acreedor_Lineas.IdIVA and Deleted.IdRetencion=Conf_Facturas_Acreedor_Lineas.IdRetencion
- Trigger de insert de la tabla Facturas_acreedor_lineas: NombreCliente_Facturas_Acreedor_Lineas_ITRIG
IF @@ROWCOUNT<>0 BEGIN INSERT INTO Conf_Facturas_Acreedor_Lineas (IdFactura, IdIva, IdRetencion) SELECT IdFactura, IdIva, IdRetencion from Inserted END
A continuación iremos al formulario del objeto en la aplicación y configuraremos el grid con los nuevos campos. Si obtenemos el mensaje de error: “error actualizando los valores configurables”, es porque los triggers no están bien diseñados.
En el propio formulario
Ejemplo de introducción de un campo nuevo de tipo texto en el formulario de partes.
Código VB6:
Sub Initialize() ''Texto Control Rotura Set lContenedor=gform.[EL CONTROL QUE SEA] Set lTexto = gForm.Controls.Add("AhoraOcx.Textousuario", "Control_Roturas", lContenedor) lTexto.ObjOrigen = "EObjeto" lTexto.ObjPOrigen = "Control_Roturas" lTexto.visible=True lTexto.Move gForm.Causa.Left - 1150, gForm.Causa.Top + gForm.Causa.Height + 370 ,gForm.Causa.Width, gForm.Causa.Height lTexto.CaptionVisible=True lTexto.CaptionControl="Control Roturas:" lTexto.CaptionWidth=1200 lTexto.AplicaEstilo End Sub Sub CargaObjeto IF gForm.Eobjeto.ObjGlobal.Propiedades("IdClasificacion") = 1 then gform.Controls("Control_Roturas").Visible=True Else gform.Controls("Control_Roturas").Visible=False End If End Sub Sub ActualizaObjeto IF gForm.Eobjeto.ObjGlobal.Propiedades("IdClasificacion") = 1 then gform.Controls("Control_Roturas").Visible=True Else gform.Controls("Control_Roturas").Visible=False End If End Sub
Código C#:
public override void Initialize() { base.Initialize(); // Texto Control Rotura var lContenedor = gForm; ITextoUsuario lTexto = (ITextoUsuario)gForm.Controls.Add("AhoraOCX.TextoUsuario", "Control_Roturas", gForm); lTexto.ObjOrigen = "EObjeto"; lTexto.ObjPOrigen = "Control_Roturas"; lTexto.Visible = true; IControl lCausa = gForm.Controls["Causa"]; lTexto.SetBounds(lCausa.Left - 77, lCausa.Top + lCausa.Height + 25, lCausa.Width, lCausa.Height); lTexto.CaptionVisible = true; lTexto.CaptionControl = "Control Roturas:"; lTexto.CaptionWidth = 80; lTexto.AplicaEstilo(); } public override void CargaObjeto() { base.CargaObjeto(); CompruebaVisibilidadControlRotura(); } public override void ActualizaObjeto() { base.ActualizaObjeto(); CompruebaVisibilidadControlRotura(); } private void CompruebaVisibilidadControlRotura() { if ((gForm.Controls["EObjeto"] as IEnlaceObjetos).ObjGlobal["IdClasificacion"] == 1) { (gForm.Controls["Control_Rotura"] as ITextoUsuario).Visible = true; } else { (gForm.Controls["Control_Rotura"] as ITextoUsuario).Visible = false; } }
Ejemplo para agregar un panel al formulario de artículos máquina:
Código VB6:
On Error Resume Next IF not gcn.Sesion.ParametroBool("MAQUINAS_DEFINICION_SERVICIOS_MOVTIERRA") Then exit sub End IF SET lPnl = gForm.Controls("PnlMovTierras") IF lPnl IS Nothing then gForm.Width= gForm.Width +1200 Set lPnl = gForm.Controls.Add("AhoraOCX.cntPanel", "PnlMovTierras" ) lPnl.ResizeInterior =True lPnl.ResizeEnabled = False lPnl.Estilo=0 lPnl.Visible=True gForm.TabDatos.InsertItem 100, "&Mov. Tierras", lPnl.Hwnd, 1 Set lGrid = gForm.Controls.Add("AhoraOCX.cntGridUsuario", "grdMovTierras",lPnl ) lGrid.Visible=True lGrid.AplicaEstilo lPnl.Width= gForm.Width-200 Else SET lGrid= gForm.Controls("grdMovTierras") End if
Código C#:
try { if (!gCn.Sesion.ParametroBool("MAQUINAS_DEFINICION_SERVICIOS_MOVTIERRA")) { return; } ICntGridUsuario lGrid = null; if (!gForm.Controls.ContainsKey("PnlMovTierras")) { gForm.Width = gForm.Width + 80; ICntPanel lPnl = (ICntPanel)gForm.Controls.Add("AhoraOCX.CntPanel", "PnlMovTierras"); lPnl.ResizeInterior = true; lPnl.ResizeEnabled = false; lPnl.Estilo = EEstilo_Panel.eEst_Panel_Recuadro; lPnl.Visible = true; (gForm.Controls["TabDatos"] as ICntTab).InsertItem(100, "&Mov. Tierras", lPnl, 1); lGrid = (ICntGridUsuario)gForm.Controls.Add("AhoraOCX.CntGridUsuario", "grdMovTierras", lPnl); lGrid.Visible = true; lPnl.Width = gForm.Width - 13; } else { lGrid = (ICntGridUsuario)gForm.Controls["grdMovTierras"]; } } catch (Exception) { throw; }
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo