Delphi - Ayuda En apertura y Cierre de Caja

 
Vista:

Ayuda En apertura y Cierre de Caja

Publicado por Belen (33 intervenciones) el 04/11/2016 20:14:47
Hola buenas tardes tengo una pequeña aplicacion desarrollada con delphi 2010 y mysql 5 y componentes query de zeos
y estoy trabajando con apertura y cierre de caja ambos con 2 formularios diferentes mi tabla sql de "Caja"
tiene la siguiente estructura

SQL Tabla Caja
idcaja
monto_inicio
monto_cierre
fecha_cierre
hora_cierre
fecha_apertura
hora_apertura
total
Bien en el primer formulario de "Apertura" al llamarlo del menu principal uso el siguiente codigo

1
2
3
4
5
6
7
8
9
10
11
12
caja.close;
caja.SQL.clear;
caja.SQL.ADD('select * from caja');
caja.SQL.ADD('where fecha_cierre= "2000-01-01"');
caja.Open;
if not Caja.IsEmpty then
begin
showmessage('Ya existe una caja abierta');
end else
begin
fApertura.Showmodal
end;

En este esta formado por un TDateTimerPicker que uso para mostrar la fecha y hora actual (esta es sacada de otro query que trabaja con la fecha del sistema
y un tEdit para ingresar el "monto_inicio"
al darle el boton aceptar en este formulario tengo el siguiente codigo

1
2
3
4
5
6
7
8
9
Caja.Insert;
Caja['fecha_apertura']:= fecha['fecha'];
Caja['hora_apertura']:= fecha['hora'];
Caja['fecha_cierre']:= '2000-01-01';
Caja['hora_cierre']:= '00:00:00';
Caja['monto_inicio']:= Edit1.Text;
Caja['monto_cierre']:='0';
Caja['total']:= Caja['total'] +Edit1.Text;
Caja.Post

Hasta aqui todo perfecto la apertura me realiza todo bien el tema es ahora en el cierre de la caja
Luego para realizar el cierre de la misma al ingresar desde el menu principal al cierre uso el siguiente codigo similar al primero

1
2
3
4
5
6
7
8
9
10
11
12
caja.close;
caja.SQL.clear;
caja.SQL.ADD('select * from caja');
caja.SQL.ADD('where fecha_cierre= "2000-01-01"');
caja.Open;
if not Caja.IsEmpty then
begin
fCierre.Showmodal;
end else
begin
showmessage('No existe una caja abierta');
end;

Este Formulario Nuevo tambien cuenta con las mismo que el anterior con un Tedit y un TDateTimerPicker
Al darle el boton aceptar en este formulario uso el siguiente codigo

1
2
3
4
5
6
7
Begin
Caja.Sql.Add('update into caja(monto_cierre,fecha_cierre,hora_cierre') values (:monto,:fecha,:hora)):
Caja.ParamByName('monto').Value:= Edit1.Text;
Caja.ParamByName('fecha').Value:= fecha['fecha'];
Caja.ParamByName('hora').Value:= fecha['hora'];
Caja.ExecSQL;
end;

es aqui el problema que cuando realizo esta operacion en vez de editarme el registro que me trajo la consulta al abrir el formulario me crea un nuevo formulario solo con los datos monto_cierre, fecha y hora de cierre y los demas null. Como puedo hacer para que se me edite ese registro especifico que yo busque al principio al abrir el formulario ? alguna ayuda desde ya muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda En apertura y Cierre de Caja

Publicado por E.T. (1201 intervenciones) el 05/11/2016 00:33:44
Tienes mal tu update, estas mezclado dos formas de trabajar con tus query:
1
2
3
4
5
6
7
8
9
10
11
//cuando usas esta forma
query.insert;
query['campo1'] := valor;
query['campo 2'] := valor;
query.post;
 
//y cuando usas esto
query.Sql.Add('update tabla set campo1 = :valor1, campo2 = :valor2'):
query.ParamByName('valor1').Value:= valor1;
query.ParamByName('valor2').Value:= valor2;
query.ExecSQL;

No digo que esté mal, pero hay que ver bien las diferencias de cada una, asi como sus beneficios y contraproducciones.
Lo que veo que intentas es:
1- Buscas con tu query los datos del corte.
2- Si hay corte intentas cerrar con la forma dos de trabajar
Pero si usas la forma 1 para buscar y la dos para actualizar no vas a poder, ademas de que tienes errores de sintaxis en la forma dos que usas

podrias intentar lo siguiente:
busca tu corte a cerrar como normalmente lo haces, luego podrias intentar esto:

1
2
3
4
5
Caja.Edit;
Caja['fecha_cierre']:= fecha['fecha'];
Caja['hora_cierre']:= fecha['hora'];
Caja['monto_cierre']:=Edit1.Text;
Caja.Post

Lo que hace: es cuando tu buscas y encuentras una caja abierta el cursor se queda en el registro de esa caja, luego tienes que
hacer un edit y agregar tus valores y terminar tu movimiento.
Si quieres usar la forma dos (la del update) abre un tema nuevo

Te pongo la correccion de sintaxis que tienes arriba:
1
2
3
4
5
6
7
8
9
10
11
Begin
Caja.Sql.Add('update caja set monto_cierre = :monto, fecha_cierre = :fecha, hora_cierre=:hora');
Caja.Sql.Add('where id_corte = :idCorte');
Caja.ParamByName('monto').Value:= Edit1.Text;
Caja.ParamByName('fecha').Value:= fecha['fecha'];
Caja.ParamByName('hora').Value:= fecha['hora'];
Caja.ParamByName('idCorte').Value:= idCorte;//Aqui hay que definir una clausula where, porque si no defines esto
//se va a modificar tu tabla completa, para esto te recomiendo que agregues un campo autoincremental, 
//y cuando busques tu cierre tienes que obtener tu id almacenarlo en una variable y usarlo en el codigo de arriba
Caja.ExecSQL;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda En apertura y Cierre de Caja

Publicado por Belen (33 intervenciones) el 05/11/2016 02:42:43
Hola Gracias por tomarte el tiempo en ayudarme mira probe la primera opcion que me recomendaste y aun asi sigue creandome un nuevo registro con esos 2 datos nada mas almacenados y los demas en null :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda En apertura y Cierre de Caja

Publicado por E.T. (1201 intervenciones) el 05/11/2016 18:08:06
El edit, como su nombre lo indica, modifica el registro actualmente seleccionado, lo que me hace pensar que estas insertando un registro de alguna manera desde otro lugar o en el mismo formulario en otra seccion del codigo del mismo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda En apertura y Cierre de Caja

Publicado por Belen (33 intervenciones) el 06/11/2016 00:17:12
Hola mira e revisado el codigo detenidamente tanto desde la llamada como en los botones y no tengo un Insert en la parte del cierre solo tengo el edit que seria de esta forma


1
2
3
4
5
Caja.Edit;
Caja['fecha_cierre']:= fecha['fecha'];
Caja['hora_cierre']:= fecha['hora'];
Caja['monto_cierre']:=Edit1.Text;
Caja.Post

como me recomendaste. Aun asi me sigue creando un registro en el cual ingresa solo esos campos y los demas los deja en null ;s
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar