PDA

Ver la Versión Completa : Mi programa de facturación paso a paso


Delphitest
11-10-2006, 18:10:18
Bueno, pues tras mis breves preguntas de ayer acerca de como y por donde empezar la programación de una aplicación de facturación, he decidido empezar cuanto antes con el Dephi 7.

Antes de nada quiero agradecer a las personas que me han echado una mano con las dudas iniciales y me han animado a empezar con esta dura tarea.

Con el permiso del moderador del foro me gustaría abrir este hilo con ánimo de ir comentando mis progresos y dudas que irán surgiendo a lo largo de este proyecto. Lo he colocado en Varios, espero que sea el sitio correcto.

Antes de empezar con la programación he pensado que me vendría bien hacer un pequeño "esquema" de lo que quiero, y así lo he hecho. Ya tengo mas o menos claro los menús que necesito y los datos que tengo que mover.

Desde luego que información no falta en internet, ya me he puesto con manuales que me habeis recomendado y he realizado muchas busquedas desde Google para intentar solucionar una dudas iniciales sin tener que molestar demasiado a los foreros.

El resultado ?? pues ya tengo el menú principal creado con las opciones dentro de cada uno. Ya se que sobre la marcha es posible que me toque cambiarlas pero siempre tiene que haber un principio. He empezado por algo muy sencillo y ademas, que quede entre nosotros, la he cagado ya dos veces y me ha tocado empezar de nuevo, pero bueno, la tercera vez que he tenido que crear el menú ya lo hacia casi sin tener que pensar :)

Ya tengo mi primera duda, y no penseis que no he buscado antes de preguntar. He visto que a través de esto (no se si se llama orden o función):

if MessageDlg('¿ Seguro que desea salir del programa ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then


consigo que al pulsar sobre el botón de salir me aparezca un recuadro de confirmación, lo cual es una muy buena opción que quiero incorporar.

Problema; que aparece Yes y No en lugar de aparecer en castellano. He visto en este foro comentarios acerca de este problema y según veo tendría que meter unos recursos de idioma, supongo que seran una librerías o algo parecido. Mi duda es que no se de donde sacar esos recursos, he recurrido a una página de argentina que ponía un forero y buscado en google pero no doy con ello.

¿Me podría poner alguien un link o algun tipo de información que me ayude a conseguirlos?

Gracias a todos por adelantado, espero que mi experiencia tambien sirva a otras personas y puedan sacarle provecho.

Me gustaría ir subiendo los archivos de lo que hago a medida que avance para que los aproveche quien los necesite o los critique quien lo vea conveniente, ¿puedo hacerlo en .zip por ej o recargaría demasiado el foro?

Un abrazo.

Caral
11-10-2006, 18:29:04
Hola
En Español:

MessageBox(Handle,
PChar('¿ Seguro que desea salir del programa ?'),
PChar(''),
MB_OKCANCEL + MB_DEFBUTTON1 + MB_APPLMODAL);
Por lo menos a mi me sale asi, no se si tendra que ver que uso XP en Español.
Saludos

dec
11-10-2006, 18:38:23
Hola,

Un enlace con los recursos traducidos (http://dec.clubdelphi.com/delphi/recursos-bds-delphi-esp.zip) e instrucciones de instalación.

Respecto de lo de subir archivos... por el momento, si no ocupan más de 30 KB comprimidos (no creas, cabe mucho en 30 KB comprimidos) puedes adjuntarlos a cualquiera de tus mensajes en los Foros.

Si ocupan más podrías utilizar algún servicio similar a RapidShare.de (http://rapidshare.de/) y subir los archivos allí y proporcionarnos la URL que ellos te proporcionen a ti.


Por lo menos a mi me sale asi, no se si tendra que ver que uso XP en Español.
Saludos


De la manera en que tú lo haces, efectivamente, parece que se cogen los recursos del propio sistema y se muestran los botones conforme a estos.

Caral
11-10-2006, 18:43:49
La verdad Dec es que soy un perezoso y uso un programa para hacer estos mensajes, los hace muy rapido y con valores de retorno si quiero, If , Case Of etc... esta practico para el principiante como yo va bien.
Saludos

dec
11-10-2006, 18:50:02
Hola,

¿Cuál usas? ¿El que viene con las herramientas de GExperts (http://www.gexperts.org/)?

Ñuño Martínez
11-10-2006, 18:54:15
Bueno, pues tras mis breves preguntas de ayer acerca de como y por donde empezar la programación de una aplicación de facturación, he decidido empezar cuanto antes con el Dephi 7.

No es por malmeter pero, ¿por qué no has empezado con Turbo Delphi (http://www.turboexplorer.com/), que es bastante más barato? Por lo que sé es muy similar al Delphi "de toda la vida" (fijate que ni nombro Lázarus para evitar liarte más ;) ). En fin, suerte.

Antes de empezar con la programación he pensado que me vendría bien hacer un pequeño "esquema" de lo que quiero, y así lo he hecho. Ya tengo mas o menos claro los menús que necesito y los datos que tengo que mover.

Una magnífica idea que la mayora parte de los programadores olvidamos. Y un consejito: haz también diagramas de flujo (http://es.wikipedia.org/wiki/Diagrama_de_Flujo). Te diría que los hicieras todos ya, antes de empezar a codificar, pero como los programadores somos impacientes por naturaleza, te pediré que los hagas cuando no tengas claro qué hacer.

Lo ideal sería hacer un diagrama de flujo por procedimiento, función o método. Cuando hagas el diagrama no vayas al detalle, en vez de eso haz un diagrama general aunque no sepas cómo hacer todo. Luego, haz otro diagrama de flujo por cada parte del diagrama que no sepas como hacerlo diréctamente.

¡Ah! Y haz los diagramas en papel y con un bolígrafo o lapicero, nunca con un programa de dibujo: es mucho mejor. Lo digo por experiencia.

Ya tengo mi primera duda (...) (no se si se llama orden o función):

if MessageDlg('¿ Seguro que desea salir del programa ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then


Deberías aprender a usar las etiquetas [code] y . Así, el trozo de código que has puesto se verá:
[delphi]
if MessageDlg('¿ Seguro que desea salir del programa ?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then

Y esto es una sentencia, llamada condicional que incluye una función cuyo nombre es MessageDlg...


Me gustaría ir subiendo los archivos de lo que hago a medida que avance para que los aproveche quien los necesite o los critique quien lo vea conveniente, ¿puedo hacerlo en .zip por ej o recargaría demasiado el foro?

No subas código, a menos que sea para ilustrar una pregunta. Si alguien quiere verlo que lo pida y se lo envías por correo. Creo que es la mejor solución.

Caral
11-10-2006, 19:04:34
No Dec. El de GExprert lo tengo tambien, en una consulta me lo indico Roman, pero me resulta mas engorroso, no se la verdad talvez no le he puesto cuidado.
El que uso se llama Constructor es muy pequeño y facil de usar.
Saludos

Delphitest
11-10-2006, 19:07:50
Perfecto Dec,

Ya lo he descargado y seguido los pasos, funciona a la perfección, ya aparecen los textos en español.

Acabo de preparar el ZIP con lo que tengo hecho, me ha costado enterarme de que archivos tenía que comprimir, por lo que veo el que mas ocupa lo genera de nuevo Delphi al abrir el proyecto por lo tanto no es necesario incluirlo.

Iba a subirlo pero por lo que comenta Nuño es mejor no hacerlo, lo que veais, no tiene ningún secreto, cuando empiece a tener algun dato que quiera ocultar procuraré omitirlo en los ficheros que suba.

Bueno, lo tengo preparado, si hay que subirlo se sube y sino el que lo quiera que me lo pida.

Gracias por vuestra ayuda, mañana empiezo con las fichas de los clientes, ya estoy temblando :o

Delphitest
11-10-2006, 19:26:35
Iba a subir un pantallazo pero casi me cuesta menos meter todo los archivos en un .zip, visto que por ahora no tiene mucho que ver os lo adjunto a este mensaje por si quereis echarle un vistazo y decirme si voy por buen camino o ya empiezo a cojear en algo.

Lo he llamado Gesatrans (Gestion agencia de transporte)

Por ahora solo tiene un menu con la opciones que he visto suficiente y únicamente funcionan las opciones Salir de gesatrans.... (Ficheros) y Calculadora (Herramientas)

El próximo objetivo como digo por encima es la opción clientes, seguro que esta va para largo ...

Caral
11-10-2006, 19:53:00
Hola
Quieres un pedacito de codigo para mantenimiento de Clientes ?
Bueno este vas a tener que modificarlo, pero te serviria de ejemplo.
Saludos

Delphitest
11-10-2006, 20:12:28
Por supuesto :)

todo me puede venir bien.

Ya ando estudiando el tema de las bases de datos y por ahora empiezo con Paradox, espero que no sea mala elección.

Por hoy lo dejo ya, no se cuantas horas llevo entre tutoriales, trucos, ejemplos ... :)

Aunque mis primeras lecciones han cundido mas de lo que yo contaba, ya veremos cuando se empiece esto a complicar.

Buenas noches a todos

Caral
11-10-2006, 21:04:46
Bueno este es hecho con conexion ado y motor Access (de 1 Hp).:D
Este es el codigo, ya se que es pequeño pero por algo hay que empezar:

unit UFClientes;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UDM1, ExtCtrls, StdCtrls, Mask, DBCtrls, ComCtrls, DB, ADODB,
Buttons;

type
TFClientes = class(TForm)
TClientes: TADOTable;
TClientesCodCliente: TIntegerField;
TClientesNombreCliente: TWideStringField;
TClientesDireccion1: TWideStringField;
TClientesDireccion2: TWideStringField;
TClientesPais: TWideStringField;
TClientesProvincia: TWideStringField;
TClientesCanton: TWideStringField;
TClientesApartado: TWideStringField;
TClientesContacto: TWideStringField;
TClientesTelefono: TWideStringField;
TClientesExtencion: TWideStringField;
TClientesFax: TWideStringField;
TClientesEmail: TWideStringField;
TClientesNoEnvEmail: TBooleanField;
TClientesTerminos: TWideStringField;
TClientesVendedor: TWideStringField;
TClientesSuspendido: TBooleanField;
TClientesExcento: TBooleanField;
TClientesFechaIngreso: TDateTimeField;
TClientesLimiteCredito: TFloatField;
TClientesNotas: TMemoField;
DSClientes: TDataSource;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Label1: TLabel;
Panel1: TPanel;
DBEdit2: TDBEdit;
Label2: TLabel;
Label3: TLabel;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
Label5: TLabel;
DBEdit5: TDBEdit;
Label6: TLabel;
DBEdit6: TDBEdit;
TClientesDistrito: TWideStringField;
Label7: TLabel;
DBEdit7: TDBEdit;
Label8: TLabel;
DBEdit8: TDBEdit;
Panel2: TPanel;
Label4: TLabel;
DBEdit9: TDBEdit;
Label9: TLabel;
DBEdit10: TDBEdit;
Label10: TLabel;
DBEdit11: TDBEdit;
Label11: TLabel;
DBEdit12: TDBEdit;
Label12: TLabel;
DBEdit13: TDBEdit;
Panel3: TPanel;
Label13: TLabel;
DBEdit14: TDBEdit;
Label14: TLabel;
DBLookupComboBox1: TDBLookupComboBox;
TUsuarios: TADOTable;
DSUsuarios: TDataSource;
Label16: TLabel;
Panel4: TPanel;
DBCheckBox1: TDBCheckBox;
DBCheckBox2: TDBCheckBox;
DBCheckBox3: TDBCheckBox;
Panel5: TPanel;
DBMemo1: TDBMemo;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
QTemp: TADOQuery;
DBText1: TDBText;
Label15: TLabel;
BitBtn3: TBitBtn;
TClientesCatPrecio: TWordField;
Label17: TLabel;
DBComboBox1: TDBComboBox;
TClientesDiasCredito: TSmallintField;
Label18: TLabel;
Panel6: TPanel;
Label20: TLabel;
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
DBEdit15: TDBEdit;
Label21: TLabel;
Label19: TLabel;
DBEdit1: TDBEdit;
BitBtn4: TBitBtn;
Edit3: TEdit;
Label22: TLabel;
DBEdit16: TDBEdit;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure TClientesAfterInsert(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Edit2Exit(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Edit3Exit(Sender: TObject);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure DBEdit2Change(Sender: TObject);
procedure DBEdit16Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FClientes: TFClientes;

implementation

uses UFBuscaCliente;

{$R *.dfm}

procedure TFClientes.BitBtn1Click(Sender: TObject);
begin
If (TClientes.State = dsEdit) or (TClientes.State = dsInsert) then
DBEdit16.Text := DateToStr(now);
TClientes.Post;
Close;
end;

procedure TFClientes.BitBtn2Click(Sender: TObject);
begin
Close;
end;

procedure TFClientes.TClientesAfterInsert(DataSet: TDataSet);
begin
QTemp.SQL.Text := 'Select Max(CodCliente) From Clientes';
QTemp.Active := true;
DBText1.Field.AsInteger := QTemp.Fields[0].AsInteger+1;
QTemp.Active :=False;
DBCheckBox1.Field.AsBoolean := False;
DBCheckBox2.Field.AsBoolean := False;
DBCheckBox3.Field.AsBoolean := False;
DBEdit15.Field.AsString := '0';
end;

procedure TFClientes.FormCreate(Sender: TObject);
begin
TClientes.Active := True;
TUsuarios.Active := True;
Panel6.Visible := False;
end;

procedure TFClientes.FormDestroy(Sender: TObject);
begin
TClientes.Active := False;
TUsuarios.Active := False;
end;

procedure TFClientes.BitBtn3Click(Sender: TObject);
begin
FBuscaCliente:=TFBuscaCliente.Create(self);
try
FBuscaCliente.ShowModal;
finally
If FBuscaCliente.Cod_Cliente <> '' then
TClientes.Locate('codcliente',QuotedStr(FBuscaCliente.Cod_Cliente),[]);
FBuscaCliente.Free;
end;
end;

procedure TFClientes.Edit2Exit(Sender: TObject);
begin
If Edit2.Text > '200000.00' then
begin
MessageBox(Handle,
PChar('Para Poner ese limite de Credito' + #13#10 +
'Necesita Autorizacion'),
PChar('Limite de Credito'),
MB_OK + MB_DEFBUTTON1 + MB_APPLMODAL);
Edit2.Text:= '0';
DBEdit15.Text := Edit2.Text;
end;
end;

procedure TFClientes.Button1Click(Sender: TObject);
begin
if Edit1.Text = 'carorl' then
begin
DBEdit15.ReadOnly := False;
DBEdit1.ReadOnly := False;
DBCheckBox1.Enabled := True;
end
else
Panel6.Visible := False;
Edit1.Text := '';
end;

procedure TFClientes.BitBtn4Click(Sender: TObject);
begin
Panel6.Visible := True;
end;

procedure TFClientes.Edit3Exit(Sender: TObject);
begin
MessageBox(Handle,
PChar('Para modificar los DIAS de Credito' + #13#10 +
' Necesita Autorizacion' + #13#10 +
' Deje Este Espacio en Blanco ' + #13#10 +
'Para Compras o Clientes de CONTADO'),
PChar('DIAS de Credito'),
MB_OK + MB_DEFBUTTON1 + MB_APPLMODAL);
Edit3.Text := '0';
end;

procedure TFClientes.DBNavigator1Click(Sender: TObject;
Button: TNavigateBtn);
begin
Edit2.Text:= DBEdit15.Text;
Edit3.Text:= DBEdit1.Text;
end;

procedure TFClientes.DBEdit2Change(Sender: TObject);
begin
Edit2.Text:= DBEdit15.Text;
Edit3.Text:= DBEdit1.Text;
end;

procedure TFClientes.DBEdit16Click(Sender: TObject);
begin
MessageBox(Handle,
PChar('NO Necesita colocar la Fecha ' + #13#10 +
' Se colocara automaticamente'),
PChar('MENSAJE'),
MB_OK + MB_DEFBUTTON1 + MB_APPLMODAL);
end;

end.
Por supuesto vas a tener que cambiar los nombres de las tablas etc. pero es una manera de ver un programa que hace lo que quieres.
Espero te sirva, es el principio, ya se .:D :D
Saludos

Delphitest
13-10-2006, 08:47:09
Muchas gracias Caral por facilitarme el código,

de momento me suena todo un poco a chino, lo que he hecho es copiarlo al bloc de notas e imprimirlo, asi voy aislando lo que voy entiendo y poniendo comentarios de lo que hace.

Ayer me lo tomé libre por el día festivo pero ya estoy de nuevo con ello. Parece que esto de las BD me va a costar un poco y ya temo llegar a la parte de las facturas pero no pierdo el animo.

Os mantendré informados sobre mi evolución

gracias de nuevo por vuestra ayuda.

Un saludo y que tengais buen día

Delphitest
13-10-2006, 13:08:14
Hola de nuevo Caral,

te importaría poner un pantallazo de la ficha de clientes, es para ver los objetos que hay en ella e intentar entender algo mejor el código.

por mi parte ya he hecho una ficha pero reconozco que me está costando entender alguna cosa.

Por ahora, os pongo lo que tengo.

He creado a través del Data Bases Desktop una tabla llamada clientes (no la ando subiendo pq es muy sencilla, si alguien la quiere que me la pida).

Como campos claves he puesto el código de cliente y el dni, el resto de datos son los tipicos ... solo un detalle para el campo código y es que lo he puesto para que se autoincremente (asi a parte de ser único se rellena solo)

No lo sabía pero sobre la marcha he visto que tengo que crear otro Form para la ficha del cliente, casi mejor asi lo tengo de forma independiente y quizas me sirva para otros programas. En lugar de Unit2 lo he renombrado a clientes, suena mejor ;)

Veo que no es demasiado dificil por ahora hacer lo "gordo" ya que hay objetos que simplifican las tareas, pero claro, en cuanto quiere uno hacer algo mas pues ya llegan las dudas.

Para la base de datos he tenido que insertar en el Form los compomentes Table y DataSource, parece que con eso ya se indica donde está la base de datos y el nombre de la tabla.

Despues para el diseño he recurrido a los "Data Controls" y a simples etiquetas de texto para las cabeceras de las lineas.

He insertado una historia muy cómoda que se encarga de todos los controles de la tabla (insertar, borrar ...) menudo ahorro de tiempo, pensaba que todo eso lo tenía que hacer a mano con botones independientes :)

Por cierto, este form lo muestro al pulsar la opción Ficheros/Clientes.

Ahora voy con alguna duda a ver si me podeis echar una mano:

- Por defecto todos los campos que he añadido con DBEdit son editables directamente sin hacer nada, eso tiene su peligro y ademas he visto que en los controles existe una flecha que supuestamente es para editar el registro. ¿Hay alguna forma de hacer que los campos no se dejen modificar mientras no pulse ese boton edit o es mejor dejarlo asi ?

- A la hora de crear la ficha inevitablemente he ido poniendo los campos a mi aire, lo que hace que ahora al rellenar la ficha siga el orden de creación y no el que aparece en la pantalla, o sea que salta de Nombre comercial a Codigo postal y cosas de esas, ¿para solucionarlo es necesario respetar el orden a la hora de crearlo o puedo cambiarlo ahora que ya está hecho?

En cuanto solucione esto paso a la siguiente fase, gracias a todos de nuevo.

Delphitest
13-10-2006, 15:47:47
La segunda duda ya está solucionada, he encontrado que pulsando en el Form de clientes con el boton derecho del ratón aparece una opción llamaba Tab Order y que permite indicar el orden de los campos a la hora de saltar con la tecla TAB.

un problema menos ...

Paoti
13-10-2006, 17:05:38
Hola Delphitest.



¡Adivina que!



Hay un sistemita en sourceforge, que es un punto de venta, creado con Delphi y firebird, lamentablemente no puedo ponderte el link, ya que tengo restringida esa página en mi trabajo.


pero entra en sourceforge.net busca "punto de venta" delphi.


y te tiene que treaer esa aplicación, con la cual la curva de aprendizaje que requieras va a ser menos.



Saludos del Paoti.

Caral
13-10-2006, 17:39:27
Hola
Vas bien, en realidad son los primeros pasos, pero poco a poco se llega.
Tienes una pantalla normal, el caso es que en esta puedes editar, insertar,borrar, etc. de la tabla clientes, ya que pusiste en el from un DBNavigator, bueno luego veras otras maneras de hacer lo mismo, por ahora continua con lo que tienes.
Hay que pensar en, que hara el que use la pantalla:
Bueno, al iniciarla se mostrara el primer cliente que pusiste.
? Que pasa si quieres buscar un cliente en especial, pues con las flechas del dbnavigator tendras que recorer la tabla hasta llegar al que buscas, solucion, hacer un flitro, sea por codido o nombre comercial, como ? asi:
El componente que enlaza tu tabla debe terner un nombre, puede ser table1 u otro, este es el nombre que vas a poner en este codigo:
Supongamos que el campo codigo es el DBEdit1, Bueno filtraremos por codigo los clientes asi:
En el evento OnChange del DBEdit1, pondras este codigo, con el nombre de la tabla que tienes, yo le he puesto table1:

var
Filtro : String;
begin
If (DBEdit1.Text <> '') then
begin
Table1.Filtered := False;
Filtro := 'Codigo Like '+DBEdit1.Text;
Table1.Filter := Filtro;
Table1.Filtered := True
end
else Table1.Filtered := False;
end;

Cada vez que cambies el numero de codigo, este filtrara la tabla y regresara los datos, esto mismo se puede hacer con el nombre comercial etc.
Con este paso solo trato de hacerte ver que el programa tiene que ofrecer varias alternativas de uso y que son realmente faciles de progamar.
Cuando quieras vamos a por otro, vas bien.:D
Saludos

Caral
13-10-2006, 17:53:40
Hola
Con respecto a esto:

Por defecto todos los campos que he añadido con DBEdit son editables directamente sin hacer nada, eso tiene su peligro y ademas he visto que en los controles existe una flecha que supuestamente es para editar el registro. ¿Hay alguna forma de hacer que los campos no se dejen modificar mientras no pulse ese boton edit o es mejor dejarlo asi ?

Cuando usas un DBNavegator esto sucede se pone en modo edicion en cuanto se toca un dbedit, no es conveniente, ya te esplicare como eliminar el dbnavegator, por ahora una a una.
Necesito saber que motor de base de datos usas y los nombres de los componentes que as puesto, asi te voy dando el dato correcto.
Prefiero que se pones la pntalla sea en modo diseño, he tratado de poner la mia pero es de 830k no se puede.
Saludos

Delphitest
13-10-2006, 18:37:22
Adjunto lo último y completo (con BD) para que veais por donde voy.

Ando buscando una alternativa para subir los archivos y poneros solo un link, mas que nada para no sobrecargar el foro (supongo que a muchos no les parecerá bien que ponga estas cosas tan sencillas), seguro que encuentro algo para la semana que viene en algun servidor.

Muchas gracias de nuevo a los que me estais auydando, asi da gusto ;)

Esto de la busqueda que indicas Caral había pensado poner un botón que me lleve a una ventana de buscar pero todavía busco la forma. He probado con lo que me pones y no consigo hacerlo funcionar, he sustituido el campo codigo por el del nombre comercial, no se si tendrá algo que ver la longitud y el tipo, el caso es que el error que da es que no encuentra la cadena que busca, pero si que está ...

La verdad es que hoy me duele un poco la cabeza, no veas las vueltas que le estoy dando :rolleyes: . Tengo varios codigos fuentes que me habeis estado pasando, tutoriales, articulos ... me sale humo del craneo.

Buen fin de semana a todos, a ver si mañana o el lunes estoy mas despejado y consigo avanzar :)

Delphitest
16-10-2006, 18:28:15
Buenas tardes a tod@s,

os cuento por donde voy en este momento.

En primer lugar para no ocupar espacio en el foro voy a subir los ficheros a través de rapidshare, lo ultimo que tengo hecho está aquí:

http://rapidshare.de/files/36976866/Gesatrans.zip.html (http://rapidshare.de/files/36976866/Gesatrans.zip.html)

- He añadido un campo F_Pago a la base de datos, se me había pasado y creo que lo voy a necesitar. Para mostrarlo en el Form he utilizado el DBComboBox que parecía el mas apropiado.

- Recorriendo foros y articulos he encontrado la forma (muy sencilla por cierto) para que el usuario no pueda cambiar el tamaño de la ventana, solo lo he aplicado a Clientes añadiendo este código en el evento OnCreate:


procedure TForm2.FormCreate(Sender: TObject);
begin
Constraints.Minheight := Height;
Constraints.Maxheight := Height;
Constraints.Minwidth := Width;
Constraints.Maxwidth := Width;
end;


- Por otra parte, y esto es lo que me está empezando a traer de cabeza, necesito un sistema sencillo pero completo de busqueda que me permita localizar un cliente por su razon social o nombre comercial, pero con algo que haga la comprobación de "contiene" sin necesidad de que coincida al 100% con el contenido del campo. Solo he conseguido de forma muy sencilla buscar a traves del código de cliente, que resulta ser el campo clave de la BD, ha sido con esto creando un botón y metiendo este código en el evento onClick:


procedure TForm2.BitBtn1Click(Sender: TObject);
var Buscar:Integer;
begin
Buscar:=strtoint(inputbox('Buscar Cliente','Indique el código de cliente','1'));
if Not Table1.FindKey([Buscar]) then
messagedlg('Código inexistente',mtConfirmation,[mbok],0);
end;


¿Se os ocurre algo para lo que necesito de la busqueda ?
(si se resolviese dentro de este mismo form sería lo mejor ;) )

Hasta aquí he dado de sí hoy, por cierto Caral, he probado lo que ponías par buscar pero no hay manera, no lo hago funcionar y me da errores que no consigo solucionar.

Hasta la próxima y gracias :)

maeyanes
16-10-2006, 18:43:39
- Recorriendo foros y articulos he encontrado la forma (muy sencilla por cierto) para que el usuario no pueda cambiar el tamaño de la ventana, solo lo he aplicado a Clientes añadiendo este código en el evento OnCreate:


Esto mismo lo puedes lograr estableciendo la propiedad BorderStyle de la forma en bsSingle.


- Por otra parte, y esto es lo que me está empezando a traer de cabeza, necesito un sistema sencillo pero completo de busqueda que me permita localizar un cliente por su razon social o nombre comercial, pero con algo que haga la comprobación de "contiene" sin necesidad de que coincida al 100% con el contenido del campo. Solo he conseguido de forma muy sencilla buscar a traves del código de cliente, que resulta ser el campo clave de la BD, ha sido con esto creando un botón y metiendo este código en el evento onClick:

...

¿Se os ocurre algo para lo que necesito de la busqueda ?
(si se resolviese dentro de este mismo form sería lo mejor ;) )

Tienes varias opciones, una es el método Locate de TTable, busca en la ayuda de Delphi para más información...

Otra opción sería mediante un query LIKE, algo como:


SELECT * FROM Tabla WHERE Campo like '%texto%';




Saludos...

AzidRain
16-10-2006, 23:12:37
Creo que llego tarde al hilo pero espero que mis comentarios te sirvan.

Yo tb estoy desarrollando una aplicacion gestión de transporte solo que para el mercado mexicano, aunque en teoría es muy similar cualquier otro país.

Creo que antes que escribir el primer begin debiste haber hecho un análisis a detalle de lo que quieres hacer:

1.-Va a servir para cualquiera, para algunos cuantos clientes tuyos o solo para uno.
2.- Correrá en un solo equipo o distribuido en redes
3.- Con acceso a datos via internet o no
4.- Como vas a imprimir los reportes (Quick Report, FR, Rave, etc.)
5.- Si la impresión de las facturas será en matriciales, ya tienes lo necesario para manejarlas (no nada mas es crear un reporte y ya)
6.- Que ofrecerá tu sistema (o tu creatividad) que no ofrezca ya algún otro en el mercado (por ejemplo facturalux)
7.- En que tiempo (razonable) lo quieres terminar
8.- Lo haras tu solo o en equipo (por aquello de los CVS)

Una vez hecho lo anterior, hay que definir que tipo de base datos usar:

1.- Tablas Planas (Paradox)
2.- Firebird, MySQL o Postgress (y tb que componentes: ADO, Zeos, etc.)
3.- Interbase
4.- MS-SQL Server

Hasta aqui ya es un buen de trabajo y todavía no sale el código. Pero viene lo bueno: El análisis del sistema en si, en donde tendrás que usar por lo menos diagramas de flujo sencillos y para el caso de que uses bases de datos, tendrás que preparar tu modelo E-R y sus correspondientes diagramas.

Faltaría pensar en el diseño de la Interfase de usuario (si vas a usar estilo Office, MDI, etc.) para que tu programa sea consistente, es decir, se vea igual en cualquier parte y no "parchado".

Bueno y todo esto para que: Pues para que cuando empieces con el código todo sea coser y cantar, solamente trasladar lo que ya razonaste previamente a la forma como quieres que tu programa lo ejecute. Esto te evitará tener que reescribir código o re-diseñar las tablas porque a medio programa te diste cuenta que te hace falta un campo o cambiar algún tipo de datos.

Todo esto te permitirá tener una aplicación sólida, fácil de mantener y sobre todo fácil de hacerla crecer.

Antes a mi me pasaba la clásica "impaciencia de programador" y empezaba a programar solo con la idea principal, excuso decirte los dolores de cabeza que me creaba yo solo y sobre todo cuando tenía que volver a código de hace 1 o 2 años...


Tengo ya algo avanzado, si te intesa podemos ir desarrollando los pasos en algun hilo o en este mismo para que sirva de tutorial para quien lo desee o bien solo para intercambiar opiniones.

Saludos

Delphitest
17-10-2006, 07:13:53
Buenos días,

gracias Marcos por tus comentarios, anda que no enterarme antes de la propiedad BorderStyle tiene delito :( , logicamente he optado por retirar esas líneas que tenía de código y hacer esto que dices, algo mas que tengo aprendido.

Para la busquedad estoy pensando en optar por el uso de Locate, otra cosa es que de con ello, la verdad es que la ayuda de delphi no me está sirviendo para esto. Espero que a través de ejemplos que encuentro por ahí en los foros de con algo que me ayude a solucionarlo, en ello ando todavía y cada minuto con un nuevo error, menos mal que antes de hacer modificaciones me he acostumbrado a hacer copias de seguridad de todo.

AzidRain, antes de empezar si que he hecho un "esquema" intentando tener claro lo que necesito realmente y mas que nada por el tema de las bases de datos y campos necesarios.

Gracias a tus palabras he descubierto que estoy trabajando con tablas planas, te contesto por encima a esas cosillas:

1.-Va a servir para cualquiera, para algunos cuantos clientes tuyos o solo para uno.

Realmente soy el propio cliente, es un programa para uso propio.

2.- Correrá en un solo equipo o distribuido en redes
Inicialmente en un solo equipo, a la larga quizas interese que funcione en red, pero no es algo que necesite por ahora.

3.- Con acceso a datos via internet o no
Esto ya lo tengo claro, no tendrá acceso via intenet.

4.- Como vas a imprimir los reportes (Quick Report, FR, Rave, etc.)
Tendré que mirar lo que mas facil me resulte de hacer, no he llegado a este apartado todavía y la verdad no se que diferencias hay.


5.- Si la impresión de las facturas será en matriciales, ya tienes lo necesario para manejarlas (no nada mas es crear un reporte y ya)
La impresion es en laser

6.- Que ofrecerá tu sistema (o tu creatividad) que no ofrezca ya algún otro en el mercado (por ejemplo facturalux)
Es un programa totalmente a medida, algunas partes si servirán para cualquier otro programa de facturacion, pero en general quiero algo que se adapte a las tareas que hacemos a diario no algo generico.

7.- En que tiempo (razonable) lo quieres terminar
Como se suele decir, sin prisa pero sin pausa. No tengo plazo en mente pero considero que 3 meses sería razonable aunque luego necesite algun retoque sobre la marcha.

8.- Lo haras tu solo o en equipo (por aquello de los CVS)
Por desgracia yo solo, aunque cualquier mano amiga será bienvenida ;)

Tengo ya algo avanzado, si te intesa podemos ir desarrollando los pasos en algun hilo o en este mismo para que sirva de tutorial para quien lo desee o bien solo para intercambiar opiniones.
Es la idea inicial de este hilo, si, por supuesto que me interesa compartir la experiencia aunque ni nivel es realmente bajo pero por falta de interés y trabajo que no quede, le hecho muchas horas y empeño, no lo hago por diversión sino por necesidad y eso me motiva bastante y me obliga a tirar para adelante.


Que tengais un buen día :)

Delphitest
17-10-2006, 09:47:39
Lo tengo casi pero ....


He creado un Form3 para la busqueda y tengo una pequeña duda, bueno dos:

He apañado el código que amablemente me ha facilitado Caral:



procedure TForm3.Edit1Change(Sender: TObject);
var
Filtro : String;
begin
If (Edit1.Text <> '') then
begin
Table1.Filtered := False;
Filtro := 'Nombre_Cial ='+QuotedStr(Edit1.Text);
Table1.Filter := Filtro;
Table1.Filtered := True
end
else Table1.Filtered := False;
end;


Y con ello consigo realizar una busqueda o filtro de un DBGrid que he puesto, la gran pregunta es:

El operador "=" requiere que mi texto de busqueda sea identico al del campo "Nombre_Cial" pero prefiero que coincidan los primeros caracteres a medida que los escribo, he probado con Like y no lo reconoce supongo que es por el motor de bases de datos que uso.

¿Que operador puedo poner para que funcione?

Tambien he probado añadiendo un +'*' detras de (Edit1.Text) pero tampoco funciona.

Por otro lado no acabo de entender esto de trabajar con diferentes Form, veo que son totalmente independientes por defecto, o sea que en este último he tenido de nuevo que indicar DataSource y Table y cuando selecciono en el DBGrid el registro que me interesa no me lo tiene en cuenta en el Form2 (que es el de clientes). Supongo que esto será algo sencillo pero lo desconozco por el momento.

Gracias de nuevo por vuestra ayuda

Lepe
17-10-2006, 10:11:28
La propiedad Filter no admite comodines, aunque existen trucos, es bastante incómodo, resulta más eficiente una consulta (TQuery).

Respondiendo antes a tu segunda pregunta:
Existen los TDatamodules, que son contenedores de objetos no visuales, es decir, no puedes situar un Edit, pero si un TTable, TDatasource, etc. La idea consiste en Crear un TDatamodule, al guardarlo le das el nombre a la unidad (dmClientes) y a la ventana del Datamodule, en su propiedad Name indicas DTMClientes.

Sitúas la tabla clientes y su TDataSource en dicho datamodule y si lo necesitas en el Form1 y Form2, haces lo sigueinte:


Unit Unit1; // este es el Form1

interface
uses windows, messages, etc.... , DmClientes;
...

Cuando en Form1, en el Inspector de Objetos eliges el DBGrid.DataSource, si apararece el DataSource de Clientes para elegirlo.

Hecho esto, puedes situar un TQuery en dicho Datamodule (qryClientes), en el OnCreate del Datamodule añades:


qryClientes.sql.text := 'Select * from Clientes where Nombre like :prNombre order by Nombre';
if not qryClientes.Prepared then qryClientes.Prepare; // agilizar la consulta en futuras llamadas.


Ya en tu Form de búsqueda, en el OnKeyUp de tu Edit (que busca por nombres), solo tienes que hacer:

procedure TFormX.Edit2KeyUp(....);
begin
if Key = vk_return then
with dtmClientes.qryclientes do
begin
Close;
ParambyName('prNombre').AsString := QuotedStr(Edit2.text+ '%');
Open;
end;
end;

Con eso consigues que estando en el Edit2, al pulsar la tecla Enter/return, se obtengan todos los registros que empiezan por ese texto.

Para que busque en cualquier parte del nombre, puedes añadir:

QuotedStr('%'+Edit2.text+ '%');

es decir, otro comodín al principio del texto.

Saludos

kalimero
17-10-2006, 10:12:57
Hola DelphiTest.
Bueno sobre tu elección de Paradox como BD para tu sistema, te diré que para mi es una mala elección. El BDE hace tiempo que Borland dejó de darle soporte.
Tambien comentas que de momento no va a funcionar en red. Pues bien, el dia que te necesites que funcione varios equipos te va a costa dios y ayuda cambiar de BD. Yo hubiera elegido, sin ninguna duda, Firebird. Es un potente servidor de Bases de datos que ademas te permite trabajar en modo "embebido" es decir, si de momento va a trabajar en un solo equipo, con una sola Dll tienes toda la potencia y funcionalidad del motor Firebird pero sin la necesidad de instalar el servidor.

http://www.firebirdsql.org/

Por otro lado te recomiendo que procures usar modulos de datos para poner todos los componentes que utilices para acceder a base de datos. Es decir, intentar que en los formularios (que son la interfaz del usuario) no haya ninguna referencia a tal ocual sistema de BD. Esto te facilitará el trabajo ante cualqiuer cambio referido a BD que hagas en el futuro.
Bueno espero que te sirvan de ayuda mis comentarios.
Saludos.

Delphitest
17-10-2006, 10:49:44
Gracias a los dos por vuestra ayuda.

Buena idea eso de los modulos, es lo que mas o menos estoy buscando y seguro que me resulta util para este programa, asi no indico en cada form la base de datos y tabla con la que voy a trabajar.

Repasaré este código Lepe y seguro que saco algo en claro.


Por otro lado Kalimero, esto que dices del Firebird creo que tienes toda la razón del mundo, varias personas me lo han comentado desde el primer momento pero no he sabido por donde empezar con ello.

Aunque parte de lo hecho se vaya al traste quizás sea mejor que me encamine de nuevo usando ese motor para evitar posibles problemas mas adelante y sea peor que intentarlo ahora.

Mi problema va a ser el de siempre. Me he descargado la version 1.5... del link que me has indicado, lo he instalado en su opción de superserver y resto de herramientas, no se si es la que necesito o no, ahora viene lo bueno. Todos los manuales que hay en la web vienen en inglés por no cambiar la costumbre y no se por donde empezar.

¿Mi base de datos de antes me sirve ahora (la puedo convertir)?

Aunque lo haya instalado no veo nada tipo el DataDesktop que me sirva para crear las tablas excepto una ventana que espera comandos.

Dentro de delphi, uso la version 7, que cambia a la hora de insertar por ejemplo BDEdit, BDSource, Table ... ¿hay que usar otras opciones supongo?

Si estaba un poco bloqueado con las busquedas esto ya supone un muro de hormigon delante de mi, espero aprender algo que me permita seguir sino tendré que regresar a lo que tenía :(

Un saludo

kalimero
17-10-2006, 11:09:32
Bueno, no te apures poco a poco.
En primer lugar creo que es preferible que pierdas ahora un poco de tiempo cambiando a Firebird que no despues que te va a costar el doble.
Tu base de datos si que te sirve, no lo he necesitado nunca pero hay herramientas que te convierten tu base de datos Paradox, en una Firebird. En cualquier caso siempre la pudes crear desde cero.
Lo que tu te has instalado es el motor d Base de datos. Para gestionar y administrar la bases de datos necesitas una herramienta de administración. Hay muchas, y como siempre unas de pago otras opensource.
El IbExpert está muy bien. Es de pago pero tienen una version de pruebas:

http://www.ibexpert.com/

Esta otra es Gratis. La baje el otro dia y ahora mismo la estoy probando.
Se llama SqlHamer y la tienes aquí:

http://www.devrace.com/

Y aprovechando que te bajas el "SqlHammer", te bajas tambien los componentes para acceder a Firebird desde Delphi. Son los "FibPlus"

Por cierto. Mira en esta pagina ,también, por su hubiera alguna herramienta para convertir BD's Paradox en BD,s Firebird.

Saludos

Robert01
17-10-2006, 15:48:59
Hola delphitest

Con respecto a ese programa de gestión en francés para evitar el error que se produce al compilar tenés que poner las tablas en el directorio que usa borland por defecto o sino crear un alias con el nombre que te pide el programa. Otra posibilidad es que en la propiedad DatabaseName del TTable le pongas el camino si el nombre de la tabla

saludos

Delphitest
17-10-2006, 16:44:07
ufffff ... vaya bloqueo mental que me ha entrado :o

Voy a seguir un rato intentando entender algo de firebird pero me temo que o sigo como antes con mis pequeños progresos o me toca tirar la toalla y abandonar.

Esto si que no lo entiendo en absoluto, pero nada de nada.

Y digo yo, con todo lo que trae delphi7 no será mas sencillo seguir con las cosas que me ofrece por defecto ??

Llevo un buen rato y estoy totalmente en blanco con el firebird, no hay forma de entenderlo ni saber por donde van los tiros.

Por cierto, aqui hay una traducción al español del manual :

http://www.firebirdsql.org/manual/es/index.html

y aqui una lista de herramientas de administración, gratuitas y de pago:

http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_contrib_download#ADM

Me doy el resto del día de plazo y sino a seguir con lo que tengo teniendo en cuenta las aportaciones del modulo y esas cosillas nuevas.

...con lo facil que era trabajar en clipper con las .dbf ;)

Enan0
17-10-2006, 17:41:46
O sino utilizar SQL server podes utilizar Sybase (SQL anywhere, ASA) es un poco engorroso el tema de la Conexion con este ultimo pero se puede.
Todo va a depender de la carga de datos que vayas a hacer.

kalimero
17-10-2006, 17:49:56
DelphiTest, no te agobies. Es muy facil. Empieza por:

1. Instala el Firebird
2. Instala una herramienta de administracion, la que quieras.

A partir de ahi, con la herramienta de administacion puedes crear bases de datos,tablas,general consultas ,realizar copias de seguridad,etc,etc,etc.

Cuando tengas esto un poco claro accede a Firebird desde Delphi (los FibPlus por ejemplo).

Si no entiendes algo pregunta. Y recuerda que hay un foro especifico de Firebird.

saludos

Caral
17-10-2006, 18:06:26
Hola denuevo Delphitest
La verdad se que hay y ya te han dicho de los diferentes tipos de motores de bases de datos, Paradox Firebird, ect, etc,etc.
La verdad y segun estoy entendiendo, estas haciendo lo mismo que hice yo, hacer un programa para tu empresa sin conoimientos de programacion.
Piensa en varias cosas:
1. Quien le dara el mantenimiento al programa---TU.
2. Conocimiento...POCO.
3. Crecera el programa una vez puesto a trabajar----TE LO ASEGURO.
4. Intenet---LLEGARAS A NECESITARLO.
5. Para cuando lo necesito---ALLER ES MUY TARDE.
6. Cuanto tiempo puedo esperar a que se resuelva un problema una vez que el programa este funcionando---LO NECESITAS YA.
Te voy a dar un consejo y se que a muchos no les va a gustar, cuando uno esta programando solo y sin casi conocimientos es bueno empezar por lo mas sencillo, ya habra tiempo de implementar otras cosas, pero al principio si tienes problemas con las tablas y ademas con la programacion caminaras muy despacio.
Mi consejo es que empieces como yo con un programa enlazado con ACCESS, podras hacer lo que necesites y te simplificara la vida enormemente.
Si quieres empezar como yo desde abajo, con gusto te enseño paso a paso ha hacer tu programa.
El mio empezo pequeño ya tiene 50 froms mas de 70 query y por lo menos 35 reportes, lo manejo en red con 8 ordenadores y lo manejo desde interner con 5 clientes, todo esto hecho con Delphi y Access.
Es solamente una opinion.
Saludos

Delphitest
17-10-2006, 18:09:52
Aplazo el entendimiento del firebird para cuando tenga algun conocimiento mas en programación, no hay manera de saber por donde van los tiros :confused:

Casi pierdo la motivación que tenía con mi arranque en este proyecto :rolleyes:

Por lo tanto vuelvo a mis andadas con lo básico, si cuando lo termine me veo con fuerza y tras haber adquirido ya alguna base en delphi, me replantearé empezarlo de nuevo con otro motor de base de datos como puede ser Firebird.

He aportado ya los cambios que me sugería Lepe, es muy buena opción esto del módulo, aunque he tenido que cambiar todos los BDEdit y cosillas que iba viendo relacionadas con el acceso a la tabla.

He hecho todo pero tengo una duda, por eso de no cambiar la costumbre;

Con eso consigues que estando en el Edit2, al pulsar la tecla Enter/return, se obtengan todos los registros que empiezan por ese texto.


Ese resultado de "filtro" ¿Donde tiene que aparecer? yo tengo un BDGrid de antes, esto sirve o hay un componente especial para ello ?

Lo digo porque he probado tal cual y al pulsar intro no me cambia nada de la tabla. (a veces me siento tonto preguntando estas cosas tan básicas :( pero realmente no tengo ni idea)

Un abrazo

... estabamos escribiendo a la vez Caral, soy de tu opinión, ya habrá tiempo para complicar las cosas, de hecho se suelen complicar solas sin tener que ir a buscarlas :)

kalimero
17-10-2006, 18:18:28
Bueno Caral, efectivamente no estoy mu de acuerdo.
La sencillez no está reñida con la eficiencia. Quiero decir que trabajar con Firebird,Sql Server o cualquier otro motor de BD no es mas complicado que acces (por ejemplo). Es mas, yo diria que hasta mas sencillo. Como comenté anteriormente, es preferible perder ahora uno,dos o una semana si hace falta pensando bien y que herramientas vas a utilizar que no lanzarse a desarrollar una aplicacion que al cabo de x tiempo te va a costar muchisimo realizarle cualquier modificación.

Saludos

Enan0
17-10-2006, 18:19:25
El mio empezo pequeño ya tiene 50 froms mas de 70 query y por lo menos 35 reportes, lo manejo en red con 8 ordenadores y lo manejo desde interner con 5 clientes, todo esto hecho con Delphi y Access.


Ojo con el Access porque en ese caso se hace Lento e inseguro. y aparte consume mucho espacio. y si eliminas registros porque tenes tablas temporales. cada tanto tenes que hacer un Compactar y reparar para reordenar indices y muchas veces se rompe.
Y no estoy muy seguro.. pero no se como maneja conexiones multiples. PERO... creo que mal.

David
17-10-2006, 18:20:38
hola

Me he bajado los recursos traducidos de David Esmeralta , y funcionan bien en Delphi 7 , pero no así en Delphi 5 . Mi pregunta es si para Delphi 5 , teneis algo por el estilo .

Un saludo

AzidRain
17-10-2006, 18:28:56
Se me hace que el pobre de Delphitest ya no sabe ni por donde empezar, todos hemos estado dando con toda la mejor intención nuestras opiniones: que si mejor con FB, que si con Access, que si esto que si lo otro...y nos olvidamos que nuestro amigo esta iniciando en esto y practicamente quiere hacer su desarrollo al estilo "hagalo usted mismo". Es como si alguien aficionado a la mecánica quisiera armar un pequeño auto tubular con un motor de VW que tiene por ahi y nosotros ya le estamos sugiriendo que arme un Ferrari!!

Finalmente la decisión de nuestro amigo Delphitest debe ser con la que el se sienta cómodo y que le permita avanzar de a poco con lo que hasta ahora conoce. ¿Que caso tiene meterlo a aprender SQL, solo para que pueda usar Firebird que es "de lo mejor" o MySQL que es "una chulada"...?? No veo el caso, mejor vayamos ayudándolo a resolver sus dudas con lo que tiene hasta ahora. Ya el mismo descubrirá cuando se sienta mas a gusto con el lenguaje y sobre todo que haya agarrado mas cancha, que es más fácil hacerlo con otras herramientas...Quien sabe, igual y lo hace con tablas paradox y muy sencillo y A EL LE FUNCIONA y su sistema RESUELVE SUS NECESIDADES. Después de todo un sistema debe resolver problemas.

Tendremos que contener un poco el entusiasmo e irnos de a poco a poco...

saludos a todos..

David
17-10-2006, 18:33:12
Mira , este procedure :


procedure TForm1.SalirdeGesatrans1Click(Sender: TObject);
begin
if MessageDlg('¿ Seguro que desea salir del programa ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
Application.Terminate;
end;


lo debes de cambiar por este :


procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg('¿ Seguro que desea salir del programa ?',
mtConfirmation, [mbYes, mbNo], 0) = mrNo then
CanClose := False;
end;


Es decir te vas al evento OnCloseQuery del Form y escribes el código que he puesto yo .

Caral
17-10-2006, 18:39:12
Hola
Como dije trabajo con access, mi base de datos tiene ya mas de 800m, 8 ordenedores en red, 5 clientes via internet, nunca se me ha colgado, mi programa hace automaticamnete un backup cada hora sin que nadie se de cuenta por si acaso, que os puedo decir, no hay mas que ver por el foro y vereis que pasa.
Con respecto a Sqlserver o Mysql, bueno creo que a Delphitest le interesa mas sacar adelante su negocio que ponerse a aprender no se cuantas cosas, conozco sqlserver, mysql, paradox, firebird y me quedo con lo facil access.
en tal caso si me ponen entre la espada y la pared, me quedo con MySql, conectada con zeos, ya que ado es lento para ese fin.
Bueno es cuestion de opinion, no encuentro razon alguna por que cambiarme a otro motor y simplemente doy no my opinion al azar doy my expeciencia en la practica.
Saludos

Delphitest
17-10-2006, 19:36:50
:o lo siento, no discutais por mi.

Creo que todas las opiniones son buenas y os agradezco que las deis pero no os calenteis entre vosotros por tan poca cosa.


Se me hace que el pobre de Delphitest ya no sabe ni por donde empezar, todos hemos estado dando con toda la mejor intención nuestras opiniones: que si mejor con FB, que si con Access, que si esto que si lo otro...y nos olvidamos que nuestro amigo esta iniciando en esto y practicamente quiere hacer su desarrollo al estilo "hagalo usted mismo". Es como si alguien aficionado a la mecánica quisiera armar un pequeño auto tubular con un motor de VW que tiene por ahi y nosotros ya le estamos sugiriendo que arme un Ferrari!!



Pues eso ... tranquilidad

es cierto que me he hecho un pequeño lío con esto de las bases de datos pero insisto en que solo pretendo hacer algo sencillo y por encima de todo aprender. Seguro que cuando termine la aplicación, si es que llega ese día :) , empezaré a encontrarle cosas que no me gustan y empezaré de nuevo con mas experiencia.

David, muchas gracias por tu retoque, había visto que no funcionaba bien esa opción de cerrar la ventana principal pero no he querido marear con ello, ya doy bastante lata con lo demas :(

Ante todo insisto en que no quiero molestar ni interferir con mi desconocimiento, si se considera en algun momento que mis comentarios no son apropiados no me parecería mal tener que dejar de postearlos. Mi simple intención es ir comentando la evolución del aprendizaje y puesta en marcha de mi proyecto por si puede servir de referencia a otras personas.

Os pongo los últimos cambios:

http://rapidshare.de/files/37107612/Gesatrans.zip.html

El asunto está en Ficheros, Clientes y pulsando Buscar

En el form que aparece, aunque me he entretenido a dejarlo completo, solo funciona la opción Edit2, bueno ni eso porque es donde no consigo hacer la busqueda, no se si el fallo está en el DBGrid que pongo por debajo pero no consigo filtrar la tabla.

Hasta mañana y gracias

David
17-10-2006, 20:05:18
Hola

Tienes que crear los formularios cuando accedas a ellos y no todos de golpe , por ese vete en Delphi a Project - Options y en la pestaña Forms , hay dos listas , en la de la izquierda tienes todos los forms , pues bien , menos el form principal y el DataModule , pasa los demás forms al lado de la derecha , donde pone algo así como Avalaibles forms .

Luego en el formulario para acceder a clientes , en el evento onclick , cambia tu código de Form2.Show por este :


procedure TForm1.Clientes1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Application);
Form2.ShowModal;
end;


y en el formulario de clientes , en el evento Onclose , pon esto : Action := CaFree;

Ademas el formulario de clientes no deberia de llamarse Form2 , sino algo como FClientes , WnClientes , FrmClientes ...

Caral
18-10-2006, 00:50:51
Hola otra vez Delphitest
Te envio una pequeña ampliacion y modificacion de tu programa
eso si hecho con una base de datos access.
Puedes modificarlo a tu base de datos si quieres
esto te lo envio nada mas para que veas lo sencillo y rapido que se hace
con access.
Hay alguna informacion en el programa
Espero te sirva para darte cuenta de muchas cosas.
Este es el linK.
http://rapidshare.de/files/37142966/Gesatrans.zip.html
Saludos

Robert01
18-10-2006, 03:58:42
Un pequeño aporte para filtar los datos. Uso un ComboBox, el cual contiene los nombres de los campos de la tabla que se usarán para filtar los datos en la propiedad items (doble click en strings).
El nombre o parte del mismo se escribe en la caja de texto que hay al lado.

Estoy aprendiendo a usar base de datos al mismo tiempo que delphitest.

saludos

p.d no se si sube el zip con el formulario y el *.pas, espero que si.

Delphitest
18-10-2006, 19:21:09
Buenas tardes a tod@s,

ante todo agradeceros de corazón por las molestias que os estais tomando, hoy he tardado un poco mas en dar señales de vida, no me ha dado un infarto todavía pero igual no ando lejos :eek:

Me ha costado digerir tanta información asi que voy por partes:

David, gracias por la limpieza que le haces a mi código, son detalles que pueden pasar desapercibidos para un principiante pero no a un entendido, tomo buena nota de ello y logicamente lo llevo a cabo y procuro no reincidir en ello. (Ya tengo una hoja titulada ERRORES donde apunto todas esas cosas para que me sirvan en un futuro)

Robert01, tus modificaciones me han sido de gran utilidad para acabar de rematar esto de los filtros.

y por último Caral ... que decir ... si apuras un poco ya usaba tu programa y me tomaba un descanso durante unos días, seguro que has hecho en menos de 30 minutos lo que llevo intentando desde hace mas de una semana, el que sabe sabe ... ;)

Os cuento por donde ando en este momento:

Tras ver el código de amablemente Caral se ha tomado la molestia de programar he llegado a la conclusion que cada vez tengo menos claro todo este tema relacionado con los motores de base de datos, entonces me he puesto a buscar en internet y por eso he tardado en decidirme.

Por ahora sigo con mi base de datos inicial pero ya tengo la mosca detras de la oreja. Si lo que yo uso es BDE (Borland Data Engine) de la casa Borland lógicamente y el sistema ADO (ActiveX Data Objects) es de microsoft por lógica este último me dara menos quebraderos de cabeza a la hora de instalar la versión definitiva en un equipo que funciona bajo Windows. Vamos que no lo se pero quizas me cambie mas adelante a ese tipo de base de datos.

Por otra parte veo que hay operadores, ordenes , funciones .... o lo que sea que funcionan con un sistema de BD y no para otros, esa parte tambien me tiene intrigado.

He hecho pruebas como es normal, veo que en Modulo que he creado si para Paradox usaba TDatabase con Access hay que usar TADOConnection y que para el tema de las tablas en lugar de dejar todo preparado en el Módulo principal hay que abrir y cerrarlas en los formularios con el objeto Table ... el caso es que he trasteado un poco con ello para al menos saber por donde van los tiros pero por ahora dejo la BD que inicialmente tenía creada sin descartar algun posible cambio mas adelante.

Vamos al tema :

Os paso la nueva versión con algunas modificaciones, como era tarea pendiente, la opción que hay que probar es Ficheros,Clientes, Buscar. Solo funciona el campo Nombre Comercial, al menos he conseguido dar un paso mas, una vez que se empieza a escribir en el la tabla se filtra y si aparece el registro del cliente que queremos basta con hacer doble click en el para que se cierre el form de búsqueda y aparezca la ficha individual del cliente.

Es mas o menos lo que quería y lo he conseguido sin duda gracias a vosotros, cuando veais el código os sonara de algo :)

El siguiente paso que me gustaría dar es conseguir una búsqueda multiple, o sea por varios campos pero que se puedan combinar entre ellos. He probado con varios IF para indicar varias condiciones pero no acabo de dar con ello, no se si será posible aplicar todo en una sola linea con la orden .filter o solo admite un campo y en cuanto se pone otra nueva orden queda la primera anulada.

Por otro lado busco algo parecido al TModule (aunque no tiene nada que ver) para hacer lo siguiente:

Visto que para buscar uso el evento OnChange de las casillas Edit y hay varias, no se si existiría una forma de poder indicar una serie de linea de comandos en un Objeto y poderle llamar cuando se necesite. De este modo evitaría tener que repetir un monton de lineas en cada Edit. No se si me he explicado bien.

Aqui va el link con lo nuevo:

http://rapidshare.de/files/37233058/Gesatrans.zip.html

Creo que no me olvido de nada :rolleyes:

Hasta mañana y gracias por todo

Caral
18-10-2006, 20:05:03
Hola
Creo que no as podido ver el programa que te envie funcionando, si no sabes como hacerlo, te lo explico, si ves el codigo, sin experiencia, no lo vas a entender, sin verlo funcionando.
El ajuste que te envie, no solo puede trabajar con access, el codigo del form que busca al cliente filtra letra a letra, tienes que verlo.
Coloco cada componente en cada form, no porque sea mejor o porque asi se haga con access, lo hago porque lo entiendo mejor.
En esto de la programacion hay mucha tela que cortar, cada quien lo hace a su manera y de una u otra forma va bien.
Solo quiero darte mi ultima opinion al respecto de la bases de datos, hay que tener en cuenta que tu programa posiblemente tendra que trabajar en cualquier ordenador, preguntate a ti mismo o al foro: Necesitare instalar el programa con archivos de delphi para que funcione con esta, o esta otra base de datos?, Tendre que crear un instalador ?.
Se que eres como yo un novato en esto, solo creo que al igual que yo te haras estas preguntas tarde o temprano, no insisto en el uso de una u otra base de datos, solo digo, por que recorrer el camino dos veces.
Espero que tu proyecto funcione y se que lo lograras con la ayuda de este foro.
Un saludo Cordial

Caral
18-10-2006, 21:49:41
Hola Delphitest
Te envio esta modificacion con el fin de que entiendas lo que dije anteriormente con relacion a que cada quien tiene su manera particular de hacer las cosas, como veras en un solo form puedes hacer muchas cosas, esta ligado a tu base de datos, asi que lo puedes ejecutar igual.
Aqui te lo envio:
http://rapidshare.de/files/37251349/Gesatrans1.zip.html
Se que te estamos llenando de informacion, no te preocupes que apenas empiezas.:D
Saludos

Delphitest
19-10-2006, 07:41:42
Buenos días,

voy a hacerte caso Caral. Encima que se está tomando tantas molestias solo faltaba que no te hiciera caso y siguiera con Paradox ;)

Si que he conseguido ejecutar el programa que modificaste, funciona sin problemas, aunque le he tenido que dar vueltas para que me dejase de dar el error ese de la base de datos, pero ya va bien.

He cambiado por lo tanto a Access. Me ha bastado con crear una nueva base de datos desde access e importar la tabla clientes de paradox. Una vez ahí he llamado Gesatrans a la base de datos y mantengo clientes para la tabla.

Un detalle que he notado es que ocupa mucho mas espacio que antes, pero no tiene demasiada importancia.

Pienso que con este cambio lo que venga de ahora en adelante podría ser algo mas sencillo. Me refiero a posibles impresiones de consultas y cosas de esas.

Como cambios a tener en cuenta han sido lo siguientes:

En el TMOdule he tenido que quitar lo que había y poner un ADOConnection, ADOTable y DataBaseSource, el resto se mantiene practicamente sin cambios por lo tanto no ha sido muy dificil aportar las modificaciones.

Otra aportacion ha sido la opción Herramientas, Calendario que ya funciona con un calendario sencillito amablemente facilitado por Caral.

Y he puesto un botón en la ficha de clientes para salir, hasta le he añadido un icono muy chulo :)

Ya que hablo de botones, ¿Que diferencia hay entre Boton, BitBoton y SpeedBoton ?? veo que el boton normal no deja poner un icono y el Bitboton si pero no veo que mas cosillas pueden cambiar.

Y por último antes de pasar al proceso de listados de clientes e impresion de ficha y listado sigo atascado en el tema de la búsqueda. Si que puedo filtrar por un solo campo pero no por varios a la vez. ¿Sabe alguien si se puede hacer y como ?

Gracias y que tengais un buen día.

Aquí esta la última versión :

http://rapidshare.de/files/37296275/Gesatrans.zip.html

Para que no tengais el mismo problema que yo la ruta de la base de datos es:

C:\Archivos de programa\Borland\Delphi7\Projects\Datos

Si lo teneis en otro sitio os toca modificar el path de los objetos del TModule

Delphitest
19-10-2006, 16:13:33
Perdona Caral, no había visto tu último mensaje. Está claro que se puede hacer de todo y de diferentes maneras. Todo me sirve, intento filtrar toda esa información aunque es mucha y a veces ya se me va un poco la cabeza :rolleyes:


Los últimos progresos son estos:

http://rapidshare.de/files/37325009/Gesatrans.zip.html


Ya trabajo con la base de datos de access y he conseguido filtrar los datos de búsqueda por difentes campos a la vez. Le he dado muchas vueltas y estoy seguro que tiene que haber una forma mas sencilla de hacerlo, pero finalmente he aplicado la lógica y con varias lineas de comandos me ha salido. De por medio me he perdido varias veces con los if .. else ... los ';' y los diferentes tipos de campos, númericos y de tipo carácter pero lo tengo ya a mi manera. Este es el código que me ha resuelto la papeleta:

procedure TFBCliente.Edit1Change(Sender: TObject);
begin
DTMClientes.TClientes.Filtered := False;
If (Edit1.text <> '') then
DTMClientes.TClientes.Filter := 'Cod_Cliente Like '+ Edit1.Text;
If (Edit2.text <> '') then
DTMClientes.TClientes.Filter := 'Nombre_Cial Like '''+ Edit2.Text + '*''';
If (Edit3.text <> '') then
DTMClientes.TClientes.Filter := 'Razon_Social Like '''+ Edit3.Text + '*''';
DTMClientes.TClientes.Filtered := True;
If (Edit5.text <> '') then
DTMClientes.TClientes.Filter := 'DNI Like '''+ Edit5.Text + '*''';
DTMClientes.TClientes.Filtered := True;
If (Edit6.text <> '') then
DTMClientes.TClientes.Filter := 'Localidad Like '''+ Edit6.Text + '*''';
DTMClientes.TClientes.Filtered := True;
If (Edit7.text <> '') then
DTMClientes.TClientes.Filter := 'Provincia Like '''+ Edit7.Text + '*''';
DTMClientes.TClientes.Filtered := True;
IF (Edit1.Text = '') and (Edit2.Text = '') and (Edit3.Text = '') and (Edit5.Text = '') and (Edit6.Text = '') and (Edit7.Text = '') then
DTMClientes.TClientes.Filtered := False;
end;

un poco lío verdad ??

Pero funciona que es lo importante. Solo me he quedado con mal sabor de boca porque he tenido que asignar esto a cada uno de los eventos Onchange de los 6 Edit que hay, seguro que hay forma de ponerlo una vez en algun sitio y llamarlo después, pero no he dado con ello. Otra opción era poner un boton para filtrar, asi solo sería suficiente con uno, pero me gusta mas de esta manera, probarlo si teneis oportunidad, ha quedado curioso.

De paso he visto sin querer un erro que daba la ficha de cliente al dar de alta uno nuevo, el campo DNI era un indice y campo requerido y si no ponía nada en el pues saltaba un error que no conseguía quitar; solución = ni indice ni requerido, jejejej, lo he puesto normal y fuera ;)

Tras el madrugón que me he pegado para hacer la busqueda ahora empiezo con el tema de la impresión de fichas individuales y listados de clientes. He instalado el QuickReport ya que es lo se dice por ahí, asi que vamos a por ello.

Un saludo y gracias a todos por el empujoncito

kalimero
19-10-2006, 17:56:56
Hola.
Con que lo escribas el codigo en un evento es suficiente. Despues vas a cada edit y en el evento "Onchange" asignas el que has escrito que estará en la lista.
Saludos

kalimero
19-10-2006, 17:59:58
Por cierto. ¿Para que repites los filtros en cada evento del "OnChange"?
Coloca en cada Evento el que corresponda

Saludos

Delphitest
19-10-2006, 18:16:34
Perfecto Kalimero, gracias.

He dejado solo el del Edit1 y he hecho es que dices, funciona perfectamente.

Ya decía yo que tenía que haber un truco sencillo para ello, tomo nota para próximas veces :)

kalimeroPor cierto. ¿Para que repites los filtros en cada evento del "OnChange"?
Coloca en cada Evento el que corresponda

Saludos

He hecho tantas pruebas que al final es lo único que parece que funciona. A cada vez que se pulsa una tecla estes en la casilla que este tiene que 'refiltrar' la tabla teniendo en cuenta lo que hay en los otros campos y si no hay nada en ninguna (el super if que he puesto al final) pues tiene que quitar el filtro. Igual se puede hacer de otra forma pero no he dado con ella.

Un saludo

Enan0
19-10-2006, 18:55:45
hola Delphitest, mira solo como a modo de consejo y no por complicarte la vida, te recomiendo que Renombres (a medida que tengas tiempo o sino en el futuro) Los objetos que vayas utilizando, te preguntaras para que, Simplemente para que el dia de mañana no te sea tan engorroso saber que hace el EDit1, el label5 y combobox1.

Lo ideal es tomar el lineamiento del diseño UML y es darle al componente una breve descripción de que es. ejemplo

Si el Edit1, es para busqueda por nombre
seria bueno un nombre asi mas omenos EdBuscaNombre (Ed de EDIT y busca nombre de lo que hace.)

Te aseguro que cuando dejes el sistema por un tiempo y lo vuelvas a agarrar te va a ser de mucha ayuda.

Caral
19-10-2006, 19:06:29
Hola de nuevo Delphitest
La verdad no era mi intencion que te decidieras rotundamente por access, pero me alegro por ti, te va a ser mas facil esto, luego ya cambiaras si quieres.
No he podido ver tu programa porque me da un error, he leido tus mensajes y creo, si estas de acuerdo en que esta modificacion al programa que te envio te servira, la verdad repito, si estas de acuerdo, me gustaria que siguieras con este y posteriormente le hagas los cambios que quieras, ya que si seguimos el mismo podre ayudarte mejor, queda a tu criterio, la verdad son superficiales los cambios, bueno el sistema de colocar los componentes varia un poco.
He hecho un buscador con los filtros que creo necesitas, si presionas el boton buscar, veras que con solo poner la primera letra o numero este va filtrando hasta encontrar lo que quieres, si das dobleclick te aparecera la informacion completa, o presionas aceptar, ya veras, pruebalo y me dices.
Con relacion al form clientes elimine la posivilidad de buscarlos desde el navegador, luego veras, mas adelante como hacerlo diferente y mejor.
Para que el programa te funcione perfectamente y encuentre la base de datos, sin tener que hacer nada, cuando lo recibas coloca la carpeta que se llama Gesatrans1, en esta ubicacion:
C:\Archivos de programa\Borland\Delphi7\Projects\Gesatrans1 Espero que sea lo que necesitas.
Con respecto a los reportes se deberian hacer al final, ya que la manera de llamarlos es importante y normalmente tambien se filtran.
Lo de los botones es mas que nada adorno, veras que se puede hacer un boton hasta de un label, panel, edit, etc,etc.
Aqui te envio este:
http://rapidshare.de/files/37355584/Gesatrans1.zip.html
Saludos

Enan0
19-10-2006, 19:16:41
Hola Delphitest, mira para que no tengas problemas con donde debe encontrarse la Base de Datos te paso este codigo.

en el create del DATAMODULE


ADOConnection1.Close;
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source='+ExtractFilePath(paramstr(0))+ 'Datos\Gesatrans.mdb;'+
'Persist Security Info=False';
ADOConnection1.Open;
TClientes.open;




Esto lo que hace es buscar en donde esta tu aplicacion, extraer la Ruta y Agregar la carpeta "datos" y su archivo.
entonces solo hace falta poner la carpeta dentro de la carpeta Padre en donde esta el Executable.

No te hago los cambios yo ya que trabajo con Delphi 5 y hay una serie de Units que no utilizo y otras cosas

Y para que la Base no te quede abierta
en el Destroy del Datamodule


TClientes.close;
Adoconnection1.close;

Caral
19-10-2006, 19:33:16
Hola Enan0
Me parece acertada tu opinion, yo particularmente uso un archivo .ini , con el que el ejecutable busca la base de datos, asi puedo poner la BD en cuarquier sitio, incluso en otro ordenador en red.
Saludos

Enan0
19-10-2006, 19:44:18
Y si te interesa Yo te recomiendo Eliminar el DBnavigator, y Utilizar Botones clasicos.
Es decir que el formulario Clientes (creo que es de carga) te aparezca en blanco y llenas los datos y al Hacer Click en agregar Checkea que dato no esta o es incorrecto y te lo pide nuevamente, Si esta todo OK, Te Crea el nuevo Registro.

Ya que en este caso Tenes muchos botones MEdios Confusos para el 90 % de los usuarios, y por ultimo la comparacion de datos necesarios los hace El DBNavigator (cuando intenta Insertar) Generando un Error.. y de la otra forma los tendrias controlados vos.

Enan0
19-10-2006, 19:51:35
Hola Enan0
Me parece acertada tu opinion, yo particularmente uso un archivo .ini , con el que el ejecutable busca la base de datos, asi puedo poner la BD en cuarquier sitio, incluso en otro ordenador en red.
Saludos
Si es correcto, Pero tendrias que Tener Mapeada o compartida la Unidad de RED, Y la verdad que no lo veo Recomendable., de ser asi Yo te recomiendo un SQL-server o algo por el estilo y lo conectas por medio de un ODBC o simplemente poniendo IP y lo que corresponda,
Debido a que si no vas a tener 5000 usuarios Conectados un SQL-server o cualquier Motor que sea Servidro de Bases de Datos te va a funcionar de mil maravillas y te vas a evitar Futuras Rupturas de la Base de Datos.

Pero Tambien Podes Tener solo el Acceso Directo de tu aplicacion en CLiente (PC en donde se va a ejecutar la aplicacion) haciendo refencia en "Iniciar en" La carpeta de la maquina a utilizar y lo que le comente funciona y en el Cliente no tenes que Instalar nada de nada!

Pero no es lo mas Recomendable. de todas maneras.

Delphitest
19-10-2006, 20:14:44
Pues de nuevo gracias por vuestra ayuda.

Ena0, poco a poco iré haciendo eso que dices de cambiar los nombres, tiene pinta de llevarme tiempo pero lo haré a ratos.

Lo del código de la BD no consigo ponerlo, vamos que lo pongo en el uses pero me da error, asi que de momento lo he quitado.

Lo que hago cuando veo un error de base de datos es simplemente crear la ruta que no encuentra y meto dentro la BD. Es el caso de la última de Caral, por lo que veo usa Delphi6 y yo el 7, he creado esa carpeta y funciona.

Caral, muy amable tu colaboración. He repasado tu último código y al final lo que he hecho es una fusión del tuyo y del mío.

Mas que nada porque lo de la búsqueda estoy empeñado en verlo como lo he hecho porque estoy acostumbrado a un programa comercial y me resulta mas cómodo así.

Para adaptarme a lo tuyo he renombrado todos los form y units, ahora se llaman todos igual que los tuyos.

Ando continuando con la ficha de cliente, he retocado eso del explorador como dices, y si pruebas lo mío verás que he empezado con lo de la impresión. Hay un botón desde cliente (está al lado del de Buscar) que llama a un Qreport, solo estoy probando porque ya es mucha información y tengo que organizarla un poco sino quiero que esto me desborde.

Hoy digiero el Qreport, con las bandas de cabecera, titulos, detalles, pie de pagina ... mucha tela pero voy viendo por donde anda el tema.

Lo último está aquí:

http://rapidshare.de/files/37364030/Gesatrans.zip.html

Me gustaría que lo hicieras funcionar, Caral, a ver que te parece lo de la búsqueda. Quizas te de error por el tema de la BD.

Un saludo y buenas noches

Enan0
19-10-2006, 20:28:58
Bueno a ver.. Simplemente hace Doble Click Sobre el DataModule y en el Create pone ese codigo que te pase

o sino agregame en tu msn
enano79@argentina.com

Bueno ACA te Dejo el linck para que bajes el DmClientes.

http://rapidshare.de/files/37367825/dmClientes.rar.html

Caral
19-10-2006, 21:59:49
Hola Delphitest
Me has dejado con la voca abierta, ya pude ver tu programa, creo que ya no me necesitas para nada, estas hecho un experto, efectivamente yo tengo delphi6, pero ya me las arregle para verlo.
Me costo, pero logre entender como hiciste el reporte, la verdad yo uso el reporteador del mismo quickreport, que lo hace todo y es facil, aqui te envio una pequeña modificacion al reporte para que lo veas, por lo demas vas estupendamente bien, creo que pronto te pedire consejo.
Aqui esta la modificacion:
http://rapidshare.de/files/37377381/Gesatrans.zip.html
Vi el codigo que te envio Enan0 y que decir, que se puede esperar de un maestro.
Saludos

Delphitest
20-10-2006, 09:29:54
Buenos días,

perfecto Caral ya he 'plagiado' las modificaciones.

Ahora estoy intentando dejar a mi gusto la ficha de cliente, pero tengo alguna duda, he puesto un mensaje en:

http://www.clubdelphi.com/foros/showthread.php?t=36680

algo se me está pasando. Ayer probe esto mismo en un form nuevo y me funcionaba sin problemas, he repasado el código porque algo tiene que haber que me impide añadir campos en el Qreport.

Ya os contaré.

Delphitest
20-10-2006, 20:27:54
Buenas tardes,

vaya día mas duro que he tenido. A medida que se aculmula información esto se complica pero no pierdo el ánimo aunque si reconozco que por momentos me entra el apagón.

Hoy me ha costado digerir estos del QReport y el tema SQL, no lo acabo de entender al 100% pero si he sido capaz de tirar para adelante.

Esta es la evolución de hoy:

Partimos de la base de que Caral me ha pasado mi codigo modificado y por lo tanto me ha dado un gran empujón, aun asi me gusta enterder las cosas y no ponerlas porque si, no siendo que alguna vez tenga que retocar algo y no sepa hacerlo, por eso me he comido tanto la cabeza hoy.

--> He cambiado el DTMClientes (el módulo) añadiendo como bien decía Ena0 el código para agilar la localización de la base de datos.

--> El botón imprimir de la ficha de cliente nos lleva a un QReport con aspecto de ficha individual lista para ser imprimida. Podemos buscar primero el cliente con el sistema de búsqueda que hice ayer.

--> Por capricho en el form Buscar Cliente he añadido un sistema de ordenación de los datos en función de un campo que se selecciona a través de un RadioGroup.

--> Desde el botón Imprimir del Form Buscar Cliente llegamos a una venta que nos pide si queremos imprimir fichas o listados, de momento solo funciona Ficha. La diferencia con respecto a la impresion que comente antes de ficha de cliente es que aqui se imprimen las fichas de los clientes filtrados anteriormente, no solo una. De hecho he metido dos por página. El tema es que solo soy capaz de filtrar por un campo a la vez. Si por ejemplo rellenamos mas de uno se va todo al garete y sale un error, pero con uno solo o ninguno la opción va bien.

Este último paso es que tengo que terminar y luego hacer el apartado de listado general. Por hoy creo que ya está bien.

Aqui os pongo lo último, rapidshare no iba bien, os lo pongo en cjoint:

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

Buen fin de semana a todos.

Caral
20-10-2006, 23:34:50
Hola Delphitest
Me parecen estupendos los cambios pero, te voy a regañar:mad: , estas poniendo mucha atencion a la forma y no al contenido, bueno, despues de regañarte :D ; He visto el avance y me parece muy bien ;) , me he tomado el gusto con tu permiso de un par te caprichos, ya los veras, ejecuta el programa y presiona imprimir en el form clientes.
Te he puesto en el menu principal, un poco de tarea, para que veas que no puedes entretenerte en un solo form, si no, te voy a dar baja calificacion, hay muchas cosas que componen un programa de facturacion, recuerdalo, ademas te he organizado la colocacion de los form, cuando ejecutes te daras cuenta :D .
Bueno aqui te dejo mi capricho.
http://rapidshare.com/files/65886/Gesatrans.zip.html
Saludos

Delphitest
21-10-2006, 07:36:01
Mira si soy buen alumno que hasta he madrugado, hoy sábado, para hacer mis deberes :)

Muchas gracias de nuevo Caral.

Bueno, como de costumbre voy cogiendo lo que parece a mi gusto de tus cambios.

Me has paralizado un poco con el super menú ese. jejeje, pero lo he puesto ya que solo son opciones y siempre podré quitar alguna si no consigo dar con su programación ;)

Los cambios son los siguientes:

---> Como novedad el menú está lleno de opciones (ya se ajustarán sobre la marcha)

--> Al pulsar el botón Imprimir en Buscar Cliente, antes se llamaba a otro Form para elegir el formato de impresión, ahora he adaptado un popup para elegir esa opción directamente sin abrir un nuevo form, es mas intuitivo y gasta menos recursos.

--> Ya funciona el listado general, quizas haya que retocarlo mas adelante en función de las necesidades pero de momento abarca de forma legible mas de 10 registros de clientes por página en un formato que proporciona todos los campos y en una hoja apaisada.

A ver si doy con el tema de filtrar esos informes con los datos que se pongan en buscar cliente y una vez solucionado pasamos a otro tema.

Caral es cierto que me estoy centrando demasiado en el cliente pero parte de la base que hace dos semanas no sabia absolutamente nada, ahora tampoco se mucho pero ya voy abriendo boca poco a poco. Quiero acabar este punto del cliente antes de seguir, no me gusta dejar a medias las cosas. Una vez finalizado el filtro para los informes ya tendré muy a huevo hacer el de repartidores ya que es practicamente lo mismo a falta de retocar algun campo.

Aqui está lo nuevo actualizado:

http://rapidshare.com/files/92278/Gesatrans.zip.html


Buen fin de semana a tod@s

un abrazo

Lepe
21-10-2006, 15:13:31
No me gusta el consejo que voy a darte, pero hay que ser realistas.

Cuando yo estaba en tu misma situación, ví que era mejor dejar las cosas "a medias" al menos, hasta adelantar las demás partes. ¿Por qué? Porque si ahora terminas una rutina para clientes y la dejas "brillante como los chorros del oro", más tarde cuando veas la parte de repartidores, verás que esa misma rutina de clientes, cambiando 3 o 4 cosas tambien te sirve, es decir, reutilizar código escrito. Esto hace que hayas "perdido tiempo en afinar" mucho lo de clientes y ahora, de todas formas, tienes que retocarlo.

Quizás dejando la parte de Clientes de forma que funcione pero sin llegar a "abrillantarlo", te permita despues, al hacer la de repartidores, realizarle cambios y afinar la misma rutina para dos funciones distintas.

Sé que valoras todos los consejos, ahora es tu decisión echarle cuenta o no, simplemente con que lo pienses ya me doy por satisfecho.

Según he visto tu QRClientesGeneral, es del tipo qrCreateList (http://www.clubdelphi.com/foros/showthread.php?t=18282&highlight=qrcreatelist), échale una visual, ya que puede servirte. El mensaje nº 4 de ese hilo explica la forma de hacerlo. En tu caso necesitas un ADOTABLE o bien ADOQUERY.

Como ves, en apenas 20 líneas de código, puedes hacer un listado de cualquier tabla o consulta, modificándolo para que quede:
CrearListado(adoquery1);

Saludos.

David
21-10-2006, 17:53:34
Por cierto la ultima versión de tu programa , no la he podido descargar , igual si te subes los programas en http://www.megaupload.com/es/ seria mejor .

Por otra parte , debias de plantearte usar la herencia , es decir hacer un formulario prototipo y de ahí derivar el resto .

Delphitest
21-10-2006, 21:13:19
Buenas tardes,

el día ha sido de nuevo productivo :)

Despues de un buen paseo para desconectar un poco y pensar en otras cosas mas relajantes he reanudo esta tarde mi empeño en solucionar el asunto pendiente; conseguir que los reportes tengan los mismos datos que lo que se ve en el DBGrid, es decir que esten filtrados y ordenados por los criterios que pongo en Form BuscaCliente. Despues de muchas vueltas y no acabando de entender el AODQuery ni el sql es hecho lo tipico que suelo hacer, quitar lo que no entiendo y aplicar la lógica.

Se que posiblemente haya mejores formas de hacerlo pero os cuento como he dado con ello, YA FUNCIONA.

Simplemente he quitado de los Qreport el AODQuery y a la hora de poner los objetos de los campos en lugar de relacionar el dataset con el AODQuery, lo he relacionado con la DB Clientes, por logica al usar esa base de datos que ha sido filtrada y ordenada previamente en el Form BuscaCliente debían mantenerse los filtros y el orden y asi ha sido. Solución mucho mas simple de lo que yo pensaba, pero me ha costado dar con ello.

Lepe, es cierto que no avanzo mucho, pero ya por empeño tenía que terminar con esto. Aunque voy optar por lo que dices, tienes razon, puedo ir haciendo lo que ya se en repartidores y asi hacer los dos a la vez, total las dudas van a ser las mismas y asi tengo mas trabajo adelantado.

Eso de las herencias David no lo acabo de entender bien pero se que es algo que voy a necesitar mas adelante. Investigaré a ver que se cuenta sobre ello y que parte es la que entiendo.

Os pongo en rapidshare y el que dice David.

Lo ultimo es el Form de BuscaCliente botón Imprimir, ya va el listado general y el formato por ficha, filtrado y ordenadito:

http://www.megaupload.com/es/?d=96VN8N4F

http://ul9l3.rapidshare.com/cgi-bin/upload.cgi?rsuploadid=142955452611349265

BUen fin de semana, el próximo paso es la opción repartidores, muy parecida a la de clientes, pero cambian unos campos.

David
21-10-2006, 21:33:25
En Project - Options , acuerdate de pasar los formularios donde tienes los QuickReports , al otro lado , a la derecha . Sino lo estas creando nuevamente .

Luego en la lista pone el DataModule en primer lugar .

Eso por un lado , por otro , mira si prefieres tener los formularios de clientes y buscar de esta manera .

Vas al formulario a la propiedad BorderSyle y ponlo a bsToolWindow , después en borderIcons , dale al signo + y pon la primera opción a True y las demás a False . Así los formularios no pueden ser cambiados de tamaño .En estos dos formularios pon la propiedad Position en poScreenCenter o poDeskoptCenter , quedará mejor .

Robert01
22-10-2006, 18:33:18
Hola delphitest

No se peeden descargar más los archivos cpmprimidos de esos sitios, por lo menos yo no pude bajarlos de ninguno de los dos.
¿no hay otro sitio que sea menos complicado?

saludos

Delphitest
22-10-2006, 19:58:00
Buenas tardes,

David, gracias por recordarme eso de la organización, tengo tantas cosas que tener en cuenta que se me había pasado. Ya lo he hecho y tambien lo que comentas de las ventanas, es cierto, queda mejor así.

Hoy no subo nada nuevo pero ando en ello, prefiero ya pasaros las novedades mañana con los repartidores totalmente terminados y unos cuantos cambios mas que he hecho, está quedando bien.

Por otra parte ando dandole vueltas a lo que viene despues de eso, que serán las tarifas y lo de los albaranes, por ahora no se ni por donde empezar, por lo que veo hay que dividir la factura o el albaran en dos partes, el encabezado y el detalle, eso va a tener trabajo :eek: . De momento esta semana quiero terminar los trozos que tengo a medias para no liarme mas. Cuando llegue a esto ya os avisaré.

Subo de forma puntual en zip lo mismo que subí el otro día a ver si Robert lo puede descargar, sino ya miraré otras opciones para dejaros lo ficheros en sitios mas fiables que esas web, aunque yo no he tenido problemas para descargarlo.

Hasta mañana

Delphitest
23-10-2006, 16:49:59
Buenas tardes de nuevo,

esta vez he tardado un poco mas en poneros los adelantos.

He estado haciendo la parte de repartidores, es muy parecida a la de clientes y no he visto oportuno iros dando detalles paso a paso de esta parte ya que no aportaría gran cosa hasta que no estuviese acabada.

Como bien decía Lepe, a medida que he estado haciendo esta opción, han salido fallos en los clientes y ademas tambien he podido comprobar que había cosas que no me gustaban, asi que por eso he tardado un poco, pero ya está todo en orden.

Estos son los cambios:

--> Había un fallo en clientes, la impresion imprimía siempre todas las fichas en vez de una individual, lo he solucionado quitando el locate y poniendo un sistema de filtrado solo teniendo en cuenta el campo del código de cliente.

--> Donde lo he visto mas conveniente he añadido a través de la propiedad "hint" información de los botones.

--> He creado unos botones de acceso directo a Clientes y Repartidores desde el Form Principal.

--> Me ha tocado crear dentro de la base de datos Gesatrans una nueva tabla, la he llamado Repartidores.

--> En lugar de aprovechar el DTMClientes y para no liarme he preferido crear unos nuevo llamado DTMRepartidores, por eso de que el nombre sea mas identificativo. Tambien he creado el Form FRepartidores y FBuscarRepartidores, muy parecidos a los de los clientes. Como particularidad vereis que he cambiado algunos campos, por ej. nombre cial por Nombre y razon social por apellidos, ademas de quitar el campo Fax que no sirve para mucho en el caso de los repartidores. Tambien, y por eso de aprender algo nuevo, he añadido un campo con la foto del repartidor, es bastante sencillo y asi no me resulta todo tan monotono. Se puede añadir o borrar si se quiere, auque solo en formato .BMP

--> Me he cansado del navegador predefinido porque no sabía indentificar las acciones de los botones de forma individual, entonces he creado botones propios y he dejado el navegador para movernos por los registros. Echarle un vistazo , ha quedado muy chulo (o eso me parece a mi).

--> He tenido que ingeniarmelas como he podido para que los campos que aparecen en los formularios no sean editables de entrada, eso tiene peligro y no me gustaba. Por eso he tenido que poner botones para añadir, borrar y editar los registros.

Aqui está lo nuevo, probarlo si podeis y ponerle pegas y fallos asi lo vamos depurando entre todos :)

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

Espero que no tengais problemas para descargarlo, creo que lo dejan ahí unos 20 días.

Ahora voy con el apartado de tarifas. A grandes rasgos tengo que controlar el peso de la mercancía y la zona de destino, ya os iré contando.

Un saludo

Delphitest
23-10-2006, 17:41:02
Solo un segundin, ya tengo otra opción mas fiable para poneros los archivos, aquí no se borran con el tiempo.

Los voy a subir a un servidor donde tengo un hosting, espero que funcione mejor, ya me contareis. Lo de hoy lo meto tambien aquí (http://www.solotrading.com/Delphi/Gesatrans231006.rar):


Lo pongo en formato RAR en vez de ZIP ya que parece que lo comprime mas y ocupa menos espacio.

ya me direis.

Caral
23-10-2006, 19:11:34
Hola Delphitest
No he podido ver el programa funcionando pero se ve bien el contenido, se ve que has trabajado, ya se que eres constante, la idea es que sigas y lo termines, que de aqui algo sale;) .
Aqui te envio un adelanto de la parte de albaranes, ya se que le haras las modificaciones a tu gusto, pero, ayuda es ayuda:D , trata de enviar los archivos completos, ya que faltan algunos y no corre.
Estas son tres pantallas, Albaranes, Transacciones, busqueda.
Las situe en albaranes, pruebalo y me dices.
Aqui esta:
http://rapidshare.com/files/385786/Gesatrans231006.rar.html
Necesitas, Cuentas X cobrar y Pagar ?
Saludos

Delphitest
23-10-2006, 19:49:10
Hola Caral,

es cierto, no funciona lo que he subido, me he debido liar con el modulo de los repartidores.

Resulta que si esos archivos , no están dentro de Datos no va. (Son dmRepartidores), solo con cambiarlos a esa carpeta ya funciona.

De todos modos ya he cambiado el .rar del link que puse antes.

Voy a ver eso de los albaranes, en cuanto a X cobrar y pagar, solo necesito saber lo que falta X cobrar, ya que no llevaré por ahora control de gastos, solo de ingresos.

Lo que pretendo un poco por encima es:

Poder hacer presupuestos, albaranes y facturas pero estas últimas además de poder emitir una en blanco tambien me interesa poder convertir uno o varios albaranes en factura. Trabajamos mas bien el dia a dia con albaranes y solo facturamos a fin de mes, creo que pudiendolos convertir sería lo ideal.

Voy a agilizar un poco lo de las tarifas aunque no quede completo por el momento y me pongo a ver eso que me has pasado.

Gracias de nuevo Caral por las molestias que te estas tomando ;)

Un abrazo

Delphitest
24-10-2006, 11:56:32
Buenos días a tod@s,

acabo de terminar el apartado de Ficheros/Tarifas

Os cuento las ampliaciones que he hecho:

--> Crear una nueva tabla llamada Tarifa

--> Crear el Form de la tarifa con un boton mas sencillo que los anteriores para imprimir ya que solo necesito imprimir la tarifa entera y no de un solo registro.

--> Crear un Qreport para la impresión. Le falta texto de observaciones lógicamente para no meter ahí todos los detalles.

--> He creado un botón de acceso a tarifa desde la pantalla principal.

Voy a dejar tal cual esto de la tarifa de momento para no perder tanto tiempo en afinar y poder adelantar un poco el resto. Concretamente quiero empezar con los albaranes, la verdad estoy un poco en blanco y no se por donde empezar, ando leyendo todo lo que pillo en la red pero sigo teniendo dudas. Por lo que se ve hay hacer 2 tablas para los albaranes, una con el encabezado y otra con el detalle. el encabezado deberá ir de alguna forma vinculado en parte a la tabla de clientes para poder extraer los datos de ahi y el detalle a la tarifa para calcular los precios en funcion del peso de la mercancía.

... en fin esta parte parece tener mayor complicación que las anteriores.

He mirado lo que hiciste Caral, pero me da un error en NumEdit del unit UFTransMaterial.

Lo que yo pretendo hacer en albaranes es algo identico a una factura pero sin validez fiscal, solo para llevar un control diario de los servicios, luego a fin de mes facturo los albaranes.

Aqui está lo nuevo (http://www.solotrading.com/Delphi/Gesatrans241006.rar)

Que paseis un buen día.

Enan0
24-10-2006, 14:53:37
Perdon por mi ignorancia, pero en argentina creo que no usamos la palabra ALBARAN, Si es asi no la conozco.
alguien seria tan amable de Decirme Que es un ALBARAN, O algun otro Sinonimo.
gracias

HE buscado en google pero algunas definiciones son mas complicadas que la aplicación de una RNA. pero bueno.
Puede ser que SEa algo asi COMO un REMITO.

Delphitest
24-10-2006, 16:07:19
Hola ena0,

pues no sabría decirte como llamais a los albaranes allí.

Las 3 partes que necesito son:

Presupuesto: Documento que emito para que un cliente sepa el precio de un servicio/transporte de una forma meramente informativa, sin compromiso por ninguna de las partes.

Albarán: Documento que emito cuando se realiza un porte a un cliente habitual. Es como una nota de entrega que el cliente debe de firmar para dar conformidad pero no se cobra. (No tiene validez fiscal)

Factura: Documento que emito a fin de mes y que agrupa todos los albaranes de un cliente para poder cobrar. (tiene validez fiscal)

No se si con esto te he aclarado algo.

Un saludo

Caral
24-10-2006, 17:51:05
Hola
Un Albaran en realidad es un inventario de una u otra forma, la informacion que se saca es en relacion a un producto o servicio.
La empresa vende algo, lo que sea, productos, servicios, etc, tiene clientes que necesitan de ese algo, el albaran indica lo que se tiene, es un archivo.
Es una palabra que en realidad solo creo que se usa en España, en America se usa Inventario, que es en realidad un anglismo, (Proviene del sajon).
Saludos

Lepe
24-10-2006, 17:54:59
El albaran es una simple tabla, la factura son dos tablas en relación maestro-detalle (cabecera de factura y cuerpo).


Albaran, campos:
- id de albaran (autoincremento, puede haber huecos si no quieres huecos pregunta)
- numero de albaran (correlativo, no es clave principal), tipo A0000032/2006
- fecha albaran date
- remitente entero (clave ajena o foránea de cliente) con un DBLookup va que chuta
- Destinatario entero (clave ajena o foránea de cliente) con un DBLookup va que chuta
- Portes entero,un radiogrup con dos opciones:
- Pagados (se supone que los portes del albaran los paga el Remitente
- Debidos (los paga el destinatario del albaran)
- Base imponible
- Porcentaje de iva
- total de albaran currency (puede crearse o puede hacerse al vuelo)
- Los demás campos que requiera.

Para enlazar esto con la tarifa, puedo ayudarte un poco, ya que tengo algo parecido hecho. La filosofía que uso es:
- Dependiendo del tipo de portes (pagados o debidos) se elige la tarifa correspondiente de ese cliente, despues, según los kilos se eligen las 2 tarifas más cercanas y se añaden a Un Combobox, donde el usuario, puede elegir una de esas tarifas o poner una distinta.

Aunque se "debería elegir una de sus tarifas" a veces, por el volumen del paquete, se establece una "tarifa especial" para ese porte, por tanto, hay que dejar que el usuario pueda especificar esa tarifa excepcional. si te interesa puedo darte algún fragmento de código.

Saludos.

Caral
24-10-2006, 18:00:22
Hola Albaran
Tambien podria decirse de una PROFORMA, archivada.
La palabra clave es archivo, ya que sea inventario, proforma, documento, ect, este albaran es un archivo de esto.
Viendo la definicion de Lepe, es eso, una proforma, o factura previa, osea un archivo o tabla, en donde se coloca pues eso un producto que en este caso es un documento.
Saludos

Caral
24-10-2006, 18:09:36
Hola Delphitest
Sigo con problemas para ver el programa, no estan lo archivos:
DTMRepartidores, DTMTarifa, al no estar estos no puedo hacer nada, revisa que esten todos los archivos cuando los envies para poder verlos.
Saludos

Delphitest
24-10-2006, 22:06:04
Buenas noches Caral,

he descargado el archivo ese desde otro ordenador para ver si me daba el mismo problema que a ti, pero excepto lo de la famosa base de datos no dice nada. Recuerda que lo tengo en .../Borland/Delphi7/Projects y luego dentro de esa carpeta está Datos.

Igual es por eso.

Por otro lado ya ando con esto de los albaranes, no se si daré con ello. Hoy he tenido que apagar el ordenador y salir a dar un paseo porque ya no veia ni la pantalla :(

A todos los efectos el albaran ha de ser identico a una factura, es decir que tiene que tener por lo que he podido concluir, una cabecera y un desglose de linea, ya que puede tener varias.

Mañana continuo pero esto si que tiene tarea, no acabo de entender lo de relacionar las tablas y alguna cosa mas, pero insistiré mañana con la mente mas despejada porque hoy no da para más.

Hasta Mañana

Enan0
24-10-2006, 22:28:53
he descargado el archivo ese desde otro ordenador para ver si me daba el mismo problema que a ti, pero excepto lo de la famosa base de datos no dice nada

No has podido utulizar el cambio en el DAtamodule que te envie?, o simplemente decidiste no usarlo??.

bueno con referente al ALBARAN, por lo que entendi de lo que uds me comentaron. es aca en Argentina, un Remito.

Es decir un documento no valido como Factura, pero que se utiliza para el transporte de mercaderias, (debe llevarlo el transporte, para evitar Problemas legales). en este no hace falta que se indique importe pero si el Nº de factura al cual Corresponde.

saludos

Caral
24-10-2006, 22:57:04
Hola Delphitest
Sigo con el mismo problema, no tengo los archivos del data module, ni de tarifas ni de repartidores, el programa esta incompleto o no ve el mio estos archivos, me da un error que no encuentra las tablas, lo da, en la aplicacion, busca todo y ve si no has puesto algo en otro lado, el error empezo con la ampliacion que hiciste de estos.
Por otro lado; Me gustaria saber: a que se dedica la empresa, vende servicios, da transporte de mercaderia por encargo, se necesita algun sistema de control del transporte, estoy bastante confundido al respecto.
Es dificil sin conocer un poco en detalle como se trabaja, a que se dedica etc., para saber en que te puedo ayudar mas, el asunto de los albaranes no es complicado, pero, que haceis, sin esto no se como empezar siquiera.
Si esta en tus manos envia una idea general de la empresa, y procura revisar el contenido del programa, a mi no me va.
Saludos

Robert01
25-10-2006, 01:27:35
Hola Caral

Yo no tengo el control numedit, de donde lo instalo (uso la versión 6 del delphi).?

Por otra parte cada vez que bajo un programa tengo que editar el formulario donde está el Ado con el camino porque sino delphi hace crash!! le cambio el camino desde allí y todo OK. Voy a tener que crear una carpeta como la que ienen uds.

gracias, saludos

Enan0
25-10-2006, 02:46:05
Hola delphitest. solo queria hacerte un comentario.
La idea del DATAMODULE es: Tener un Acceso a Datos de manera Global. ya que si para cada Caso vas a crear un DATAMODULE es lo mismo que Crees Cada Ado en cada formulario. lo que tenes que hacer es modificar el Query en cada caso..

Saludos

Delphitest
25-10-2006, 07:50:29
Buenos días,

ante todo voy a dedicar un tiempo a "sanear" todo esto que tengo. Efectivamente Ena0 lo de los DataModule no lo he entendido bien, pensaba que era uno por acceso a tablas pero ya he visto que no tiene sentido, asi que voy a agrupar todo en el mismo, espero que no me traiga muchas complicaciones. Por otro lado si que he puesto el código que me dijiste para lo del path de la base de datos, estos últimos errores deben de ser en la última tabla de repartidores, ahí se me pasó.

Os intento explicar para que es la aplicación.

Es una empresa de transporte, por lo tanto no facturamos articulos ni llevamos un control de stock de mercancias ya que lo único que vendemos son servicios de transporte. Por eso la tarifa que he hecho contiene principalmente el peso y las diferentes zonas, por ej. 5 Kg a la zona 1 tiene un precio, 5 Kg a la zona 2 tiene otro, esa parte es la que facturo.

Lo de los albaranes le doy mucha importancia ya que es un paso previo a la facturación. No facturamos diariamente nuestros servicios, sino que los reflejamos en un albaran con su precio correpondiente para que nos quede constancia tanto al ciente como a nosotros del servicio prestado. Luego el último día del mes facturamos todos los albaranes de los clientes.

Espero que entendais mas o menos la finalidad del programa.

A ver si no me lío mucho quitando los DTM sobrantes y en cuanto lo tenga limpio aunque no haya terminado los albaranes os lo subo para que lo veais mas claro.

Que paseis un buen día :)

Delphitest
25-10-2006, 10:20:27
Bien, vaya paciencia que hay que tener para esto, me ha tocado cambiar uno a uno todas las referencias pero ya lo tengo.

He hecho, como decía Ena0, agrupar todo en un DTModule.

Conclusión que he quitado:

DTMClientes, DTMRepartidores, DTMTarifa, DTMFacturacion y lo he metido todo en un único llamado DTMGesatrans.

Lógicamente he cambiado todo lo que conlleva para que funcione.

Aqui lo tenies (http://www.solotrading.com/Delphi/Gesatrans251006.rar), espero que esta vez ya funcione.

De paso encontrareis un archivo llamado limpiar, es de DEC (Gracias de paso) que permite quitar toda la basura de archivos temporales que crea delphi y que no son necesarios, me estaban poniendo nervioso.

En el menú ficheros ya funciona todo, Clientes, Tarifas y Repartidores. Ahora voy con Ventas/Albaranes

Está empezado pero no terminado, al menos asi ya teneis una idea de lo que pretendo.

Como orientación:

FAlbaranes tiene acceso a 3 tablas; TAlbaranes, TDesgloseAlbaran y TClientes y pretendo que a traves de un panel que se oculta y se muestra segun la necesidad poder dar de alta las lineas de este albaran teniendo en cuenta la tarifa ... en fin ... me espera una buena con esto ;)

Un abrazo

Lepe
25-10-2006, 11:08:48
Pregunta a tu cliente si el tema de las tarifas es algo fijo.

No debe costar lo mismo llevar una cajita con un telefono móvil que una caja de un metro cúbico, aunque el peso sea el mismo. Más vale tener en cuenta el volumen del paquete además de su peso.

Saludos

Delphitest
25-10-2006, 11:34:18
El tema del volumen si hay que tenerlo en cuenta, pero en vez de ponerlo en la tarifa para no liarme lo estoy poniendo en las lineas de desglose del albaran al igual que otro campo "otros" para indicar algun posible gasto de manipulación, espera o reembolso.

Un saludo

Caral
25-10-2006, 18:32:38
Hola Delphitest
Ya he podido ver el programa aunque sigo sin ver el datamodule, pero ya lo corri y se ve bien.:)
Creo que vas por muy buen camino, la verdad vas muy adelandado y no se en que mas te pueda ayudar, ya me diras:rolleyes: .

Hola Robert01
Con respecto al componente numedit, esta aqui:
http://rapidshare.com/files/637120/NumEdit.zip.html
Solo lo tienes que instalar y ya.
La ventaja con este componente, es que es un edit normal, pero el intedit, solo permite ingresar datos tipo Int, y el floatedit, solo tipo float, es muy practico, ya lo veras, como lo uso mucho por eso el programa tiene estos componentes que se instalan con el numedit, que los contiene.
Me alegra que sigas el progreso de Delphitest y que te sirva de algo lo que esta haciendo el.:D
Saludos

Delphitest
25-10-2006, 18:51:49
Gracias Caral,

intento adelantar un poco la parte de los albaranes, ya sabía que aquí me surgirían un montón de dudas y así es. No quiero molestar demasiado en el foro porque soy conciente de que muchas dudas ya han sido tratadas así que voy buscando muy despacio e intento entender algo mas, pero reconozco que esto va para rato, me quedo atascado en cosas y no veas para salir de ellas.

Estoy intentando avanzar progresivamente para no meterme en la boca del lobo de golpe, aqui hay mucha tela que cortar.

Una pequeña duda que tengo:

A la hora de númeras los albaranes en un principio opte por poner un campo numerico autoincrementable, pero veo que no me interesa así, o sea que lo pongo numerico, indice y único requerido. Cuando se llega a ese DBEdit (el del núm de albaran) quiero que por defecto me ponga el número máximo + 1 que se encuentre en el campo Num_Albaran de TAlbaranes.

He visto mucho relacionado con sql pero me pregunto ¿no hay algo que no sea sql para allar ese valor máximo?

Me refiero igual que existe locate, filter, sort y esas ordenes que puedo utilizar sin mas, no hay algo tipo MAX() o parecido ???

No ando subiendo nada todavía porque sería liaros un poco, prefiero que se vea algo concreto hecho.

Un saludo

Caral
25-10-2006, 19:36:06
Hola
Con sql, es muy facil, no le tengas miedo:
En un query temporal pones esto:

QTemp.SQL.Text := 'Select Max(Num_Albaran ) From Albaranes';
QTemp.Open;
DBEdit1.Text := IntToStr(QTemp.Fields[0].AsInteger+1);

Leera la tabla, el valor maximo y le sumara 1.
Si lo quieres sin sql, en el caso que el valor sea tipo integer, es asi:
Con una variable:

Var
a,b: Integer;
begin
a:= 1;
b:= (StrToInt(DBEdit1.Text) + a);
DBEdit1.Text:= IntToStr(b);

Con esto al dbedit1 se le sumara el valor de (a) y lo optendra (b).
Bueno mas o menos es una explicacion simple, para que te guies.
Saludos

Delphitest
25-10-2006, 20:20:16
Perfecto Caral, gracias.

Una cosa menos en la que pensar :)

He aplicado la segunda forma, sin sql, he intentado lo primero que pero no me sacaba el max ni queriendo, algo estaba haciendo mal con total seguridad pero no he querido insitir. Siempre me ponía el valor a sumar, por ej. 1 , lo cambié a 2 para ver que hacía y me ponía 2, por lo que llego a la conclusión que sacaba el valor 0 del campo num-albaran.

Lo tengo solucionado con la otra forma, me sirve por ahora, aunque he tenido que meter antes una orden para ordenar la tabla por ese numero, asi me aseguro que es el mas alto antes de sumarle 1. y ademas muevo el puntero de la tabla al final;


Var
a,b: Integer;
begin
dtmgesatrans.TAlbaranes.sort := 'Num_Albaran';
dtmgesatrans.TAlbaranes.Last;
a:= 1;
b:= (StrToInt(DBEdit1.Text) + a);
dtmgesatrans.TAlbaranes.append;
DBEdit1.Enabled := True;
DBEdit1.Text:= IntToStr(b);
...
// Aqui empieza lo bueno ...



Mañana mas, buenas noches

Caral
25-10-2006, 21:30:12
Hola Delphitest
No se porque razon no funciona bien, seguro que algun maestro lo indica, pero ya te lo hice funcionar con sql, solo pon un edit y ya.
No hace falta poner la tabla en last, ni nada.
Prueba asi:

QTemp.SQL.Text := 'Select Max(Num_Albaran ) From Albaranes';
QTemp.Open;
Edit1.Text := IntToStr(QTemp.Fields[0].AsInteger+1);
DBEdit1.Text:= Edit1.Text;
Como ves al final le doy el valor del edit al dbedit, asi te va a funcionar.
Saludos

maeyanes
25-10-2006, 22:08:15
A ver... esto lo pueden hacer tan fácil como esto:


function GetAlbaranNextNo: Integer;
begin
with TADOQuery.Create(nil) do
try
// Aquí inicializas con la conexión a la base de datos...
SQL.Text := 'select max(Num_Albaran) from Albaranes';
try
Open;
Result := Fields[0].AsInteger + 1;
Close
except
ShowMessage('Ocurrió un error obteniendo número de Albarán')
end
finally
Free
free
end;

// Como usarlo:
procedure DataModule1.TablaAlbaranNewRecord(ADataSet: TDataSet);
begin
TablaAlbaran.FieldByName('Num_Albaran').AsInteger := GetAlbaranNextNo
end;


Esto es, al usar el evento OnNewRecord de la tabla albaranes, le asignas el número que le corresponde. Al hacer esto, si llegas a cancelar el albarán no pasa nada...


Saludos...

Robert01
26-10-2006, 03:44:00
Gracias caral por el dato.

Bajé uno de este enlace (http://www.delphiforfun.com), no se si será el mismo pero con tu código anduvo todo ok.

saludos

kalimero
26-10-2006, 10:05:01
Hola Delphitest.

En relacion a la numeracion de los Albaranes, te aconsejo que el dar numero al nuevo albaran sea la ultima operacion que se realice y no la primera como creo que estas planteando. Me explico: inicias la creación de un nuevo albaran y el sistema te asigna, por ejemplo, el numero 100. Un compañero tuyo inicia otro albaran y el sistema le asigna tambien el numero 100 (suponiendo que tu no hayas terminado todavia). Ahora resulta que tu compañero es mas rapido que tu y graba los datos de su albaran antes que tu. Cuando tu termines y vayas a grabar los datos de tu albaran nos encontraremos con que el albaran numero 100 ya está introducido(el de tu compañero). Por eso te recomiendo que asignar el numero debe ser lo ultimo de lo ultimo. Para esto, en los datasets hay un evento que se llama "beforePost". Coloca ahi el codigo de asignar el numero del albaran.

Saludos

Delphitest
26-10-2006, 18:16:44
Bueno, allá vamos ...

Buenas tardes ante todo.

Gracias Marcos por el código pero por lo que se ve esas 3 letras (SQL) me tienen manía, no creas que no lo he intentado pero no sabía donde había que meter la función (el procedure) y me he liado de nuevo, asi que lo dejo como está de momento.

Kalimero, buena observación eso de los números. Tendré que cambiarlo pero antes debo pensar como y donde ;) . No veas como me está costando esta parte. al estar divido en varios trozos, el albaran puede terminar parcialemente antes de meter las lineas o totalmente despues de ponerlas, pero de entrada debo poner un número aunque sea de referencia, ya le daré vueltas al tema.


Ya tengo muy adelantada la opción Ventas/Albaranes aunque no terminada aún pero os cuento los adelantos.

He optado por por dividir un solo form en varias partes.

Intervienen 3 tablas; Albaranes, DesgloseAlbaran (que contiene las lineas de los albaranes) y clientes (solo para sacar los datos de ahí)

He tenido que crear una relacion entre las tablas de los albaranes para que a cada albaran se le relacione con las lineas suyas unicamente, es decir que cada linea tiene el numero del albaran al que corresponde (es algo interno y eso no se ve)

Al entrar en esta opcion desde el menú;

Podemos:

Recorrer a traves de los tipicos botones los diferentes albaranes viendo su contenido, edit o borrar si es necesario un albaran y dar de alta uno nuevo.

En este último punto:

El número aparece por defecto buscando el mas alto actual +1 pero se puede cambiar, es un campo único pero no autoincrementable (por ahora mejor asi para no liarme), la fecha por defecto es la actual pero tb se puede cambiar. Al poner un codigo de cliente aparecen sus datos de forma automatica, si no conocemos el codigo podemos darle a ... y buscar el cliente con el sistema que hice la semana pasada, doble click en el y se ponen sus datos. Me falta la posibilidad de dar de alta un cliente desde aqui en caso de que no esté dado de alta. El resto son datos que se ven.

Una vez completada esa parte de datos de cabecera hay que añadir las lineas pulsando el signo + que aparece a la dcha del DBGrid.

Eso nos muestra un panel que hay que rellenar. Aceptar para tener en cuenta esa linea y pasar a la siguiente o cancelar para descartarla.

Un vez añadida las lineas necesarias basta con pulsa el icono Aceptar (el del Disco) y ya está, tenemos un albaran creado.

Me faltan por calcular las casillas, todavía no me he puesto con ello, os anticipo lo que quiero;

Cuando se da de alta una linea al poner Portes, reexpedicion y otros o parte de ellos deberia aparecer el total de esos campos sumados en importe (parcial), al aceptar la linea ese importe se tiene que sumar al campo Base y quedar reflejado por debajo del DBGrid. A medida que se añadan mas lineas la base se tiene que incrementar.

El iva estaría basado en el % de valor indicado en la cabecera del albaran al igual que el descuento, y finalmente el Total seria base-descuento+iva

Ahora me pongo con eso de los calculos, es algo que no he tocado nunca y me toca investigar de nuevo.

Tampoco imprime todavia pero eso lo dejo para mas tarde, primero los calculos.


Aqui esta lo nuevo (http://www.solotrading.com/Delphi/Gesatrans261006.rar)

A ver si tenemos suerte y podeis descargarlo y probarlo sin muchos problemas.

Sería de agradecer que alguien lo probase porque estoy seguro que tiene un monton de fallos que para mi están pasando desapercibidos.

Un abrazo y ya mañana vuelvo a la carga con los cálculos. :)

Robert01
26-10-2006, 23:23:08
hola a todos

Yo probé el código de maeyanes. A la función la puse en la unidad del datamodule. Agregué Dialogs en la unidad para poder usar showmessage.

Al ejecutar el código surgió un error cuando quise ingresar datos en el formulario de albaranes.

Con respecto a lo que decía caral que no veía el formulario del datamodule es por los valores de coordenadas que tenía (left y top), yo abrí el datamodule.dfm y le cambié por valores adecuados para que quede más o menos centrado en la pantalla.

saludos

xander
27-10-2006, 00:33:42
Dos cosas:

1.- Que bueno que estén haciendo un programita de Facturación entre todos aqui, de P.M....

