Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mi programa de facturación paso a paso (https://www.clubdelphi.com/foros/showthread.php?t=36433)

Delphitest 31-10-2006 17:47:17

No hay forma humana de seguir con esto, cada hora que pasa estoy mas perdido, me llegan errores por todos los lados y ya no se por donde tirar.

Pese al esfuerzo de ayer que hizo Ena0 que dedico parte de la tarde en echarme una mano no hay forma de conseguir calcular el total de los importes.

Os cuento exactamente lo que me pasa para ver si alguien fuese tan amable de ayudarme.

Sigo atascado en el FAlbaran, el tema es que necesito meter la suma del campo ImporteLineal (de DesgloseAlbaran) en el campo Base (tabla Albaranes).

Con este código consigo que se sume y lo lleve a la pantalla, que no es poco, pero me da un error en cuanto uso "SUM" despues de select. (Para no liarme de momento todo esto está en el evento click del Button2, ya lo cambiare cuando funcione).

Código Delphi [-]
procedure TFAlbaranes.Button2Click(Sender: TObject);
var
b : double;
begin
//Cierro la consulta
  ADOQAlbaran.Close;
// Selecciono la suma del campo ImporteLineal y lo vuelco a BaseImp
  ADOQAlbaran.Sql.add ('Select sum([Desglose_Albaran].ImporteLineal) AS BaseImp');
// en la tabla Desglose_albaran
  ADOQAlbaran.Sql.add ('From Desglose_Albaran');
// Solo los que coincidan con el nº albaran 8
  ADOQAlbaran.Sql.add ('Where Num_Albaran = 8');
// Abro la consulta
  ADOQAlbaran.Open;
// Asigno el valor de la suma a la variable B
  B:= ADOQAlbaran.FieldByName ('BaseImp').asFloat;
// Muestro un mensaje con el total
  ShowMessage('El importe total es ' + FloatToStr(B));
end;


He hecho pruebas quitandolo y deja de darlo, pero claro, no suma nada. El error que da es:

http://cjoint.com/data/kFrMbPX0o5.htm


Aqui os subo todo actualizado pero con ese error

Gracias a los que podais echarme una mano, no pienso tirar la toalla pero la verdad es que cuando se queda uno así sin saber por donde continuar es un poco duro. :o

kalimero 31-10-2006 18:07:17

Hola Delphitest.
dices:
"Con este código consigo que se sume y lo lleve a la pantalla, que no es poco, pero me da un error en cuanto uso "SUM" despues de select."

¿Podrias explicarte un poco mejor?. No entiendo a que te refieres

Saludos

Lepe 31-10-2006 18:09:21

Robert01

También puedes hacerlo así:
Esto en el Oncreate de la forma:
Código Delphi [-]
 Query1.sql.Text:= 'Select apellido from clientes where apellido like :Ape'  ;
 Query1.Prepare;

Ahora en el Edit, en su evento OnkeyDown:
Código Delphi [-]
if key = vk_return then // al pulsar la tecla intro en el edit, hacemos la busqueda
begin
  Query1.Close;
  query1.Parambyname('Ape').AsString:= '%'+ Edit1.text + '%';
  query1.Open;
end;

Saludos

Delphitest 31-10-2006 18:22:10

Cita:

¿Podrias explicarte un poco mejor?. No entiendo a que te refieres
Perdona, tengo tantos códigos en la cabeza que ya no consigo ni explicar las cosas :o

La verdad es que lo mejor es probarlo para verlo, pero a falta de eso:

Este codigo está asignado a un "botton2" dentro del Form FAlbaran de tal manera que al pulsarlo debería sumar todos los importes de las lineas del albaran en que este el cursor en ese momento (el que este en pantalla vamos), yo para no complicarlo he puesto que sume las lineas del albaran 8, ya habrá tiempo de mejorar ese punto.

Existe un campo calculado que se llama Importe pero lo que hago es pasar todos esos datos a medida que se calculan en cada linea a un campo "ImporteLineal" que realemente existe en la tabla DesgloseAlbaran para que se grabe y quede ahi puesto.

He añadido al Form un ADOQuery para realizar esta consulta. Pero tengo un problema con lo de la suma.

la palabra "SUM" sería la apropiada para sumar estos campo, pero resulta que si la uso aparece el error que os puesto antes, pero tras el error si continuo con la ejecución aparece el mensaje que he puesto con showmessage y ese valor que muestra es la suma bien hecha. Por lo tanto no entiendo porque me da el error pero luego lo hace bien. Si no pongo SUM logicamente no me suma nada pero al menos no da el error por eso intuyo que sale de ahí

espero haberme explicado

kalimero 31-10-2006 18:38:45

Prueba con esto:
Código Delphi [-]
var
sSQL:String;
begin
ADOQAlbaran.Close;
a := StrToInt(DBEdit1.Text);
sSQL:= 'SELECT Sum(Desglose_Albaran.ImporteLineal) AS campo ' +
         'FROM Desglose_Albaran' +
         'Where Num_Albaran = a';
  ADOQAlbaran.SQL.Text := sSQL;
  ADOQAlbaran.open;
end
Asi, ami me funciona que es tal y como yo lo suelo hacer .
Saludos

Delphitest 31-10-2006 18:56:34

Gracias Kalimero, creo que yo necesito tratamiento psicologico, esto es increible.

Mira que error me aparece con ese codigo, lo único que he añadido es la variable a como integer pq sino no arrancaba.

http://cjoint.com/data/kFs2vhihPl.htm


El codigo es este:

Código Delphi [-]
procedure TFAlbaranes.Button2Click(Sender: TObject);
var
sSQL:String;
a: integer;
begin
  ADOQAlbaran.Close;
  a := StrToInt(DBEdit1.Text);
  sSQL:= 'SELECT Sum(Desglose_Albaran.ImporteLineal) AS campo ' +
         'FROM Desglose_Albaran' +
         'Where Num_Albaran = a';
  ADOQAlbaran.SQL.Text := sSQL;
  ADOQAlbaran.Open;
end;

ya no se que hago mal ....

Caral 31-10-2006 19:05:12

Hola Delphitest
No as visto el programa que te envie hace 3 dias ?:
http://rapidshare.com/files/934431/Projects.zip.html
En este suma y hace lo que necesitas, si no, por lo menos te da una idea, he visto el avance del programa y la base de datos esta incompleta, aun asi me parece que te estas liando, es realmente facil sumar y ponerlo donde quieres, revisa el codigo que te envie.
Saludos

Delphitest 31-10-2006 19:09:05

Lo he intentado probar Caral pero me da error diciendo que no es un valor decimal y no me lo suma tampoco, en algo me estoy perdiendo pero no se donde vaya desesperacion.

Caral 31-10-2006 19:17:13

Se puede saber que estais haciendo, ese codigo jamas va a funcionar.
Que alguien me explique.
Saludos

Caral 31-10-2006 19:37:43

Hola Delphitest
Paso a paso:
1-Coloca un query en el form y lo llamas ADOQAlbaran, en el string del query pones esto tal y como esta, copialo y pegalo:
Código SQL [-]
SELECT DISTINCTROW Sum([Desglose_Albaran].[Importe]) AS [Importe]
FROM Desglose_Albaran
Dale dobleclick al query y dale add
en la pantallita que te sale, saldra un nombre Importe, traetelo con el mouse y colocalo en el form, te aparecera un datasource, el dbedit seguro que es 25como se ve en mi programa.
2-En el boton que tienes pones esto:
Código Delphi [-]
 ADOQAlbaran.Close;
   ADOQAlbaran.SQL.Add('WHERE Desglose_Albaran.Num_Albaran = '+DBEdit22.Text+'');
   ADOQAlbaran.Open;
   Button2.Visible:= False;
   DBEdit24.Text:= DBEdit25.Text;
En el dbedit que pusiste antes te saldra el resultado de la suma.
Con esto ya tienes el resultado del importe, osea sumara lo que este en el dbgrid, dependiendo del albaran.
Si tienes alguna duda me dices.
Saludos

Delphitest 31-10-2006 19:58:16

Efectivamente Maestro, ya lo suma :)

