Crearemos una pestaña con un grid en el formulario de artículos donde listaremos los pedidos relacionados al artículo.
Es interesante porque la sql de la grid la crearemos dinámicamente en base al IdArticulo en la ficha. Atención que cuando hacemos esto, necesitamos añadir un alias al grid.
Si hacemos doble clic en el campo Nº de pedido, que nos abra el pedido.
Si hacemos doble clic en el campo Cliente, nos debe abrir el formulario de cliente.
También creamos un ejemplo para otra pestaña en el formulario de Empleado.
Código VB6:
Sub Initialize() crearGrid End Sub Sub crearGrid Set lPnl = gForm.Controls.Add("Threed.SSPanel", "Pers_GridPedidos") lPnl.Visible=True lPnl.autosize = 3 ' el contenido se ajusta al tamaño del panel 'Creamos la pestaña en el control TabPrincipal gForm.TabPrincipal.InsertItem 200, "&Pedidos", lPnl.Hwnd, 1 Set lGrid = gForm.Controls.Add("AhoraOCX.cntGridUsuario", "grdPers_Pedidos",lPnl) lGrid.Visible=True lGrid.AplicaEstilo 'En vez de utilizar un FROM "TABLA" vamos a construir la consulta dinámicamente. Pero para ello necesitamos poner un alias en el grid lsql = "(select distinct pcc.IdPedido, pcc.NumPedido, pcc.IdCliente, cd.Cliente, pcc.Fecha, pcc.IdDoc " & _ " from pedidos_cli_lineas pcl" & _ " inner Join Pedidos_Cli_Cabecera pcc On pcc.IdPedido = pcl.IdPedido" & _ " inner Join Clientes_Datos cd On cd.IdCliente = pcc.IdCliente" & _ " where pcl.IdArticulo = '" & gForm.Controls("IdArticulo") & "' and pcc.IdEstado = 0)a" With lGrid ' NO_TRADUCIR_TAG .Agregar = False .Editar = False .Eliminar = False .CargaObjetos = False .EditarPorObjeto = False .alias = "a" .AgregaColumna "IdPedido", 0, "Id.Pedido", True .AgregaColumna "NumPedido", 900, "Nº Ped.",False .AgregaColumna "IdCliente", 0, "IdCliente",False .AgregaColumna "Cliente", 1500, "Cliente",False .AgregaColumna "Fecha", 800, "Fecha",False .campo ("NumPedido").Coleccion = "Pedidos" .Campo ("NumPedido").ColeccionWhere = "Where IdPedido = @IdPedido" .campo ("Cliente").Coleccion = "Clientes" .Campo ("Cliente").ColeccionWhere = "Where IdCliente = @IdCliente" .From = lsql .Where = "" .ColumnaEscalada = "Cliente" .OrdenMultiple = "Fecha" .RefrescaSinLoad = True .Refresca = True End With End Sub Sub CargaObjeto lsql = "(select distinct pcc.IdPedido, pcc.NumPedido, pcc.IdCliente, cd.Cliente, pcc.Fecha, pcc.IdDoc " & _ " from pedidos_cli_lineas pcl" & _ " inner Join Pedidos_Cli_Cabecera pcc On pcc.IdPedido = pcl.IdPedido" & _ " inner Join Clientes_Datos cd On cd.IdCliente = pcc.IdCliente" & _ " where pcl.IdArticulo = '" & gForm.Controls("IdArticulo") & "' and pcc.IdEstado = 0)a" gform.controls ("grdPers_Pedidos").from = lsql gform.controls ("grdPers_Pedidos").refrescar End Sub
Código C#:
using AhoraCore; using AhoraCl; using AhoraSistema; using AhoraOCX; namespace AhoraScriptsPantalla { public class AhoraCl_frmArticulos : AhoraOCX.AhoraBaseScript { public void Show() { CrearGrid(); } public void CrearGrid() { ICntPanel lPnl = (ICntPanel)gForm.Controls.Add("Threed.SSPanel", "Pers_GridPedidos"); lPnl.Visible = true; lPnl.ResizeInterior = true; //Creamos la pestaña en el control TabPrincipal ICntTab cntTab = (ICntTab)gForm.Controls["TabPrincipal"]; cntTab.InsertItem(200, "&Pedidos", lPnl, 1); ICntGridUsuario lGrid = (ICntGridUsuario)gForm.Controls.Add("AhoraOCX.cntGridUsuario", "grdPers_Pedidos", lPnl); lGrid.Visible = true; //En vez de utilizar un FROM "TABLA" vamos a construir la consulta dinámicamente. Pero para ello necesitamos poner un alias en el grid string lsql = "(select distinct pcc.IdPedido, pcc.NumPedido, pcc.IdCliente, cd.Cliente, pcc.Fecha, pcc.IdDoc " + " from pedidos_cli_lineas pcl" + " inner Join Pedidos_Cli_Cabecera pcc On pcc.IdPedido = pcl.IdPedido" + " inner Join Clientes_Datos cd On cd.IdCliente = pcc.IdCliente" + " where pcl.IdArticulo = '" + (gForm.Controls["IdArticulo"] as ITextoUsuario).Text + "' and pcc.IdEstado = 0)a"; lGrid.Agregar = false; lGrid.Editar = false; lGrid.Eliminar = false; lGrid.CargaObjetos = false; lGrid.EditarPorObjeto = false; lGrid.Alias = "a"; lGrid.AgregaColumna("IdPedido", 0, "Id.Pedido", true); lGrid.AgregaColumna("NumPedido", 60, "Nº Ped.", false); lGrid.AgregaColumna("IdCliente", 0, "IdCliente", false); lGrid.AgregaColumna("Cliente", 100, "Cliente", false); lGrid.AgregaColumna("Fecha", 53, "Fecha", false); lGrid.Campo("NumPedido").Coleccion = "Pedidos"; lGrid.Campo("NumPedido").ColeccionWhere = "Where IdPedido = @IdPedido"; lGrid.Campo("Cliente").Coleccion = "Clientes"; lGrid.Campo("Cliente").ColeccionWhere = "Where IdCliente = @IdCliente"; lGrid.From = lsql; lGrid.Where = ""; lGrid.ColumnaEscalada = "Cliente"; lGrid.OrdenMultiple = "Fecha"; lGrid.RefrescaSinLoad = true; lGrid.Refresca = true; } public void CargaObjeto() { if (gForm.Controls["grdPers_Pedidos"] != null) { string lsql = "(select distinct pcc.IdPedido, pcc.NumPedido, pcc.IdCliente, cd.Cliente, pcc.Fecha, pcc.IdDoc " + " from pedidos_cli_lineas pcl" + " inner Join Pedidos_Cli_Cabecera pcc On pcc.IdPedido = pcl.IdPedido" + " inner Join Clientes_Datos cd On cd.IdCliente = pcc.IdCliente" + " where pcl.IdArticulo = '" + (gForm.Controls["IdArticulo"] as ITextoUsuario).Text + "' and pcc.IdEstado = 0)"; (gForm.Controls["grdPers_Pedidos"] as ICntGridUsuario).From = lsql; (gForm.Controls["grdPers_Pedidos"] as ICntGridUsuario).Refrescar(); } } } }