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 15-03-2008
smessina smessina is offline
Miembro
 
Registrado: ene 2006
Posts: 51
Poder: 19
smessina Va por buen camino
Extraño comportamiento de delphi 7

Como estan? el tema es el siguiente:
trabajo con Delphi 7 - Mysql 5.0 mediane Zeos - Campos Calculados

debo exportar a Excel el detalle del libro iva Ventas, la Exportacion la Hago de la siguiente manera :
Código Delphi [-]
procedure Tflibrosiva.btnexportarventasClick(Sender: TObject);
var excel,libro:variant; sino:string;
x,y:integer;
fila:integer;
saldo:currency;
fecha1,fecha2:string;
begin   //stock actual
     Excel := CreateOleObject('Excel.Application');

    //Añade un Libro
    Excel.WorkBooks.add;

    //Pone Visible La Ventana
    Excel.visible:=True;
    Libro := Excel.WorkBooks[1].WorkSheets['Hoja1'];
    //Pongo Titulos
    excel.range['a1:g1'].Merge;
    excel.range['a1']:='  IVA VENTAS del período '+ inttostr(calventas.Month)+'/'+inttostr(calventas.Year)    +' al  '+ datetostr(date)+' a hs. '+ timetostr(time);
    Excel.Range['A1'].Font.Name := 'Verdana';
    Excel.Range['A1'].Font.FontStyle := 'Bold';
    excel.range['a1'].font.Color := clgreen;




    Excel.Range['a3:m3'].Font.Name := 'Verdana';
    Excel.Range['a3:m3'].Font.FontStyle := 'Bold';
    excel.range['a3:m3'].font.Color := clgreen;
    excel.Range['A3','m3'].Value:=VarArrayOf(['Fecha','Tipo', 'Número','Razón Social','CUIT', 'Imp. Neto Grab.', '% IVA','Imp. IVA Fact.', 'Imp. Resp.No Insc.', 'Concep. No Grab.','Exentas','Pagos a Cta', 'Total Facturado']);
    fila:=4;  
  // excel.range['g:h'].NumberFormat := '$#.##0,00';
     qventas.First; 
     while qventas.eof=false   do  
   begin        excel.Range['A'+inttostr(fila+3),'m'+inttostr(fila+3)].Value:=VarArrayOf([qventas.FieldByName('fecha').value,qventas.FieldByName('tipolibroiva').value, qventas.FieldByName('Numero').value, qventas.FieldByName('apynombre').value,qventas.FieldByName('CUIT').value, qventas.FieldByName('Calc_netograbado').value,qventas.FieldByName('pocimpuesto').value,qventas.Field  ByName('calc_ivafact').value, qventas.FieldByName('noinscripto').value, qventas.FieldByName('ConcepNoGrab').value,qventas.FieldByName('exenta').value, qventas.FieldByName('pagoacuenta').value, qventas.FieldByName('calc_total').value ]);


     fila:=fila+1;
     qventas.Next;
    end;
  qventas.EnableControls;
  excel.Range['a3'].Select;
  excel.Selection.AutoFilter;
  excel.range['a:z'].Columns.AutoFit;

el error lo tengo en los valores que asume la variable fila, los cuales son absurdos ya que toma primero un valor de 256 todas las veces que se ejecuta dentro del while aunque a veces toma un numero 32 mil y algo, al query lo tengo asociado a dbgrid de los componentes suipack
y en el evento de qventas oncalcfields que es un query de zeos :

Código Delphi [-]
procedure Tflibrosiva.qventasCalcFields(DataSet: TDataSet);
var cadena:string;
begin cadena:=StringOfChar('0', 4-Length(qventas.fieldbyname('puntoventa').asstring))+qventas.fieldbyname('puntoventa').asstring;
cadena:=cadena +'-'+ stringofchar('0',8-Length(qventas.fieldbyname('NumComprobante').asstring))+qventas.fieldbyname('NumComprobante').asstri  ng;
qventas.FieldByName('noinscripto').value:=0;
qventas.FieldByName('numero').value:=cadena;
if (qventas.Fieldbyname('idcomprobante').value=9) or (qventas.FieldByName('idcomprobante').value=11) then begin   qventas.FieldByName('calc_netograbado').Value:= qventas.fieldbyname('trenglon').Value*-1;
  qventas.FieldByName('calc_ivafact').Value:=qventas.fieldbyname('trengloiva').Value*-1;
  qventas.FieldByName('calc_total').value:= (qventas.fieldbyname('trenglon').Value*-1)+(qventas.fieldbyname('trengloiva').Value*-1);
  end else begin       qventas.FieldByName('calc_netograbado').Value:= qventas.fieldbyname('trenglon').Value;
      qventas.FieldByName('calc_ivafact').Value:=qventas.fieldbyname('trengloiva').Value;
      qventas.FieldByName('calc_total').value:= (qventas.fieldbyname('trenglon').Value)+(qventas.fieldbyname('trengloiva').Value);
      end;