He tenido que cambiar Importe por ImporteLineal despues de SUM pero ya va.

Ahor atengo que adaptarlo al resto, veo que si le doy 2 veces seguidas da fallos, pero ya es un gran paso.

Debo hacer que ese cálculo se haga de forma automatica sin pulsar botones, por ejemplo siempre que haya algun cambio en el DBGrid, sea añadir lineas o quitarlas, supongo que habrá algun evento para esto.

Muchas gracias por tu colaboración, ya arranco de nuevo con los siguientes pasos. Mañana festivo, descanso que no viene mal.

Caral 31-10-2006 20:10:48

Hola
Los dbtex que usas para iva, descuento y total cambialos por dbedit, son mas practicos y te ayudaran a hacer la suma.
Con respecto a que lo haga automatico no te lo aconsejo, en la practica veras el porque, yo lo uso asi.
Si, da un error si lo quieres calcular dos veces seguidas, es porque se suma un reporte sobre otro, hay formas de evitarlo lo que pasa es que no te he querido liar mucho, me parece que lo que necesitas es avanzar y luego ya tendremos oportunidad de mejorar el codigo, cuando no se avanza la verdad uno se desespera, no se si a ti te pasa, pero a mi me mata, cuando algo no sale bien mejor a por otra y luego vuelvo.
Lo de maestro te lo agradezco, pero soy tan novato como tu, lo que llevo en esto de la programacion no son ni 4 meses.
Saludos

Caral 03-11-2006 16:59:16

Hola a los que siguen este :D
Que paso con Delphitest :rolleyes: , se dio unas vacaciones sin permiso :confused: , se canso de este tedioso lenguaje :confused: o se cambio de club :D
Ya me tiene preocupado :D , eso si cuando regrese seguro tendra por lo menos cuatro formularios mas y a que nos sorprende.:D
A ver si da señales de vida:D
Saludos

Robert01 03-11-2006 18:41:29

Hola caral

a ver si me podés ayudar un poquito.
¿como hago para insertar las fotos en una base de datos paradox? Yo uso delphi 6 y con la utilidad de borland database desktop no me sale, o no entiendo como es.

Además probé el código de delphitest con base de datos paradox y tengo errores con la tabla desgloseAlbaranes, con el campo calculado Importe lineal que puso delphitest para ser más precisos.

saludos

Delphitest 03-11-2006 18:58:19

Muy buenas tardes a tod@s,

siento haber desaparecido durante estos días, pero ya tenía que descansar un poco.

El tema ha sido lo del famoso cálculo de la base imponible, pese a que el código de Caral funcionaba, no me convencía del todo por los errores que saltaban con frecuencia y ademas quería algo automatico, sin tener que pulsar nada.

Al final como era de esperar lo he conseguido con un apaño como este:

Código Delphi [-]
var
  valor: String;
  t: Currency;
  tr,i: integer;
begin
  i:=0;
  t:=0;
  dtmgesatrans.TDesgloseAlbaran.Refresh;
  dtmgesatrans.TAlbaranes.Refresh;
  DTMGesatrans.TDesgloseAlbaran.First;
  tr:= DTMGesatrans.TDesgloseAlbaran.RecordCount;
  if (tr <> 0) then
    begin
      repeat
        i:=i+1;
        valor:= dbgrid1.Fields[9].AsString;
        DTMGesatrans.TdesgloseAlbaran.Next;
        t:= t + strtofloat (valor);
      until i=tr;
        DTMGesatrans.TAlbaranes.Edit;
        DBEdit24.Text := floattostr(t);
        DTMGesatrans.TAlbaranes.Post;
        DTMGesatrans.TDesgloseAlbaran.First;
    end
  else
    showmessage('Este albarán no tiene lineas')
end;

supongo que se entiende bien. Lo que hago es ir sumando el importe lineal linea a linea, teniendo en cuenta que hay pocas casi ni se nota.

Ahora que ya tengo esto sigo para adelante.

Tengo que hacer los presupuestos y las facturas que son casi identicos a los albaranes, supongo que podré copiarlos o algo parecido. Ya probaré pero si hay algun truco y me lo quereis decir pues eso que adelanto.

Ya estan las bases de datos creadas, solo faltan los form y unit.

Robert, revisa lo que hago en FRepartidores por si te puede servir. Ahí añado fotografías a la ficha con un sistema muy sencillo.

Caral, ¿ya pensabas que había tirado la toalla? :p jejejeje

ha sido un bache en el camino y supongo que vendrán mas, pero mientras me pueda levantar no hay problema :)

Aqui os dejo lo nuevo

Buen fin de semana a todos

Caral 03-11-2006 19:03:30

Hola Robert01
Estuve viendo el database desktop y en paradox al igual que en access hay un campo memo, en este campo es en el que yo guardo las fotos, creo que no deberias tener problemas en guardarlas tu tampoco, de todos modos no conozco mucho de paradox.
Con respecto al campo calculado de nuestro amigo, efectivamente da error, el ultimo envio que hice, ya hace el calculo bien, revisalo.
No se como va tu proyecto, seria bueno verlo, tal vez pueda darte una mano, pero necesito el archivo conpleto con la base de datos para enterarme.
Por lo menos tu y yo trabajamos con delphi 6 y esto crea menos conflictos de codigo.
Es importante para mi enterarme del procedimiento matematico que se quiere realizar, me refiero a saber que campo hay que sumar, restar u otro y en donde se quiere el resultado final, si solo mostrarlo o grabarlo en alguna tabla, he insistido en esto ya que no se con exactitud que se quiere hacer.
Saludos

Caral 03-11-2006 19:11:18

Hola Delphitest
Bien venido al juego de nuevo :D ,si ya me extrañaba que tanto entusiasmo inicial se fuera por la borda, claro no serias el primero.:D
Me alegro que modifiques mi pobre código, a que aprendo algún día.:)
Saludos

Delphitest 03-11-2006 19:14:34

Por cierto , no recuerdo quien me facilito un código para el tema de no tener problemas con la base de datos, pues no se que hago mal pero como la base de datos no esté en mismo sitio que la tengo originalmente no hay forma de que funcione.

Caral 03-11-2006 19:19:55

Ya te pasare un codigo para que la tengas donde quieras, incluso en otro ordenador como la tengo yo, pero no hemos ni comenzado, asi que paciencia.:D , que ya te llegara, es realmente facil de hacer.
Te anticipo que lo hago con un archivo .INI, que es el que localiza la base de datos, pero bueno, te vas de farra tres dias y cuando vuelves lo quieres resulto, pues a trabajar amigo.:D
Saludos

Caral 03-11-2006 21:37:58

Hola Delphitest
Lo prometido es deuda.:D
Aqui tienes, con esto puedes poner la base de datos donde quieras, en cualquier directorio.
Hay un archivo tipo ini, que se llama DBDWORK, habrelo para que entiendas, repito la base de datos puede estar en cualquier directorio u ordenador, solo cabias la direccion en este archivo y ya, lo importante es que el ejecutable y el archivo DBDWORK.INI esten en el mismo directorio ya que la direccion la saca de este.
Te envio un archivo leeme, Leelo.
Ademas para entretenerme un poco te hice un login, creando en la tabla un campo usuarios, asi el que no sabe la clave no entra en tu programa, a nivel empresa, esto es muy importante, bueno, es un regalo, por tus vacaciones y la marcha.
Revisa los cambios y el archivo, te va a gustar.:D
Por lo otro vas muy bien
Aqui te dejo el cambio:
http://rapidshare.com/files/1857508/Gesatrans.zip.html
Saludos


La franja horaria es GMT +2. Ahora son las 10:11:49.

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