Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Modificación de albaranes y estructura (https://www.clubdelphi.com/foros/showthread.php?t=94302)

GINMARMENOR 14-11-2019 22:50:10

Modificación de albaranes y estructura
 
Hola chicos,

Estoy intentando crear albaranes, pero me surgen algunas dudas de cómo funcionaría realmente dentro de la Tabla, por poner un ejemplo sencillo que es el modo más claro.

Tengo una Tabla "Albaranes" la cual tendría estos campos

Nº Registro, Albarán, línea de Albarán, concepto y Unidades.

supongamos que la tabla tienes los siguientes registros

Nª Registro Albarán, Linéa Albarán, Concepto Unidades
------------- --------- -------------- ---------- ------------
1 583 1 Tornillos 20
2 583 2 Puas 15
3 583 3 Taladro 1

4 584 1 brocha 20
5 584 2 Martillo 2

6 585 1 Cincel 1
7 585 2 Sierra 3
8 585 3 Cadenas 5


Hasta ahí no hay problema, ahora bien si por cualquier motivo quiero modificar el albarán 583 y añadirle un nuevo concepto esa nueva línea pasaría al número de registro número 9?

1 583 1 Tornillos 20
2 583 2 Púas 15
3 583 3 Taladro 1

4 584 1 brocha 20
5 584 2 Martillo 2

6 585 1 Cincel 1
7 585 2 Sierra 3
8 585 3 Cadenas 5

9 583 4 Broca 3

Con lo cual cuando quiera visualizar el albarán 583, tendría que filtrar la tabla Albaranes por el campo Albaranes 583, y en el caso de que quiera borrar por ejemplo la línea nº 2 del Albarán 583 dicho albarán se quedaría con un salto en la línea de albarán del 1 al 3.

O bien es mejor a la hora de modificar un albarán, es mejor grabarlo en un contenedor aparte para tener los datos antiguos modificar el albarán y cuando le dé a grabar utilizar el contenedor para borrar el albarán antiguo entero y crear uno nuevo con todos los datos modificados nuevo, con lo cual los registros 1,2,3 se borrarían y los nuevos pasarían al 10,11,12,13 de la siguiente manera:

4 584 1 brocha 20
5 584 2 Martillo 2

6 585 1 Cincel 1
7 585 2 Sierra 3
8 585 3 Cadenas 5

10 583 1 Tornillos 20
11 583 3 Taladro 1
12 583 4 Broca 5 (Línea Modificada)

No sé si me he complicado la vida, o hay una manera más fácil a la hora de modificar un albarán. o la tabla debería diseñarla de otra manera, gracias.

Casimiro Notevi 15-11-2019 00:03:06

Debes usar tablas de cabeceras y líneas por separado.


Código:

tbAlbaranes
  id
  numero
  fecha
  cliente
  etc.


tbLineasAlbaranes
  id
  idAlbaran  -> Enlaza con el id.tbAlbaranes
  linea
  articulo
  cantidad
  etc.


oscarac 17-11-2019 06:00:51

como bien dice Casimiro lo mas recomendable es usar cabecera y detalle

y creo que te haces un mundo
facil es generar los albaranes numerados de forma correlativa y dentro de ellos (en el detalle) grabas los articulos a entregar/recibir

GINMARMENOR 17-11-2019 19:39:46

Si, como siempre teneis razón, en la cabecera todos los campos comunes y todos los totales y en el detalle los articulos que se venden, pero la en el detalle en un principio van también correlativos, pero si tengo que modificar un albarán de hace tres días por ejemplo y en ese albarán hay cinco artículos vendidos, y por ejemplo tengo que modificar el artículo de la línea número dos la cantidad y añadir a ese albarán una artículo más con lo cual ya serían seis articulos.

La forma de proceder sería un bucle recorriendo todas las líneas de ese albarán, las líneas que ya existen la Tabla la pondría en Edit y modificar y la nueva línea la tabla en Insert y añadirla.

Con lo cual en albaranes detalles esa nueva línea no aparecería correlativa a las otras cuatro, abría un salto lógicamente y yo las filtraría por el campo en común que es el Numero de Albarán.

Creo que eso sería el proceso a la hora de modificar un albarán, y cómo se quedaría en la tabla detalles los registros no?

Casimiro Notevi 17-11-2019 21:02:48

Si tienes en la tabla detalles:

Albaran---linea---articulo---cantidad---precio
3............1.......ABC.........5.........30
3............2.......DEX........10.........10
3............3.......JRJ........50.........13
3............4.......CUC.........3.........23

Y ahora edtas la linea 3 porque no eran 50, sino 55 unidades, haces:
Código SQL [-]
udpate tbDetalles set cantidad=55 where albaran=3 and linea=3

GINMARMENOR 17-11-2019 22:50:33

Si pero tendré que editar el albarán completo, y pasar por todas las líneas, el programa no sabría qué linea o líneas he modificado.

Casimiro Notevi 18-11-2019 11:15:35

No entiendo qué quieres decir.
Mira este ejemplo de facturación completa de nuestro ftp.

Caminante 18-11-2019 16:45:19

Cita:

Empezado por GINMARMENOR (Mensaje 534409)
... pero la en el detalle en un principio van también correlativos, pero si tengo que modificar un albarán de hace tres días por ejemplo y en ese albarán hay cinco artículos vendidos, y por ejemplo tengo que modificar el artículo de la línea número dos la cantidad y añadir a ese albarán una artículo más con lo cual ya serían seis articulos.

La forma de proceder sería un bucle recorriendo todas las líneas de ese albarán, las líneas que ya existen la Tabla la pondría en Edit y modificar y la nueva línea la tabla en Insert y añadirla.

Con lo cual en albaranes detalles esa nueva línea no aparecería correlativa a las otras cuatro, abría un salto lógicamente y yo las filtraría por el campo en común que es el Numero de Albarán...


Hola


Por lo que puedo entender a ti lo que te preocupa es que las lineas dejen de tener el numero correlativo. Si es asi creo que te estas complicando en vano. Lo importante es que se mantenga la integridad de los datos; lo de tener numeros correlativos importa poco porque por lo general esos numeros no son visibles al usuario.
Trata de tomar las cosas con calma y reflexionar bien lo que debes lograr.


Saludos

oscarac 18-11-2019 21:35:49

te estas haciendo un mundo
lo que yo hago es manejar cabecera y detalle
si actualizo un ingreso (en mi pais le decimos asi)
no tengo porque preocuparme por los productos que agregue o modifique
lo que hago es... cuando modifico.... cargo todo a un temporal (clientdataset) y "capturo en alguna variable" el numero de registro del ingreso, cuando es un ingreso nuevo, el dataset estaria en blanco

y luego en ese temporal borro agrego, cambio, etc

luego al grabar hago lo siguiente

- pregunto si es una modificacion
si no lo es.. entonces grabo como nuevo
si es modificacion, previamente tengo el numero de ingreso que voy a cambiar....
borro en la cabecera y en el detalle ese numero de ingreso
grabo como si fuera nuevo, pero con el mismo numero de ingreso que tenia...


listo. asunto concluido


La franja horaria es GMT +2. Ahora son las 18:12: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