Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Programa de gestión desde 0 (https://www.clubdelphi.com/foros/showthread.php?t=83457)

José Luis Garcí 30-07-2013 08:09:36

Y ahora el detalle de financiado

Código 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
);

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

José Luis Garcí 30-07-2013 11:19:17

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

Código Delphi [-]
NUMEROCOMISION                   T20 /* T20 = VARCHAR(20) */  //para documentos de pago de comisiones

y ahora la tabla de comisiones

Código 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
);

José Luis Garcí 30-07-2013 11:20:34

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

Código 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) */
);

José Luis Garcí 05-08-2013 09:55:55

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

Cita:

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

José Luis Garcí 07-08-2013 07:08:07

Bueno aquí tenemos ya terminado el apartado de documentos

Su visor



y el apartado de datos



y como siempre el código en https://gist.github.com/anonymous/6171193

José Luis Garcí 07-08-2013 07:23:34

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



y su código

https://gist.github.com/anonymous/6171280

José Luis Garcí 07-08-2013 07:27:42

El módulo de financiado




y el código https://gist.github.com/anonymous/6171304

José Luis Garcí 07-08-2013 07:33:13

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



y el código https://gist.github.com/anonymous/6171325

José Luis Garcí 07-08-2013 07:37:12

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.

Casimiro Notevi 07-08-2013 09:41:32

^\||/^\||/^\||/

José Luis Garcí 08-08-2013 20:39:53

El módulo de agenda de contactos



Aquí con una letra seleccionada



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

y la función ActQAgenda

Código 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;

José Luis Garcí 08-08-2013 20:42:38

El módulo ver ficha



Y el código https://gist.github.com/anonymous/6187160

José Luis Garcí 09-08-2013 09:21:06

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

Cita:

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
);

José Luis Garcí 09-08-2013 10:20:31

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



El código en https://gist.github.com/anonymous/6191865

José Luis Garcí 09-08-2013 10:30:39

La Carta de portes



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.com/anonymous/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


José Luis Garcí 09-08-2013 10:35:52

Que quede claro que esta es una carta de porte externa, ya que como hemos dicho adecuando correctamente nuestra factura o albarán nos puede servir de carta de portes, junto con la hoja de ruta, por eso la importancia de esta última, junto con el control del peso transportado.

Ya hemos hablado de estos apartados anteriormente, pero repito, que en muy breve será obligatoria la hoja de ruta, donde deberemos especificar, el conductor/conductores, el vehículo, los número de documentos, clientes, destinos y pesos, de cada documento a transportar (Factura, albarán, etc) y el total del peso de todo el transporte, en la misma se permitirá, añadir anotaciones y recogidas de mercancías.

José Luis Garcí 09-08-2013 11:10:00

Para que os hagáis una idea de todos los módulos que puede tener este tipo de programa, os voy a ir poniendo los apartados del menú de mi anterior programa, explicándolos brevemente y poniendo los que ya hemos hecho y los que terminare, lo haré a ratos, pues ahora estoy algo ocupado y quiero dejar terminado este tutorial, también.

Menú Archivos
Almacén - La gestión de almacenes de nuestra empresa, es muy útil cuando tenemos más de 1 almacén, en el programa no lo he dado, pero básicamente esta incluido en las bases de datos, lo único que deberíamos controlar es cuando entra y sale la mercancía en que almacén se hace el stock.

Agentes Comerciales - Nosotros la hemos incluido en empleados.

Personal - ya esta en el módulo empleados.

Proveedores - Lo tenemos.

Grupos Materias Primas - Al ir mi programa sobre fabricación tenia identificado las materias primas según grupos

Materias/ Materias Primas - al no solo tener materias primas sino otros artículos, tenia que tener este otro apartado, para luego controlar en la gestión de productos, ya que muchos eran para uso interno y a la vez de venta directa.

Fórmula - Las Fórmulas de mis productos , tenia nivel de acceso 9 y repetir clave de acceso

Productos - En nuestro programa lo tenemos en Artículo ABM (ya lo viereis en el menú)

Auxiliares - Aquí van las tablas auxiliares, en nuestro programa tiene el hueco pero no las vamos a dar, de todas manera en mi anterior programa tenia las siguientes, Familias, Sectores y Bancos

Clientes - Ya lo tenemos

Gestión de usuarios - Ya lo tenemos

Cambio de usuario - Ya lo tenemos en el menú

Configuración - Ya lo tenemos

Salir - Ya lo tenemos en el menú

Casimiro Notevi 09-08-2013 14:03:00

Ya te has ganado el sueldo ;)


G R A C I A S :)

fjcg02 09-08-2013 17:21:21

Eres un crack !!
;-)

Saludos

José Luis Garcí 09-08-2013 17:39:58

Cita:

Empezado por Casimiro Notevi (Mensaje 465247)
Ya te has ganado el sueldo ;)


G R A C I A S :)

Gracias Casimiro, pero no se por que, ni a que, ya dije que yo le debo más al Club, que lo que estoy aportando y que todo lo que pongo no es todo lo que hay :rolleyes:


La franja horaria es GMT +2. Ahora son las 08:36:22.

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