Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2007
Avatar de fedelphi
fedelphi fedelphi is offline
Miembro
 
Registrado: abr 2006
Ubicación: Santa Fe
Posts: 122
Poder: 19
fedelphi Va por buen camino
Propiedad o variable de un form se hace=0

Hola al foro, tengo unproblema que realmente me mato, no se si sera una pavada, en este caso disculpen, o algo mas serio. tengo el sig codigo
Código Delphi [-]
var
  incctacte:TFIngresoctacte;
  cierravta:TFCierreVenta;
  costo,precio:double;
  porcentage_pago_efectivo:double;//porcentage de pago efectivo y el costo que le corresponde
begin
  if modulodatos.IBTTictmp.RecordCount<>0 then
  begin
    cierravta:=TFCierreVenta.create(self);
    cierravta.ETotalvta.Text:=floattostrf(VPTotal_venta,ffNumber,10,2);
    cierravta.EEfectivo.Text:=floattostrf(VPTotal_venta,ffNumber,10,2);
    try
      if cierravta.showmodal=mrOK then
      begin
        if roundto(VPTotal_venta,-2)=roundto(cierravta.efectivo,-2) then
        begin
        //paga todo en efectivo
          Fprincipal.inserta_en_vtadiaria('ef');
        //  Close;
        end
        else
        begin
          if roundto(VPTotal_venta,-2)>roundto(cierravta.efectivo,-2) then
          begin
            acumula_total_venta(costo,precio);
            porcentage_pago_efectivo:=roundto(cierravta.efectivo/VPTotal_venta,-2);
            incctacte:=TFIngresoctacte.create(self);
            incctacte.ctacte:=cierravta.efectivo;
            try
              if incctacte.showmodal=mrOK then///en esta linea se hace=0
              begin
                inserta_en_vtadiaria_vtadividida(costo*porcentage_pago_efectivo,cierravta.efectivo,'ef');
                inserta_en_vtadiaria_vtadividida(costo-(costo*porcentage_pago_efectivo),VPTotal_venta-cierravta.efectivo,'cc');
              end;
            finally
              incctacte.Free;
              inicializa_ingreso;
              inicializa_venta;
            end;
todo esto esta dentro de la funcion para cerrar una venta. VPTotal_venta es un propiedad del form definida asi
Código Delphi [-]
 private
    Ftotal_venta:double;
.
.
public
 property VPTotal_venta:double read FTotal_venta write FTotal_venta;
Cuando hago el segundo showmodal vptotal_venta se hace=0, alguien podri decirme que es lo que estoy haciendo mal? muchas gracias
Fede
__________________
De lo que hay no falta nada!!!
Responder Con Cita
  #2  
Antiguo 14-09-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

Disculpa Fede, pero está algo difuso el planteamiento. No sé si la función acumula_total_venta modifique la propiedad en cuestión, o si haya alguna otra rutina que lo haga. Tales códigos serían de utilidad también.

Pero de cualquier manera, sería bueno intentar plantearlo con un poco más de orden, contexto y claridad.

Gracias.

Al González.
Responder Con Cita
  #3  
Antiguo 14-09-2007
Avatar de fedelphi
fedelphi fedelphi is offline
Miembro
 
Registrado: abr 2006
Ubicación: Santa Fe
Posts: 122
Poder: 19
fedelphi Va por buen camino
ok, disculpas por el desorden y la falta de info, es que estuve todo el dia de ayer programando y estaba medio saturado. El tema es asi, esta parte es para cerrar una venta que puede ser toda en efectivo, o parte en efectivo y el resto que falta va a una cuenta corriente. Entonces cuando llamo a
Código Delphi [-]
 cierravta:=TFCierreVenta.create(self);
    cierravta.ETotalvta.Text:=floattostrf(VPTotal_venta,ffNumber,10,2);
    cierravta.EEfectivo.Text:=floattostrf(VPTotal_venta,ffNumber,10,2);
    try
      if cierravta.showmodal=mrOK then
muestro dos TEdits uno con el monto total y otro para ingresar el efectivo asi
Código Delphi [-]
procedure TFCierreventa.EEfectivoKeyPress(Sender: TObject; var Key: Char);
begin
  if (key in ['a'..'z'])or(key in ['A'..'Z'])then
    key:=#0;

  if (key=#13)and(EEfectivo.text<>'') then
  begin
    Key:=#0;
    FEfectivo:=strtofloat(EEfectivo.Text);
    ModalResult:=mrOK;
  end;
end;
luego analizo si se pago todo el monto o solo una parte y hay que acumular en cta cte asi
Código Delphi [-]
if roundto(VPTotal_venta,-2)>roundto(cierravta.efectivo,-2) then
          begin
            acumula_total_venta(costo,precio);
            porcentage_pago_efectivo:=roundto(cierravta.efectivo/VPTotal_venta,-2);
            incctacte:=TFIngresoctacte.create(self);
            incctacte.ctacte:=cierravta.efectivo;
            try
              if incctacte.showmodal=mrOK then///en esta linea se hace=0
entonces en incctacte pregunto por el cliente al cual se le computara el monto
Código Delphi [-]
procedure TFIngresoCtaCte.BIncorporarClick(Sender: TObject);
begin
  try
    if verifica_limite_cuenta then
    begin
      with modulodatos do
      begin
        if not ibtransaction1.InTransaction then
          IBtransaction1.StartTransaction;
        if not IBTClientes.Active then
          IBTClientes.open;

        IBTClientes.Locate('COD_CLIENTE',VPRid_cliente,[]);
        IBTClientes.Edit;
        IBTclientes.fieldbyname('SALDO').AsFloat:=IBTclientes.fieldbyname('SALDO').AsFloat+FPrincipal.VPtota  l_venta-Fctacte;
        IbTClientes.Post;
        IBtransaction1.CommitRetaining;
        //ModalResult:=mrOK;
      end;
      FPrincipal.inserta_en_vtadiaria('cc');
    end;
    //Close;
  except
    on e:exception do
    begin
      Modulodatos.IBTransaction1.RollbackRetaining;
      showmessage('Error al actualizar la cuenta en TFIngresoCtaCte.BIncorporarClick --'+e.message);
      ModalResult:=mrabort;
    end;
  end;
end;
la funcion verifica_limite_cuenta es esta
Código Delphi [-]
function TFIngresoCtaCte.verifica_limite_cuenta: boolean;
begin
  if VPRCli_saldo+Fprincipal.VPtotal_ventathen
  begin
    result:=true;
  end
  else
  begin
    if messagedlg('El cliente supera el límite de cuenta otorgado. Permite la compra?',mtWarning,mbOKCancel,0)=mrOK then
    begin
      result:=true
    end
    else
    begin
      result:=false;
      FPrincipal.inicializa_ingreso;
      FPrincipal.inicializa_venta;
      showmessage('Venta cancelada.');
    end;
  end;
end;
por lo que no modifico el valor que se hace =0. Gracias y de nuevo disculpas.
Fede
__________________
De lo que hay no falta nada!!!
Responder Con Cita
  #4  
Antiguo 14-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

La propiedad que dices forma parte de una clase. Parece que haces uso de un objeto de dicha clase y luego liberar la instancia de dicho objeto. Si a continuación creas una nueva instancia del objeto... el valor de la propiedad será el valor que se de en el constructor del objeto en cuestión. Si no se le da ningún valor el compilador le dará uno por defecto: parece que en este caso es cero.

Lo que yo miraría es en el constructor del objecto de marras. Me aseguraría de que dicha propiedad se inicializa en el valor que interesa. Esto suele hacerse en el propio método constructor, e insisto, de no hacerlo, la variable (a la que al cabo hacer referencia la propiedad) será inicializada por el compilador con un valor por defecto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 14-09-2007
Avatar de fedelphi
fedelphi fedelphi is offline
Miembro
 
Registrado: abr 2006
Ubicación: Santa Fe
Posts: 122
Poder: 19
fedelphi Va por buen camino
Ya encontre el problema, efectivamente estaba inicializando la variable, disculpas de nuevo. Cuando se esta mucho tiempo programando creo que hay que dejar las preguntas/dudas para el otro dia, jaja. Disculpas de nuevo por una pregunta tan tonta.
Federico
__________________
De lo que hay no falta nada!!!
Responder Con Cita
  #6  
Antiguo 14-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No; no creo que fuera una pregunta tonta. Yo apunté por ahí porque vi que hacías de la propiedad de un objeto que a continuación (luego de usarlo) liberabas. Entonces el asunto estaba más o menos claro: en el constructor de dicho objeto no se inicializa la variable tal como esperas. Pero lo que dices es cierto: a veces se lleva mucho tiempo liado con algo y tanto esfuerzo no se ve recompensado. Ya lo decía Miguel de Unamuno: "Trabajar mucho puede ser señal de estar haciendo las cosas mal".
__________________
David Esperalta
www.decsoftutils.com
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
variable estatica no muere con el form !!!!!!!!!!! david_uh Varios 5 28-07-2007 00:51:14
Componente, variable y propiedad de este Walcasar OOP 2 24-10-2006 19:30:27
Accder a propiedad Text de un label de otro form! XaRz OOP 4 16-05-2006 16:22:10
propiedad Tabvisible en Pagecontrol no hace visible el contenido Kafu OOP 3 29-11-2005 19:06:48
ver una variable de otro form mainau Varios 3 07-03-2004 12:55:14


La franja horaria es GMT +2. Ahora son las 17:14:11.


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