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();
            }
        }
    }
}