Este hilo se merece estar siempre arriba, así que ahí está, como tema importante.
|
Aquí el módulo que reúne los contactos y que más adelante sus datos lo usaremos en la agenda
aquí la imagen Aquí una imagen espesificando este detalle y aquí el código https://gist.github.com/anonymous/5693067 existe un pequeño error en el código el correcto es
|
Aquí el módulo que reúne las personas de contacto
Aquí la imagen Aquí un detalle de datos de familia Aquí el código https://gist.github.com/anonymous/5693094 y por último las nuevas funciones usadas de mi fichero Fun.pas
|
Aquí el módulo que reúne los bancos
Aquí la imagen Aquí el código https://gist.github.com/anonymous/5693125 y nuevas funciones usadas de mi archivo Fun.pas
|
Gracias Casimiro, estaba tan metido en subir los datos que no me había fijado en que contestaste. Muchas gracias por considerarlo interesante
|
Para que quede más claro el uso de la tabla clientes, con direcciones, contactos, personas de contacto y bancos os pongo un esquema, que acabo de hacer con un nuevo programa Free, que esta muy bien
el programa se llama Ibeasy+ y lo podéis bajar de http://ibeasy.software.informer.com/. Ahora que creo quede más claro mi idea de uso de las tablas modulares (no si sera correcto), paso a explicar un par de términos y su uso básico, para que luego al usarlos estén un pocos más claros. Stock: Creo que es el más común y se refiere a la cantidad de mercancía que tenemos disponible ADR: Se refiere al transporte de mercancía por carretera y una gran cantidad de países se han acogido al sistema, es obligatorio en los países de la comunidad europea y en todos los acogidos a este sistema. El llevar mercancías que necesitan ADR y no llevarlo conlleva severas multas al conductor y a la empresa, e incluso in movilización del vehículo y la mercancías. para más información http://es.wikipedia.org/wiki/Acuerdo..._por_carretera Trazabilidad: Este es el punto más peliagudo, la mayor parte de la gente cree, que sólo es obligatorio a los productos comestibles, pero realmente hay que aplicarla a otros muchos sectores, como todos los derivados de los químicos, manufacturados, alimentación, agricultura, residuales, Nucleares y un largo etc. Hay que tener en cuenta que la trazabilidad es desde la creación del producto (inclusive anterior de los proveedores) hasta el consumidor final (quedando exento en este punto supermercados, tiendas y pocos más al no tener un control exacto de a quién se le ha vendido la mercancía) la trazabilidad viene controlada por lo que se llaman seriales, lotes, etc e implica que toda una producción hecha o creada (Artificial o naturalmente) tenga un mismo número de registro, asignando el número de registro (lote) la cantidad/formato de producto sacado, aunque el (lote) no varia hay que especificar cantidad lote, pongo un ejemplo: Hacemos 1000 Litros de lavavajillas lote 130001 y sacamos en los siguientes formatos Lote................Cantidad.............Formato...............Total Litros -------------------------------------------------------------- 130001............20.....................Garrafas 25 L.........500 L. 130001............80.....................Garrafas 5 L...........400 L. 130001............100...................Botellas 1 L............100 L. Esto obliga a tener controlado las ordenes de producción y al control de la trazabilidad de los 1000 Litros del lote 130001, mediante partes de rotura, utilización interna, en fabricación uso como materias primas o re conversión y por supuesto ventas (albaranes, facturas, etc.) Hay que usar el sistema de recursividad, con la trazabilidad, al igual que con el Stock, es decir si eliminamos una factura, cambiamos la cantidad a menos o nos devuelven una mercancía. eta debe ser controlada tanto en el stock como en su control de lotes. La trazabilidad permite a los organismos públicos, en contacto con las empresas a tener controlado todo el proceso de una mercancía, aunque se hay trasformado en otra, desde su origen al consumidor final (hipotéticamente), el responsable del problema pagará una multa, pero si alguna de las partes no tiene la trazabilidad, la multa puede ser mucho mayor y si se produjesen muertes o lesiones graves, puede llevar incluso a prisión, en caso de tenerla controlada, esto muy difícilmente ocurriría, salvo que seamos los responsables. Y por último, es muy frecuente que tengamos que controlar junto con la trazabilidad la caducidad, ya que muchos productos, alimentarios, químicos, etc, tiene caducidad. Para más información podéis dirigiros a http://es.wikipedia.org/wiki/Trazabilidad Ley de Protección de Datos (LPD): Esta ley obliga a todas las empresas que controlen cual quier tipo de datos de clientes, proveedores, etc. a tener contratado una empresa gestora de dicha ley, esto obliga al texto que deben aparecer, en emails, facturas y demás documentos y aplicarla a nuestro programa es bastante simple, se trata de tener 2 o 3 memos, que su texto se pueda editar y guardar, para posibles cambios futuros y que aparezcan en nuestros documentos físicos como digitales. aparte de esto, obliga a que el cliente si así lo pide, no sea puesto en listados de ningún tipo, e incluso sea borrada su información, pero tener cuidado, por que hacienda esta por encima de esta Ley y si borráis, datos antes del cierre con hacienda y no aparecen los datos del cliente podéis tener un grabe problema. Las multas por no tener este sistema aplicado van desde los 6.000 euros a los 600.000 o el cierre de la empresa con posibilidad de prisión. Para más información ir a http://noticias.juridicas.com/base_d...lo15-1999.html Lotes: Así es como voy a denominar el control identificativo de nuestra trazabilidad. Los lotes pueden tener derivados, pudiendo ser padres e hijos, o maestros y esclavos. Quiero decir que de un producto con un lote se puede vender en varios productos diferentes, si haber alteración, cada producto tendrá un lote pero tenemos que tener controlado de que lo te viene. Ejemplo: Hacemos un Desengrasante base lote 130002 de este embotellamos una parte como limpia suelos desengrasante u otro artículo y a este último le asignarnos el lote 130003, quedando de la siguiente manera Lote Padre <> Lote Hijo 130002...........130003 (este realmente es un derivado sin modificación del lote 130002 y cuando pidamos un informe del lote 130002 debe darnos la información del lote 130003, para tener la trazabilidad correcta e igualmente pero al revés si la solicitamos del 130003. Ordenes de producción: Esto implica el proceso para la creación del lote con el producto fabricable (no confundir con el producto final), implica el operario, lote y formatos y cantidades. Diferencias entre un producto fabricable y el producto final: El producto fabricable, es el producto que vamos a fabricar y el producto final es el producto ya en su formato. Ejemplo Producto Fabricable: Lavavajillas [u]producto finales[/U], Lavavajillas 5L, Lavavajillas 25L, Lavavajillas 1L , Lavavajillas a granel, etc. Estos conceptos deben quedar muy claros, ya que si no es fácil perderse más adelante, así que si tenéis dudas, preguntar ahora antes de seguir, y por supuesto, los que no sois de España, debéis informaros de las leyes en vuestro país. Pero la mayoría de programas no tiene estos conceptos que algunos de ellos son obligatorios hace más de una década. |
Empezamos ahora con artículos
Estructura de la base de datos Cita:
Escala de Rapel: Es cuando el cliente parte de un precio normal y según sus ventas finales a la hora de facturar se aplica la tarifa según el rapel alcanzado (no lo he usado nunca y nunca me lo han pedido) Ahora la tabla NOTAS Cita:
Cita:
|
Me gustaría saber si esta quedando claro lo que llevo explicado, o tengo que ser más claro.
|
Yo lo entiendo bien, y eso que soy bastante torpe :D
Gracias, muy completo, la verdad :) |
Cambios a realizar en la unidad UBAncos de Bancos
debe quedar de la siguiente manera:
y
Como podéis comprobar me faltaba en ambos casos and (FBancos.Active) para evitar que cargue datos sin estar activo |
Se que puede parecer un tostón este hilo, pero estamos hablando de miles de lineas y conceptos que no se pueden dejar de lados, aparte de eso, como creo que nos pasa a todos, vamos mejorando métodos y el código, o corrigiendo errores según vamos avanzando, así que no me queda otro remedio sino ir poniendo los diferentes cambios
Vamos ahora con artículos Como siempre la imagen Como podéis ver no pongo la pestaña facturado, ya que aún no tenemos preparado la facturación y como en todos el código que llevo puesto, no pondré el código de impresión, por que al tener múltiples operadores a la hora de imprimir, que cada uno use y diseñe el que le gusta. El código https://gist.github.com/anonymous/5743472 Funciones usada de mi archivo fun_dbgrid.pas
|
Ahora le toca al apartado de notas
tengo un pequeño error en este módulo que aún no he encontrado, que es que no muestra las imágenes de los botones y no se si tendré que rehacerlo, pero la ida esta hay y los botones son los de siempre y el código no varia. el código https://gist.github.com/anonymous/5743504 y de este apartado nada más |
Ahora a las imágenes
el código https://gist.github.com/anonymous/5743525 Aquí si hay un cambio importante en el botón de cargar imagen, yo ya he hecho el cambio en el resto de los módulos, el código queda de la siguiente manera
y la función es
También se realizaron cambios en mi módulo de datos (DM.pas) el código añadido es el siguiente
y una imagen de como va quedando Como ya comente, el código y uno va evolucionando, así que seguirá habiendo cambios. De momento que tal os va pareciendo, es muy pesado, esta claro?, es que como hay tan pocos comentarios, no se si estoy aburriendo al personal. |
Un gran trabajo que servirá de referencia para muchos ^\||/
GRACIAS :) |
Muchas gracias Caimiro, estas siendo un grana poyo, la verdad que lo que doy no es ni comparado con lo que he recibido. Lo único, es que no se si es que lo estoy haciendo muy complejo, por que esperaba, más criticas o dudas.
Ni siquiera se si mi método es el más adecuado para un ejemplo, ya que estoy seguro, que otros compañeros serán capaces de hacerlo mucho más sencillo |
A mí me parece que para los que quieran acercarse a ver un proyecto muy completo y no "de aficionado", van a tener un buena guía gracias a tu trabajo, y no sólo por el código en sí, sino también por los conceptos profesionales de lotes, protección de datos, trazabilidad, tratamiento de imágenes, etc.
No se podrán quejar :) |
Es un lujo disponer de toda esta información.
Gracias José Luis |
Cita:
|
Cita:
Gracias Javier, no considero que sea un lujo, creo que es información que esta ahí, que por cuestiones de la vida me ha tocado empollarlas, por trabajar en un sector que las necesita y no me ha quedado más remedio que aprenderlas, pero la mayor parte de autodidacta, así que es posible que me puedan corregir, tanto en la definición de los conceptos, como en alguna parte del proceso. Lo que no quiero es sonar como prepotente, cuando doy los conceptos o he dicho que la mayoría de los programas omiten estas partes, no es que todo el mundo lo haga, pero estuve buscando software para la que era mi empresa de Fabricación de productos de limpieza y sólo encontré un programa en español que se adaptara + o - y aún así le faltaban cosas. |
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:
Cita:
Fabricables Cita:
Cita:
Cita:
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:
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. |
|
Cambios importantes en los módulos auxiliares (Notas, Imágenes, Direcciones, Bancos, Contactos, Personas de contacto)
1º) se ha añadido un IBQuerry y su datasource el ModuleData (UDM en mi caso), para facilitar los datos a todos los modulos que lo llaman,, eliminando parte del código de control en cada uno de estos, el aspecto actual de mi UDM es el siguiente Los cambios en su código son los siguientes:
2º) en el FormClose de cada módulo auxiliar ponemos el siguiente código //////////He editado nuevamente este post cambiando lo que había puesto por lo siguiente y explico lo que he eliminado///////////
he eliminado el siguiente código
, al ya esta controlado en la lineas
Que no había actualizado, con lo que el código anterior era redundante. |
Ahora le toca al modulo de proveedores
LA imagen he marcado algún olvido y lo que hacen algunos botones, ahora las pestañas 0º) Es la de los datos, vemos que realmente en la tabla proveedores tenemos que introducir pocos datos, pero que el conjunto de datos con las auxiliares la completa bastante 1º) Contactos. Recordar que esta tabla sera luego nuestra agenda, permitiendo, separarlo, por Clientes, proveedores, etc, ademas de todos, buscar por el nombre/empresa/etc y ponderemos un indice que nos permitirá ver clasificado por su inicio. 2º) Notas, como podemos ver en este caso tenemos dos notas y las hemos clasificado (campo descripción) como avisos y recordatorio, pero podríamos tener muchos más solo para este proveedor, aquí es donde se ve la potencia de este modo de programar, que aunque un poco más lioso nos da mucha más potencia. 3º) Las Imágenes, Como podemos ver también hemos puesto 2 la del logo y productos. 4º) Personas de contactos, , al tenerla en una tabla auxiliar, nos permite tener multitud de personas de contacto dentro del mismo registro 5º) Direcciones, al igual que la anterior tabla podríamos tener multitud de direcciones (Almacenes, oficinas, tiendas, etc). 6º) Bancos, sería más correcto decir cuentas, pero un cliente/proveedor/etc, puede trabajar con más de un banco o más de una cuenta corriente. 7º) Aquí ira nuestro modulo de compras a este proveedor, que aún no desarrollaremos. No voy a entrar en algo que ya se ha hablado ampliamente en los foros, sobre las notas y las imágenes si guardarlas dentro de las tablas o sólo guardar su referencia en la tabla y guardarla físicamente en archivos en el disco duro. También quiero explicar que poner en las pestañas los campos nombre del módulo y código de las tablas auxiliares, es para que quede más claro en el tutorial, normalmente, serían campos no visibles. y el código podéis bajarlo de https://gist.github.com/anonymous/5812746 |
El módulo de Formas de pago
En este módulo hay cosas que cambian, al tratarse de usar una tabla maestro y otra detalle, como podemos ver tenemos 2 panales con botonera y debemos controlar ambas y aunque en la imagen no se ve tenemos un sólo juego de botenes de confirmación y cancelación, para que quede más claro hay que estudiar el código podemos ver que hemos hecho la relación maestro detalle en el módulo UDM Aquí el código https://gist.github.com/anonymous/5812904 |
Y por último en el día de hoy el modulo de búsqueda.
como podemos ver un módulo sencillo de tan sólo 160 lineas actualmente, que ira creciendo según avancemos el proyecto, sólo tendremos que añadir el control de los módulos de llamada y su retorno, ya que este módulo sera llamado por varios módulos. No usamos la función de coloración del grid, ya que al ser este variable, en número de campos nos daría un error, más adelante lo modificare y añadiré el código, para que se ajuste al resto del diseño. El código aquí https://gist.github.com/anonymous/5812974 |
Gran trabajo ^\||/
|
Muchas gracias Casimiro, viniendo de ti un gran maestro, se agradece mucho más, ya que yo soy un burrito, comparado con el nivel que hay en el club, la suerte o desgracia que he tenido que en los últimos veinte y pico años, es que he trabajado en sectores, que me han permitido hacer sus programas, Cupones tipo la ONCE, Taller, Empresa de Limpieza, Jardinería y Control de Plagas y La Fabrica de productos de limpieza.
La verdad es que pienso muchas veces que el tema parece que no interesa mucho, pero luego miro el número de visitas y veo que no es así, no espero que me estén felicitando todo el día, pero creí que habría un poco de polémica en algunos temas, correcciones, diferencias de opinión, consejos (que los ha habido y se agradecen sinceramente) o maneras diferentes de tratar algunos temas. Otras veces pienso que o no estoy siendo muy claro, o es demasiada información y no esta siendo procesada. En Fin, seguiré mientras pueda con el tema. |
Por supuesto que interesa el tema, precisamente la mayoría de programas para delphi son de gestión para empresas.
La mayoría de nosotros es eso lo que hemos hecho y seguimos haciendo. Por cierto, si tú eres un burrito, entonces yo soy un escarabajo :D |
Hola José Luis,
lo que ocurre es que lo estás poniendo tan clarito que apenas quedan dudas. Aparte de la aplicación, que ya es bastante, para mí es tan importante o más la parte de gestión que estás explicando y cómo la resuelves. No se te ocurra parar... Gracias y un saludo |
Cita:
ahora fuera de bromas, mi nivel es bastante bajo comparado con el tuyo y el de otros muchos compañeros. |
1 Archivos Adjunto(s)
Cita:
|
Cita:
Gracias Javier, espero tengas razón y no sea por todo lo contrario. En cuanto a parar, el tiempo dirá, en principio mi idea es terminar todas las tablas iniciales, como mucho a principio del mes que viene, luego empieza lo duro, la parte de facturación, explicare sólo esta, ya que con pocos cambios se pasan a los otros formatos, de hecho es más un aspecto más básico o técnico, según el caso, me explico, En el caso más básico, el 90% de los campos de presupuestos, pedidos, albaranes y facturas, son iguales, de hecho se podría hacer una tabla maestra única para los cuatro formatos y una detalle igualmente, con lo que según el tipo de documento ocuparíamos unos campo o los dejaríamos en blanco. En la más técnica (de hecho la que prefiero), podemos usar una tabla para cada tipo de formulario y puede ser una única en detalle, como una por cada cada tipo de formato (documento) Ventajas de la primera el ahorro de tiempo y en teoría de consumo de recursos, la velocidad en principio no debería verse afectada si usamos sentencias SQL y un buen mantenimiento de la tabla. En la segunda los datos son mejor estructurados al estar en tablas independientes, lleva más tiempo de programación y es mucho más facil el seguimiento. En mi caso he trabajado en los dos sistemas y prefiero el segundo, aunque creo que el primero es igual de válido. Para que se entienda un poco mejor pongo un ejemplo de los campos de las más básica: Tabla maestra ID Integer //PRimarikey y autonumerador DOCUMENTO varchar 20 //Nombre del documento (factura, pedido,etc) SERIE Varchar 3 //Serie a usar NUMERO Varchar 10 //Aquí uso una función que sólo deja los números, con lo cual la puedo pasar a integer y sumar 1, así controlo el numerador del tipo de documento FECHA Date //Fecha de la creación del documento MODIFICACIONES Integer // (*) CODIGOCLIENTE Varchar 20 //Código del cliente CODIGOCOMERCIAL Varchar 20 //Código del comercial TOTALSUBTOTAL numeric 15-4 //Subtotal del documento, así no tengo que estar haciendo consultas sql, en ciertos casos TOTALDTO numeric 15-4 //Total descuentos del documento, así no tengo que estar haciendo consultas sql, en ciertos casos TOTALIMPUESTOS numeric 15-4 //Total impuestos del documento, así no tengo que estar haciendo consultas sql, en ciertos casos TOTALCOMISIONES numeric 15-4 //Total comisiones del documento, así no tengo que estar haciendo consultas sql, en ciertos casos PESO numeric 15-4 //Total del peso perteneciente a la factura (recuerdo que se quiere implantar obligatoriamente por la CE), que junto con la hoja de ruta (suma todos los documentos) nos dara el peso de mercancía que transportamos NUMEROARTICULOS integer //Cantidad de unidades y no cajas transportadas FORMAPAGO Varchar 20 //Código de la forma de pago NUMEROALBARAN Varchar 20 // Serie más numerador si viene de un albarán (en Facturas) NUMEROPEDIDO Varchar 20 //Serie más numerador si viene de un Pedido (en Albaranes) NUMEROPRESUPUESTO Varchar 20 ////Serie más numerador si viene de un presupuesto (en pedidos) COBRADA logico SN//LA factura ya ha sido cobrada va junto con la tabla cobros, donde especificamos como se cobro y el número de documento (talón, pagaré, etc) si existe COMISIONESPAGADAS logico SN// ''Si la comisión ha sido pagada va junto con la tabla pagocomisiones, donde especificamos fecha, forma del pago, código del comercial y número de documento de pago LIBRE Varchar 255 //(1) * - Esto me lo pidió mi jefe hace más de 15 años y es algo que hago desde estoces, la primera vez que grabo la guardo con un 0 y añado +1 cada vez que se vuelve a grabar, a la vez grabo en una tabla de seguimiento, el usuario, la fecha, la hora y los cambios realizados, esta última tabla se borraban los datos con más de tres meses.Me pareció interesante y desde entonces lo mantengo (1) - Aquí podemos grabar desde observaciones a pequeñas notas, la uso con una función y empieza siempre con [xxx]Donde xxx será el texto que aparece como descripción y después del corchete de cierre, el resto del texto Esto lo pongo sólo para que entiendan la idea +-. |
Cita:
|
Cita:
|
no sólo eso Casimiro, como se diría en Castellano antiguo "el buen manjar"
|
Cita:
|
De la época que te hablo, era de las islas , parte de la España, Madrid, Sevilla, Hueva, Málaga, Valencia, Elche, Murcia, Barcelona, Vigo y algo de Portugal, me pegue 7 años, que de 365 días al año, me pegaba 200-260 de viaje, llegue a ir a tres oficinas en el mismo día, Las Palmas, Fuerteventura y Lanzarote, comía fijo en bares y restaurantes, así que te puedes imaginar.
Y si pensáis que guay, de eso nada, mis horarios eran , salir temprano al aeropuerto, llegar al destino, alquilar coche o coger transporte, comer ir a la oficina, cerrábamos a a las 9 en la Península 8 en Canarias, ir al hotel y muy probablemente volver a salir temprano, para ir al aeropuerto y destino a casa o a otra provincia y repetir, si era a casa, era a la oficina y no a mi casa directamente, así que pararme a disfrutar no, no lo pude hacer. |
Entonces lo que tenías era un descontrol total con las comidas, así es normal que se engorde, hay que tener cuidado y controlarse :)
|
Consulta programa gestion de Jose Luis
Como esta al principio no cuesta hecharle un ojo, ademas como trabaja este señorazo.
Mi consulta es para el que ha hecho o esta haciendo este programa si tal cual esta funciona a pesar de que falten algunas cosas como el tema de facturacion y los componentes que se necesitan si siguen estando para bajar y con que nombre, encontre NewPAnelDb, SpeedButtonBC, GroupBoxJL pero no veo los DbComboBoxExt, DBIBCheckbox, DBIBMemo supongo que estaran con algun otro nombre. Quiero dar las gracias a todos los que sabeis por poner vuestros trabajos para los que no tenemos ni idea vayamos aprendiendo un poquito. |
La franja horaria es GMT +2. Ahora son las 04:20:43. |
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