Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-03-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por José Luis Garcí Ver Mensaje
Veamos Ñuño aun no controlo el programa y me ha quedado un poco grande, pero aquí lo pongo, espero que sea lo que me habías dicho
(...)
No exactamente, pero se acerca mucho. Al menos así se puede ver de qué forma se organizan los datos.

A ver cuándo puedo hacer el tutorial con Lazarus y pongo las diferencias que encuentre, si hay alguna.

¡Buen trabajo!
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #2  
Antiguo 03-03-2015
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Cita:
Empezado por Ñuño Martínez Ver Mensaje
No exactamente, pero se acerca mucho. Al menos así se puede ver de qué forma se organizan los datos.

A ver cuándo puedo hacer el tutorial con Lazarus y pongo las diferencias que encuentre, si hay alguna.

¡Buen trabajo!
Muchas gracias Ñuño
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #3  
Antiguo 07-03-2015
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
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);
//------------------------------------------------------------------------------
//*****************************************************************[ Baja ]*****
//------------------------------------------------------------------------------
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       //Si
            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);
//------------------------------------------------------------------------------
//***************************************************[ MiControlDeErrores ]*****
//   Ds   Es el datasource a conectar
//   Unidad    LA unidad desde el que la llamamos
//   Apartado  El apartado
//   E    La  exception producida
//------------------------------------------------------------------------------
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;    //Donde IBT es el nombre de su Ibtrasaction, con ruta
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);
//------------------------------------------------------------------------------
//***********************************************************[ Recuperada ]*****
//------------------------------------------------------------------------------
var
  I,Indice: integer;
begin
  //----------Esta parte esta basada en el código de Egostar bajado de:
  //----http://www.delphiaccess.com/forum/oop-7/(resuelto)-buscar-palabras-en-un-memo/
  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       //Si
            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);
//------------------------------------------------------------------------------
//**************************************************************[ Perdida ]*****
//------------------------------------------------------------------------------
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       //Si
            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);
//------------------------------------------------------------------------------
//**********************************************************[ A etiquetas ]*****
//------------------------------------------------------------------------------
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);
//------------------------------------------------------------------------------
//***************************************************************[ vender ]*****
//------------------------------------------------------------------------------
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

__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #4  
Antiguo 07-03-2015
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Vamos primero con el módulo de cliente, primero una imagen en fase de diseño



Y otra en ejecución



El código en

https://gist.github.com/anonymous/29671ebc05abf548bb61
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #5  
Antiguo 07-03-2015
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Comentar que este módulo es necesario antes del próximo ya descubriremos por que, comentemos los 3 botones que tenemos de más

A Cuenta: nos permite introducir una cantidad de dinero que estará a favor de nuestro cliente, para ello limitamos el código del cliente a este, no haciéndolo en los cargos, ya que estos los podemos crear de manera muy diferente a la mía, pero rellenamos partes de los conceptos y lo registramos en el cliente en notas

Pagos: Permite que un cliente pague el pendiente que tiene existiendo tres posibilidades al realizarlo que veremos en el otro módulo que es donde se hace

Carnet: este es un módulo que de momento no tocaremos haciéndolo cuando entremos en la parte de impresión, pero lo que hace es el carnet del cliente
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #6  
Antiguo 07-03-2015
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Veamos los cambios en el DataModule (DM)

Código Delphi [-]
//------------------------------------------------------------------------------
//**************************************************************[ Conectar ]****
//Nos permite conectar las tablas, querrys + IBDatabase + IBTransaction
//------------------------------------------------------------------------------
begin
   ...
   if IBDCaja.Active=false then IBDCaja.Active:=True;                    //La tabla Cajas
   if IBDClientes.Active=false then IBDClientes.Active:=True;            //La tabla Clientes
   if IBDMovimientos.Active=false then IBDMovimientos.Active:=True;      //La tabla Movimientos
   if IbdEtiquetas.Active=false then IbdEtiquetas.Active:=True;          //La tabla Etiquetas
end;

Como vemos vamos añadiendo nuestras tablas según avanzamos y vamos insertandolas
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #7  
Antiguo 07-03-2015
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Y ya por último en esta semana ya que mañana dudo que pueda ponerme con el tutorial os pongo el módulo de movimiento y algunas partes a comentar



El código

https://gist.github.com/anonymous/fcad11f5cd2b6ef0b6e2
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener fotograma de video. Video Finish rabata2001 Varios 0 07-05-2014 12:02:30
segundo video tutorial delphi cacu La Taberna 4 21-02-2012 14:30:26
Video Tutorial Delphi Para Novatos cacu Varios 4 22-11-2011 07:41:30
crear video tutorial glrjola Varios 7 28-04-2011 12:08:56
Video Tutorial para instalar Apache + MySQL + PHP desde 0 !!! Hagen PHP 0 07-02-2007 12:57:45


La franja horaria es GMT +2. Ahora son las 10:26:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi