Buenos días compañeros sigamos con la explicación de los botones, para recordar cuales pongo la imagen nuevamente
hablamos de los marcados con el 1
Este es el código para la baja
Código Delphi
[-]procedure TFunidades.sbBajaClick(Sender: TObject);
begin
Case MessageBox(0,
pchar( '¿Está seguro de querer marcar como baja esta unidad?' +#13#10
+#13#10+'Marcar como baja simplemente marca una unidad como no disponible y la fecha en que esta de baja, pudiendo recuperarse su utilidad con el botón recuperada'),
pchar('Marcar como Baja'),4+32+256) of
6:begin try
VarSCadena:=chr(13)+'---[ MARCADA COMO BAJA EL '+DateToStr(Now)+' ]----------------[ '+VarSUsuario+' ]-----'+chr(13);
DM.IBDUnidades.Edit;
if DM.IBDUnidadesDISPONIBLE.Value='S' then DM.IBDUnidadesDISPONIBLE.Value:='N';
DM.IBDUnidadesFECHA_BAJA.Value:=Now;
DM.IBDUnidadesNOTAS.value:=DM.IBDUnidadesNOTAS.value+(VarSCadena);
DM.IBDUnidades.post;
DM.IBT.CommitRetaining;
except
on E: Exception do
DM.MiControlDeErrores(Dsprincipal,'UUnidades','Baja',E);
end;
end;
end;
end;
Como veis es un procedimiento sencillos, en el que marcamos como no disponible si no lo esta ya, añadimos una cadena de texto a nuestras notas notificando la baja y el usuario y por último ponemos la fecha de baja.
Para ello hay dos apartados que son nuevo la cadena VarSCadena, que hemos creado en el datamodule para que la usemos genéricamente llamando únicamente al modulo, que es lo más normal y por otra parte el procedimiento MiControlDeErrores que vemos a continuación
Código Delphi
[-]procedure TDM.MiControlDeErrores(Ds: TDataSource; Unidad, Apartado: string;E:Exception);
begin
MessageBeep(1000);
ShowMessage('Se ha producido un error y el proceso no se ha podido terminar Unidad:[ '+Unidad+'] Modulo:[ '+Apartado+' ]' + 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 Ds.DataSet.State in [dsEdit,dsInsert] then DS.DataSet.Cancel;
DM.IBT.RollbackRetaining; end;
Al que hemos hecho la llamada de la siguiente manera en el código anterior
Código Delphi
[-]DM.MiControlDeErrores(Dsprincipal,'UUnidades','Baja',E);
Vamos con Recuperar que nos sirve tanto para las bajas como para perdidas
Código Delphi
[-]procedure TFunidades.SBRecuperadaClick(Sender: TObject);
var
I,Indice: integer;
begin
Indice := 0;
for I := 0 to memo1.lines.count - 1 do
begin
if pos('[ MARCADA COMO BAJA',memo1.lines[i]) <> 0 then begin
Indice := i;
Break;
end;
end;
if ((DM.IBDUnidadesDISPONIBLE.Value='N') or (DM.IBDUnidadesPERDIDA.Value='S')) and (DM.IBDUnidadesVENDIDA.Value='N') then
begin
Case MessageBox(0,pchar( '¿La unidad ha sido recuperada?'+#13#10
+#13#10+'Si la unidad ha sido recuperada se establecera para el alquiler nuevamente, marcando su disponivilidad'),
pchar('Unidad recuperada'),4+32+256) of
6:begin try
VarSCadena:=chr(13)+'---[ Unidad recuperada '+DateToStr(Now)+' ]----------------[ '+VarSUsuario+' ]-----'+chr(13);
DM.IBDUnidades.Edit;
DM.IBDUnidadesDISPONIBLE.Value:='S';
if DM.IBDUnidadesPERDIDA.Value='S' then DM.IBDUnidadesPERDIDA.Value:='N';
DM.IBDUnidadesFECHA_BAJA.Clear;
if Indice>0 then Memo1.Lines.Delete(Indice);
Memo1.lines.Add(VarSCadena);
DM.IBDUnidadesNOTAS.value:=Memo1.Lines.Text;
DM.IBDUnidades.post;
DM.IBT.CommitRetaining;
except
on E: Exception do
DM.MiControlDeErrores(Dsprincipal,'UUnidades','Recuperada',E);
end;
end;
end;
end;
end;
Lo primero que hacemos es comprobar nuestro memo para saber si esta marcada como baja en el en algún momento por nuestro sistema automatizado +- después pasamos a comprobar con la siguiente linea
Código Delphi
[-] if ((DM.IBDUnidadesDISPONIBLE.Value='N') or (DM.IBDUnidadesPERDIDA.Value='S')) and (DM.IBDUnidadesVENDIDA.Value='N') then
que se produzca las siguientes condiciones, que la unidad no este disponible o este perdida y que ademas en ningún caso este vendida, si es así seguimos y quitamos la fecha de baja, marcamos el disponible como 'S' ya que tanto si estaba de baja como si estaba perdida nos pondría este campo como 'N' y si de la busca en nuestro memo de si estaba en baja nos da algún acierto lo eliminamos marcando el texto de recuperada.
Podéis ver que usado parte del código facilitado en una ocasión por EGostar, para poder posicionarme dentro del memo y saber que linea habría que borrar.
El siguiente es el botón de perdida, no creo que tenga que explicar el código
Código Delphi
[-]procedure TFunidades.SBPErdidaClick(Sender: TObject);
begin
Case MessageBox(0,
pchar( '¿Está seguro de querer marcar como perdida esta unidad?' +#13#10
+#13#10+'Marcar como perdida simplemente marca una unidad como no disponible, perdida y la fecha en que esta de baja, pudiendo recuperarse su utilidad con el botón recuperada'),
pchar('Marcar como Baja'),4+32+256) of
6:begin try
VarSCadena:=chr(13)+'---[ PERDIDA EL '+DateToStr(Now)+' ]----------------[ '+VarSUsuario+' ]-----'+chr(13);
DM.IBDUnidades.Edit;
if DM.IBDUnidadesDISPONIBLE.Value='S' then DM.IBDUnidadesDISPONIBLE.Value:='N';
DM.IBDUnidadesPERDIDA.Value:='S';
DM.IBDUnidadesFECHA_BAJA.Value:=Now;
DM.IBDUnidadesNOTAS.value:=DM.IBDUnidadesNOTAS.value+(VarSCadena);
DM.IBDUnidades.post;
DM.IBT.CommitRetaining;
except
on E: Exception do
DM.MiControlDeErrores(Dsprincipal,'UUnidades','Perdida',E);
end;
end;
end;
end;
Bien el siguiente apartado es mandar a otra base de datos la etiqueta, para que cuando imprimamos la hoja, podamos ponérsela a nuestra unidad para el alquiler.
Aunque no veamos ahora ese módulo (Ya lo haremos más adelante) es importante saber que este funcionara, registrando varias unidades, para cuando lo imprimamos sacar en un una sola hoja varias unidades, ya lo veremos más adelante
Código Delphi
[-]procedure TFunidades.SBEtiquetaClick(Sender: TObject);
begin
try
DM.IbdEtiquetas.Insert;
Dm.IbdEtiquetasFECHA.Value:=Now;
DM.IbdEtiquetasUNIDAD.Value:=DbeCodigo.Text;
DM.IbdEtiquetasTITULO.Value:=DBETitulo.Text;
DM.IbdEtiquetasCODIGO_BARRAS.Value:=DBECodigoBarras.Text;
DM.IbdEtiquetasUSUARIO.Value:=VarSUsuario;
DM.IbdEtiquetasIMPRIMIDO.Value:='N';
DM.IbdEtiquetas.Post;
DM.IBT.CommitRetaining;
except
on E: Exception do
DM.MiControlDeErrores(Dsprincipal,'UUnidades','A Etiquetas',E);
end;
end;
Bien ahora pondré el código de nuestro siguiente botón, el cual realmente manda a otro módulo los datos y registra usando ambos módulos ya que entramos en dos apartados muy diferentes en el que se usan 3 tablas de nuestra base de datos.
Código Delphi
[-]procedure TFunidades.SBVendidaClick(Sender: TObject);
begin
VarIModoApertura:=1;
FMovimientos.Show;
end;
Tanto para este último botón como para el anterior hemos usado nuevas tablas que hemos creado junto a otras, de las cuales hoy y mañana veremos únicamente la de movimientos, clientes, dejando las otras para más adelante