Ver Mensaje Individual
  #61  
Antiguo 10-06-2013
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
Reputación: 22
José Luis Garcí Va camino a la fama
Antes de seguir comentaros que el tema de la Ley de Protección de Datos obliga a que nuestro programa tenga acceso con claves y nuestra base de datos también, en este caso estoy usando Firebird y para esta demo no lo haré, pero ademas uso unas funciones y encripto los nombres y documentos (NIF, DNI) dentro de la base de datos, desencriptandolas en los formas, ya que nos encargamos que al form sólo se accede si se tiene el nivel necesario.

Vamos con la estructura de las siguientes 6 tablas

Proveedores

Cita:
CREATE TABLE PROVEEDORES (
ID INTEGER NOT NULL,
CODIGO T20 /* T20 = VARCHAR(20) */, //Código del proveedor
EMPRESA T80 /* T80 = VARCHAR(80) */, //Nombre de la empresa
LIBRE T80 /* T80 = VARCHAR(80) */, //Campo libre sin uso inicialmente
CIF T20 /* T20 = VARCHAR(20) */, //Número del CIF o documento identificativo
FECHAALTA DATE, //Fecha de alta
FORMAPAGO T40 /* T40 = VARCHAR(40) */, //Forma de pago
DIASPAGO T20 /* T20 = VARCHAR(20) */ //Los días de pago
);
Empleados incluye a los agentes

Cita:
CREATE TABLE EMPLEADOS (
ID INTEGER NOT NULL,
CODIGO T20 /* T20 = VARCHAR(20) */, /Código del empleado
AGENTE LOG /* LOG = CHAR(1) */, //Es un agente/comercial
MEDIACOMISION NUMERIC(15,2), /Media de su comisión, se puede poner la más alta y el programa regulara sobre la comisión por producto
FECHAALTA DATE, //Fecha de alta
FECHABAJA DATE, //Fecha de su baja (Los datos de los empleados en ciertos sectores no se pueden borrar nunca, como en todas las empresas del sector químico
NUMEROSEGURIDADSOCIAL T40 /* T40 = VARCHAR(40) */, //Número de la seguridad social
NUMERODOCUMENTO T40 /* T40 = VARCHAR(40) */, //Número de documento identificativo, Nif, Dni, pasaporte, etc
COMISIONDTO1 NUMERIC(15,2), //Descuento a aplicar en la comisión si se aplica el Dto 1
COMISIONDTORAPEL2 NUMERIC(15,2), //Descuento a aplicar en la comisión si se aplica el Dto o rapel 2
COMISIONDTORAPEL3 NUMERIC(15,2), //Descuento a aplicar en la comisión si se aplica el Dto o rapel 2
COMISIONDTORAPEL4 NUMERIC(15,2), //Descuento a aplicar en la comisión si se aplica el Dto o rapel 3
COMISIONDTORAPEL5 NUMERIC(15,2), //Descuento a aplicar en la comisión si se aplica el Dto o rapel 5
PUESTO T20 /* T20 = VARCHAR(20) */, //Puesto que ocupa dentro de la empresa
NOMBRE T80 /* T80 = VARCHAR(80) */, //Nombre de la persona
SALARIO NUMERIC(15,2)// //Sueldo de la persona (este campo sólo lo dejaremos ver a los empleados de mayor nivel
);
Como podéis ver se aplica un descuento en las comisiones según el rapel o descuento que aplicamos entre el 2 y el 5 (rapel), pero no en el 1 ya que es el precio base, este descuento de la comisión se aplica si el descuento dentro del producto es diferente de 0, ó si se ha aplicado el rapel.

Fabricables
Cita:
CREATE TABLE FABRICABLES (
ID INTEGER NOT NULL,
CODIGO T20 /* T20 = VARCHAR(20) */, //Código del fabricable
PRODUCTO T80 /* T80 = VARCHAR(80) */ //Nombre base del producto a fabricar
);
Formas de pago

Cita:
CREATE TABLE FPAGOS (
ID INTEGER NOT NULL,
CODIGO T20 /* T20 = VARCHAR(20) */, //Código de la forma de pago (este campo es único)
FORMAPAGO T40 /* T40 = VARCHAR(40) */, //Formas de pago a establecer
DIASPRESENTACION T20 /* T20 = VARCHAR(20) */, //Días de presentación
DIASCOBRO T20 /* T20 = VARCHAR(20) */, //Dias de cobros
NUMERODEPAGOS INTEGER// Si tiene pago aplazado el numero de plazos
);
Pagos plazos

Cita:
CREATE TABLE PAGOSPLAZOS (
ID INTEGER NOT NULL,
CODIGOFORMADEPAGO T20 /* T20 = VARCHAR(20) */, //Código de forma de pago a la que esta unida
NUMERODEDIAS INTEGER, //Número de días desde la emisión de la factura, dejar en blanco si no se quiere especificar
PORCENTAJEPAGO NUMERIC(15,2) //Porcentaje del total de la factura a cobrar en este plazo
);
Bueno en primer lugar decir que estas son las primeras tabla que están enlazada ( FPAGOS es el maestro y PAGOSPLAZOS el detalle), después sobre la tabla PAGOSPLAZOS
deciros que mi modo de uso es el siguiente pongo dos ejemplos

1º) Cliente pago a 30(40%),60(30%),90(30%) días factura 1000, fecha 30/06/2013 y días de pago del 20 al 25, quedarían los pagos de la siguiente manera

25/07/2013..Importe 400.00 euros [Pago lógico 30/07/2013] (como podemos ver no llega a los 30 días, pero hemos cogido el dato de sus fechas de pago, en caso contrario se iría a casi dos meses)
25/08/2013..Importe 300.00 euros [Pago lógico 29/08/2013]
25/09/2013..Importe 300.00 euros [Pago lógico 28/09/2013]

2º) Cliente paga a 50% y 50%, factura de 1000 euros, fecha 30/06/2013 y días de pago del 20 al 25, lo pagos serían
25/ (mes a designar entre el cliente y la empresa)/2013..Importe 500.00 euros
25/ (mes a designar entre el cliente y la empresa)/2013..Importe 500.00 euros
Al no poner el número de días sólo tenemos en cuenta el día de pago y no el número de días a transcurrir para cada uno de los plazos.

La tabla Lotes

Cita:
CREATE TABLE LOTES (
ID INTEGER NOT NULL,
CODIGOPRODUCTOFABRICABLE T20 /* T20 = VARCHAR(20) */, //Código del producto Fabricable
CODIGOEMPLEADO T20 /* T20 = VARCHAR(20) */, //Código del empleado responsable
FECHA DATE, //Fecha en que se fabrico
LOTE T20 /* T20 = VARCHAR(20) */, //Lote asignado
CADUCIDAD DATE, //Si es caduco su fecha de caducidad
CANTIDAD NUMERIC(15,2), //Cantidad total fabricada (litros, kilos unidades)
ACTIVO LOG /* LOG = CHAR(1) */ //Si el producto esta activo
);
Sobre el campo ACTIVO, lo usamos para saber si es un lote que se puede vender (S) o no se puede vender (N), por que sea para trasformación, o sea un lote retirado del mercado.

Aunque nadie me ha preguntado, si os dais cuenta, en mi tabla artículos, no he puesto campos para tallas, colores, tamaños o si esta dividido en partes, si lo necesitáis sabéis que son campos que tienen que usarse con tablas auxiliares. yo en esta demo no las voy a poner, pero no esta demás comentarlo.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita