Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2021
Avatar de pockelsm3
pockelsm3 pockelsm3 is offline
Miembro
 
Registrado: oct 2007
Posts: 65
Poder: 17
pockelsm3 Va por buen camino
Llamado procedimiento desde Form ShowModal

Saludos a todo el foro

mi problema es el siguiente
Tengo un form master detail, llamo a otro formulario en "showmodal" para seleccionar datos especificos y mandarlos al master detail.

el caso es que luego de seleccionar los datos que se requieren, al precionar el boton Aceptar, desde el form showmodal ejecuto un procedimiento que esta en el form master detail, aqui es cuando me da un error en que las propiedades value de los campo de la tabla son inaccesibles.

el form Master Detail es MDIChild, el formulario que abro en showmodal no es MDI, ya que estos no pueden abrirse el showmodal

el procedimiento que ejecuto esta declarado Publico

Código Delphi [-]
  private
    { Private declarations }
  public
    { Public declarations }
    procedure ModificarNCF(pNCF,pFact,CalcT:String;pFecha:TDateTime;DescV,DescPouble);
    procedure AgregarLineasDevolucion(iCode,iName,iAlm,iUnd,iRef,iIGrup:String;iQty,
                   iPrice,iBruto,iDesc,iDescP,iDescVP,iItbis,iNetoouble);
  end;

procedure TfrmSalesReturn.ModificarNCF(pNCF,pFact,CalcT:String;pFecha:TDateTime;DescV,DescPouble);
begin
  DevTableFACTURA.Value := pFact;
  DevTableTAXCALC.Value := CalcT;
  DevTableNCF.Value := pNCF;
  DevTableFLINKFACT.Value := pFecha;
  DevTableDESCVALOR.Value := DescV;
  DevTableDESCPORC.Value := DescP;
  DevTableDESCPORCVALOR.Value := Valor_Porcentaje(DevTableSEBTOTALNETO.Value,DevTableDESCPORC.Value);
end;
Responder Con Cita
  #2  
Antiguo 12-01-2021
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

Cita:
Empezado por pockelsm3 Ver Mensaje

el caso es que luego de seleccionar los datos que se requieren, al precionar el boton Aceptar, desde el form showmodal ejecuto un procedimiento que esta en el form master detail, aqui es cuando me da un error en que las propiedades value de los campo de la tabla son inaccesibles.
Si te dice que las propiedades que quieres modificar son inaccesibles posiblemente es que no pusiste la unidad del form mdi en la seccion uses de tu ventana modal.

No se si estoy entendiendo bien. No me quedo claro en que form esta el procedimiento que quieres llamar.

Ahora si el metodo es del form mdi y lo llamas despues de que se cierra el form modal puede ser que es que estes destruyendo form antes de leer los valores requeridos.
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado

Última edición por Caminante fecha: 12-01-2021 a las 14:31:23.
Responder Con Cita
  #3  
Antiguo 12-01-2021
Avatar de pockelsm3
pockelsm3 pockelsm3 is offline
Miembro
 
Registrado: oct 2007
Posts: 65
Poder: 17
pockelsm3 Va por buen camino
Saludos Caminante, gracias por responderme

Cita:
Empezado por Caminante Ver Mensaje
Si te dice que las propiedades que quieres modificar son inaccesibles posiblemente es que no pusiste la unidad del form mdi en la seccion uses de tu ventana modal.
la unidad del form mdi esta declarada en el form showmodal, de lo contrario cuando escriba el procedimiento delphi lo marcaria con linea roja.

Cita:
Empezado por Caminante Ver Mensaje
No se si estoy entendiendo bien. No me quedo claro en que form esta el procedimiento que quieres llamar.
el procedimiento que llamo desde el showmodal, se encuentra en el form mdi

Cita:
Empezado por Caminante Ver Mensaje
Ahora si el metodo es del form mdi y lo llamas despues de que se cierra el form modal puede ser que es que estes destruyendo form antes de leer los valores requeridos.
en principio lo hacia luego del mandar a cerrar el showmodal, pense que el problema era por lo mismo que mencionas y cambie el llamado antes de mandar a cerrar el showmodal, pero persiste el inconveniente.

este es el codigo de cuando hago el llamado

click al boton
Código Delphi [-]
procedure TfrmDevSelect.btnCargarClick(Sender: TObject);
begin
  CargarDevolucion;
  Close;
end;

