FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#81
|
|||
|
|||
Cita:
que no sean para mostrar algún error o aclarar algo para que no se salga del tema al menos hasta que hayas dado como completado el programa. Es un gran aporte el que haces. |
#82
|
||||
|
||||
Los componentes
NewPAnelDb se encuentran en http://terawiki.clubdelphi.com/Delph...tes-Funciones/ con el nombre NewPanelDB.zip, también su código completo en http://www.clubdelphi.com/foros/show...ght=NewPAnelDb SpeedButtonBC se encuentran en http://terawiki.clubdelphi.com/Delph...tes-Funciones/ con el nombre SpeedbutonColor_y_Demo.rar, también su código completo en http://www.clubdelphi.com/foros/show...ht=Speedbutton los DbComboBoxExt, DBIBCheckbox, DBIBMemo,GroupBoxJL se encuentran en http://terawiki.clubdelphi.com/Delph...tes-Funciones/ con el nombre PACKJL.zip expuesto en el link http://www.clubdelphi.com/foros/show...ht=Speedbutton Los TDBNewEditJL y TMyNewEditJL http://www.clubdelphi.com/foros/showthread.php?t=83280 Enlaces que pueden interesar http://www.clubdelphi.com/foros/showthread.php?t=79416 para las copias de seguridad http://www.clubdelphi.com/foros/showthread.php?t=83170 Módulos (ABM) Altas _Bajas y Modificaciones http://www.delphiaccess.com/forum/fi...5287/#msg35287 Sobre los IBDataSet http://www.clubdelphi.com/foros/showthread.php?t=78207 Niveles de usuario http://www.clubdelphi.com/foros/showthread.php?t=72450 Para crear modulos (ABM) http://www.clubdelphi.com/foros/showthread.php?t=72563 Alguno de los temas tratados en el tutorial http://www.clubdelphi.com/foros/showthread.php?t=69111 Iconos http://www.clubdelphi.com/foros/showthread.php?t=68120 Todo el programa en una barra, interesante y lo he usado en algún programita pequeño http://www.clubdelphi.com/foros/showthread.php?t=74475 Rutinas de programación http://www.clubdelphi.com/foros/showthread.php?t=73826 Para los Hint de los programas http://www.clubdelphi.com/foros/show...ebird+tutorial Tutorial de Caral para empezar con Firebird http://webs.satlink.com/usuarios/c/c...ajarDelphi.htm Curso muy completo de Delphi Y seguro encontraras muchísimos más
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" Última edición por José Luis Garcí fecha: 20-06-2013 a las 11:28:04. |
#83
|
||||
|
||||
Cita:
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#84
|
||||
|
||||
Caren a abierto un nuevo hilo sobre el tema de los componentes usados en el programa, al que ya le he respondido, pero creo que lo más correcto, para los compañeros que le generen nuevas dudas, aquí pongo su consulta y mi respuesta
Cita:
Cita:
Y recordar que todo lo que estoy usando en el tutorial es libre, exceptuando el Delphi claro.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#85
|
||||
|
||||
He unido el hilo al tema principal, para que todo esté junto, así no nos perdemos
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#86
|
|||
|
|||
Jose Luis espero no haberte molestado con señorazo, esperaba ser un gran halago tanto por ti como por todo lo que haces y colaboras en los foros.
Muchas gracias. |
#87
|
||||
|
||||
Tranquilo me lo tome a coña y gracias a ti. Espero te sirvan los enlaces puestos
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#88
|
||||
|
||||
Modificaciones en el módulo UPC,
Como podéis ver hemos puesto un nuevo botón sobre un nuevo NewPanelDb, el datasource=DsPrincipal y el InverseAction=true. Este botón lo que hace es crear un nuevo registro con los datos de la Persona de contacto activa en ese momento, creando así el nuevo registro de manera automatizada. El código añadido
También se detecto un error en el código de proveedores, os pongo el procedure con la corrección
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#89
|
||||
|
||||
Módulo empleados
No seguiré comentando sobre las pestañas ya tratadas en post anteriores ya que son lo mismo Mejoras que hacer en los otros módulos incorporadas a este, al Dsprincipal en su evento DSPrincipalDataChange, se ha añadido, para que las tablas auxiliares cambien cuando cambiamos de datos, siempre y cuando no este en edición o inserción. Hay cosa nuevas como el modulo de registros de histórico y poco más. como siempre el código completo en https://gist.github.com/anonymous/5831048
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" Última edición por José Luis Garcí fecha: 21-06-2013 a las 16:52:42. |
#90
|
||||
|
||||
Bien comenzaba con la gestión de lotes cuando me di cuenta de que me faltaba un campo en su tabla
Como estaba era de la siguiente manera Cita:
La tabla completa queda así Cita:
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#91
|
||||
|
||||
Vamos con dos tablas auxiliares importantes
Cita:
Es de suma importancia saber que en este caso el stock lo hacemos por Lote, con lo que saber el total de existencias reales, seria la suma de de todos los lotes que estén en activo y cuya EXISTENCIAS sean mayor o igual a 1, quiero decir que las existencias del 16-5 es todas las que estén en la tabla Stock con los siguientes datos CODIGOPRODUCTO='16-5', ACTIVO='S' y EXISTENCIAS>=1 lo que nos puede dar varios registros. (1) En ciertos tipos de fabricación, las mercancías no se sacan todas a la vez, por eso este campo, lo que hace es incrementar, según hagamos entradas (2) Aquí debemos tener mucho ojo, es las Existencias (el verdadero Stock), debe indicarnos en todo momento la cantidad real de artículos que quedan , es importante esta cantidad normalmente disminuye, pero hay que tener en cuenta que si hemos echo un documento (albarán, Factura, Etc) que afecta al stock, debemos controlar sus modificamos veamos diferentes ejemplos pongamos que inicialmente sacamos 10 vajillas Primero tener en cuenta que si las existencias llegan a 0 debemos marcar como no activo (4) Caso 1º Salida de 10 vajillas 5L código del producto 16-5 Lote 130001 Seria CODIGOPRODUCTO='16-5', LOTE=130001, EXISTENCIAS=EXISTENCIAS-10 Caso 2º Salida de 10 vajillas 5L código del producto 16-5 Lote 130001(6) y 130002(4) ya que del primer lote nos quedan solo 6, los cambios en la tabla stock serían CODIGOPRODUCTO='16-5', LOTE=130001, EXISTENCIAS=EXISTENCIAS-6, ACTIVO='N' Y CODIGOPRODUCTO='16-5', LOTE=130002, EXISTENCIAS=EXISTENCIAS-4 Caso 3º Sobre el que teníamos con salida de 10 vajillas 5L código del producto 16-5 Lote 130001 lo modificamos y en vez de 10, subimos a 12 los cambios serían CODIGOPRODUCTO='16-5', LOTE=130001, EXISTENCIAS=EXISTENCIAS-2 (ya que habíamos descontado anteriormente 10 por ello debemos controlar al editar la cantidad anterior siendo el cálculo resultante el siguiente CantiadaADescontar:=CantidadActual-CantidadAnterior; ) Caso 4º Sobre el que teníamos con salida de 10 vajillas 5L código del producto 16-5 Lote 130001 lo modificamos y en vez de 10, Bajamos a 8 los cambios serían CODIGOPRODUCTO='16-5', LOTE=130001, EXISTENCIAS=EXISTENCIAS+2 (ya que habíamos descontado anteriormente 10 por ello debemos controlar al editar la cantidad anterior siendo el cálculo resultante el siguiente CantiadaADescontar:=CantidadActual-CantidadAnterior; en este caso cantidad actual sería mayor con los que nos daría -2 de resultado al ser el resultado negativo entonces sumamo) Caso 5º Sobre el que teníamos con salida de 10 vajillas 5L código del producto 16-5 Lote 130001 lo modificamos Cambiamos el Lote por 130004 los cambios serían CODIGOPRODUCTO='16-5', LOTE=130001, EXISTENCIAS=EXISTENCIAS+10 CODIGOPRODUCTO='16-5', LOTE=130004, EXISTENCIAS=EXISTENCIAS-10 Caso 6º Eliminamos el que teníamos con salida de 10 vajillas 5L código del producto 16-5 Lote 130001 lo cambios serían CODIGOPRODUCTO='16-5', LOTE=130001, EXISTENCIAS=EXISTENCIAS+10 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Si existiesen varios lotes debemos tener Stringrid, dividiendo los lotes con sus cantidades y un edit por Row, para poder poner la nueva cantidad, su estructura seria más o menos como sigue Lote, Fecha, Caducidad, Existencias, Activo (en caso de que sea 'N' no nos permitirá números positivos, pero si recuperar, si este fuese el caso debemos añadir a existencias y cambiar ACTIVO de 'N' a 'S') (3) Si el producto es caduco aquí ira su Fecha de caducidad, como un lote sólo puede tener una única fecha de producción, sólo habrá una fecha de caducidad y repito a un número de lote asignado, es una única fabricación. (4) El Campo ACTIVO tendrá los valores S o N y es de vital importancia, por defecto cuando damos una entrada, si no existe en la tabla STOCK, lo creamos con ACTIVO='S', salvo que indicamos lo contrario, el motivo para esta r en 'N' son los siguientes, que en la mayoría de los casos no tiene que ver con las Existencias 1º) Existencias a 0, en este caso no es lógico que cada vez que entramos en el artículo, o en uno de los documentos de venta siguiera apareciendo si no hay artículo de donde extraer. 2º) Un lote a retirar, podríamos detectar un problema en un lote y tener que retirarlo, para evitar que siga habiendo salidas, lo marcamos como no activo 3º) Es un producto de uso interno y por lo tanto no se vende, tato para uso del personal, como creado para usar en la fabricación/uso de otros productos Siento el coñazo, pero es muy importante que este tema quede bien claro, para no tener problemas de trazabilidad y existencias reales. Si queda alguna duda, prefiero dedicarle más tiempo y aclararlo ahora que más adelante cuando el programa este más avanzado. Espero no haberme dejado alguno de los casos posibles, si es así, por favor comunicármelo.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#92
|
||||
|
||||
La otra tabla
Cita:
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#93
|
||||
|
||||
Se me olvidaba, por supuesto es importante que si el producto es caduco quiero decir con esto que tiene fecha de caducidad y no esta en blanco, debe controlar que la fecha actual es menor que la de la caducidad y como no si el caso es que la fecha es mayor que la de la caducidad debemos poner ACTIVO='N'
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#94
|
||||
|
||||
Como estaba harto de que este componente me diese problemas con el tema de la negrita, lo he vuelto a modificar y aquí lo dejo ya corregido
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#95
|
||||
|
||||
El Módulo de Lotes
Es importante darse cuenta que el nuevo número de lote siempre lo cogemos de configuración evitando de esta manera que se puedan duplicar los número de lotes Tenemos que poner un apartado en el programa para cerrar el año, ya que este nos permite poner el contador de lotes y de otros si es necesario a 0 El código en https://gist.github.com/anonymous/5844768 Veamos un detalle de como va cambiando el módulo UbusquedaFP
como podemos ver usamos el mismo módulo, para diferentes llamadas, e incluso cunado las llamadas son desde el mismo módulo, pero para diferente Tablas ('LOTESF' y 'LOTESE') El próximo módulo es el de entradas, que tiene muchas similitudes con este pero también con el de Stock, realmente es el paso intermedio entre ambos. Que paséis un buen Domingo.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" Última edición por José Luis Garcí fecha: 23-06-2013 a las 15:44:22. |
#96
|
||||
|
||||
Bueno le toca al modulo de entradas
y el código como siempre en https://gist.github.com/anonymous/5850255 Como se puede apreciar, se va complicando la cosa , os que yo soy muy complicado como prefierán
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#97
|
|||
|
|||
Un consejo por la experiencia de trabajar con distintos sistemas y clientes. En el diseño de los formularios no hagas demasiado grandes los botones porque eso le quita importancia las demas cosas del formulario y a los campos de ingreso de datos. Además intenta que los campos de ingreso de datos sean lo mas justo posibles con el tamaño de lo que puedne ingresar, o sea, que si en un campo pueden ingresar solamente 20 caracteres o dígitos que el campo de ingreso se ajuste a tener ese tamaño y no sobre espacio.
Otra cosas, tampoco pongas muchos colores al fondo de los formularios. Es conveniente que tengan un estilo mas similar al que tiene Windows XP/7. Veo que todos generalmente opinan como debe ser la base de datos, pero lo que nadie dice es que intentes tener una base normalizada. Esto a largo plazo sera mas conveniente y te evitará grandes dolores de cabeza cuando el proyecto cresca. Con respecto a los campos de la base lo que yo hago es poner 3 letra delante del nombre para identificar la tabla a la que pertenece. Con esto si algun campo como pueden ser los códigos si se necesitan hacer referencia en otra tabla es mas facil identificarlos Ejemplo: Tablas: - Provincias * prvCodigo * prvDescripcion - Clientes * cliCodigo * cliNombre * cliDireccion * prvCodigo <-- este hace referencia a un registro de otra tabla. * cliNota Por el momento creo que este es todo mi aporte. Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#98
|
||||
|
||||
Gracias por los concejos, te comento, que yo era de los que diseñaba, lo más estándar posible a windows, pero varios clientes me hicieron hacer cambios y me dieron sus razones, en gran parte lógicas.
En un principio los monitores eran de 11 pulgadas, ahora el estándar es de 17 en adelante, por lo que el espacio a crecido, y muchos clientes quieren que su programa, sea lo único que se muestre en pantalla, en cuanto a los botones, tengo dos motivos, el primero que tendemos a lo táctil con lo que botones pequeños, es totalmente des aconsejable y en segundo lugar "nos hacemos mayores y el pulso y la vista no son lo que eran" fue la frase de un cliente con poco más que lo que tengo yo ahora y me la dijo hace ya varios años, normalmente suelo usar botones de 75x75 o 80x80, exceptuando los de la barra lateral, ya que quedan según mi opinión más estéticos de esta manera. En cuanto a los colores, suelo usar básicamente 2, el clbtnfance, como estándar y clskyblue, para los paneles, identificando de esta manera cuales están activos, con respecto a una base de datos, luego uso diferentes colores en un borde bastante fino en los botones, diferenciado los grupos o tipos, suelo usar un color para indicar el edit activo, clinfobk o clmoneygreen para los edit de sólo lectura, dos colores para los grids y por último varios colores en las pestañas, perola mayoría de los parámetros los seleccionas en configuración, así que el cliente puede seleccionar poner todo en el mismo color. Uno de los que no puede cambiar es las pestañas, pero usando un pagecontrol, has visto lo difícil que se le puede hacer a una persona diferenciar en que página esta. hay que tener en cuenta que estuve durante años trabajando con todo tipo de minusválido, por lo que aprendes a valorar, la opinión de otras personas y muchas necesitan contrastes, para estar posicionados en un formulario de ordenador. Varias veces, se me ha "acusado" de que mis componentes buscan mucho el temas de los colores o la estética, pero podemos echar la vista a tras y decirme a parte de la funcionalidad y las mejoras (que también suelo añadir a mis componentes que es lo que ha ido mejorando con Microsoft Ms-dos, windows, windows 3.1, windows NT windows, 95, windows 98, windows Xp, windows vista, windows 7 (se que me dejo algunos, pero creo que ya se hacen una idea) y como no con Apple y Linux, todos evolucionan, con mayor número de colores, escritorios de mayor tamaños y componentes cada vez más grandes, por que, por estética, petición de los clientes, Accesibilidad y evolución a lo táctil. Mi opinión, es que nosotros debemos valorar los mismos aspectos, y debemos dejar parámetros que pueda decidir el cliente y tener en cuenta que existen personas con dificultades físicas y psicológicas y también debemos programar para ellos. En este curso sólo pretendo, aportar mis conocimientos en el área y mi código, que estoy seguro de que muchos compañeros mejoran, ya que no me considero un gran programador, la mayor parte de mi vida e sido autodidacta y en este club me han dado muchísimo, comparado con lo que yo he aportado, al que le pueda ser útil algo que lo aproveche y el que no pues es libre de expresar su opinión. No creas que me he tomado tu comentario como un ataque, por lo que he puesto en estas lineas, es simplemente una defensa en general, por que nos solemos creer, que nuestros programas son lo más estándar posibles o los mejores diseñados y es increíble la cantidad de parámetros que dejamos en medio que afectan normalmente a un grupo de personas inicialmente y con la edad como nos vamos inclinando hacía este grupo, Problemas de vista, de coordinación, etc. Con losa años he ido aprendiendo de compañeros y he ido modificando y adaptando según los consejos que me han ido dando, también lo e echo durante este tutorial y Dios me permita no ser orgulloso y prepotente y me permita seguir aprendiendo y mejorando, por que los palos que nos podemos llevar son muy grandes. Os pongo un ejemplo, hace muchos años en una revista de juegos, existía un anuncio de IBM en la que constaba de dos paginas, en la primera aparecía un señor bien vestido y se decía poco más o menos que era un ingeniero de software de alto nivel con poca competencia, en la siguiente página aparecía un bebe de mese y al pie ponía, Y este es su mayor enemigo. La realidad es así de dura, el ejemplo lo tengo en mi sobrino, le saco más de 24 años y en cambio, maneja actualmente más de 10 lenguajes de programación, fluidamente, es un monstruo en programación sobre webs, para que os hagáis una idea, viene a mi casa para que le explique delphi, estamos toda la mañana y toda la tarde, hasta la noche, explicando y desarrollando una pequeñísima aplicación, formularios, tablas, Maestro detalle, llamadas, excepciones, etc, bien la última hora estuvo programando el sólo sin ejecutar la aplicación, aplicando punteros, arrays, llamadas a objetos, funciones y demás, el iba programando y corrigiendo, ejecuto y funciono todo perfecto. Es verdad que ya conocía el C, mientras el hacia eso yo me dedique a coger una de mis agendas apuntar ideas y trozos de código, cosa que le llamo la atención y me pregunto por que tenia tantas agendas viejas y libretas en mi despacho, le comente que en los años que tenia que viajar tanto no tenia portátil, por le que hacía lo que me enseñaron en su día plasmar el código por escrito para luego aplicarlo en un ordenador, su comentario fue "Jo que antiguo, mi cabeza no es capas de esperar a que yo escriba en un boli, yo necesito el ordenador", le pregunte es acaso no has tenido una idea, en un trayecto o mientras duermes sin tener el ordenador cerca, como haces para no olvidarla, es fácíl me dijo, ya me vendrá nuevamente, y si no le comente, entonces es que no era tan buena idea
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" Última edición por José Luis Garcí fecha: 29-06-2013 a las 10:37:00. |
#99
|
||||
|
||||
No, no me he olvidado del tutorial, es que estoy ocupado preparando el material para un curso de fabricación que tengo que dar, antes de irme, pienso poner algo más del tutorial, después estaré como una semana, fuera y cuando vuelva reemprendere, pero mi actual trabajo será así, no se cuando estaré disponible.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#100
|
||||
|
||||
Cita:
Por cierto, yo también me he encontrado muchas veces con la pregunta: "¿me puedes poner las letras y los botones más grandes?, es que no los veo". Por supuesto, como dice elrayo76 es muy importante la nomenclatura, la codificación, la notación usada, etc. pero creo que escapa al ámbito de este proyecto en particular, eso es algo que en este caso se deja para cada uno. Y además puede ser otro gran aporte a los foros, ¿quién se anima?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
llamar un programa desde otro programa en un computador con dos monitores | RONPABLO | Varios | 0 | 10-10-2011 19:20:51 |
Cargar tu programa desde otro programa | rmendoza83 | Varios | 7 | 05-01-2009 20:51:33 |
Lanzar programa desde mi programa | Pablo Carlos | API de Windows | 32 | 09-09-2004 14:56:26 |
Ejecutar un programa externo desde un programa de Delphi | Roger_Fernandez | Varios | 3 | 02-09-2004 19:05:36 |
ISC ERROR CODE:335544344 I/O error for file "c:\gestion\gestion.gdb" | eliasterrero | Firebird e Interbase | 2 | 28-06-2004 13:20:25 |
|