Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Facturacion con varias tablas (https://www.clubdelphi.com/foros/showthread.php?t=81330)

DOS 04-11-2012 15:52:42

Facturacion con varias tablas
 
Hola a todos, antes que nada se que hay varios ejemplos de facturacion pero no encontre nada parecido a lo que necesito.
En el sistema de una veterinaria en la parte de facturacion toma datos de dos tablas para facturar, osea de las cuales se va a calcular el importe, mas las de datos, como la del cliente y quien realiza la factura:
Productos:
cod_prod // * numerico autoincrementable
Codigo // string el que le crea el cliente para que lo ubique mejor fk
Cod_prov // para relacionarlo con el proveedor fk
nombre
descripcion
import-compra
import-venta

Servicios:
Cod_servicios *
codigo // IDEM productos
Servicio // descripcion del servicio prestado, ej. radiografia
importe

cree una tercera para relacionarlas
Factura:
cod_factura
Cod_servicio
Cod_producto
Cantidad // para que los multiplique por los productos

y una cuarta para almacenar todo
Cod_facturacion
Cod_factura
Cod_cliente
Cod_administ // quien realiza la facturacion
Fecha
hora

Espero que este bien encarado, se supone que el cliente vera un boton de carga en donde eligira si es producto o servicio y en un DBGrid ira viendo cada cosa que carga con la posibilidad de borrarlo.
Codigo I producto o servicio I importe I Cantidad I

mostrare el subtotal luego el total y lo mostrare en un Qreport.
El problema es que el cliente pueda seleccionar de cualquiera de las dos tablas y la vea como una en el DBGrid, se puede hacer eso?
desde ya muchas gracias
Por cierto utilizo Delphi 7 y Paradox (no me critiquen es solo un ejemplo:)

darkbits 05-11-2012 17:48:56

un saludo DOS

para poder desarrollarlo esto yo te recomiendo db Acces
te animo a que vayas programandolo, te sera mas facil q encontrar uno en la web y vayas parchaandolo

no veo nada de codigo de Delphi o DB y no se donde podemos ayudarte, si vas programando y tiene dudas no dudo q todos los del club te ayudamos cuando hay CERO codigo CERO todos miran y nadie menciona nada

ahi esperamos tu codigo para apoyarte ;)

DOS 06-11-2012 00:42:51

Ok darkbits, lo que pasa este es un sistema de una veterinaria, ya esta terminado todo lo previo, alta, baja y modificacion de datos, mostrar informacion, claves, etc. el problema surgio cuando llegue a este punto, la facturacion, con una tabla, no tengo problemas, solo selecciono y cargo los datos en un DBGrid, con la demas informacion de la factura y con un QRep lo imprimo.
El asunto es que no se como encarar que el cliente cargue datos de dos tablas distintas y la vea como si fuese una al cargarlas, supongamos en un DBGrid. No pido que me lo resuelvan y codifiquen (aunque no estaria mal :D) solo que me vayan tirando ideas para ver si lo puedo solucionar, no puedo codificar nada si no se como encararlo. Esto es el anteultimo paso el sistema esta en un 90%.
Cualquier ayuda/idea, gracias.^\||/

Casimiro Notevi 06-11-2012 00:44:14

El problema es que no se entiende qué problema tienes, hablas de que funciona bien con una tabla y no sabes cómo presentar datos de dos tablas... o algo así, explica mejor lo que necesitas, gracias.

Caral 06-11-2012 00:52:47

Hola
Da la impresion de que quieres cargar los datos con el componente TTable y no usar el TQuery.
Si estas usando un table tendras que hacer un masterdetail.
Es mejor hacer una consulta sql con el tquery.
Saludos

DOS 06-11-2012 01:10:22

Cita:

Empezado por Caral (Mensaje 448692)
Hola
Da la impresion de que quieres cargar los datos con el componente TTable y no usar el TQuery.
Si estas usando un table tendras que hacer un masterdetail.
Es mejor hacer una consulta sql con el tquery.
Saludos

Gracias a todos, hola maestro Caral :D

Tratare de ser lo mas basico y a la vez detallado para explicar lo que necesito hacer.
Tengo 2 tablas, una con servicios otra con productos, en el formulario de facturacion el cliente cargara todo en (supongamos) un DBGrid, pero para el debe ser, creo yo, que lo viera como si fuese una sola tabla de datos, al cliente no le importa buscar si es un producto, en un lugar, si es un servicio en otro, si es alguna otra cosa en otro lado o sino voy a tener que crear una unica tabla en donde se encuentren los servicios, productos, etc. todo aquello que sea viable de facturacion, para que lo cargue sin problemas. No me parece la mejor solucion, no creo que sea correcto, aunque si funcionaria.
Por otro lado puedo realizar un maestro detalle o consulta con sql lo que convenga, pero que realice lo que necesito. gracias.