donde se llama al procedimiento del mdi
Código Delphi [-]
procedure TfrmDevSelect.CargarDevolucion;
begin
  try
    frmSalesReturn.ModificarNCF(SalesTableNCF.Value,SalesTableFACTURA.Value,SalesTableTAXCALC.Value,
                   SalesTableFECHAREGISTRO.Value,SalesTableDESCVALOR.Value,SalesTableDESCPORC.Value);

    SalesLine.First;

    while not SalesLine.Eof do
       begin
         if ckbAdd.EditValue = 'S' then
            begin
              frmSalesReturn.AgregarLineasDevolucion(SalesLineCODE.Value,SalesLineITEMDESCRIP.Value,SalesLineALMAC  EN.Value,
              SalesLineUNIDADES.Value,SalesLineREFERENCIA.Value,SalesLineTAXGROUP.Value,SalesLineITEMQTY.Value,
              SalesLinePRICE.Value,SalesLineSUBTOTAL.Value,SalesLineDESC.Value,SalesLineDESCPORCENT.Value,
              SalesLineDESCVALORPORCENT.Value,SalesLineITBIS.Value,SalesLineTOTAL.Value);

              SalesLine.Next;
            end
         else SalesLine.Next;
       end;


  except
    AddFallaSistema(Main.Usuario,'frmDevSelect','CargarDevolucion','MErInseLine');
    mensaje(MErInseLine,PWideChar(Application.Title),MB_ICONERROR+MB_OK);
  end;
end;
Responder Con Cita
  #4  
Antiguo 12-01-2021
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Bueno podrias probar llamar al procedimiento desde el mismo form, es lo que yo haria:

Código Delphi [-]
FomDialogo:=TFormdialogo.create(nil);
try
if formdialogo.showmodal=mrok then
begin
 //Las acciones pertinentes como llamar a mi procedimiento
end;
finally
formdialogo.free
end;
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #5  
Antiguo 12-01-2021
Avatar de pockelsm3
pockelsm3 pockelsm3 is offline
Miembro
 
Registrado: oct 2007
Posts: 65
Poder: 17
pockelsm3 Va por buen camino
Cita:
Empezado por Caminante Ver Mensaje
Bueno podrias probar llamar al procedimiento desde el mismo form, es lo que yo haria:

Código Delphi [-]
FomDialogo:=TFormdialogo.create(nil);
try
if formdialogo.showmodal=mrok then
begin
 //Las acciones pertinentes como llamar a mi procedimiento
end;
finally
formdialogo.free
end;
Es que en el form showmodal, debe de haber interaccion con el usuario, ya que debe de elegir la informacion que desea enviar al form mdi

O es que no estoy entendiendo tu ejemplo.
Responder Con Cita
  #6  
Antiguo 12-01-2021
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Bueno no se como es tu formulario modal ni como es que lo ejecutas. Lo normal que hago en un dialogo es tener los botones aceptar y cancelar entonces si se acepta el dialogo puedo hacer las operaciones necesarias.
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #7  
Antiguo 12-01-2021
Avatar de pockelsm3
pockelsm3 pockelsm3 is offline
Miembro
 
Registrado: oct 2007
Posts: 65
Poder: 17
pockelsm3 Va por buen camino
Cita:
Empezado por Caminante Ver Mensaje
Bueno no se como es tu formulario modal ni como es que lo ejecutas. Lo normal que hago en un dialogo es tener los botones aceptar y cancelar entonces si se acepta el dialogo puedo hacer las operaciones necesarias.
entiendo que lo hago de una manera sencilla o muy basica

Código Delphi [-]
procedure TfrmSalesReturn.ebtnFacturaPropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  inherited;
  if DevTableCUSTCODE.Value <> '' then
     begin
       frmDevSelect := TfrmDevSelect.Create(Application);
       frmDevSelect.FiltrarCliente(DevTableCUSTCODE.Value);
       frmDevSelect.ShowModal;
     end
  else ShowMessage('Debe seleccionar un cliente');
end;

asi es la llamada al form modal, filtro la tabla que esta en el form modal por el cliente que hayan seleccionado posteriormente, para que en el form modal seleccionen la informacion que desean de dicho cliente.

Última edición por pockelsm3 fecha: 12-01-2021 a las 20:54:13.
Responder Con Cita
  #8  
Antiguo 12-01-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola, pockelsm3!

Cuando haces el llamado de Form.ShowModal, el formulario se muestra, te permite interactuar con este y al finalizar también permite obtener el resultado la ventana Modal.

Las ventanas Modal pueden devolver una respuesta que representa una acción a tomar en tu aplicación. Entre las mas comunes mrOk y mrCancel que por lo general se muestran como botones de Aceptar y Cancelar. La forma más fácil de asignar esa respuesta está en las mismas propiedades del TButton que elegirás para el Aceptar o el Cancelar.