end;
yo culpo a los campos calculados puede que no sea ahi el problema pero delphi se comporta de una manera extraña, ya rebice varias veces el codigo y no encuentro ningun error.

alguna idea?

gracias de Antemano.

Última edición por smessina fecha: 15-03-2008 a las 21:01:31. Razón: no aparecen bin tabulados
Responder Con Cita
  #2  
Antiguo 15-03-2008
smessina smessina is offline
Miembro
 
Registrado: ene 2006
Posts: 51
Poder: 19
smessina Va por buen camino
si no se entiende bien vuelvo a subirlo pero cuando haces una vista previa al subir el post en el foro se descompagina todo.

cualquier cosa me avisan
Responder Con Cita
  #3  
Antiguo 15-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
El evento OncalcFields se produce frecuentemente, cuando un campo cambia su valor. Si dentro de OncalcFields modificas el valor de otros campos, hará que se vuelva a ejecutar otra vez más. Creo que por ahí tiene el problema, aunque si llega a la fila 32.000, significará que el query tiene 31.996 registros.

No tendrás ese query en relación Maestro-detalle con otro query o tabla ¿no?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 16-03-2008
smessina smessina is offline
Miembro
 
Registrado: ene 2006
Posts: 51
Poder: 19
smessina Va por buen camino
gracias por responder

Gracias por contestar:
no es que llegue a la fila 32.000 es mas el query tiene a lo sumo 30 registros
la variable fila se debe ir incrementando de uno en uno empezando de 4 para ir escribiendo una linea debajo de la otra en el libro de exxcel, eso no sucede porque la variable fila asume valores no previstos y por lo tanto no empieza a escribir el la fila 4 del excel sino que me registra en la fila 260 del libro de excel todos los registros uno sobre otro, esto lo se porque puse un showmessage('Valor de linea :' + inttostr(linea)); para monitorear que valores asume.

no se si el problema viene de los campos calculados, o si se trata de un bugs de delphi que se solucione con algun parche o algo parecido, o yo estare haciendo alguna tontera.

y el query esta aislado no tiene relacion con otro query o tabla.

lo que si tengo mas de un campo calculado que cambios sus valores en el oncalcfield.

Última edición por smessina fecha: 16-03-2008 a las 00:39:00. Razón: me falto agregar
Responder Con Cita
  #5  
Antiguo 16-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
No es fallo de delphi, ya encontré donde está el error:
Código Delphi [-]
excel.Range['A'+inttostr(fila+3),'m'+inttostr(fila+3)]

cuando eso se ejecuta, la cosa queda así en tiempo de ejecución:
Código Delphi [-]
excel.Range[A7,m7]
pero eso no está entre comillas !! quizás esté calculando el código ascii de la letra "A" y lo multiplique por siete, y lo mismo con la "m", después de todo, a saber el valor que interpreta realmente.

Tú esperas que quedara así:
Código Delphi [-]
excel.Range['A7','m7']
y para conseguirlo, el código debe ser (bueno un ejemplo de cómo lo haría yo)
Código Delphi [-]
function GetCelda(letra:char; fila:integer):string;
begin
   Result := QuotedStr(letra + inttostr(fila));
end;

excel.Range[GetCelda('A',fila + 3),
            GetCelda('m', fila + 3) ]

El truco: QuotedStr.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 16-03-2008 a las 13:20:59.
Responder Con Cita
  #6  
Antiguo 18-03-2008
smessina smessina is offline
Miembro
 
Registrado: ene 2006
Posts: 51
Poder: 19
smessina Va por buen camino
Gracias por Contestar y perdon por la demora,
estuve viendo lo que me dijiste y no esta por ahi el error, ya que
esto mismo lo tengo funcionando en otras exportaciones a excell y me funciona bien, y cuando le paso el rango con las "" (quotas) me da un error de oleXXXXXX no me acuerdo cuanto.

Voy a tratar reinstalando Delphi, porque a demas me estan saliendo otros errores un poco raros y ya ando medio perdido con todo esto.

Muchas gracias por tu atencion Lepe y despues te cuento como fue y si no se soluciona reinstalando vamos a seguir buscando.

Gracias y un Abrazo
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
Comportamiento extraño en StringList MaMu Varios 7 19-06-2007 19:07:07
Un comportamiento extraño en delphi... uper Varios 1 07-08-2004 00:44:14
Comportamiento extraño de Delphi walrus Varios 3 05-08-2004 10:04:32
Comportamiento extraño dataModule brandolin OOP 9 08-07-2004 14:25:47
Comportamiento extraño de cds con dbExpress mosorio Varios 0 01-09-2003 17:11:38


La franja horaria es GMT +2. Ahora son las 00:47:40.


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