2.- Que malo que lo estén haciendo en Access :(

Robert01
27-10-2006, 01:36:27
:eek: yo no estoy usando access, estoy usando paradox y al mismo tiempo estoy probando con lazarus.
saludos:cool:

Robert01
27-10-2006, 03:23:52
¿Porque usamos access?

En en mensaje anterior quise decir también lo estoy haciendo con paradox.

Debe haber muchos integrantes en el foro que al igual que yo no son profesionales en sistemas.

Los que estamos en estas condiciones tal vez carezcamos de los suficientes conocimientos de programación para empezar a utilizar bases de datos más poderosas y seguramente también más difíciles de usar.

Además hay muchos casos en que para pequeñas aplicaciones creo que con access es suficiente y por otra parte, siempre hay tiempo para cambiar porque en todo caso el cambio siempre va a insumir mucho menos tiempo que si no tuviéramos ningún conocimiento.

Yo no tengo demasiados conocimientos de paradox, access y ninguno de las otras bases de datos, etc pero con lo publicado estoy tratando de aprender un poco más.

Hace unos días traté de hacer las cosas usando firebird y mysql pero no conseguí entender como empezar.

Imagínense si en un curso de algo nos enseñan a sumar, restar, etc , a realizar operaciones básicas, y luego alguien nos dice que se puede hacer las cosas de otra forma: supongamos que tenemos que aprender álgebra, cálculo, etc en unos pocos días.

Si uno tiene conocimientos de visual basic resulta más fácil aprender delphi aunque sean diferentes y lo mismo ocurre con access.

Yo me doy cuenta de los vastos conocimientos que tienen muchos foristas y de lo acertadas que seguramente estarán sus preferencias, espero que mi humilde crítica no sea mal recibida.

Delphitest
27-10-2006, 05:13:17
Buenos días,

el uso de access ha sido por el hecho de que parto totalmente desde cero y prefiero dedicar mas tiempo a la programación de delphi que a entender como funciona el tema de las bases de datos pero cuando esté acabado prometo dedicar mi esfuerzo a traspasar todo a FireBird, mas que nada por aprender un poco mas.


Tienes razón Robert, el tema del DT puede ser por eso de la posición en pantalla, no me he dado cuenta del detalle pero trabajo con 2 monitores y en una resolución de 1280 x 1024, me resulta muy cómodo repartir las ventanas entre las dos pantallas.

Que tengais un buen día, yo empiezo con la tarea.

Delphitest
27-10-2006, 11:38:03
Pues ahora si que necesito ayuda porque me he quedado en blanco :confused:

Ando con el tema de los famosos cálculos.

Ya he conseguido, creando un campo calculado en la tabla TDesgloseAlbaran y llamado Importe, que me de un importe en cada linea de albaran.

Lo he añadido desde el DTMGesatrans y en la tabla he metido en el evento OnCalcFields


procedure TDTMGesatrans.TDesgloseAlbaranCalcFields(DataSet: TDataSet);
begin
TDesgloseAlbaranImporte.AsCurrency := TDesgloseAlbaranPortes.AsFloat + TDesgloseAlbaranReexpedicion.AsFloat + TDesgloseAlbaranOtros.AsFloat;
end;


Esa parte funciona sin problemas.

Ahora necesito que el Campo Base de la Tabla TAlbaranes sea la suma del campo importe (de TDesgloseAlbaran) teniendo en cuenta como filtro que todas las lineas a sumar tienen en comun el campo Num_Albaran.

A simple vista no tiene mucha complicación pero creo que el SQL me tiene manía, os digo lo que he hecho pero que no funciona:

He creado en el form del albaran una Query llamada ADOQAlbaran enlazada logicamente con TDesgloseAlbaran, hasta ahí creo que voy bien.

Ahora para el calculo (solo para probar) he puesto un botón y en el evento OnClick estoy probando esto:


ADOQAlbaran.Active := False;
ADOQAlbaran.Sql.add ('Select sum(Importe) as TotalImporte');
ADOQAlbaran.Sql.add ('From Desglose_Albaran');
ADOQAlbaran.Sql.add ('Where Num_Albaran = StrToInt (DBEdit1.text)');
ADOQAlbaran.Active := True;
ShowMessage('El importe total es ' + TotalImporte.AsCurrency);


De momento solo me conformo con que aparezca ese mensaje con el total para comprobar que esté bien, luego la finalidad es que lo ponga en DBEdit24.

DBEdit1 para que os orienteis es la casilla donde ya está el núm de albarán.

No funciona de esta manera pero soy incapaz de saber porque. Para empezar tengo que poner como nombre de tabla Desglose_Albaran (que es nombre original de access) en vez de TDesgloseAlbaran (que es el que tengo en el DT), eso me da igual pero no lo entiendo.

Luego el error me lo da diciendo que TotalImporte no está declarada.

Importe es de tipo Currency por cierto.

No paso de aqui.

Si alguno me podeis echar una mano os lo agradezco, veo que el sql y yo somos muy diferentes :o

Gracias por adelantado

kalimero
27-10-2006, 14:05:16
Hola Delphitest.
Por los detalles que das, creo que estas mezclando churras con meninas.Me explico. "TotalImporte" es el nombre de la columna que te dara el valor en la sentencia SQL. Para recoger ese valor en delphi tienes que hacer algo parecido a esto:

procedure Miprocedure;
var
Mivariable : Double
begin
Mivarible := Miquery.fieldbyname('TotalImporte').asFloat;
end;

Es decir , no puedes tratar "TotalImporte" como una variable, puesto que delphi no sabe nada de ella. Es algo interno al componente.
Una vez que tienes el valor recogido en "Mivaribledeclarada " ya puedes trabajar con ella.
Saludos

Enan0
27-10-2006, 15:40:08
Hola amigos, bueno para los que comentaron que era una lastima que solo se pudiera conectar Con ACCESS (ya se que muchos lo han modificado) Aca les dejo otra pequeña forma de como conectar a otra DB. Utilizando un archivo UDL.

Bueno primero que nada, en el datamodule Borren lo que contiene el ADOConnection1, en la propiedad Connection String. (En el Object Inspector).
Luego en el ONCreate de dicho DAtamodule pongan este codigo reemplazando la linea que corresponde:

ADOConnection1.ConnectionString:='FILE NAME=' + ExtractFilePath(paramstr(0)) + 'Conexion.Udl';


Bueno lo puse fijo con una Archivo llamado "Conexion.UDL" que deria encontrarse en la misma Carpeta que el "EXE".

Con esto podran importar la Base de Datos de ACCESS al motor que sea posible (creo que a casi todos) y luego hacer la Conexion corresponidente mediante dicho archivo.

Si no sabe como crear el archivo UDL: Creen un archivo de TEXT y cambienle la extencion por la antes citada. luego doble click y solo setear lo que corresponda.

Saludos

Robert01
27-10-2006, 15:41:27
hola delphitest

En el archivo que subiste ayer hay un formulario Frepartidores que tiene un link a TMDRepartidores (uno de los que tenías con un datamodule antes de que los pusieras a todos en TMDGesatrans)

Caral
27-10-2006, 17:41:25
Hola A todos
Siempre criticado a la pobre base de datos Access, que les ha hecho ?:confused: , si quereis liaros pues usad lo que querais, la verdad en esto hay mucha tela que cortar y tantas opiniones como foristas, me voy por lo sencillo, como buen principiante y creo en la simpleza ademas que Delphitest no habria avanzado tanto si no huviese empezado con lo mas sencillo, bueno esta es mi opinion.

Delphitest sigo sin ver algunos forms, si puedes colocarlos en otra posicion en la pantalla, seria bueno en tu proxima ampliacion.
Con respecto a lo relacionado con sumas etc, para mi lo estas haciendo dificil, en mi opinon el albaran se deberia hacer primero, sumar todo lo que se necesite y posteriormente, si quedo este como querias, grabarlo a la base de datos, asi podras hacer un albaran, por ejemplo, para ver a que precio saldria X transporte a X lugar por X peso, sin necesidad de grabarlo, que al cliente le parecio el precio, pues lo grabas, un albaran es en realidad una factura proforma, de una u otra manera, si todo lo haces directamente sobre la tabla, puedes equivocarte, ademas que estas consumiendo recursos sin necesidad.

Otra cosa y creo es muy importante, cuando abres el datamodule, creas y abres todas las tablas de una vez, ahora tienes 4 datos, cuando tengas 1.000.000 tendras que tomarte un cafe hasta que el programa arranque, las tablas hay que iniciarlas cuando se necesitan y cerrarlas cuando no, por eso se usan los query ya que estos no traen toda la informacion, solo lo que necesitas ahorrando tiempo y recursos, sin temor a equivocarme, pienso que lo estas haciendo mal, ya se que no es tu culpa, pero estas a tiempo de cambiarlo luego sera mas dificil, si te vas fijando en tu programa te daras cuenta que cada vez es mas lento, fijate, porque luego le echaran la culpa al pobre Access, mi base de datos tiene casi 800m y corre a la perfeccion.
Espero el proximo avance, ojala con los forms en su lugar para poder verlos.
Saludos

David
27-10-2006, 18:32:26
Lo que dice Caral de traerte todos los datos con la tabla , me pregunto si habrá alguna instrucción para no permitir que vengan más de 50 registros de una vez .

En cuanto al programa , le he echado un vistazo por encima y lo que no me acaba de convencer es poner en enabled := False , cuando no esta en modo de insert or edit . El caso es que con poner el DBGrid , ReadOnly vale , y además así se ve muy mal los datos , mejor es si quieres cambiar el color del dbedit , ponle el color clInfoBk , cuando este en modo de edición , pero lo de enabled := false ,no me gusta , no he visto que los programas esten así . Esto es más un dato de decoración , pero bueno .

Mirá Delphitest , hay un programador famoso de Delphi , que escribe libros , yo tengo uno de ellos y en él hay ejemplos de cada capítulo , ejemplos de programas pequeños claro esta . Te envio uno de esos programas pequeños , en un archivo de sólo 22 kb , para que analices como programa este hombre . Aquí lo tienes : http://www.megaupload.com/es/?d=HBGZCIWU

Delphitest
27-10-2006, 19:40:15
Buenas tardes,

ando un poco liado hoy, os pongo las actualizaciones.

He cambiado lo que comentas David, es cosa de gustos supongo pero lo he puesto como dices.

Caral ya he movido todo a la misma pantalla, ahora seguro que lo puedes ver sin problema. Eso que dices de las BD en el DTM es cierto, se nota que poco a poco va tardando mas en abrir. Ya lo intentaré solucionar este fin de semana.

Probar lo de los albaranes si quereis, pero me sigue faltando lo de la Base Imponible, supongo que no puede ser tan complicado pero ya no veo mas alla de lo que tengo, a ver si me despejo un poco estos días y encuentro la solución.

Aquí está lo nuevo (http://www.solotrading.com/Delphi/Gesatrans271006.rar)

Buen fin de semana para todos

Caral
27-10-2006, 19:55:34
Vale Ya lo veo
En que quieres que te ayude?
Quieres que te adelante algo ?
Saludos

Delphitest
27-10-2006, 20:29:04
Entra en la opción, Ventas/Albaranes

Si das de alta uno nuevo veras que despues de meter los datos de cabecera hay que pulsar el botón que pone "+" a la dcha del DBGrid.

Eso permite meter las lineas del albaran y aparecen con un importe de cada linea.

Mete una linea , le das a aceptar y luego otra y ya a cancelar, eso hace que las lineas aparezcan en el dbgrid. Hasta ahi todo bien, pero fijate en la base imponible , está a cero, eso es lo que quiero solucionar, que sea la suma de los importes.

El iva, descuento y total ya están preparados.

Gracias de nuevo.

Caral
27-10-2006, 20:36:00
Hola
Dame el concepto matematico de esto, no lo entiendo.
Creo que va asi:
Base Imponible + IVA - Descuento = Total
Es asi ???
Quieres hacer la operacion y si te apetece, lo grabas o no.??
Saludos

Caral
27-10-2006, 22:47:21
Hola Delphitest
Trabaje un rato en lo de las sumas, va bien pero tengo un problema con los tipos de datos de la base de datos, tendras que verificarlo tu, si te parecen los cambios pon otro adelanto, con la base de datos completa.
Veras que he puesto dos botones, uno calcula el importe del albaran y otro suma todo, base importe + iva - descuentos = Total.
Bueno por hoy me canse, nos vemos el lunes, en linea.
Aqui te envio los cambios, revisalos y corre el programa para que los entiendas mejor.
Aqui esta:
http://rapidshare.com/files/934431/Projects.zip.html
Saludos y buen fin de semana

Robert01
31-10-2006, 10:58:26
Hola delphitest

¿podrías poner las fórmulas que usas para hacer los cálculos del albarán? Yo no tengo muchos conocimientos de contabilidad. Tampoco se que es la base imponible.

¿Como hago para cargar los datos de una tabla por partes?
Caral dijo algo sobre eso hace unos días.

Tengo una tabla con 1.5 millones de registros y si un programa los lee todos a la vez va a resultar extremadamente lento.

saludos

Lepe
31-10-2006, 12:52:11
Hola Robert, ¿Qué tipo de operación quieres hacer?, ¿afectaría a todos los registros?

Lo normal sería hacerlo por una consulta (TQuery), donde se restrinja los datos:

select * from tabla where codigoCliente = 23


Aunque estamos seleccionando todos los campos (columnas) de la tabla, esa consulta debería ser muy rápida, ya que afectará a 1 registro. Incluso afectando a 1.000 clientes, debe ser inmediato.

Lo normal es acelerar las búsquedas creando índices secundarios (sobre los campos de búsqueda), a menos que sean clave primaria, que entonces, ya llevan un índice.

Saludos

Robert01
31-10-2006, 15:40:23
hola lepe

con repecto a la búsqueda es para encontrar personas digamos que empiezan con una letra, sílaba o dos sílabas en un campo donde está apellido, nombres y direcciones. Yo buscaría por el apellido.

Si trato de ordenar por el mismo tarda mucho en hacerlo entonces creo que la alternativa es filtrar sin ordenar.

Por lo que dijeron antes si el programa lee todos los datos de la tabla va a ser muy lento pero no se cuanto

saludos

Caral
31-10-2006, 16:23:03
Hola Robert 01
Como dice lepe, se puede hacer una consulta con sql y es realmente rapida, tambien puedes hacer una consulta con sql y filtrarla para encontrar los datos segun quieras, por ejemplo, digamos que tienes una tabla que se llama clientes y un campo que se llama apellido que es el que quieres filtrar entonces haces una consulta y un filtro de la misma en un query, asi:
Colocas un query y en el evento oncreate del form pones esto:

Query1.clear;
Query1.sql.Text:= 'Select apellido from clientes';
Query1.Open;

Tambien lo puedes poner en otro evento el que te convenga.

Ademas pones un edit en el form y en el evento OnChange del edit pones esto:

var
Filtro : String;
begin
If (Edit1.Text <> '') then
begin
Query1.Filtered := False;
Filtro := 'apellido Like '''+ Edit1.Text + '*'''
Query1.Filter := Filtro;
Query1.Filtered := True


Con esto la consulta esta hecha en sql y es rapida y el filtro esta hecho en el edit, con este ira buscando en apellido por la primera letra que introduzcas.
Saludos

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).


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 (http://www.solotrading.com/Delphi/Gesatrans311006.rar)

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:

Query1.sql.Text:= 'Select apellido from clientes where apellido like :Ape' ;
Query1.Prepare;


Ahora en el Edit, en su evento OnkeyDown:

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
¿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:

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:

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:

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:

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:

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 (http://www.solotrading.com/Delphi/Gesatrans031106.rar)

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

Robert01
04-11-2006, 13:17:22
Caral:
traté de compilar tu código pero me da un error --> "corcon.dcu no encontrado"
Si elimino corba npo aparece el error ese pero hay otro que dice: " Talbaranes field cod_repartidor no encontrado".
Yo tengo instalado corba 4.0.

No se en que me equivoqué que no anda bien.
saludos

Robert01
04-11-2006, 19:13:36
Perdón caral pero no que pasó en mi pc. todo anda perfectamente.

No se como es que apareció un control corba en el formulario...¿ o ejecuté otra cosa?

Estoy pasando la base de datos de access a paradox. En access en fácil poner las imágenes, se usan binarios largos.
Creo que tengo un problema en paradox porque tendría que poder usar Graphics u Ole pero no me sale el cuadro de diálogo para insertar las imágenes.

saludos

David
04-11-2006, 21:18:08
Lo que me parece raro es poner una expresión así :

variable = DBEdit1.Text ;

el componente TDBEdit , tiene en su propiedad datasource el enlace a un campo de la base de datos , no seria poner la expresión así :

variable = Ttable1campo1.Value ;

o

variable := Ttable1.FieldByName('campo').AsString;

Por ejemplo .

David
04-11-2006, 22:55:32
El formulario login , te pide nombre de usario y contraseña , pero si los datos estan la tabla access, cualquiera puede acceder a ellos . De que vale eso entonces , o con añadir nuevos datos , pues listo .

que es lo que yo haria , pues poner un login y password fijo , una variable , nada de bases de datos , por ejemplo nombre de usuario . Gesatrans , password hola , pues bien , esto estaria en código y al usuario se le dice cual es su password según haya compilado .

Esto es algo que se me ocurre improvisando , seguro que hay formas mejores .

En cuanto al formulario de login , suponiendo que el usuario no mire la base de datos , es muy fácil de saltar , como pulsando Alt + F4 . Yo lo he retocado , adjunto el pas.

Delphitest
05-11-2006, 11:17:30
Buenos días,

bueno, ya tengo hecha la parte de presupuestos, no la subo todavía ya qu es identica a los albaranes. Por otra parte he modificado lo del archivo .ini que dice Caral, es bastante util.

Lo que no pongo todavía es esa parte del login, mas que nada como tengo que ejecutar tantas veces la aplicación para hacer pruebas resultaria un poco pesado meter siempre esos datos, pero si lo pondré mas adelante. Es cierto que pulsando 'Cancelar' tambien entre en el programa saltandose el login pero ya habrá formas de darle vueltas a eso.

Antes de seguir con las facturas veo algo que resultaria muy util tanto en albaranes como en presupuestos, pero no se como hacerlo.

He puesto una condición que nos obliga a poner el núm de bultos y el peso en cada linea de desglose ya que en ello se basa luego todo el resto.

Lo que me gustaría es que una vez metido el peso (los bultos me dan lo mismo) se hiciese un chequeo en la tabla tarifa para extraer el precio del porte que corresponda, pero no se por donde empezar esto ya que hay varias cosas a tener en cuenta, por ej.:

La tarifa tiene saltos de pesos por lo que habría que buscar el rango que corresponda y ademas tiene una zona.

Kgs Portes Zona 0 Portes Zona 1 Portes Zona 2 ...
5 8.65 10.25 12.53
10 9.56 12.50 14.50
....

por ejemplo una linea con peso 3 kgs seria la de 5 pero si fuese 6 sería la de 10 ... o sea que tengo que tener en cuenta por un lado ese peso para buscar el precio del porte pero por otro, y ahi es donde se complica el tema, debo tener en cuenta la zona. Esa zona dependerá de la ciudad de destino.

Para esto de la zona había pensado enlazar una base de datos de codigos postales por ejemplo con animo de que a cada codigo postal se le asignara una poblacion, ciudad y zona correspondiente pero no se si estos sobrecargaría demasiado el sistema. Otra opcion es añadir en cada linea un campo en el que tenga que poner la zona el usuario (pero quedaría un poco mal pienso).

Ahi ando, a ver si alguien me puede dar su opinión al respecto, no busco la forma de programarlo, mas bien la forma de hacerlo :)

Buen fin de semana

Lepe
05-11-2006, 11:42:29
Sobre el login y password, lo mejor es encriptar el password, de esa forma, aunque se añadan en access, al no concordar la encriptación, el programa jamás dejará entrar al usuario. Si encriptamos el nombre de usuario, mejor que mejor.

En cuanto a los códigos postales, no es buena idea desde mi punto de vista. De hecho, al menos en españa, una misma calle puede tener 2 códigos postales distintos, depende por tanto, del número, calle y población. Eso solo ya es un programa aparte.

Lo que sí podrías tener es una tabla donde a cada población se le asigne la zona 0, zona 1, etc. Así al escribir la población de destino, se puede saber la zona.

La consulta de tarifas, bien puede ser así:

select * from tarifas
where kg >= :Kilos

El parámetro "Kilos" se pilla del albaran, claro. Si el salto de pesos es siempre fijo y constante, puedes añadir:

and kg < (:Kilos + salto)
de esta forma solo traerá 1 o 2 registros.

Ahora coges los datos del primer registro que aparezca en la consulta, de la columna que corresponda según la zona.

Saludos

Robert01
05-11-2006, 23:30:34
Delphitest usa Adoconnection y AdoTable (como en el código de abajo), en este caso es posible usar AdoTable.sort pero como se podría hacer lo mismo si uso BDE y TTable?

¿o no se requiere ordenar por código?


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure TFBuscaCliente.RadioGroup1Click(Sender: TObject);
var orden: string;
begin
case Radiogroup1.ItemIndex of
0: orden := 'Cod_Cliente';
1: orden := 'Nombre_Cial';
2: orden := 'Razon_Social';
3: orden := 'Localidad';
4: orden := 'Provincia';
5: orden := 'Pais';
end;
dtmgesatrans.TClientes.sort:= orden ;
end;





Saludos

Caral
06-11-2006, 16:38:47
Hola a todos
Me descuido un fin de semana y hay criticas por doquier :mad: , bueno vamos una a una, hay que defenderse.
David: En el caso del login, Si se pone en la tabla se puede modificar la clave cada vez que se quiera y poner los usuarios y priviligios a estos que uno quiera, ademas ponerle clave a la base de datos es facil; Ya se que evadir la clave en access es facil, tambien lo es en otras; Con relacion a ponerlo por codigo, una vez que la descubran, bueno, ademas si se quiere modificar, hay que hacerlo en delphi, crear el ejecutable nuevamente y demas, es muy engorroso, no me parece, aun me gusta mas la idea de Lepe, siento que esta mas en la tierra.
Delphitest: Me alegro que te gustara lo del archivo ini, es bastante util, ya lo veras con el tiempo.
Para que el login no salga de momento, simplemente rodealo con parentesis{ } y no saldra; Cierto cuando das cancelar siempre se va al principal, es tan facil como pinchar en el boton cancelar del login y en vez de Close; Poner Application.Terminate; y ya, verdad que no era tan dificil.
Me alegra mucho cuando la critica es constructiva, asi tambien aprendo y puedo reconocer mis errores perfectamente, pero, criticar y no aportar me parece descortes, he tratado, con mis limitaciones de novato, ayudar a Delphitest con lo que he podido, dando no solo ideas sino codigo, si bien no de programador, puesto que no lo soy, si de ayuda, no estoy en condicion de criticar ningun codigo ya que como novato y aprendiz me es muy dificil, en este mundo de delphi, si hay algo claro es que se puede hacer todo de muchas formas diferentes, la mia es simple, si la de un aprendiz; No critiquemos sino aportamos, ver el partido desdes las graderias siempre sera mas facil.
Con esto me voy a retirar de este proyecto, no sin antes desear a Delphitest que lo pueda y estoy seguro de eso, terminar con exito.
Saludos

xander
06-11-2006, 18:46:54
hombre Caral!, no hagas caso, vas perfectamente, siempre te vas a encontrar gente alzadilla y creida por todos lados, pero lo resuelves fácil haciendo caso a lo que tu quieras y lo que no solo pasatelo por entre los aguacates, asi de simple.

Para lo de la contraseña en la BD puedo aportar que se podría encriptar la contraseña en la BD asi aunque se abra la bd no se sabrá cual es la contraseña real del usuario. como la ves mi estimado Caral???

Delphitest
06-11-2006, 20:40:43
Buenas tardes a tod@s,

no pensaba postear tan pronto todavía, se me ha ocurrido llevar mis adelantos a la oficina para que lo vean los compañeros y ya hay pegas por todos los lados, tengo que hacer un monton de cambios para que sea de su agrado, acabo de llegar y vengo un poco cabreado la verdad :mad: . Con las horas que le echo a esto ...

En fin, que me toca cambiar varias cosas antes de poder seguir, por cierto Caral no me va eso del .ini :confused: lo he probado en otro equipo y me sigue dando el error en la BD, algo haré mal supongo.

Lo que si quiero que sepas es que has sido de gran ayuda para mi y de las pocas personas que se ha brindado a ayudar al completo con comentarios y codigos, eso es de agradecer. Ya sabes como son los foros, este y todos, siempre hay criticas, no hay remedio. Si optas por retirarte te echaremos de menos, porque aunque haya poca colaboración parece que interesados si que hay muchos y que nos leen.

Desde aqui agradezco toda tu ayuda y si te animas a seguir por aqui ya sabes que será bienvenido pese a lo que se pueda decir en contra.

Un abarazo muy fuerte y gracias por todo. (a ver ahora quien me resuelve la dudas :rolleyes: )

Caral
06-11-2006, 21:44:02
Hola Delphitest
No me gusta dejar las cosas a medias asi que veamos, que te pasa con el ini.
Si el programa lo trasladas a otro ordenador, con todo y base de datos, pues no debe haber ningun problema, simplemente en este archivo ini, tienes que poner la direccion en la que este o coloques la base de datos.
Si el programa va a estar en un ordenador y la base de datos en otro, tiene que haber una red, osea conexion entre estos ordenadores, si estan conectados se establece una conexion en mipc, con el boton derecho, conectar a unidad de red, hay te saldra una pantalla en la que puedes poner en unidad Z y en carpeta, tendras que buscar el otro ordenador por su nombre, le das examinar y lo buscas, aplica conectar de nuevo al iniciar sesion y aceptar, hay se creara un acceso al otro ordenador, de nuevo en mipc al darle doble click, veras la conexion en este caso Z, te metes en esta y buscas la direccion donde esta la base de datos, la copias y la pegas en el archivo ini, recordando que sea el formato igual al que esta, con esto el programa ya puede ver la base de datos y funcionar, el archivo ini quedaria si la carpeta se llama gesatrans, algo como:

[BD]
Path="Z:\Gesatrans\Datos\Gesatrans.MDB"
[Logon]
Auto="No"
Login=""
Pass=""

No se que error te este dando ahora mismo, pero debe ser algo sencillo de solucionar, mira quien lo dice un aprendiz :D
Espero que con esto soluciones el problema del ini, que es verdaderamente practico.
Saludos

Robert01
07-11-2006, 15:17:32
Hola a todos.

Esta es una versión modificada del programa que está haciendo delphitest.
Yo en vez de usar adoconection y access database usé base de datos paradox, ttables y datasource.
En la parte de ingreso modifiqué un poco lo que hizo caral porque no me salió bien usando query y sql, tampoco usé el ini (si alguien me puede decir como podría hacerlo la ayuda es bienvenida)

Puse una contraseña para que no sea posible ingresar a la tabla usuarios que es donde está el login y la contraseña del usuario (para esta prueba master password = Gesa1000_ y auxiliary password = Gesa_1000; El nombre de usuario y contraseña son Gesa y gesa.

No se que error hay en el formulario Albaranes porque los campos Total, iva, descuento se mantienen en blanco.

No envío el ejecutable pero el alias para las tabla es gesa y el camino es c:\Archivos de programa\Borland\Delphi7\Projects\Datos

El link para download es:
http://download.yousendit.com/B71A2CB37EA9FF7C (http://download.yousendit.com/B71A2CB37EA9FF7C)

Saludos

Caral
07-11-2006, 18:21:39
Hola Delphitest
Primero quiero tratar de responder a tu ultima duda que fue esta:
Lo que me gustaría es que una vez metido el peso (los bultos me dan lo mismo) se hiciese un chequeo en la tabla tarifa para extraer el precio del porte que corresponda, pero no se por donde empezar esto ya que hay varias cosas a tener en cuenta, por ej.:

Trate de analizar esto y no pude hacerlo con la tabla tarifa, por eso la modifique, para que te des cuenta de varias cosas.
Con la modificacion a la tabla, logro que se puedan crear las zonas que se quiera ademas de las variaciones de peso y costo que se necesiten.
Como lo que indicas es esto:
Ahi ando, a ver si alguien me puede dar su opinión al respecto, no busco la forma de programarlo, mas bien la forma de hacerlo

Entonces no modifique el programa, hice un pequeño programa de ejemplo, como dicen para muestra un boton.
Ademas te hice varias cosas, como un filtro, para que veas los zonas y otros.
El programita va mas o menos explicado, asi que creo no tendras problemas en analizarlo.
Con relacion a que cuando pones el peso, salga de una vez el porte, ya sale en este, nada mas revislo, creo que te sera util.
Para poder ejecutarlo sin problemas ponlo dentro de:
C:\Archivos de programa\Borland\Delphi7\Projects
El archivo se llama Ejemplo, y tiene la base de datos con la tabla tarifa, no vas a tener problemas en verlo, seguro.
Bueno aqui te envio este ejemplito, seguro que me lo critican, espero, constructivamente.:rolleyes: :D
Aqui esta:
http://rapidshare.com/files/2376064/Ejemplo.zip.html
Saludos

Enan0
07-11-2006, 19:45:01
Hola a todos. Bueno con referencia al login creo que lo mejor es almacenarlo en la base de datos, de manera encriptada.

y la forma mas segura seria la siguiente.. (Fanaticos del Hack o Decrypt abstenerse) es para Usuarios medios ejjeee.

Bueno mira. lo que tendrias que hacer es: El PSW que el usuario ingrese modificarlo utilizando el Nombre de Usuario+ algun algoritmo matematico.

porque? bueno porque si el usuario se le ocurre entrar a la base de datos y tocar o borrar directamente el Campo Password de la base de datos siemplemente este no Funcionaria.

La Desencriptacion seria el inverso a la Encriptacion ;).



Function Crypt(Psw,User:string):string;
Cont C=666;
var i,n:Integer;
begin
result:='';
for i:=1 to length(psw) do begin
if I<=length(user) then
n:=i;
else if n>=length(user) then
n:=1
else
inc(n);

result:=result+Inttostr((Byte(User[n])-byte(psw[i])) XOR c) +',';
end;
end;



esto te daria un string "12,255,123,789" el cual deberias alamacenar en la base de datos. y al momento de hacer el logue deberias hacer el paso inverso.

Saludos

PD: la funcion inversa al Byte es Char()

Delphitest
08-11-2006, 20:49:10
Hola Caral, no se si sigues leyendo esto, espero que si ;)

No hay forma de hacer funcionar el tema del archivo .ini

Entiendo lo del path y lo cambio, meto los dos archivos en la misma carpeta, el .exe y el .ini pero no hay forma.

Una pregunta tonta , yo he modificado el codigo en base a lo que hiciste tu, es decir que en el dmGesatrans, en el evento oncreate, he metido lo mismo que tu relacionado con la ruta de la BD. Pero en el ADOConnection , en ConnectionString sigue apareciendo la ruta antigua ¿puede eso interferir?

El caso es que por mucho que le pongo un nuevo path en el .ini siempre se va a la ruta antigua y da el error tipico de que no encuentra la BD.

Gracias por comprobarlo si puedes.

Tardaré unos días en aportar las modificaciones porque tengo muchas cosas que cambiar antes de poder seguir.

Un abrazo

Caral
08-11-2006, 23:42:20
Hola Delphitest
La verdad despues de la mala leche que me tenia el otro dia, y que nuestro amigo Robert01 me envio un correo, se me paso.:)
Voy a tratar de seguir en esto.
Despues de revisar muchas cosas y conceptos, se llega a la conclusion de que parece que estamos haciendo muchos programas diferentes, ya que la forma de programar varia mucho de uno a otro, quiero ver si con este adelanto que te envio podemos, si te parece continuar con un solo modelo, hay varias cosas que no entiendo bien y por eso las tengo que hacer como creo conveniente, por ejemplo la tabla tarifa, para no modificarla cree una tabla tarifa1, que es la que estoy usando.

Este adelanto ya tiene el archivo ini y tambien otras cosas que inclui como el BackUp, que es un programa que encontre por la red muy facil de ejecutar, ya lo probaras, Ademas las cuentas por cobrar, que la verdad como comerciante me parece que no se pueden escapar :D .

En el caso de los alvaranes, veras un combobox que indica la zona, si colocas el peso y con el combo seleccionas la zona, el Porte cambia inmediatamente, asi dependiendo de la zona y el peso el porte cambiara, con solo aceptar se grabara el nuevo porte, esto tambien sirve para modificar algun alvaran, pruebalo y me dices.

Bueno aqui esta el adelanto, creo que si lo unes a lo tuyo funcionara bien, si no puedes unirlo, me envias lo que has hecho y lo uno.

Aqui:
http://rapidshare.com/files/2559378/Gesatrans.zip.html
Saludos