En el siguiente ejemplo, se evaluará que al presionar el botón llame EjecutarAlgo. Si cierra el formulario o presiona cancelar no hace el llamado de EjecutarAlgo

Código Delphi [-]
procedure Form1.Button1Click(Sender: TObject);
begin
  if frmDevSelect.ShowModal = mrOk then
    EjecutarAlgo;
end;

En el siguiente ejemplo, se validan muchas mas acciones

Código Delphi [-]
procedure Form1.Button1Click(Sender: TObject);
begin
  case frmDevSelect.ShowModal of
    mrOk: EjecutarOk;
    mrYes: EjecutarYes;
    mrNo: EjecutarNo;
  end;
end;

Como recomendación, el formulario modal debe crearse y liberarse de inmediato. Recuperando los valores necesarios antes de liberar el formulario.

Código Delphi [-]
procedure TfrmSalesReturn.ebtnFacturaPropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
  var
    frmDevSelect: TfrmDevSelect;
begin
  inherited;
  if DevTableCUSTCODE.Value <> '' then
     begin
       frmDevSelect := TfrmDevSelect.Create(Application);
       try
         frmDevSelect.FiltrarCliente(DevTableCUSTCODE.Value);
         if frmDevSelect.ShowModal = mrOk then
         begin
           //Recuperar los valores desde el formulario modal y realizar las siguientes acciones
         end;
       finally
         frmDevSelect.Free;
       end;
     end
  else ShowMessage('Debe seleccionar un cliente');
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #9  
Antiguo 13-01-2021
Avatar de pockelsm3
pockelsm3 pockelsm3 is offline
Miembro
 
Registrado: oct 2007
Posts: 65
Poder: 17
pockelsm3 Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
Hola, pockelsm3!

Cuando haces el llamado de Form.ShowModal, el formulario se muestra, te permite interactuar con este y al finalizar también permite obtener el resultado la ventana Modal.

Las ventanas Modal pueden devolver una respuesta que representa una acción a tomar en tu aplicación. Entre las mas comunes mrOk y mrCancel que por lo general se muestran como botones de Aceptar y Cancelar. La forma más fácil de asignar esa respuesta está en las mismas propiedades del TButton que elegirás para el Aceptar o el Cancelar.

En el siguiente ejemplo, se evaluará que al presionar el botón llame EjecutarAlgo. Si cierra el formulario o presiona cancelar no hace el llamado de EjecutarAlgo

Código Delphi [-]
procedure Form1.Button1Click(Sender: TObject);
begin
  if frmDevSelect.ShowModal = mrOk then
    EjecutarAlgo;
end;

En el siguiente ejemplo, se validan muchas mas acciones

Código Delphi [-]
procedure Form1.Button1Click(Sender: TObject);
begin
  case frmDevSelect.ShowModal of
    mrOk: EjecutarOk;
    mrYes: EjecutarYes;
    mrNo: EjecutarNo;
  end;
end;

Como recomendación, el formulario modal debe crearse y liberarse de inmediato. Recuperando los valores necesarios antes de liberar el formulario.

Código Delphi [-]
procedure TfrmSalesReturn.ebtnFacturaPropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
  var
    frmDevSelect: TfrmDevSelect;
begin
  inherited;
  if DevTableCUSTCODE.Value <> '' then
     begin
       frmDevSelect := TfrmDevSelect.Create(Application);
       try
         frmDevSelect.FiltrarCliente(DevTableCUSTCODE.Value);
         if frmDevSelect.ShowModal = mrOk then
         begin
           //Recuperar los valores desde el formulario modal y realizar las siguientes acciones
         end;
       finally
         frmDevSelect.Free;
       end;
     end
  else ShowMessage('Debe seleccionar un cliente');
end;

gracias movorack y caminante por sus recomendaciones y sugerencias

con este ejemplo mas detallado pude solucionar el incoveniente,

muchas gracias muchachos por su gran ayuda

Última edición por pockelsm3 fecha: 13-01-2021 a las 01:34:08.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Llamar un procedimiento desde otro form jeremiselxi Varios 7 02-10-2014 12:07:24
Saber si el form fue llamado con showmodal Kenobi Varios 2 01-12-2009 10:08:10
Efectos en el form que abre un ShowModal mam1986 Varios 8 04-08-2008 09:50:47
Error al llamar un form en ShowModal DarkByte OOP 4 28-12-2005 09:16:12
Minimizar Form en ShowModal el_enigma1 OOP 7 08-07-2005 23:25:50


La franja horaria es GMT +2. Ahora son las 02:00:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi