Ir al contenido


Foto

Programa de gestión desde 0 (Activo)


  • Por favor identifícate para responder
156 respuestas en este tema

#101 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 27 julio 2013 - 11:44

Hola amigo,
Me haces acordar al famoso mago enmascarado que relevaba como se hacían los trucos de magia.
Algo similar ocurre aquí.
Pues bien, no debes sentirte mal por haber expuesto este extenso tutorial. No lo haces de mala intención ¡todo lo contrario! Lo haces con las mejores intenciones para que quienes están metiéndose en el tema tenga un poco más de preparación y de donde agarrarse.
Tampoco es que estás dando todo de todo, tu simplemente aportas un norte. Luego ya es responsabilidad de quien lo lee el cómo complementar lo que sabe con lo leído y en como innovar.

Saludos,
  • 0

#102 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 28 julio 2013 - 02:25

Hola compañeros, estoy trabajando en el módulo de Documentos, que va bastante avanzado, pero como ya había dicho necesitaremos algunas tablas nuevas.

Aquí la primera

[DELPHI]CREATE TABLE RETENCIONES (
    ID                  INTEGER NOT NULL,
    NUMERODOCUMENTO      T20 NOT NULL /* T20 = VARCHAR(20) */,  //Número del documento (siempre Factura)
    SERIE                T3 NOT NULL /* T3 = VARCHAR(3) */,  //Serie de la factura               
    FECHA                DATE NOT NULL,  //Fecha de la factura
    CODIGOCLIENTE        T20 NOT NULL /* T20 = VARCHAR(20) */,  //Código del cliente
    SUBTOTAL            POR NOT NULL /* POR = NUMERIC(15,4) */,  //Subtotal de la factura
    IMPUESTOS            POR NOT NULL /* POR = NUMERIC(15,4) */,  //Total de impuestos
    NUMERORETENCION      INTEGER NOT NULL,  //Número asignado a esta retención (este campo es único)
    PORCENTAJERETENCION  POR NOT NULL /* POR = NUMERIC(15,4) */,  //Porcentaje a retener el cliente de nuestra factura
    TOTALRETENIDO        POR NOT NULL /* POR = NUMERIC(15,4) */,  //Importe de la retención echa por el cliente
    CAMPOLIBRE          T80 /* T80 = VARCHAR(80) */  //Campo libre para lo que nos haga falta
);[/DELPHI]
  • 0

#103 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 28 julio 2013 - 02:34

Toca modificar la tabla de configuración y como más adelante tendríamos que modificarla para otros me anticipo y lo hago ahora, sólo añadimos  nuevos numeradores

NUMERORETENCION                  T20 /* T20 = VARCHAR(20) */,
    NUMEROFINANCIADO                T20 /* T20 = VARCHAR(20) */,
    NUMERORUTA                      T20 /* T20 = VARCHAR(20) */


  • 0

#104 ELKurgan

ELKurgan

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 566 mensajes
  • LocationEspaña

Escrito 29 julio 2013 - 01:03

Por cierto, además de ser un muy buen tutorial, también me gusta tu nueva imagen... ¿En serio te ves como el abuelo cebolleta?

:D :D :D
  • 0

#105 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 29 julio 2013 - 07:01

Gracias, compañero, el nick me fue medio impuesto en el tema http://www.clubdelph...?t=83457&page=6

Exactamente por el compañero Javier en su post

Entre el "abuelo cebolleta" y Casimiro, en vez del ClubDelphi parece la editorial bruguera.

Saludos
PD: este comentario seguramente que sólo lo entendamos los "juveniles"


Me hizo gracia y lo asimile y aplique.

De todas maneras si creo que puedo llegar a ser un poco tostón muchas veces, incluso salvo raras intervenciones de otros compañeros esto parece un monologo.

De todas maneras me alegro de que te guste y espero que ademas te sea útil.
  • 0

#106 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 29 julio 2013 - 11:35

El turno de la tabla financiado


[DELPHI]CREATE TABLE FINANCIADO (
    ID                INTEGER NOT NULL,
    FECHA              DATE,  //Fecha de emisión de la financiación, sólo desde la factura
    NUMERODOCUMENTO    T20 NOT NULL /* T20 = VARCHAR(20) */,  //Solo Facturas
    IMPORTEFINANCIADO  POR NOT NULL /* POR = NUMERIC(15,4) */,  //Cantidad a financiar
    CODIGOCLIENTE      T20 NOT NULL /* T20 = VARCHAR(20) */,  //Código del cliente
    MININOTA          VARCHAR(150),  //Texto aclaratorio
    INTERESESDEMORA    POR /* POR = NUMERIC(15,4) */,  //Porcentaje de intereses a cargar por demora en el pago mensual
    TIPODOCUMENTO      T20 NOT NULL /* T20 = VARCHAR(20) */,  //Factura
    SERIE              T20 NOT NULL /* T20 = VARCHAR(20) */,  //Serie del número de documento
    NUMEROFINANCIADO  T20 /* T20 = VARCHAR(20) */  //Número de de financiado
);[/DELPHI]
  • 0

#107 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 29 julio 2013 - 11:38

Y ahora el detalle de financiado

[DELPHI]CREATE TABLE FINANCIADODETALLE (
    ID            INTEGER NOT NULL,
    IDENTIFICADOR  INTEGER NOT NULL,  //Es  la clave foranea i conecta con el ID de financiado
    FECCHAPAGO    DATE,  //Fecha prevista del pago a partir de la cual empieza a cobrar los intereses de demora
    FORMAPAGO      T80 /* T80 = VARCHAR(80) */,  //Forma de pago establecida
    IMPORTE        POR /* POR = NUMERIC(15,4) */  //Importe de este pago
);[/DELPHI]

Por cierto en la tabla FINANCIADO el campo NUMEROFINANCIADO es único
  • 0

#108 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 30 julio 2013 - 02:48

Primero una modificación más a la tabla confi, añadimos

[DELPHI]NUMEROCOMISION                  T20 /* T20 = VARCHAR(20) */  //para documentos de pago de comisiones[/DELPHI]

y ahora la tabla de comisiones

[DELPHI]CREATE TABLE COMISIONES (
    ID              INTEGER NOT NULL,
    CODIGOEMPLEADO  T20 /* T20 = VARCHAR(20) */,  //Código del empleado que tiene que ser un agente
    NUMERODOCUMENTO  T20 /* T20 = VARCHAR(20) */,  //Número del documento FACTURA
    TIPODOCUMENTO    T20 /* T20 = VARCHAR(20) */,  //Tipo de documento FACTURA
    SERIE            T3 /* T3 = VARCHAR(3) */,  //Serie de la FACTURA
    COMISION        POR /* POR = NUMERIC(15,4) */,  //Porcentaje de la comisión
    IMPORTECOMISION  POR /* POR = NUMERIC(15,4) */,  //Importe bruto de la comisión
    MININOTA        VARCHAR(150),  //Para pequeñas notas en la comisión
    PAGADAS          LOG /* LOG = CHAR(1) */,  //Si esta ya ha sido pagada
    FECHAPAGO        DATE,  //Fecha en la que se realizo el pago
    NUMEROPAGO      T20 /* T20 = VARCHAR(20) */,  //Número del documento de pago
    FECHA            DATE,  //Fecha es la misma que de la factura
    RETENCIONES      POR /* POR = NUMERIC(15,4) */  //Porcentaje a retener (para HACIENDA) de las comisiones
);[/DELPHI]
  • 0

#109 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 30 julio 2013 - 02:49

Para que quede un poco más claro pongo el estado actual de la tabla CONFI

[DELPHI]CREATE TABLE CONFI (
    ID                              INTEGER NOT NULL,
    EMPRESA                          T80 /* T80 = VARCHAR(80) */,
    CALLE                            T80 /* T80 = VARCHAR(80) */,
    CODIGOPOSTAL                    T10 /* T10 = VARCHAR(20) */,
    POBLACION                        T80 /* T80 = VARCHAR(80) */,
    PROVINCIA                        T80 /* T80 = VARCHAR(80) */,
    TELEFONO                        T20 /* T20 = VARCHAR(20) */,
    TELEFONO2                        T20 /* T20 = VARCHAR(20) */,
    LOGO                            IMG /* IMG = BLOB SUB_TYPE 0 SEGMENT SIZE 80 */,
    WEB                              T80 /* T80 = VARCHAR(80) */,
    EMAIL                            T80 /* T80 = VARCHAR(80) */,
    MOVIL                            T20 /* T20 = VARCHAR(20) */,
    FAX                              T20 /* T20 = VARCHAR(20) */,
    CIF                              T20 /* T20 = VARCHAR(20) */,
    REGISTROMERCANTIL                T80 /* T80 = VARCHAR(80) */,
    NOTA                            MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
    COLORA                          T20 /* T20 = VARCHAR(20) */,
    COLORB                          T20 /* T20 = VARCHAR(20) */,
    COLORACTIVO                      T20 /* T20 = VARCHAR(20) */,
    COLORNOACTIVO                    T20 /* T20 = VARCHAR(20) */,
    NUMEROPRESUPUESTO                T20 /* T20 = VARCHAR(20) */,
    NUMEROPEDIDO                    T20 /* T20 = VARCHAR(20) */,
    NUMEROALBARAN                    T20 /* T20 = VARCHAR(20) */,
    NUMEROFACTURA                    T20 /* T20 = VARCHAR(20) */,
    NUMEROLOTE                      T20 /* T20 = VARCHAR(20) */,
    NUMEROCLIENTE                    T20 /* T20 = VARCHAR(20) */,
    NUMEROPROVEEDOR                  T20 /* T20 = VARCHAR(20) */,
    NUMEROAGENTE                    T20 /* T20 = VARCHAR(20) */,
    NUMEROALMACEN                    T20 /* T20 = VARCHAR(20) */,
    NUMEROALMACENPORDEFECTO          T20 /* T20 = VARCHAR(20) */,
    LARGOLOTE                        INTEGER,
    LAGONUMEROS                      INTEGER,
    SERIE                            T3 /* T3 = VARCHAR(3) */,
    SERIE2                          T3 /* T3 = VARCHAR(3) */,
    SERIE3                          T3 /* T3 = VARCHAR(3) */,
    USARSERIEYEAR                    LOG /* LOG = CHAR(1) */,
    LDPD1                            MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
    LDPD2                            MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
    LDPD3                            MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
    NOMBREMONEDA                    T10 /* T10 = VARCHAR(20) */,
    NOMBREIMPUESTO                  T10 /* T10 = VARCHAR(20) */,
    DESCRIPCIONIMPUESTO1            T20 /* T20 = VARCHAR(20) */,
    IMPUESTO1                        POR /* POR = NUMERIC(15,4) */,
    DESCRIPCIONIMPUESTO2            T20 /* T20 = VARCHAR(20) */,
    IMPUESTO2                        POR /* POR = NUMERIC(15,4) */,
    DESCRIPCIONIMPUESTO3            T20 /* T20 = VARCHAR(20) */,
    IMPUESTO3                        POR /* POR = NUMERIC(15,4) */,
    DESCRIPCIONIMPUESTO4            T20 /* T20 = VARCHAR(20) */,
    IMPUESTO4                        POR /* POR = NUMERIC(15,4) */,
    DESCRIPCIONRECARGOEQUIVALENCIA1  T20 /* T20 = VARCHAR(20) */,
    RECARGOEQUIVALENCIA1            POR /* POR = NUMERIC(15,4) */,
    DESCRIPCIONRECARGOEQUIVALENCIA2  T20 /* T20 = VARCHAR(20) */,
    RECARGOEQUIVALENCIA2            POR /* POR = NUMERIC(15,4) */,
    DESCRIPCIONRECARGOEQUIVALENCIA3  T20 /* T20 = VARCHAR(20) */,
    RECARGOEQUIVALENCIA3            POR /* POR = NUMERIC(15,4) */,
    DESCRIPCIONRECARGOEQUIVALENCIA4  T20 /* T20 = VARCHAR(20) */,
    RECARGOEQUIVALENCIA4            POR /* POR = NUMERIC(15,4) */,
    MODOCOPIADESEGURIDAD            T20 /* T20 = VARCHAR(20) */,
    NUMERORETENCION                  T20 /* T20 = VARCHAR(20) */,
    NUMEROFINANCIADO                T20 /* T20 = VARCHAR(20) */,
    NUMERORUTA                      T20 /* T20 = VARCHAR(20) */,
    NUMEROCOMISION                  T20 /* T20 = VARCHAR(20) */
);[/DELPHI]
  • 0

#110 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 05 agosto 2013 - 01:24

Hola compañeros, un añadido a la tabla comisiones

IMPORTEDOCUMENTO  POR /* POR = NUMERIC(15,4) */  //Importe del documento sobre el que se paga la comisión


se podría omitir este campo y hacer la búsqueda por SQL, en el momento necesario, pero es más practico, tenerla metida en la misma tabla, el consumo de recursos es mínimo, evitando el consumo de memoria por el motor de la BD para hacer la consulta
  • 0

#111 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 06 agosto 2013 - 10:40

Bueno aquí tenemos ya terminado el apartado de documentos

Su visor

Imagen Enviada

y el apartado de datos

[img width=800 height=513]http://nsae01.casimages.net/img/2013/08/07/130807064026725230.jpg[/img]

y como siempre el código en https://gist.github....onymous/6171193
  • 0

#112 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 06 agosto 2013 - 10:51

El form de productos y trazabilidad, etc. auxiliar de documentos

Imagen Enviada

y su código

https://gist.github....onymous/6171280
  • 0

#113 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 06 agosto 2013 - 10:55

El módulo de financiado

Imagen Enviada


y el código https://gist.github....onymous/6171304
  • 0

#114 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 06 agosto 2013 - 11:01

y por último el dialogo de impresión de documentos

Imagen Enviada

y el código https://gist.github....onymous/6171325
  • 0

#115 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 06 agosto 2013 - 11:05

Con esto debéis tener un 80-90 por ciento de la aplicación según mis cálculos, faltan módulos totalmente auxiliares, aparte de  gestión de comisiones (incluye el pago) y rutas, como digo el resto es lo que queráis poner al programa, creo que daré 2 o 3 módulos más y daré por terminado el presente tutorial.
  • 0

#116 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 08 agosto 2013 - 12:07

El módulo de agenda de contactos

Imagen Enviada

Aquí con una letra seleccionada

[img width=798 height=600]http://nsae01.casimages.net/img/2013/08/08/130808080946316969.jpg[/img]

El código en https://gist.github....onymous/6187111

y la función ActQAgenda

[DELPHI]//-----------------------------------------------------------------------------
//*********************************************************[ ActQAgenda ]******
//  14/06/2012  JLGT  Para modificar la sentencia de un querry para agendas
//-----------------------------------------------------------------------------
//  Estudiando como poder hacer mi código mas corto se me ocurrio esta función
//  para usar un los IBQerry, para mi base de datos Firebird. para el uso de agendas
//  El tema es que cada vez que utilizo un querry y lo modifico tengo que
//  escribir unas 20 lineas y mediante este sistema, logro reducirlo a una sola
//  ya que es un, código repetitivo y soló varia el nombre del query y la
//  sentencia Sql, cree esta función
//-----------------------------------------------------------------------------
// [QRY]              Tibquery a actualizar
// [TAB]              El tabcontrol que lo llama
// [Campo]            Nombre del Campo por el que funcionara el TabControl
// [TxtSql]          Cadena de texto con sentencia SQL
// [MostrarMEnsaje]  Si muestra el mensaje de la Exception
// [RetornarMEnsaje]  Si retorna la cadena Sql que da el Error
// [RetornarQuerry]  Si retorna El querry a la cadena sql de antes del error
//-----------------------------------------------------------------------------
//  Base de datos a usar CLIENTES usar en el tabChage
//  if ActQAgenda(IBQuerry1,Tabcontrol1,'Nombre','Select * form Clientes')=true then
//                  showmessage('Cambio OK') else showmessage('El cambio a fallado');
//- ---[DETALLE]---------------------------------------------------------------
// El grid al que este unido debe tener los campos fijados para evitar un error
//-----------------------------------------------------------------------------
Function ActQAgenda(QRY:TIBQuery; TAB:TTabControl;Campo:String;TxtSql:string; MostrarMensaje:boolean=VMiLogico;Retornarmensaje:boolean=VMiLogico; RetornarQuerry:boolean=VMiLogico): Boolean;
var AntSql:string;
    Letraagenda: string;
begin // Cuando cambiamos en la agenda
  try
    try
      Letraagenda := TAB.Tabs[TAB.TabIndex];
      if TAB.TabIndex = 0 then
      BEGIN
        QRY.Active:=false;
        QRY.SQL.Clear;
        QRY.SQL.Text:=TxtSql;
        QRY.Active:=true;
        Result:=true;
      END else
      BEGIN
          AntSql:=QRY.SQL.Text;
          QRY.Active:=false;
          QRY.SQL.Clear;
          QRY.SQL.Text:=TxtSql+' where UPPER('+Campo+') Between :LDESDE and :LHASTA';
          QRY.ParamByName('LDESDE').AsString := Letraagenda;
          QRY.ParamByName('LHASTA').AsString := Letraagenda + '||Z';
          QRY.Active:=true;
          Result:=true;
      END;
    except
        on E: Exception do
        begin
          if MostrarMensaje=true then
          begin
            ShowMessage('Se ha producido un error: ' + 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)
                      +'Se volvera al estado anterior');
          end;
        QRY.Active:=False;
        Result:=false;
        end;
    end;
  finally
      if Result=false then
      begin
        if Retornarmensaje=true then  ShowMessage('Sentencia Sql que ha dado Error' + Chr(13) + Chr(13)+ QRY.SQL.Text);
        if RetornarQuerry=true then
        begin
            QRY.Active:=false;
            QRY.SQL.Clear;
            QRY.SQL.Text:=TxtSql;
            QRY.Active:=true;
        end;
      end;
  end;
end;[/DELPHI]
  • 0

#117 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 08 agosto 2013 - 12:10

El módulo ver ficha

Imagen Enviada

Y el código  https://gist.github....onymous/6187160
  • 0

#118 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 09 agosto 2013 - 12:48

Nos encaminamos ya al final del programa, quedando unos pocos módulos que dar y unas pocas tablas, de todas maneras, al final del mismo pondré tanto el código completo y la BD, por un lado y el ejecutable y la BD por otro. vamos con una de las últimas tablas a dar, la  de vehículos, que nos hará falta para cartas de porte y rutas

CREATE TABLE VEHICULOS (
    ID              INTEGER NOT NULL,
    MATRICULA      T10 NOT NULL /* T10 = VARCHAR(20) */,  //Matricula del  vehículo
    MARCA          T20 NOT NULL /* T20 = VARCHAR(20) */,  //Maraca del vehículo
    TARA            T10 /* T10 = VARCHAR(20) */,  //tara de carga
    SEGURO          T40 /* T40 = VARCHAR(40) */,  //Seguro del vehículo
    NUMEROPOLIZA    T40 /* T40 = VARCHAR(40) */,  //Número de la póliza del seguro
    TELEFONOSEGURO  T20 /* T20 = VARCHAR(20) */,  //Teléfono de la compañía de seguro
    EMPRESA        T80 /* T80 = VARCHAR(80) */  //Dueño del vehículo
);


  • 0

#119 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 09 agosto 2013 - 01:47

Bueno voy a usar varias pantallas de mi anterior programa para ahorrar tiempo adaptándolas al actual programa, así que la estética puede variar un poco.

Comenzamos con vehículos

Imagen Enviada

El código en  https://gist.github....onymous/6191865
  • 0

#120 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 09 agosto 2013 - 01:58

La Carta de portes

Imagen Enviada

Como podemos ver pongo la imagen con las dos pestañas abiertas, los botones de la derecha son independientes en cada pestaña y de los datos de la izquierda, tenemos (peso bultos y cantidad)

Peso, es el total del peso de esta mercancía que no podrá exceder el limite de la misma si tiene limite

Bultos, es el número de bultos, no confundir con la cantidad, ya que si llevamos garrafas de 5L por ejemplo y van en cajas (pongamos que 4 por caja) 5 cajas son 20 garrafas

Cantidad, se refiere al número de unidades, siguiendo con el ejemplo anterior 20 serían las unidades

Puede pasar que el número de bultos y unidades sean las mismas, tanto por que van sueltas como por el formato de la unidad, pero en ningún caso un palet es una unidad

El código en https://gist.github....onymous/6191905

y por último la carta de portes en el word llamada desde el programa, por supuesto podéis usar otro sistema, tanto de report como de llamada

[img width=800 height=435]http://nsae01.casimages.net/img/2013/08/09/130809100312473637.jpg[/img]
  • 0




IP.Board spam blocked by CleanTalk.