Caral 06-11-2012 01:23:46

Hola
No entiendo muy bien, me parece que:
1- tienes dos tablas
2- quieres poder cargar tanto servicios como productos en un dbgrid.
3- me parece que puedes cargarlos independientemente pero verlos juntos en el dbgrid.
No entiendo amigo.
Saludos

Casimiro Notevi 06-11-2012 01:30:34

Creo que la explicación nos ha confundido más :confused:

Caral 06-11-2012 01:36:49

Hola
Creo entender mas o menos que que necesita, el problema para mi es que (segun lo que veo en otros hilos) esta usando muchos tables y prácticamente lo hace todo sin codigo.
No entiendo bien cual es el problema de UNIR la informacion de dos tablas en un dbgrid, para mi sigue siendo el uso de tables y no usar sql.
Me gustaria ayudar con algun ejemplo pero el amigo DOS usa paradox y ahi ya me canso solo de pensarlo.....:D:D
Saludos

Casimiro Notevi 06-11-2012 01:50:29

Cita:

Empezado por Caral (Mensaje 448700)
Me gustaria ayudar con algun ejemplo pero el amigo DOS usa paradox y ahi ya me canso solo de pensarlo.....:D:D

Ya te has acostumbrado a lo bueno :D

DOS 06-11-2012 01:50:34

