Forum: Rails-ES Agrupacion tabla

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
De20b7427a7300175a8149a48a29c3da?d=identicon&s=25 Lourdes (Guest)
on 2007-04-26 12:48
Hola, a ver si me explico bien

Tengo una tabla de ordenes de fabricacion que tiene varios registros en
los que varios campos se repiten, ejemplo

Orden      Producto  Kilos
Fabricacion         Orden  componente Kilos Componente
12345678   aaaaa     2535  578978     32.50
12345678   aaaaa     2535  789932     50.5
12345678   aaaaa     2535  777777     32.5
.
.
.
.

22222222  bbbbb     1200   123456      25.50
22222222  bbbbb     1200   235888      30.50
.
.
.
3333333  aaaaaa     1100   888888      25.30
3333333  bbbbbb     1111   999999      35.25
.
.
 y asi sucesivamente hasta 10 mas o menos

Me gustaria representarlo todo en un mismo registro, porque la finalidad
es que cuando me pidan un producto, representarle todas las ordenes de
ese producto es decir
si piene el producto aaaaa:

12345678 aaaaa 2535 578978 32.50 789932 50.5 77777 32.5 ....
33333333 aaaaa 1100 888888 25.20 999999 35.25 ....

Hay alguna forma de hacer esto? grabandolo en otra tabla o algo
parecido, es que me estoy perdiendo en cálculos , igual hay alguna
manera de hacerlo, mas facil.

Perdonad por el rollo.

Saludos y gracias
1e0fce0b6a4bc9b682b67b4d7b43b17b?d=identicon&s=25 Rafael García (rafa)
on 2007-04-26 16:34
(Received via mailing list)
Si no te entendido mal podrías modelarlo de la siguiente manera:

producto tiene varias órdenes
orden pertenece a un producto

Quedando algo tal que así en el modelo product:

  has_many :orders,

Y en el modelo order:

    belongs_to :product

De esta manera el objeto producto tendría el listado de pedidos con el
método orders.

Lourdes escribió:
> .
> 3333333  bbbbbb     1111   999999      35.25
> 33333333 aaaaa 1100 888888 25.20 999999 35.25 ....
>
> Hay alguna forma de hacer esto? grabandolo en otra tabla o algo
> parecido, es que me estoy perdiendo en cálculos , igual hay alguna
> manera de hacerlo, mas facil.
>
> Perdonad por el rollo.
>
> Saludos y gracias
>
>

--
Rafael Garcia Ortega

Prueba gratis nuestro nuevo producto GASTOSgem
(http://www.gastosgem.com)
De20b7427a7300175a8149a48a29c3da?d=identicon&s=25 Lourdes (Guest)
on 2007-04-26 17:34
Hola Rafa, a ver si me explico mejor porque me lio yo sola.

En mi programa tengo una tabla que la estoy leyendo de un fichero de
texto, que se bajan al pc, los usuarios, desde otro programa (SAP).

En esa tabla tengo varios registros por orden de fabricación, que son
los componentes de la orden.

orden1 producto componente1 kilos1
orden1 producto componente2 kilos2
orden1 producto componente3 kilos3

orden2 producto1 componente1 kilos1
orden2 producto1 componente2 kilos2
orden2 producto1 componente3 kilos3

orden3 producto componente1 kilos1
orden3 producto componente2 kilos2
orden3 producto componente3 kilos3

lo que intento hacer es que cuando me pidan un producto,  poder verlo
así en pantalla, en vez de vertical, en horizontal

orden producto componente1 kilos1 componente2 kilos2 componente3 kilos3
orden3 producto componente1 kilos1 componente2 kilos2 componente3 kilos3

es decir un registro por cada orden de fabricación.

Muchas gracias por tu contestación y saludos
1e0fce0b6a4bc9b682b67b4d7b43b17b?d=identicon&s=25 Rafael García (rafa)
on 2007-04-27 09:19
(Received via mailing list)
Ahora ya he comprendido lo que quieres hacer. Pero lo que no me queda
muy claro es como lo quieres almacenar ¿cómo una línea de texto en una
tabla? o ¿quieres tenerlo en tablas y de ahí sacar el listado?


Lourdes escribió:
> orden1 producto componente3 kilos3
> así en pantalla, en vez de vertical, en horizontal
>
> orden producto componente1 kilos1 componente2 kilos2 componente3 kilos3
> orden3 producto componente1 kilos1 componente2 kilos2 componente3 kilos3
>
> es decir un registro por cada orden de fabricación.
>
> Muchas gracias por tu contestación y saludos
>
>

--
Rafael Garcia Ortega

Prueba gratis nuestro nuevo producto GASTOSgem
(http://www.gastosgem.com)
De20b7427a7300175a8149a48a29c3da?d=identicon&s=25 Lourdes (Guest)
on 2007-04-27 10:12
Hola, buenos dias Rafa.

Es un fichero de texto, que lo estoy cargando en una tabla de mi
aplicación, mediante un File.open , lo que no sé muy bien, es como
almacenarlo para despues representarlo como quiero. Supongo que sería
mejor cargarlo en un registro por cada orden, desde el principio, para
poder representarlo despues, pero entonces tengo una tabla un pongo
chunga, con componente1, kilos1, componente2, kilos2,
componente3,kilos3...... así por lo menos hasta 15.

Pero no sé si es la forma correcta de hacerlo en rails, antes lo hacía
en access.

Saludos y gracias.
8c01355770b98df67a28e5306c5b6502?d=identicon&s=25 Jaime Mora Ramones (moctan)
on 2007-04-27 16:27
Lourdes wrote:
> Pero no sé si es la forma correcta de hacerlo en rails, antes lo hacía
> en access.
>

Lo que he entendido que necesitas es una Pivot Table [1], ayer no te
imaginas la googleada que hice para intentar ayudarte pero
desafortunadamente no encontré nada semejante en Rails, quizá algún
compañero tenga una alternativa que resuelva tu necesidad.

Saludos.

[1] http://en.wikipedia.org/wiki/Pivot_table

---
Jaime Mora Ramones
De20b7427a7300175a8149a48a29c3da?d=identicon&s=25 Lourdes (Guest)
on 2007-04-27 17:30
Hola Rafa, muchas gracias por tu ayuda.

Si lo que necesito es eso, pero no sé como hacerlo en rails. Estaba
intentando copiarme una consulta de access y hacerlo por un

find_by_sql("TRANSFORM First(ordenes.sap) AS PrimeroDesap
SELECT ordenes.order_number, ordenes.material_number
FROM ordenes
GROUP BY ordenes.order_number, ordenes.material_number
PIVOT ordenes.component_sequence")

Pero me da errores.  "sintaxis incorrecta cerca de 'ordenes'"

En fin seguiré intentadolo.

Saludos y siento la currada que te has dado!!!
1e0fce0b6a4bc9b682b67b4d7b43b17b?d=identicon&s=25 Rafael García (rafa)
on 2007-04-27 17:41
(Received via mailing list)
Que base de datos(SGBD) estás usando?

Lourdes escribió:
>
> Pero me da errores.  "sintaxis incorrecta cerca de 'ordenes'"
>
> En fin seguiré intentadolo.
>
> Saludos y siento la currada que te has dado!!!
>
>
>

--
Rafael Garcia Ortega

Prueba gratis nuestro nuevo producto GASTOSgem
(http://www.gastosgem.com)
De20b7427a7300175a8149a48a29c3da?d=identicon&s=25 Lourdes (Guest)
on 2007-04-27 17:54
Estoy utilizando sql

saludos
1e0fce0b6a4bc9b682b67b4d7b43b17b?d=identicon&s=25 Rafael García (rafa)
on 2007-04-27 18:16
(Received via mailing list)
SQL es el lenguaje que usas para manejar los datos del sistema gestor de
bases de datos(SGBD). Sería interesante saber  que servidor de bases de
datos(SGBD) estás usando (por ej. Oracle, SQL Server,...). Cada
empresa(Oracle, Microsoft, MySQL,...) implementa el standard SQL hasta
donde puede y además añade funciones o modifica algunas definidas en el
standard.

Saber que SGBD estás usando puede ser útil para saber si tiene alguna
función de pivotaje de datos tu sistema.

Saludos!


Lourdes
escribió:> Estoy utilizando sql
>
> saludos
>
>

--
Rafael Garcia Ortega

Prueba gratis nuestro nuevo producto GASTOSgem
(http://www.gastosgem.com)
A7e0c3c85a9216147d26ce8632452e93?d=identicon&s=25 Amaia (Guest)
on 2007-04-27 19:28
(Received via mailing list)
Hola

No sé si he entendido bien lo que planteas, porque tampoco entiendo bien
las otras respuestas, así que puede que lo que te cuento no tenga nada
que ver con lo que necesitas pero ahí va lo que yo haría.

Haces tres modelos, la orden, el componente y un modelo intermedio que
relacione los dos y que tenga un atributo cantidad.

class Orden < ActiveRecord::Base
  has_many :items
  has_many :componentes, :through => :items
end

class Item < ActiveRecord::Base
  belongs_to :ordenes
  belongs_to :componentes
end

class Componente < ActiveRecord::Base
  has_many :items
  has_many :ordenes, :through => :items
end

En Item pones un campo cantidad y para cada linea del fichero que estas
importando creas o buscas la orden, creas o buscas el componente y creas
un objeto item con orden_id, componente_id y cantidad.
Para lo de crear o buscar creo que hay un metodo
create_or_find_by(atributo).

Para representar la lista de componentes de la orden algo como

orden.items.each do |item|
  item.componente.nombre
  item.cantidad
end

En una aplicación que estoy desarrollando con Jaime lo hemos hecho así
para productos químicos que contienen sustancias toxicas, y que cada uno
de ellos contiene las sustancias en una concentración diferente. Yo creo
que sirve el mismo planteamiento.

Ya me dirás si te sirve...

saludos,
Amaia

--
~*~*~ ~*~*~
Amaia Castro
~*~*~ ~*~*~
Dabne Tecnologías de la Información
c/Los Madrazo, 16 - 3º 4
28014 Madrid
Tel.: (+34) 91 369 17 50
www.dabne.net
~*~*~ ~*~*~


Lourdes escribió:
De20b7427a7300175a8149a48a29c3da?d=identicon&s=25 Lourdes (Guest)
on 2007-04-30 10:56
Hola Amaia muchas gracias.

Estoy en ello, pero me puedes decir para que sirve exactamente el
:through

Saludos
De20b7427a7300175a8149a48a29c3da?d=identicon&s=25 Lourdes (Guest)
on 2007-04-30 12:55
Hola Amaia, muchas gracias, lo he probado y es perfecto.

Rafa muchas gracias por ayudarme.

Saludos
A7e0c3c85a9216147d26ce8632452e93?d=identicon&s=25 Amaia (Guest)
on 2007-04-30 13:29
(Received via mailing list)
Lourdes
escribió:> Hola Amaia, muchas gracias, lo he probado y es perfecto.
>
> Rafa muchas gracias por ayudarme.
>
> Saludos
>

Hola Lourdes

Me alegro de que te sirva :)

Lo del :through es para poder hacer orden.componentes y obtener la lista
de componentes de la orden. Es como si fuese una
relaciónhas_and_belongs_to_many pero usando un modelo intermedio que es Item,
que puede tener atributos para la
relación.Seguro que hay gente por aquí que sabe explicarlo mejor ;)

Hay una explicación en inglés en
http://blog.hasmanythrough.com/2006/04/20/many-to-...

En los archivos de esta lista he encontrado esta
http://www.ruby-forum.com/topic/82815#145735


Saludos

--
~*~*~ ~*~*~
Amaia Castro
~*~*~ ~*~*~
Dabne Tecnologías de la
Informaciónc/Los Madrazo, 16 - 3º 4
28014 Madrid
Tel.: (+34) 91 369 17 50
www.dabne.net
~*~*~ ~*~*~
De20b7427a7300175a8149a48a29c3da?d=identicon&s=25 Lourdes (Guest)
on 2007-04-30 14:14
Amaia, muchas gracias de nuevo.

Saludos.

Lourdes
This topic is locked and can not be replied to.