Caral
08-11-2006, 23:57:08
Hola de nuevo
Se me olvidava, la direccion en el archivo ini tiene que especificar el nombre de la base de datos antes de el archivo, en este adelanto que te envie, el archivo ini tiene la direccion:
Path="C:\Gesatrans\Datos\Gesatrans.MDB"
eso quiere decir que la carpeta Gesatrans esta en C, dentro de esta carpeta esta la carpeta Datos y dentro de esta la base de datos gesatrans.mdb
Si colocas esta carpea que envio en C y ejecutas el programa que esta compilado veras que funciona perfectamente, el ejecutable y el ini estan en la misma carpeta, fijate en los exlax, estos= \ , que estan antes del nombre de la base de datos.
El echo de que pongas otra direccion cuando programas no influye, siempre que ejecutes el programa, por codigo buscara el archivo ini, independientemente de lo otro, osea no afecta en nada.
Espero lo entiendas mejor esta vez, si no pues a seguir intentando, este ya funciona si no le haces ningun cambio, no tendras problemas.
Saludos

Caral
09-11-2006, 19:18:37
Hola Delphitest
No se si habras tenido tiempo de revisar los cambios que envie, pero, no te veo por aqui.:rolleyes:, luego dices que si sigo en esto.:D
He revisado varias cosas y analizando todo este royo, veo que la diferencia entre las tablas, Factura, Alvaranes y presupuestos son realmente minimas, pienso que un alvaran es en realidad ya casi una factura o un presupuesto echo, por eso no se la razon de tener primero mas forms y despues para que mas tablas de la cuenta.
Viendo esta, para mi realidad, creo que modificando un poco el form y la tabla de alvaranes se puede definir con una consulta sql que muestre uno o otro, osea Facturas, presupuestos y alvaranes en el mismo form, creo te ahorrarias muchos dolores de cabeza, no solo por no tener que hacer mas de la cuenta, sino que a la hora de revisar solo revisas un form.
Mas o menos se haria con un menu, en el que se definiria en el from, cual es la opcion que deseas ver, repito Factura, Alvaranes o presupuestos ya que la informacion varia muy poco.
Piensalo ya que no quiero hacer nada, sin tu consentimiento.:D ahunque a veces sea terco, tambien dejo trabajar.
Saludos

Delphitest
09-11-2006, 19:34:48
Hola Caral, Bienvenido de nuevo :)

me ha trastornado un poco el tema de tener que hacer tantos cambios para que se adapte a las ''costumbres'' de mis compañeros, por eso no he dado noticias últimamente. Creo que mañana por la mañana tendré algo para informaros de los cambios que debo hacer.

El albaran cambia bastante de lo que tenía hecho a lo que me han pedido que haga de hecho ahi estoy un poco bloqueado. Suele pasar que la gente que va a usar el programa está acostumbrada a unas cosas que me resultan muy extrañas pero no me queda mas remedio que adaptarme a ello.

He tenido que cambiar campos en las tablas, añadir opciones en los clientes y repartidores y no quiero ni hablar de los albaranes, es de la noche al día y aun tengo dudas de por donde enfilarlo.

Esté en el punto que esté, os lo cuento con detalle mañana.

Lo del BackupMachine ese me tiene intrigado , vamos que no se como funciona, pero ya le eché el ojo cuando lo subiste, seguro que va de lujo y es útil.

Un abrazo y hasta mañana;)

Caral
09-11-2006, 19:43:07
Hola
Bueno eso quiere decir que si estas currando, ya iras entendiendo todo esto, viste el programa de cuentas x cobrar, que te parecio ?, es el que uso yo y funciona muy bien, te lo envie completo, el de backup, lo tengo en codigo, es Hecho en delphi, pero no se donde esta ya te lo enviare si lo encuentro, venia en ingles y lo castañenice, la verdad espero los cambios, tambien espero que Hallas visto el que te envie y te alla servido, que opinas de un solo form ?. para todo.
Saludos

oscarnoe
09-11-2006, 20:15:08
Referente al tema de logins y gestion de usuarios, yo prefiero almacenar el hash del password en la tabla, nunca la contraseña en si.

Os recomientod DCPCrypt para todo tipo de hashes y ciphers:

http://www.cityinthesky.co.uk/cryptography.html

Espero que os sirva de ayuda...

Oscar Noe

Caral
14-11-2006, 18:10:58
Hola a Todos
Bueno teniendo en cuenta los feriados en España, la situacion empresarial y los aumentos en los insumos basicos, ademas del costo de los albaranes, creo que es de esperar que nuestro promotor del proyecto (Mi Programa de facturacion Paso a Paso), nos tenga un poco abandonados, a la espera de noticias desde hace ya 4 dias, sin contar las diferencias horarias.:D :D
Ahora si; Que pasa Delphitest, me tienes verdaderamente preocupado, he estado observando que hay otros foristas interesados en tu proyecto y :confused: , ven el hilo y se van desepcionados :rolleyes: .sin avances.
Yo por mi parte en mis horas de ocio, en las que con entusiasmo :) trataba de incorporar algo al proyecto y apreder mas, me siento defraudado, que pasa...:confused:.
Va deja ya la marcha y a trabajar hombre.
Saludos

Delphitest
15-11-2006, 09:15:40
Muy buenas a todos,

tienes razón, me merezco una colleja :)

No es que tenga esto abandonado pero la verdad es que la parte de los albaranes me tienen totalmente bloqueado.

He tenido que hacer muchos cambios y ademas a medida que arreglo pequeños fallos surgen nuevas cosas y lo que pensaba hacer en unas horas se está convirtiendo en unas semanas. asi parece que es esto de la programación.

No he subido nada porque está a medias y no se entendería bien la finalidad.

Necesito pasar de un punto donde estoy atontado y bloqueado :mad:

No quería molestar al foro pero ya necesito un empujoncito porque sino me eternizo con esto.

Estoy haciendo los calculos del form albaran, muy diferente a lo que tenía inicialmente, aqui hay de todo un poco. Aunque voy avanzando con otras cosas sigo parado en el tema de calcular el porte en funcion del peso de la tarifa. Necesito usar como sea y siempre que se pueda, la orden locate ya que resulta muy comoda y no hay demasiado que detallar en ella. Pero no se exactamente si lo que quiero se puede o no hacer con ella. Os cuento:

Uso la siguiente sentencia para buscar el primer registro de la tabla TTarifa cuyo peso sea igual al contenido del Edit3.

Hasta ahí bien, pero hay un detalle importante y es que el peso en este caso debe de ser exactamente igual a ese valor sino no lo encuentra, sin embargo yo necesito que localice el primer registro cuyo peso sea >= a Edit3 y no se como hacerlo.

DTMGesatrans.TTarifa.Locate('Peso',StrToInt(Edit3.Text),[]);


La tabla tarifa tiene por ej:

5
10
15
20
...

Si edit3 = 5 no hay problema, si edit3 = 10 tampoco lo hay ... pero si edit 3=11 quiero que se quede en el registro de 10 si es 17 , por ejemplo que se quede en 15 ...

No se si me explico bien, supongo que con sql esto se hace sin problema pero de momento preferiría hacerlo con locate para no liarme demasiado.

A ver si alguien se anima y me saca del tunel :(

Que tengais todos un buen día.

Caral no te preocupes que es cosa de días ;)

pepon386
15-11-2006, 13:35:14
Si tienes un índice por ese campo, puedes usar la función FindNearest.

Robert01
15-11-2006, 14:48:13
Hola Delphitest:

En el form repartidores cuando le ponés modificar se pueden cambiar todos los datos del repartidor pero no su foto.

Yo hice todo lo que tenías vos pero usando dbe. Hice algunso cambios.
Cuando esté todo listo lo subo.

saludos

Lepe
15-11-2006, 14:48:34
supongo que con sql esto se hace sin problema pero de momento preferiría hacerlo con locate para no liarme demasiado.


Pues al no usar sql te estas liando más todavía con código delphi: Cuando FindNearest devuelve un valor,tienes que mirar si es el valor exacto o si es un valor cercano (por encima o por debajo) del peso, con sql lo tienes de un solo golpe, además ya lo dije en un mensaje anterior.

Saludos

Caral
15-11-2006, 17:29:47
Hola Delphitest
La verdad sigo sin entender porque te cuesta tanto esto, es solo cuestion de preguntar en el foro, recuerda que hay verdaderos maestros en esto.
Bueno, tienes un problema que es:
Si edit3 = 5 no hay problema, si edit3 = 10 tampoco lo hay ... pero si edit 3=11 quiero que se quede en el registro de 10 si es 17 , por ejemplo que se quede en 15 ...
Bueno la verdad lo tenias, te envio la modificacion, recuerda que he modificado la tabla tarifa, y por sobre todo que soy novatito y que hago lo que puedo, seguro habra mejores formas de hacerlo, pero no las conozco.
Aqui te envio los cambios, no te entretengas con otras cosas, sigue adelante, ya tendras tiempo de mejorar tu codigo.
http://rapidshare.com/files/3475098/Gesatrans.zip.html
Por favor revisalo, creo que es lo que necesitas.
Si pones cualquier numero que no sea el peso exacto el selecciona el conveniente automaticamente.
Saludos

Delphitest
15-11-2006, 21:16:02
Hola Caral,

gracias por molestarte con esto.

He estado probando y repasando el código, pero no me sirve de esta forma.

Dentro del código hay varias lineas que mencionan los kilos, entre tanto y tanto ...

no puedo depender de esto ya que los kilos se pueden cambiar en cualquier momento desde la tabla tarifa y no siempre los saltos seran de 5 en 5 o de 10 en 10, es la parte delicada que tiene.

Necesito que una orden busque en la tabla y saque los datos pero amoldandose a los kilos que esten ahí aunque cambien de vez en cuando.

Sigo dandole vueltas pero no veo la forma.

si doy con algo os lo digo, pero esto se pone oscuro :o

Por cierto, diras que soy un poco pesado pero no funciona el tema del ini ;)
Haz la prueba y quitando la DB del sitio original colocala en otra ruta, ami solo me funciona si cambio el ADOConnection, sino nada.

Un abrazo para todos y siento las molestias

Caral
15-11-2006, 21:26:57
Hola Delphitest
La verdad no se que te esta pasando, no nos envias codigo, asi que no sabemos nada.
A mi el programa que acabo de enviar funciona perfectamente, define los kilos y los calcula en base a la zona, no se si hay que hacer otro calculo adicional, sin codigo es dificil verlo.
Insisto, prueba el programa que te envie, el ultimo, hazlo correr y modifica un albaran, con esto te daras cuenta de cosas.
Por cierto tego un hilo empezado (Programa de Matematicas) en varios, este es para que los foristas aporten ideas y codigo, es interesante, casualmente trabaja con matematicas, revisalo y aporta ideas y codigo, se que puedes.
Saludos

Caral
15-11-2006, 21:32:03
Por cierto.:rolleyes: Que ha pasado con nuestro amigo Robert01.:confused:
Se va de vacaciones y no pide permiso, ni avisa.:D
A ver si da señales de vida.:D :rolleyes:
Saludos

Delphitest
15-11-2006, 22:07:40
Es cierto Caral, parece que ya no quiero subir nada ni compartir nada, pero te aseguro que no es por nada especial, sino simplemente que creo que lo que tengo hecho ahora mismo no sirve para nada, hay un lio impresionante, pero realmente impresionante. Hasta yo me pierdo en el código.

Soy consciente de que no estoy haciendo esta parte demasiado bien pero he llegado a un punto en el que me superan las cosas. Entre todos los cambios que van surgiendo dia a dia y las partes que no consigo hacer no veas que agobio me entra por momentos.

Aun así para que os hagais una idea y veais que realmente se está complicando el asunto, os pongo todo lo que tengo.

Aqui esta lo último (http://www.solotrading.com/Delphi/Gesatrans151106.rar)

Hay que centrarse en los albaranes.

Los clientes tienen mas opciones, hay remitentes, destinatarios, volumen para el peso, desembolso en origen ... tengo la cabeza que ya no da para mas.

Hay varias casillas por ahi no visibles que he tenido que poner para conseguir algunos calculos.

Lo importante ahora mismo es:

Hay que editar un albaran, poner el peso y si queremos volumen, en Edit3 se recoge el peso max de esos dos valores, en DBEdit25 y solo despues de meter un destinatario (mas que nada pq antes no sabriamos donde va el bulto) se recoge la zona, que he calculado en base a los 2 digitos de la izquierda del codigo postal (Hay logicamente una tabla con los 52 codigos postales de España).

Ahora bien, en DBEdit21 quiero que aparezcan los portes en base a:

Peso que sale de Edit3 (pero no clavado sino que se tiene que amoldar a lo que hay en la tabla Tarifa)

Zona que aparece en DBEdit25

Ya no se ni si me estoy explicando bien o no, pero solo por curiosidad echarle un vistazo al codigo del form albaranes, asi se entenderá mejor mi bloqueo, cabreo, decepción, agobio ....

Buenas noches para el que pueda dormir bien, pq yo ya ni duermo :mad:

Caral
15-11-2006, 23:14:55
Hola Delphitest
La verdad estoy mas confundido que tu pero lo voy a explicar como lo entiendo.
Por favor respondeme si o no a estos puntos:
1- Tarifa= Peso x zona
Es simplemente una tabla de comparacion.Osea envio tanto peso a tal zona y cuesta tanto.
2- destinatario ya tiene una zona seleccionada.
Osea que al incluir un destinatario en la tabla ya le incluyo la zona.
3- El precio de porte= Peso x zona
Osea que si envio 6 Kg a la zona 1, el porte sera el calculo en vase a la tarifa 5 { 7.96 Dividido entre 5 por 6}.

4- Supongo que viendo esto, yo lo haria por porcentage, me explico:

Tengo un peso minimo 5 Kg, y un maximo 1000 Kg.
Tengo las zonas que quiera 1, 2,3,4,5 ect.
De acuerdo a la zona 1 y un peso de 5 Kg el porte es de 7.96
De acuerdo a la zona 1 y un peso de 8 Kg el porte es de 12.72
Y asi sucesivamente
Si es asi, con solo tener el valor minimo de cada zona x porcentage se sacan los valores por peso que se necesiten.
5-Tanbien se puede hacer en base a diferencias de peso me explico.

Si envio de 5 a 10 Kg a la zona 1 cuesta 7.96 supongo ?
Si envio de 11 a 15 Kg a la zona 1 cuesta 8.74 supongo ?

Pero creo que estas no son el caso, de lo contrario seria bueno que lo comentaras.
Saludos

Delphitest
15-11-2006, 23:47:52
Abre la Tabla Tarifa y lo entenderas.

El destinatario tiene una zona en funcion de la provincia de destino, es la que calculo en DBEdit25.

La tarifa es por ej:

Estos son los campos:

Peso, Precio Zona0, Precio Zona1, Precio Zona2 ...Precio Reexpedición

y los registros serían:

5, 3.75, 4.50, 5.60 ...
10, 4.50, 5.60, 7.20

es decir que un registro corresponde a un peso pero con diferentes zonas y precios para cada una.

Para calcular el porte hay que tener en cuenta el peso y una vez en el registro del peso correspondiente elegir la zona que coincida con la del destinatario.

con el locate que tengo puesto solo funciona si el peso es exactamente igual que el de un registro, por ej. 5 , 10 ... pero si pongo 6 deberia corresponderle la tarifa de 10 Kg (hasta 10Kg)

lo dejo por hoy, hasta mañana

yusnerqui
16-11-2006, 15:52:29
Hola, creo que debes reconciderar el uso del SQL, con esto no te digo que cambies nada, pero si muy bien podrías ausiliarte de una función que use una instrucción sql para resolber tu problema:

Te confieso que no estoy muy empapado en tu programa, no se los componentes que usas etc, pero me he concentrado en el problema actual, si como supongo siempre debes coger el valor inmediato superior al peso introducido en caso de no ser este uno de los existentes puedes crearte una función similar a esta:

function paLocate(Peso: String): String;
Var
Query:TADOQuery//suponiendo que uses ado.
begin
Query:= TADOQuery.Create(nil);
Try
Query.Connection :=ADOConnection1; //El conector que uses
Query.SQL.Text := 'Select min(peso) from TuTabla where Peso >= '+Peso;
Result := Query.Fields[0].asString;
finally
Query.Free
end
end;


Fíjate que te va a devolver el primer valor que sea mayor que el que has pasado como parámetro y en caso de que el parámetro exista en la base de datos te debe devolver ese mismo valor.

Pues nada que el resultado de esa función es el que le debes pasar a tu locate

var
MyPeso:String;
begin
MyPeso := paLocate(Edit3.Text)
DTMGesatrans.TTarifa.Locate('Peso',StrToInt(MyPeso ),[]);
end;


Espero que esto te de alguna idea, ya comentarás como te fue.

Consejo: No tienes idea de la cantidad de quebraderos de cabeza que te puedes quitar con solo usar pequeñas inyecciones de SQL en tu sistema.

Saludos

Delphitest
16-11-2006, 21:11:10
Gracias Yusnerqui,

he incorporado ese código al programa y me da este error (a parte de los ';' que faltaban y he ido colocando)

Indice de la lista fuera de rango(0)


¿Sabes a que puede ser debido?

al final creo que debo de ser gafe :mad:

yusnerqui
16-11-2006, 21:34:48
jeje, no te preocupes que la culpa es toda mía, jejeje, es que me faltó ejecutar la consulta:


function paLocate(Peso: String): String;
Var
Query:TADOQuery//suponiendo que uses ado.
begin
Query:= TADOQuery.Create(nil);
Try
Query.Connection :=ADOConnection1; //El conector que uses
Query.SQL.Text := 'Select min(peso) from TuTabla where Peso >= '+Peso;
Query.Open;
Result := Query.Fields[0].AsString;
finally
Query.Free
end
end;Te recuerdo que no va a funcionar así de flai, debes ajustarlo a los componentes que estás usando. Saludos.

yusnerqui
17-11-2006, 16:54:48
Bueno y te sirvió o no la función???

Saludos Yusnerqui

Delphitest
17-11-2006, 20:41:54
Buenas Tardes,

no me ha servido o mejor dicho no le se sacar partido.

Pero me ha servido para pensar en otra forma para hacerlo y ahí ando, a ver si doy con ello de una vez.

Buen fin de semana y gracias de todos modos

Lepe
18-11-2006, 13:28:45
creo que debes reconciderar el uso del SQL


Pues al no usar sql te estas liando más todavía con código delphi

... y erre que erre con delphi... :D :D

El error que yo veo en este hilo, es que está construyendo su propia carretera, sin querer ver que hay otras autopistas desconocidas para él, pero que ya llevan al destino de una forma más rápida y fiable.

En mi caso, la tarifa depende de:
- el peso y tipo de portes a ese cliente (1 porte diario, 1 porte semanal, 2 semanales, 2 al més), dependiendo de ese tipo de porte, se aplica una tarifa distinta (es idéntico a tu problema de zonas)
- la tarifa del cliente que paga el albarán (remite o destinatario del paquete)
- Incluso se puede establecer un precio especial para un albarán, distinto de la tarifa que exista en la BBDD.

Solución que le dí en aquel momento:
Un simple Combobox. Cuando el usuario rellena todos los datos (remite, tipo de portes, kilos), se hace una consulta a la base de datos con sql y en el combobox se añaden 2 o 3 items del tipo:
14 kg 15.00 €
20 kg 19.30 €

(suponiendo que el peso del albarán es de 16 kg)

Al entrar el foco en el combo, se despliega la lista automáticamente, y el usuario solo tiene que elegirlo. El usuario ya sabe que el precio normal sería entre 15 y 19 € para ese albarán. Pero es libre de poner el precio que quiera (porque sea un porte "especial").

Cuando el usuario elige una tarifa de la lista, en el Combobox.Text solo aparece el precio, es decir sólo "19.30 €". Así al echar una ojeada al albarán completo vé:
- Portes (los 19.30 €)
etc... (otras cantidades que no puedo revelar)
- Base imponible
- xx % de iva
- Total del albarán

Simple, efectivo y cómodo.

... Y todo esto se ha tratado en el foro...

Saludos

Caral
21-11-2006, 19:28:57
Hola a todos
La verdad no entiendo que pasa con Delphitest :confused: , me preocupa que se llegue a desanimar, sin haber empezado.
Cuando se tiene un problema, normalmente se recurre a los amigos, hey hombre que aqui hay muchos, que pasa :confused: ,no entiendes algo :confused: , pues aqui te ayudamos, todo menos lo economico :D , tienes nuestra ayuda, hasta donde se pueda.
Este proyecto lo terminamos, porque lo terminamos, asi de claro, no se puede empezar algo y dejarlo a medias.
Entonces cuales son los nuevos avances.:rolleyes: , esperamos por ti Delphitest.
Saludos

Delphitest
21-11-2006, 19:48:06
Buenas tardes,

gracias por preocuparte por mi Caral.

Sigo con el proyecto y pienso acabarlo como sea, ya es amor propio mas que necesidad ;)

No quiero marear mucho en el foro, prefiero acabar al menos la parte esta de los albaranes y subir las modificaciones terminadas, ya vendrán mas dudas con las facturas supongo y algo me tocará preguntar.

Ya he conseguido esto que tanto me costaba con las tarifas, ademas de una forma muy sencilla, ya os contaré.

El tiempo que dedico a esto es de madrugada ya que tengo mucho trabajo en estas fechas y no puedo estar todo lo que me gustaría programando.

Ahora debo apañar temas como tener en cuenta si el cliente tiene la tarifa general o se le factura por número de bultos, si tiene o no desembolso (recogida en un pueblo por ejemplo), idem para el destinatario con la reexpedición, muy importante si el peso es > 1000 Kgs ya que se tarifica de otra manera, el número del albaran debe de tener los dos últimos dígitos del año por delante para que no se mezclen de un año para otro ... un sin fin de cosas de van surgiendo y que debo solucionar como es normal. Pero mi base es muy baja en esto y reconozco que hay temas que me superan.


Ya no pongo fecha para subir las novedades, esto va para largo :o

Un saludo para todos y gracias a los que siguen este hilo con tanto interés, prometo acabar el proyecto y detallaros todo lo mejor que pueda.

Caral
21-11-2006, 19:58:50
Hola Delphitest
Bueno si tienes mucha faena quiere decir que no necesitas duros :D , bueno ahora Euros, me alegra que sigas vivo y en el proyecto.
Por aqui estaremos si Dios nos da vida para ayudarte cuando lo necesites.
saludos

Caral
21-11-2006, 20:03:36
Hola otra vez Delphitest
Este proyecto de matematicas, tiene muchas formulas y demas, seguro le sacas el jugo.
Este hilo, te va a servir, ve a la ultima parte, estan las actualizaciones:
http://www.clubdelphi.com/foros/showthread.php?t=37489
Saludos

Caral
28-11-2006, 22:25:40
Hola a todos
Veo hace algunos dias como, con gran animo :) algunos foristas entran a ver este hilo, y, si pudiera ver sus caritas, tristes :o , desepcionadas :mad: , esperando que nuestro amigo y promotor Delphitest :D , nos de un adelanto o tan siquiera una probadita del programa.
Que pasa maestro, que tienes mucho publico, claro que dicen que para lo bueno hay que esperar :rolleyes: A que nos sorprende a todos :eek:
Bueno foristas, tambien hay que entender que es la epoca fuerte para el transporte, asi que paciencia, verdad Delphitest :D
Saludos

Delphitest
28-11-2006, 23:07:24
Ahora si que tengo que reconocer que llevo mas de una semana sin hacer absoltamente nada.

Efectivamente Caral, es época de apreton en el trabajo, el turron, las cestas, las bebidas ... es imposible dedicarle tiempo a esto, ademas cuando lo hago me gusta centrarme en ello y que no me interrumpan continuamente con otras cosas, pero es inevitable asi que entre semana ni lo toco.

Luego llega el fin de semana y tambien hay cosas que hacer, todo se va acumulando ...

Lo que haré será intentar terminar partes dentro de la de los albaranes y a medida que las tenga lo subo para que veais los adelantos (que si que los hay).

A parte de todo esto se me ha ocurrido apuntarme a un curso que han ofrecido a la empresa sobre SQL, no he podido resistir, pero son 160 horas que no se ni donde las puedo sacar.


... en fin ... que acabo el año como siempre, hasta arriba de trabajo y bastante agotado, pero son temporadas que debemos aprovechar sino no compensamos las malas (que suelen ser mas frecuentes y asustan a veces)

Un abrazo para todos :)

Caral
28-11-2006, 23:20:13
Hola, estas vivo, que bien.:D
Ahora entiendo lo que dicen las malas lenguas del transporte en estas fechas, claro, con tanto turron, cestitas navideñas y demas cositas, algo no llega a su destino.:D , por lo menos guardanos algo, que nos haces agua la voca.
De España la verdad lo que estraño son las castañas, por aqui no se consiguen, si algun transporte se pierde con castañas, ya sabes.
Saludos

Angel Fernández
29-11-2006, 13:59:46
Citado por Caral "El que uso se llama Constructor es muy pequeño y facil de usar."

Caral, ¿podrías dar mas detalles de ese tal Constructor para crear ventanas de mensajes? ¿Pag web donde encontralo, enlace, autor, algo para descargarlo? Es que sólo con constructor salen miles de entradas en google.

Gracias

Caral
29-11-2006, 19:23:54
Hola Angel Fernández
El constructor sirve para hacer mensajes, los haces en este copias y pegas en delphi, nada mas.
Incluso puede hacer sentencias If Then o Caso Of ademas de otras opciones.
Aqui te lo envio, espero te sirva.
http://rapidshare.com/files/5329232/Constructor.zip.html
Saludos

Angel Fernández
29-11-2006, 23:03:12
Gracias Caral. Lo he bajado y la primera impresión es bastante buena. Trastearé un poco a ver.:)

Caral
30-11-2006, 21:04:16
Hola Delphitest
Se que estas atareado por las fechas, pero he creado un hilo con un programa completo de facturacion, inventario y produccion, que se te puede dar una mano, viendo el codigo.
Revisa este hilo, que tiene el programa.
http://www.clubdelphi.com/foros/showthread.php?t=38055
Saludos

Robert01
01-12-2006, 03:31:49
Hola Angel Fernández
El constructor sirve para hacer mensajes, los haces en este copias y pegas en delphi, nada mas.
Incluso puede hacer sentencias If Then o Caso Of ademas de otras opciones.
Aqui te lo envio, espero te sirva.
http://rapidshare.com/files/5329232/Constructor.zip.html
Saludos

Es muy bueno el constructor, hasta se puede usarlo en lazarus.

Desafortunadamente no hay una versión de lazarus en castellano pero si en catalán o gallego si no me equivoco, es irónico pero creo que los que hablamos castellano somo más.

Delphitest
09-12-2006, 20:10:11
Muy buenas a tod@s,

vaya, hoy que tenía un rato libre, ¿digo bien rato libre? jejejeje he decidido ponerme de nuevo con el programa y atención sorpresa ... ya no se por donde van los tiros, jajajaja :)

Es increible pero despues de este tiempo sin tocar nada me cuesta un poco ranudar todo esto, está claro que no hay que dejarlo de lado tanto tiempo.

Os subo aqui el punto donde lo había dejado para que se vaya viendo algo. Los cambios están básicamente en el Form Tarifas y Albaranes, y logicamente en lo que conlleva en la base de datos (que son muchos)

Aqui lo subo (http://www.solotrading.com/Delphi/Gesatrans081206.rar)como las veces anteriores, por cierto he borrado todo lo del mes de octubre para limpiar un poco el hosting.

Una duda que tengo:

En las tarifas he tenido que añadir hasta la Zona6 en vez de 4 como antes y de paso me he dado cuenta de un error que me da siempre que añado un registro nuevo. Al darle a añadir me lleva logicamente a la ultima fila de un DBGrid y la puedo rellenar, pero si por descuido pulso TAB eso me genera otro registro mas abajo y al darle a guardar salta un error.

¿Hay forma de desactivar la tecla TAB ? o de evitar que estando ya añadiendo un registro permita saltar a otro nuevo ?

Seguro que es una tontería que se me había pasado por alto y no me gusta que quede asi.

Caral, ya veo que has posteado el programa tuyo, enhorabuena y gracias por tu aportación, supongo que tenías mono de facturación al dejar yo esto de lado ;)

A ver si soy capaz de al menos tocar este tema una vez por semana, sino no acabo nunca.

Un abrazo para todos y feliz fin de semana

fjcg02
16-12-2006, 02:02:27
Tras leer el hilo y ver que Caral además ha incluido un hilo con su aplicación completa, os voy a regalar una golosina. No tiene mucho que ver con esto , pero a la vez sí.
Tiene filtros por varios campos, archivos adjuntos, calcula nuevo nº de presupuesto , pinta colorines dependiendo de los estados, ..... Empezó hace mucho, es mejorable pero bueno, ahí está.
Caracteristicas:
- Programa de control de presupuestos, multivendedor.
- Multiples filtros.
- Tipologia de presupuestos/ventas gestionable.
- Gestión de mensajes entre usuarios (Postit).
- Gestión de estados y cobros.
- Gestión de incidencias en trabajos.
- Gestión de archivos adjuntos -> cada presupuesto direcciona un directorio, donde se encuentran los archivos asociados: presupuesto, planos, fotos, contratos, ..... crea un archivo y prueba a clickar dos veces sobre él.
- CUADRO DE MANDO: Pestaña de Control del Negocio en una sola ventana. Listados de control de multiples puntos de vista, consolidación de años, ... Posibilidad de imprimir los resultados ( todo ello con una sola ventana de impresión ), ... Las impresiones creo que merece la pena revisarlas. ( Caral, tras ver tu programa vi que te vuelves loco con los formularios de impresión, aquí con uno puedes hacer el 90 % del trabajo, cambiando solamente los parámetros de llamada) Los campos en rojo son los que se totalizan. Para incluir una nueva consulta en el cuadro de mando, solo hay que añadir un nuevo registro en la tabla Consultas; a gusto del consumidor.
- Utiliza Access.
- ...

Mejorable: SI . Mejoralo tú mismo. Muchas de las ideas han salido adelante gracias a la ayuda de este foro.
Una pega: Abre las tablas a saco, si se utilizan muchos registros puede ralentizarse. Actualmente funciona en una empresa con 5 trabajadores, sin problemas importantes en los cuatro ultimos años.

Para utilizarlo: extraer todos los archivos en un directorio, compilar y arrancar. Usuarios definidos: PRUEBA ( administrador del sistema ) y USUARIO1, ( currito con opciones capadas ), clave para los dos 'PERRITO'.
Son necesarias D7 , QReport y las Jedi ( o eso creo).

NO DOY SOPORTE, o sea, no me pregunteis nada, porque no prometo contestar.
Este programa es jamonware, es decir que si quieres usarlo tal cual, puedes hacerlo, y también puedes mandarme un jamón.
Hasta lueguito.

Un saludo ;)

zarzuela
19-12-2006, 14:23:31
if Application.MessageBox('Seguro de abandonar la aplicación','Advertencia',MB_OKCANCEL + MB_DEFBUTTON1) =IDOK then
Application.Terminate;;)

ArdiIIa
11-01-2007, 03:02:52
Vaya peazo hilo... :(


¿Hay forma de desactivar la tecla TAB ? o de evitar que estando ya añadiendo un registro permita saltar a otro nuevo ?



Bueno a tu pregunta, si no lo has solucionado yo utilizo esto en un DbGrid.


procedure TFormServicios.ControlTecla(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if TDbGrid(Sender).DataSource.DataSet.State in dsEditModes then
if key in [VK_UP,VK_DOWN] then
key := 0;
end;


Que es llamado desde el evento OnkeyDown de DbGrid

Suerte ;)

Delphitest
06-02-2007, 12:17:26
Buenos días a tod@s,

ante todo quiero pedir disculpas por haber dejado en el olvido este proyecto que empece con tanta ilusión y agradeceros a todos el interés y la ayuda que me habeis prestado.

El no haber vuelto a publicar ningún mensaje ha sido debido a que poco a poco me he encontrado con cosas que no he sabido resolver, y un día por otro he empezado a alargar la frecuencia con la que me ponía manos a la obra por simple pereza hasta llegar al punto de dejar por completo el proyecto sin terminar.

Se me junto el exceso de trabajo en fechas navideñas y la falta de conocimientos. Ha estas alturas quiero intentar retomarlo donde lo deje pero veo que me va a costar mucho trabajo, mas que nada porque no recuerdo practicamente nada, asi que tendré que dedicarle un tiempo en ver por donde iba todo esto.

No entraré tan fuerte como antes porque no dispongo de tanto tiempo, quizas solo unas horas los fines de semana.

Ademas en paralelo me estoy interesando por el tema de enlaces a través de las API y eso me pilla mas en blanco todavía.

Procuraré informaros de mis adelantos (si es que los hay ;) )

Un abrazo muy fuerte para todos (especialmente para Caral)

Caral
06-02-2007, 17:40:43
Hola Delphitest
Me alegro que estes otra vez por aqui.
Reconozco que tambien tenia un poco olvidado el tema, pero me parece muy bien que quieras reiniciarlo, aunque sea a ratos.
Sabes que puedes contar con mi poco conocimiento para cualquier duda, sigo con tigo.
Por cierto feliz año, y a empezar la faena, que esta hay que terminarla.
Saludos

zurdosoft
03-05-2007, 21:08:54
He pasado mas de 3 horas leyendo el hilo y quede gratamente sorprendido.:p
Es como para escribir un libro.
A propósito recuerdo cuando comence a trabajar con microprocesadores, mi profesión es electrónica, compre un libro que se llamaba "Construya su computadora basada en Z80", este explica paso a paso como funcionan todos sus componentes y como se prueban. Fue lo más didactico que vi, hasta leer este hilo.
Aqui se puede ver el progreso de una aplicación desde cero, la solución a distintos problemas del desarrollo, las discuciones y defensas de los distintos sistemas de bases de datos, en fin, realmente lo que debe evaluar un programador.
Felicitaciones a Caral por su perseverancia y a todos por su aporte.
Soy mayor, tengo 57 años, no muy partícipe de los foros, salvo como lector.
Gracias chicos por haberme dado esta lección de cooperación.;)

Jorge Ferreyra
Córdoba, Argentina

Caral
03-05-2007, 21:17:38
Hola zurdosoft
Gracias por lo de chaval, a mis 46 años me va muy bien que me lo digan:D
Lastima que Delphitest, se nos olvide del programa para poder llevarlo a su fin, es una manera interesante de aprender, bueno algun dia lo retomara.:rolleyes:
Saludos

tenporal
02-06-2007, 02:51:17
Saludos a todos los que aportaron en mayor o menor medida en este hilo, lo he leido todo, desde el principio entusiasta de DelphiTest ( que duro bastante tiempo ), la ayuda constante de Caral ( que aunque dice que es un novato, sabe mas que algunos que nos consideramos programadores ), tambien quiero reconocer la aportacion de muchos mas que dieron aliento y esperanza a Delphitest y de paso nos brindaron la oportunidad de recordar el trabajo que cuesta empezar una aplicacion desde nada ( solo basta el empuje y las ganas de aprender ). Solamente me queda agradecerles su ayuda desinteresada de querer compartir sus conocimientos y ayudar al projimo.

Yo soy aprendiz del lenguaje delphi, ( Tengo como 2 meses utilizandolo en una escuela preparatoria de Mexico), aunque tengo experiencia programando en pascal, c, visual foxpro y otros lenguajes mas. Me ha sorprendido la facilidad y versitilidad de este lenguaje de programacion. (no se diga en la conectividad con bases de datos). Espero en poco tiempo realizar aportaciones a este foro para agradecer el aprendizaje que estoy obteniendo de ustedes. Aqui adjunto mi primera aportacion que no tiene nada que ver con este hilo, pero espero que sirva (resuelve y grafica ecuaciones de 2do grado por medio de la formula general).
Saludos a todos.

tenporal
02-06-2007, 02:56:19
Aqui esta la pantalla del programa en ejecucion.

No se como poner el programa ejecutable ya que no puede subir mas de 30 kb

Caral
02-06-2007, 19:00:59
Hola
Me parece muy interesante tu programa, no recuerdo el nombre del host donde se pueden subir los programas, de todos modos se puede partir en units y subirlo.
Bueno lo importante es la aportacion.
Gracias.
Saludos

tenporal
05-06-2007, 00:33:04
Ya di con la pagina para subir el programa y puedan ver como funciona es http://www.terawiki.clubdelphi.com/
luego pongo el programa de resolucion de ecuaciones de 2do grado y graficacion de la solucion.

tenporal
06-06-2007, 02:33:46
Saludos
Me gustaria que probaran este 1er programa que realice con delphi para resolver ecuaciones de 2do grado, se aceptan sugerencias y comentarios.

tenporal
06-06-2007, 02:37:20
Por las prisas de subir el programa, no puse la liga, aqui esta el enlace hacia el programa que resuelve ecuaciones de 2do grado utilizando la formula general y luego la grafica, dandole valores negativos y positivos (checar los valores de X1 y de X2). http://www.terawiki.clubdelphi.com/Delphi-Win32/Recursos/.
El programa se llama Grafica2.zip

scott216
19-10-2007, 04:57:40
cual es el programa para hacer los mensajes en delphi

Delphius
19-10-2007, 05:09:02
cual es el programa para hacer los mensajes en delphi

:confused::confused::confused: Hola scott216, Bienvenido a ClubDelphi.

Como recién te inicias en los foros te aviso que tu mensaje no va con el tema. De hecho... no logro entender lo que dices. Para evitarte nuevos problemas como estos te sugiero, y aprovechando de que eres nuevo, que te tomes unos minutos y leas la guia de estilo. Son unas pautas a tener en cuenta en estos foros. No es un reglamento, son simples sugerencias.

Te aconsejaría que primero busques en los foros sobre tu duda. Si el tema no ha sido tratado habre un hilo en la sección más adecuada al tema y detallas tu problema. Si ves que ya ha sido tratado pero te invaden las dudas puedes postear alli mismo y evitamos duplicar hilos.

Recuerda que no cobramos por la cantidad de palabras asi que se lo más detallista al momento de exponer tus dudas.

Bueno, espero que podamos serte de ayuda y que te sientas bienvenido en clubdelphi.

Saludos,

scott216
19-10-2007, 05:58:19
HOLA DISCULPE LA MOLESTIA

kiero hacer un programa de facturacion en delphi

esto es lo ke kiero ke se imprima....


LilScott Electronic
Calle Charles Hill #13, La Plata, Villa Altagracia. S.C.
Rep. Dom. Tel.:(809) 559-2700
--------------------------------------------------------------------------

Vendido a: Erickson Angeles Factura No.:1
Direccion: Charles Hill #20 Fecha.......:18/10/2007
Telefono:(809) 559-3017



--------------------------------------------------------------------------
Descripcion Cantidad Precio Unitario Itbis Importe
--------------------------------------------------------------------------
Disco duro 120gb 1 1,702.58 272.41 1,974.99
Monitor 2 5,000.00 1,600.00 11,600.00

Etc......
-----------------------------Ultima Linea---------------------------------




Total Bruto: 11,702.58
Itbis.........: 1,872.41
Total Fact.: 13,574.99





---------------------- -----------------------
Elavorado Por Recibido Por



kiero saber como hago esto. capturar los datos en ls formularios,guardarlos para los reportes y hacer consulta.el itbis es un impuesto de un 16% ke se le suma al costo por unidad automaticamente.

osea guardar lo ke se vende a los clientes,buscar lo ke se vendio a un cliente especifico y ke de el reporte de lo ke se vende en el dia. con su total.

y lo ke hic arriba es lo ke kiero imprimir.

kiero aprender delphi esto lo kiero hacer para poner una tienda.si pueden mandarme un manual de hacer programas de facturas como este.


por favor.....

scott216
19-10-2007, 06:03:26
HOLA DISCULPE LA MOLESTIA

kiero hacer un programa de facturacion en delphi

esto es lo ke kiero ke se imprima....


LilScott Electronic
Calle Charles Hill #13, La Plata, Villa Altagracia. S.C.
Rep. Dom. Tel.:(809) 559-2700
--------------------------------------------------------------------------

Vendido a: Erickson Angeles Factura No.:1
Direccion: Charles Hill #20 Fecha.......:18/10/2007
Telefono:(809) 559-3017



--------------------------------------------------------------------------
Descripcion Cantidad Precio Unitario Itbis Importe
--------------------------------------------------------------------------
Disco duro 120gb 1 1,702.58 272.41 1,974.99
Monitor 2 5,000.00 1,600.00 11,600.00

Etc......
-----------------------------Ultima Linea---------------------------------




Total Bruto: 11,702.58
Itbis.........: 1,872.41
Total Fact.: 13,574.99





---------------------- -----------------------
Elavorado Por Recibido Por



kiero saber como hago esto. capturar los datos en ls formularios,guardarlos para los reportes y hacer consulta.el itbis es un impuesto de un 16% ke se le suma al costo por unidad automaticamente.

osea guardar lo ke se vende a los clientes,buscar lo ke se vendio a un cliente especifico y ke de el reporte de lo ke se vende en el dia. con su total.

y lo ke hic arriba es lo ke kiero imprimir.

kiero aprender delphi esto lo kiero hacer para poner una tienda.si pueden mandarme un manual de hacer programas de facturas como este.


por favor.....

Delphius
19-10-2007, 06:23:12
scott216,
Tu problema debe ser tratado en varios post e involucra diversos temas que si bien todos están relacionados deben ser tratados por separado. Lo que debe ser tratado en impresión, va en sub-foro de impresión, lo que es base de datos en conexión con base de datos. Se que recién te inicias, pero espero que pronto te acostumbres. Somos un poco quisquillosos en que cada tema esté en su lugar para poder garantizar que las cosas estén ordenadas y sea más fácil para todos.

Para comenzar Delphi te sugiero que busques la Cara Oculta de Delphi 4 en internet. Es un pdf muy útil que lo vas a hallar sin dificultad. También tienes disponible varios ejemplos y tutoriales aquí (http://wiki.clubdelphi.com/wiki/index.php/Portada).

En cuanto a tus dudas sobre el sistema de facturación puedes empezar siguiendo lo tratado en este hilo desde el comienzo. Y ante dudas mayores puedes continuar en este mismo hilo y si tu duda va más allá de lo tratado aqui puedes iniciar un nuevo hilo en el subforo adecuado.

No lo tomes a mal, pero para empezar ya tienes la información necesaria. Todo está tratado en este y otros hilos. Solo es cuestión de que la busques (http://www.clubdelphi.com/foros/search.php).

Saludos,

scott216
23-10-2007, 20:59:55
como creo un login con:
dos edit en uno un nombre como scott= edit1 y el otro la clave como dilania=edit2 estao es el nombre y la clave fija del login. como ago esto en el programa osea los codigos
un boton aceptar y otro salir

Delphius
23-10-2007, 21:28:43
scott216, ¿tuviste en cuenta lo que he dicho antes?
La respuesta la tienes a unos pocos clic aquí (http://www.clubdelphi.com/foros/search.php). Por favor te sugiero que busques primero ya que el tema se ha tratado en reiteradas ocasiones.

Saludos,

TBRamon
14-11-2010, 08:30:42
Algun enlace de donde descargar la ultima version?

Casimiro Notevi
14-11-2010, 13:51:52
Debe estar en el ftp de clubdelphi (http://www.terawiki.clubdelphi.com/), échale un vistazo.

TBRamon
15-11-2010, 03:19:57
Gracias, pero lo que aparece en el FTP es una version de los inicios, quizas cuando iban por el post 10.

Casimiro Notevi
15-11-2010, 11:20:08
Gracias, pero lo que aparece en el FTP es una version de los inicios, quizas cuando iban por el post 10.

¿Seguro?, qué raro.

adan12
30-05-2012, 03:34:15
Hola me pueden pasar la Ultima base de datos por favor para podemor facturar y usar cxp , cxc

Casimiro Notevi
30-05-2012, 10:07:55
Aquí (http://www.terawiki.clubdelphi.com/Delphi/Proyectos/?download=Facturacion_Caral.zip) está el proyecto completo ;)

mirlos65
06-06-2012, 13:36:33
buenas, alguien me puede pasar el proyecto completo, se lo agradeceria muchisimo,
un saludo y gracias

Casimiro Notevi
06-06-2012, 15:26:18
Hay un problema con el servidor FTP, estamos solucionándolo, un poquito de paciencia :)

adan12
06-06-2012, 20:19:19
la base de datos le faltan algunas tablas cxp y cxc y tiene algunos errores al facturar ok

Casimiro Notevi
06-06-2012, 20:28:10
la base de datos le faltan algunas tablas cxp y cxc y tiene algunos errores al facturar ok

Yo lo probé hace tiempo, y no tenía ningún error al facturar.
Y lo de cxp y cxc no tengo ni idea de lo que es.

De todas formas, el programa es una aportación muy generosa de Caral, y que sirve para que los interesados puedan APRENDER, no es un software al que puedas exigirle que esté perfecto con todo lo que tú quieras, en ese caso te pones en contacto con Caral, que gustosamente te pasará un presupuesto con lo que necesites.

Casimiro Notevi
07-06-2012, 09:10:50
>>> Aquí <<< (http://terawiki.clubdelphi.com/Delphi/Proyectos/?download=Facturacion_Caral.zip) está.

egostar
07-06-2012, 15:54:20
la base de datos le faltan algunas tablas cxp y cxc y tiene algunos errores al facturar ok


Y lo de cxp y cxc no tengo ni idea de lo que es.


Hola amigo Casi,

cxc = cuentas por cobrar
cxp = cuentas por pagar

A ver si localizo a Caral, le diré que es un vago que no hace las cosas completas.

Digo, hay que pensar en quienes necesitan facturar y enlazar sus cuentas por cobrar y pagar. Para que sirven los foros, si no para evitar el esfuerzo a sus miembros. :eek::confused::rolleyes:

Saludos

Casimiro Notevi
07-06-2012, 16:01:18
Cierto, cierto, este Caral no ha terminado su trabajo, vamos a tener que descontárselo de su nómina :D

egostar
07-06-2012, 16:15:08
Cierto, cierto, este Caral no ha terminado su trabajo, vamos a tener que descontárselo de su nómina :D

Sobretodo porque es una situación urgente :cool:


http://www.clubdelphi.com/foros/images/icons/icon4.gif facturacion urgente

Hola me pueden pasar la Ultima base de datos por favor para podemor facturar y usar cxp , cxc


Saludos

Casimiro Notevi
07-06-2012, 16:28:04
Desde luego, fíjate la fecha a la que estamos y todavía no ha podido pasar los recibos al cobro a los clientes, y seguro que Caral estará tan tranquilo y relajado en su bañera de hidromasaje :)

Caral
07-06-2012, 20:19:10
Hola
Pero este hilo no es mio.......:p
El programa que se estaba haciendo aqui era para otro compañero y no creo que tenga ningún aporte mio, por lo menos no me acuerdo:o:confused:
Por algun lado puse el sistema de cuentas por cobrar y pagar independientemente del programa de facturación, creo que la persona interesada tendra que buscarlo, yo no tengo ganas.:D
Bueno, como dije, no he cedido nada en este hilo, asi que me quito de cualquier culpa......:D:D:D
Saludos
PD: No he podido entrar mucho por que tenia problemas con mi ordenador, se me apagaba de repente, ya lo cambie, me compre algo mas nuevo a ver si acaso dejo las bases de datos completas.:):D:cool:

Casimiro Notevi
07-06-2012, 20:32:31
PD: No he podido entrar mucho por que tenia problemas con mi ordenador, se me apagaba de repente, ya lo cambie, me compre algo mas nuevo a ver si acaso dejo las bases de datos completas.:):D:cool:

Entonces no estabas en el spa :)

Caral
07-06-2012, 20:41:03
Hola
Que va amigo, no he tenido tiempo de nada, mucho trabajo.
Saludos

Casimiro Notevi
07-06-2012, 20:42:15
Hola
Que va amigo, no he tenido tiempo de nada, mucho trabajo.
Saludos

Me alegro, siempre que esté bien recompensado, claro :)

Caral
07-06-2012, 21:08:58
Hola
Ha como esta todo con tener trabajo me conformo, de todos modos yo soy de la opinión de que si no se gana que lo haga la competencia.:D
Por cierto, gusto en saludarte, hace días que no conversábamos.:)
Saludos

Casimiro Notevi
07-06-2012, 21:52:16
Pue sí, si no es rentable, ¿para qué hacerlo?.
Por cierto, gusto en saludarte, hace días que no conversábamos.:)
Saludos
Pues sí, la vida que da muchas vueltas y nos lleva y nos trae como una brizna de hierba en el aire :)

LaBan
04-11-2013, 06:20:04
Hola estoy tratando de descargar pero me dice que no funciona

Casimiro Notevi
04-11-2013, 09:41:02
Lo acabo de probar y funciona bien.