Es verdad casi todo lo realizo sin codigo, lamentablemente lo de Paradox es con lo que me estan enseñando :( no fue mi eleccion. de hecho muchas de las cosas que hago las he aprendido de San Google y en este foro, puedo intentar algo nuevo, pero no me queda mucho para la presentacion del proyecto.
Supongamos que comienzo de 0 a crear las tablas y las relaciones, cual seria el lenguaje y o programa para realizarlo, que no sea muy dificil y por supuesto mejor que Paradox. Gracias.

Caral 06-11-2012 01:58:19

Hola
Ya lo tienes casi todo montado, sigue con paradox de momento.
tienes que tener en cuenta que no estamos sentados al lado tuyo y nos es dificil entender lo que quieres hacer, tennos paciencia.
coloca el programa con la base de datos en un zip y lo subes aqui, a ver si puedo hacer algo.
saludos
PD: Como me conecto a paradox :D:confused:

DOS 06-11-2012 02:40:04

Ok lo subi a la nube https://www.dropbox.com/s/k4oh0ou4ndvkr4m/ITM.rar , se decomprime y lo pones en C: asi mantiene la ruta y no hay problemas, son dos carpetas una con las tablas la otra con los units, queda disponible para el que le sirva de algo, saludos.

Caral 06-11-2012 02:59:24

Hola
Ya tengo el programa.
Veo que tienes un form factura (form14)
Veo que tienes tres dbgrid
Ahora que necesitas, que quieres hacer ?.
saludos

DOS 06-11-2012 03:17:52

Caral la idea seria que haya un DBGrid en vez de 3 en donde el usuario vea lo que carga para facturar, tal vez con un boton cargar, donde selecciona lo que va a cobrar, sea productos y/o servicios luego en la otra pestaña veria la factura final antes de imprimir y guardar, por supuesto que me tendra que actualizar el stock, pero ese es otro tema y tal vez lo solucione solo :D
se va entendiendo un poco mas?

Caral 06-11-2012 03:23:23

Hola
Si, te entiendo.
Vamos paso a paso:
Empecemos........
1- coloca un combobox en el form14
la propiedad text dejala en blanco.
en la propiedad string ponle:
Productos
Servicios
2- en el evento onchance del combobox pondras la activacion de las tablas solo para un dbgrid.
me sigues...
saludos

Caral 06-11-2012 03:29:09

Hola
La idea es muy simple:
Tienes un combobox con los item productos y servicios
cuando cambias de uno a otro se establece el datasource que esta ligado a la tabla que necesitas.
Como los datos no coinciden de una tabla a otra se establece el item de cada dbgrid en ese mismo paso.
luego se activa.
Saludos

Caral 06-11-2012 03:31:59

Hola
Hoy es un poco tarde pero mañana te digo el codigo para que lo pongas y te funcione sin problemas.
Hasta mañana, Buenas noches.
Saludos

DOS 06-11-2012 12:10:49

Gracias Caral, hoy a la noche cuando llegue a casa lo voy a implementar a ver que sucede. Saludos.

Caral 06-11-2012 20:35:12

Hola
aqui estan los cambios en el form 14.
saludos

DOS 07-11-2012 01:48:54

muchas gracias.
La verdad que soy un cero a la izquierda :o
supongo que ahora lo que faltaria seria poner un boton para seleccionar la fila donde este el elemento deseado o codificarlo en el evento oncellclick del dbgrid y pasarlo a un nuevo DBGrid que almacene la informacion de esa factura, no?

Caral 07-11-2012 02:01:18

Hola
Yo lo que haria seria:
1-Hacer una tabla temporal para ir colocando los items que voy a poner en la factura, asi, si quiero puedo eliminar alguno que no quiera.
2-usar el celldobleclick para cargar los datos.
Saludos

DOS 08-11-2012 17:19:17

Gracias Caral, Hoy voy a ver si puedo implementarlo, para una tabla temporal debo agregar un Ttable mas?
y en el celldobleclick deberia codificar en SQL, para asignar a esa tabla?
Saludos.

Casimiro Notevi 08-11-2012 17:27:20

Te encuentro muy perdido, amigo DOS, te aconsejo este libro, es gratis y además es de lo mejor que existe sobre bases de datos en delphi.

Caral 09-11-2012 00:25:42

Hola
Se puede hacer con un ttable mas.
El concepto de una facturacion va de la mano con el tipo de articulo, servicio, etc, el precio y la cantidad.
tienes que manejar mejor esos puntos.
coincido con Casimiro, lee el libro que te recominda, te quitara muchas dudas, de todos modos sabes que en lo que podamos aqui tambien te seguiremos ayudando.
saludos

DOS 09-11-2012 01:36:09

Leere ese gran libro, pero por el momento ya que debo presentar este trabajo el martes, creo que voy a unificar las tablas de servicios y productos, seguramente perdere algun punto en la calificacion, pero bueno, es lo que puedo hacer, para que el sistema funcione, muchas gracias.

Caral 09-11-2012 01:38:22

Hola
No veo el problema de hacer una tabla temporal ?
Saludos

DOS 09-11-2012 01:56:04

El problema no es la tabla el problema soy yo :(, se que es muy sencillo y ustedes lo sacan a todo esto de taquito, de tantas veces que lo hicieron, pero yo me tengo que devanar el cerebro y googlear por todos lados para tratar de ver que le pongo a un boton para que me vaya colocando los materiales que selecciono de las tablas anteriores en una nueva para poder guardarla e imprimirla.

Caral 09-11-2012 02:04:51

Hola
No es dificil, si lo puedo hacer yo cualquiera lo hace.
1-Crea una tabla, ponle los campos:
Cod_Producto
Codigo
Descripcion
Unidad
ImporteUnid
Cantidad
TotalImporte

2- Por un dbgrid en la parte del Tabshet2 del form14
Una vez hecho esto se usara el evento Oncelldobleclick del dbgrid1
Ahi se indicara que se guarde los datos en esa tabla y se pedira la cantidad la cual se multiplicara por el importe y se guardara el todal se se ira sumando para el total general
Saludos

DOS 09-11-2012 02:21:25

Cita:

Empezado por Caral (Mensaje 449012)
Hola
No es dificil, si lo puedo hacer yo cualquiera lo hace.
1-Crea una tabla, ponle los campos:
Cod_Producto
Codigo
Descripcion
Unidad
ImporteUnid
Cantidad
TotalImporte

2- Por un dbgrid en la parte del Tabshet2 del form14
Una vez hecho esto se usara el evento Oncelldobleclick del dbgrid1
Ahi se indicara que se guarde los datos en esa tabla y se pedira la cantidad la cual se multiplicara por el importe y se guardara el todal se se ira sumando para el total general
Saludos

La tabla la creo en Paradox? y faltaria los servicios ya que el usuario puede cargar ambos, el Oncelldobleclick lo tengo que codificar, no?

Caral 09-11-2012 02:30:14

Hola
Si, la haces en paradox
Si, le puedes poner el cod_servicio, pero si cada cosa tiene un codigo, no creo que se necesite tener los dos.
Si, el evento hay que codificarlo para que haga lo que necesitas.
Saludos

DOS 09-11-2012 02:48:02

OK, hasta ahora voy bien :D ya lo he hecho

Caral 09-11-2012 02:54:14

Hola
Tienes que pones un ttable adicional que este enlazado a la tabla temporal que creaste.
saludos

DOS 09-11-2012 02:55:54

ok, ya esta listo

Caral 09-11-2012 03:14:16

Hola
dale doble click al nuevo ttable que hiciste y ponle los campos ahi, tal y como lo tienes con los otros dos el ttable3 y el 5.
una vez hecho esto en el evento del dbbrid pones un codigo como este:
Es un ejemplo que guardara el primer dato, esto lo tendras que hacer con los demas.
Código Delphi [-]
procedure TForm14.DBGrid1DblClick(Sender: TObject);
begin
    if combobox1.Text = 'Productos' then
  begin
   datasource3.DataSet:= Table5;  // usa tu tabla de productos
   Tu_Nueva_Table.Insert; // inserta un campo en tu tabla nueva
   Tu_Nueva_TableCod_prod.Value:= Table5Cod_prod.Value; // el campo cod-prod de tu tabla nueva es igual al de la tabla5
   // aqui siguen los demas campos antes de guardarlos
   Tu_Nueva_Table.Post; // guarda el dato en la tabla nueva.

   end;
  if combobox1.Text = 'Servicios' then
  begin
  // aqui lo mismo pero para servicios.

  end;

end;
Saludos

DOS 10-11-2012 01:42:57

Hola tengo unos pequeños problemas, uno cuando ejecuto el programa y voy a facturación, por defecto el DBComboL.. aparece como servicios, cuando selecciono Productos me tira un error.
otro, cuando estando en servicio, hago doble click para cargar un item, me tira otro error.
Adjunto imagen de los errores


El segundo DBGrid por el momento esta en la primer hoja, junto al otro solo para ver como funciona.
La codificacion completa
Código Delphi [-]
procedure TForm14.DBGrid1DblClick(Sender: TObject);
begin
if combobox1.Text = 'Productos' then
  begin
   datasource3.DataSet:= Table5;  // tabla de productos
   Table7.Insert; // inserta un campo
   Table7Cod_prod.Value:= Table5Cod_prod.Value; // el campo cod_prod de la tabla nueva es igual al de la tabla5
   Table7Codigo.Value:= Table5Codigo.Value;
   Table7Descripcion.Value:= Table5Descripcion.Value;
   Table7Unidad.Value:= Table5Unidad.Value;
   Table7ImporteUnid.Value:= Table5ImporVen.Value;
   Table7Cantidad.Value:= Table5Cantidad.Value;
  // Table7TotalImporte.Value:= Table5TotalImporteValue;
   Table7.Post; // guarda el dato en la tabla nueva.

   end;
  if combobox1.Text = 'Servicios' then
  begin
  datasource3.DataSet:= Table3;  // tabla servicios
   Table7.Insert; // inserta un campo
   Table7Cod_prod.Value:= Table3Cod_servicio.Value; // el campo cod_servicio de la tabla nueva es igual al de la tabla3
   Table7Codigo.Value:= Table3Codigo.Value;
   Table7Descripcion.Value:= Table3Servicio.Value;
   // Table7Unidad.Value:= Table5Unidad.Value;      no tiene
   Table7ImporteUnid.Value:= Table3ImporteSer.Value;
  // Table7Cantidad.Value:= Table5Cantidad.Value;             suele ser uno
  // Table7TotalImporte.Value:= Table5TotalImporteValue;  este va a ser un importe calculado?
   Table7.Post; // guarda el dato en la tabla nueva.
   end;
end;
Gracias

Caral 10-11-2012 01:45:09

Hola
Paseame el programa completo otra vez y lo reviso.
Saludos
PD: Recuerda que los honorarios van subiendo :)

DOS 10-11-2012 02:04:24

Me parece que voy a tener que embargar varias cosas, esto ya es un abuso de mi parte.
https://www.dropbox.com/s/0a3qcadb6l...cional2012.rar

Caral 10-11-2012 02:30:41

Hola
Dame un minuto me lo complicaste con el campo tipo money, voy a buscar en google
Saludos

DOS 10-11-2012 02:55:39

no hay problemas, aca es medio tarde, cualquier cosa lo vemos mañana, un abrazo.


La franja horaria es GMT +2. Ahora son las 12:56:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi