Sigamos con confirmar
Código Delphi
[-]procedure TFMovimientos.SpeedButton9Click(Sender: TObject);
var VarIFase:Integer;
VarbSaltar:Boolean;
begin
try
VarIFase:=1;
VarbSaltar:=False;
if DsPrincipal.DataSet.State in [dsInsert] then VarBGrabarNumerador:=True else VarBGrabarNumerador:=False;
if DsPrincipal.DataSet.State in [dsEdit,dsInsert] then
begin
DSPrincipal.DataSet.Post;
end;
if VarBGrabarNumerador=true then
begin
VarIFase:=2;
DM.IBDConfiguracion.Edit;
DM.IBDConfiguracionNUMERADOR_MOVIMIENTOS.Value:=StrToInt(DbeRegistro.Field.Value);
DM.IBDConfiguracion.Post;
end;
VarIFase:=3;
if ((DM.IBDCaja.IsEmpty)) then VarbSaltar:=True;
if VarbSaltar=False then begin
DM.IBDCaja.last;
if DM.IBDCajaFECHA.Value<>Now then VarbSaltar:=True;
end;
if VarbSaltar then
begin
DM.IBDConfiguracion.Edit;
DM.IBDConfiguracionNUMERADOR_CAJA.Value:=DM.IBDConfiguracionNUMERADOR_CAJA.Value+1;
DM.IBDConfiguracion.Post;
end;
DM.IBDCaja.Insert;
DM.IBDCajaREGISTRO.Value:=IntToStr(DM.IBDConfiguracionNUMERADOR_CAJA.Value);
DM.IBDCajaCLIENTE.Value:=DBLBCliente.Text;
DM.IBDCajaCONCEPTO.Value:=DbeConcepto.Field.Value;
DM.IBDCajaCARGO.Value:=DBLBCargo.Text;
DM.IBDCajaFECHA.Value:=DbeFecha.Field.Value;
DM.IBDCajaCANTIDAD.Value:=DbeCantidad.Field.Value;
DM.IBDCajaUSUARIO.Value:=VarSUsuario;
DM.IBDCaja.Post;
VarIFase:=4;
if VarIModoApertura=1 then
begin
DM.IBDUnidades.Edit;
DM.IBDUnidadesVENDIDA.Value:='S';
DM.IBDUnidadesDISPONIBLE.Value:='N';
DM.IBDUnidadesFECHA_BAJA.Value:=Now;
if DM.IBDUnidadesRENDIMIENTO.value=0 then DM.IBDUnidadesRENDIMIENTO.Value:=DbeCantidad.Field.Value
else DM.IBDUnidadesRENDIMIENTO.Value:=DM.IBDUnidadesRENDIMIENTO.Value+DbeCantidad.Field.Value;
VarSCadena:='chr(13)+--[ VENDIDA el '+DateToStr(now)+' al cliente número '+DBLBCliente.Text+'------------------Por ['+VarSUsuario+']';
DM.IBDUnidadesNOTAS.Value:=DM.IBDUnidadesNOTAS.Value+VarSCadena;
DM.IBDUnidades.post;
end;
if VarIModoApertura=2 then
begin
DM.IBDClientes.Edit;
if DM.IBDClientesA_CUENTA.Value=0 then DM.IBDClientesA_CUENTA.Value:=DbeCantidad.Field.Value
else DM.IBDClientesA_CUENTA.Value:=DM.IBDClientesA_CUENTA.Value+DbeCantidad.Field.Value;
VarSCadena:=chr(13)+'--[ Entregado a cuenta el '+DateToStr(now)+' La cantidad de '+DbeCantidad.Text+'------------------Por ['+VarSUsuario+']';
DM.IBDClientesNOTAS.Value:=DM.IBDClientesNOTAS.Value+VarSCadena;
DM.IBDClientes.post;
end;
if VarIModoApertura=3 then
begin
DM.IBDClientes.Edit;
if DM.IBDClientesPENDIENTE.Value=DbeCantidad.Field.Value then DM.IBDClientesPENDIENTE.Value:=0
Else begin
if DM.IBDClientesPENDIENTE.Value>DbeCantidad.Field.Value then DM.IBDClientesPENDIENTE.Value:=DM.IBDClientesPENDIENTE.Value-DbeCantidad.Field.Value
else begin
Case MessageBox(0, pchar( 'Ha entregado más dinero del que tenia pendiente de pagar'
+#13#10+#13#10+'¿Desea que el sobrante se lo añadamos a su cuenta en el apartado '
+#13#10+#13#10+' [ A Cuenta ]'),
pchar('Entregado más que el pendiente'), 4+32+256) of
6:begin if DM.IBDClientesA_CUENTA.Value=0 then DM.IBDClientesA_CUENTA.Value:=DbeCantidad.Field.Value-DM.IBDClientesPENDIENTE.Value
else DM.IBDClientesA_CUENTA.Value:=DM.IBDClientesA_CUENTA.Value+(DbeCantidad.Field.Value-DM.IBDClientesPENDIENTE.Value);
end;
end;
end;
DM.IBDClientesPENDIENTE.Value:=0
end;
VarSCadena:=chr(13)+'--[ Pagado el '+DateToStr(now)+' La cantidad de '+DbeCantidad.Text+'------------------Por ['+VarSUsuario+']';
DM.IBDClientesNOTAS.Value:=DM.IBDClientesNOTAS.Value+VarSCadena;
DM.IBDClientes.post;
end;
VarIModoApertura:=0;
VarIFase:=5;
DM.IBT.CommitRetaining; except
on E: Exception do
begin
MessageBeep(1000);
ShowMessage('Se ha producido un error y el proceso no se ha podido terminar Unidad:[ UMovimientos ] Modulo:[ Grabar ]' + Chr(13) + Chr(13)
+ 'Fase del error [ '+IntToStr(VarIFase)+' ]'+ Chr(13) + Chr(13)
+ 'Clase de error: ' + E.ClassName + Chr(13) + Chr(13)
+ 'Mensaje del error:' + E.Message+Chr(13) + Chr(13)
+ ' '+Chr(13) + Chr(13)
+ 'El proceso ha quedado interrumpido');
if DsPrincipal.DataSet.State in [dsEdit,dsInsert] then DSPrincipal.DataSet.Cancel;
DM.IBT.RollbackRetaining; end;
end;
PanelOculto.Visible:=False;
PanelDatos.Enabled:=False;
Botonera1.Enabled:=True;
end;
Como vemos difiere mucho de los otros botones confirmar, pero es muy simple de seguir el procedimiento, para ellos vamos a guiarnos por los valores que le vamos dando a la variable VarIFase, cuando vale 1 hacemos lo siguiente
-Comprobamos si estamos insertando, para en tal caso actualizar el numerador en Configuración y grabamos los datos de la tabla movimientos
Cuando VarIFase vale 2
-Actualizamos el numerador de configuración, pero sólo si la tabla estaba en inserción
Cuando VarIFase vale 3
-1º comprobamos si la caja ya tiene registro con esta fecha, en caso de no hacerlo pasamos al 2 paso
-2º En caso de no tener registro la creamos el aumento de este en el numerador de cajas de configuración
-3 Independientemente de que necesitemos el paso 2 o no grabamos los datos en la caja cogiendo el registro directamente del valor actual del numerador en configuración, por esto si no existe debemos registrarlo con el paso 2
Pasemos a cuando VarIFase vale 4
-Aquí dependerá del modo de apertura, modificando los campos necesarios de las tablas Unidades o clientes, según ha sido nuestra apertura, omitiendolos todos si estamos en modo de apertura 0
Aquí debemos registrar un cambio en el código que es el siguiente por un error mio
Código Delphi
[-] if (VarIModoApertura=1) and (VarBGrabarNumerador) then
begin
DM.IBDUnidades.Edit;
DM.IBDUnidadesVENDIDA.Value:='S';
DM.IBDUnidadesDISPONIBLE.Value:='N';
DM.IBDUnidadesFECHA_BAJA.Value:=Now;
if DM.IBDUnidadesRENDIMIENTO.value=0 then DM.IBDUnidadesRENDIMIENTO.Value:=DbeCantidad.Field.Value
else DM.IBDUnidadesRENDIMIENTO.Value:=DM.IBDUnidadesRENDIMIENTO.Value+DbeCantidad.Field.Value;
VarSCadena:='chr(13)+--[ VENDIDA el '+DateToStr(now)+' al cliente número '+DBLBCliente.Text+'------------------Por ['+VarSUsuario+']';
DM.IBDUnidadesNOTAS.Value:=DM.IBDUnidadesNOTAS.Value+VarSCadena;
DM.IBDUnidades.post;
end;
if VarIModoApertura=2 and (VarBGrabarNumerador) then
begin
DM.IBDClientes.Edit;
if DM.IBDClientesA_CUENTA.Value=0 then DM.IBDClientesA_CUENTA.Value:=DbeCantidad.Field.Value
else DM.IBDClientesA_CUENTA.Value:=DM.IBDClientesA_CUENTA.Value+DbeCantidad.Field.Value;
VarSCadena:=chr(13)+'--[ Entregado a cuenta el '+DateToStr(now)+' La cantidad de '+DbeCantidad.Text+'------------------Por ['+VarSUsuario+']';
DM.IBDClientesNOTAS.Value:=DM.IBDClientesNOTAS.Value+VarSCadena;
DM.IBDClientes.post;
end;
if VarIModoApertura=3 and (VarBGrabarNumerador) then
begin
DM.IBDClientes.Edit;
if DM.IBDClientesPENDIENTE.Value=DbeCantidad.Field.Value then DM.IBDClientesPENDIENTE.Value:=0
Else begin
if DM.IBDClientesPENDIENTE.Value>DbeCantidad.Field.Value then DM.IBDClientesPENDIENTE.Value:=DM.IBDClientesPENDIENTE.Value-DbeCantidad.Field.Value
else begin
Case MessageBox(0, pchar( 'Ha entregado más dinero del que tenia pendiente de pagar'
+#13#10+#13#10+'¿Desea que el sobrante se lo añadamos a su cuenta en el apartado '
+#13#10+#13#10+' [ A Cuenta ]'),
pchar('Entregado más que el pendiente'), 4+32+256) of
6:begin if DM.IBDClientesA_CUENTA.Value=0 then DM.IBDClientesA_CUENTA.Value:=DbeCantidad.Field.Value-DM.IBDClientesPENDIENTE.Value
else DM.IBDClientesA_CUENTA.Value:=DM.IBDClientesA_CUENTA.Value+(DbeCantidad.Field.Value-DM.IBDClientesPENDIENTE.Value);
end;
end;
end;
DM.IBDClientesPENDIENTE.Value:=0
end;
VarSCadena:=chr(13)+'--[ Pagado el '+DateToStr(now)+' La cantidad de '+DbeCantidad.Text+'------------------Por ['+VarSUsuario+']';
DM.IBDClientesNOTAS.Value:=DM.IBDClientesNOTAS.Value+VarSCadena;
DM.IBDClientes.post;
end;
De esta manera la modificación solo se registra si estamos en insercción
Por último vamos cuando VarIFase vale 5 que eles el final
-Pasamos el DM.IBT.CommitRetaining; para que nuestros cambios se hagan efectivos
Por cierto hay otro cambio en el botón nuevo de este módulo donde pone
Código Delphi
[-]VarIRegistro:=DM.IBDConfiguracionNUMERADOR_CARGOS.Value;
debe ser
Código Delphi
[-]VarIRegistro:=DM.IBDConfiguracionNUMERADOR_MOVIMIENTOS.Value;