Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Descontar pedazos de un todo (https://www.clubdelphi.com/foros/showthread.php?t=55044)

Caral 06-04-2008 06:29:24

Descontar pedazos de un todo
 
Hola a todos.
Tengo un problema que no he podido solucionar, os lo explico:
Tengo una pieza.
Esta pieza tiene una medida determinada.
A esta pieza se le cortan (pedazos de diferentes medidas), los cuales se convierten en piezas mas pequeñas.
Una vez cortados los pedazos, en ciertas ocasiones pueden sobrar otros pedazos mas pequeños que son desechados.
El problema:
Hacer desgloses de la pieza no es un grave problema, seria un asunto de sacarle el área e ir descontando los pedazos, asi se sabría lo que queda de esta.
El asunto es que no es una pieza, son muchas, ejemplo:
Piezas: 5
Area de las piezas: 27.5 m2
Pieza a descontar #1: area: 2.25 m2
Pieza a descontar #2: area: 0.90 m2
Area restante de las piezas: 24.35 m2

Bueno, se ve facil hasta ahi.
Empece con 5 piezas y un area de 27.5.
Ahora tengo 4.427 piezas.

La pregunta es cuanto me queda de una pieza en particular?.
Como saber que me queda de la pieza 1- 1.25 m2 etc.

Espero explicarme bien.
Se os ocurre como puedo identificar la cantidad restante por pieza?
Cualquier opción sera bienvenida.
Gracias
Saludos

Delphius 06-04-2008 06:54:56

Hola amigo Carlos, no se si he comprendido bien el problema, pero creo que puede servirte esto:

1. Estructuración de la base de datos:

Necesitamos al menos dos tablas, por simplicidad las denominaré Piezas y Cortes.
La idea es que Una pieza tenga varios cortes y un corte pertenece a una única pieza.
En la tabla Piezas tendríamos algo como:
ID-Pieza Area Nombre
1 50 A
2 20 B
3 10 C

En la tabla Cortes algo como esto:
ID-Corte ID-Pieza Tamaño
1 1 20
2 1 10
3 2 15
4 3 10

2. Como aplicar la consulta:
Por lo visto necesitas saber cuanto de las piezas han quedado disponible, esto se podría conseguir con algo como esto:
Código SQL [-]
select Pieza.Nombre, Area, Disponible
from Piezas, Cortes
where (Area - (select sum(Tamaño) from Piezas where Piezas.ID-Pieza = Cortes.ID-Pieza) > 0) as Disponible
order by Piezas.Nombre

Es muy posiblemente que el SQL necesite un poco de pulida, lo hice muy de memoria... en estos momentos estoy que me caigo de sueño y mi cerebro está un poco OFF.

Al menos creo que se entiende la idea.

Saludos,

Caral 06-04-2008 07:00:27

Hola
Gracias amigo.
He pensado en algo similar, el asunto es que tendría que generar una tabla adicional con una numeración de cada pieza, eso es lo que me ha detenido un poco ya que en la practica es un poco complicado hacerlo.
De todos modos tu idea es extraordinaria, me parece muy interesante, la voy a analizar.
Cuando descanses si se te ocurre algo mas, te lo agradeceré.
Saludos

Delphius 07-04-2008 17:16:04

Buen amigo, me he quedado pensando en lo que haz dicho:

Cita:

Empezado por Caral (Mensaje 277917)
(...)el asunto es que tendría que generar una tabla adicional con una numeración de cada pieza(...)

Y me he sentido un tanto intranquilo. Me confunde que digas "con una numeración de cada pieza" y "tabla adicional". ¿Entonces todavía no tienes una tabla en donde llevas el registro de las piezas?:confused: Porque si la tienes creería que bastaría con agregarle los campos necesarios para cumplir con este propósito.

He pensado en otro enfoque, tal vez, un tanto más complicado... para evitar esa consulta anidada.

La idea es que a medida que se ingresan los cortes ir actualizando la suma total en la tabla piezas. Por tanto la tabla Piezas ahora tendría otro campo más, digamos que lo llamamos AreaCorte. Es decir:
ID-Pieza Nombre ... Area AreaCorte
1 Pieza A 20 12
2 Pieza B 30 15
...

De modo que "relajamos" la consulta:
Código SQL [-]
select ID-Pieza, Nombre, ... Area, (Area - AreaCorte) as Disponible
from Piezas
where ....

Si estás con Access y tienes una buena cantidad de piezas y cortes... creería que tener consultas anidadas de dicha manera puede bajar un poco la perfomance.

Bueno es otro modo de ver el problema.

Saludos,

Caral 07-04-2008 18:04:06

Hola
Gracias amigo por tus recomendaciones, estoy analizando todo.
Gracias.
Saludos

egostar 07-04-2008 18:41:48

No se si estoy entendiendo bien el asunto que te hace escribir este hilo amigo, pero pienso que esto mas bien es asunto de algoritmos en lugar de bases de datos.

Aquí te dejo un documento que espero te ayude.

Salud OS

Caral 07-04-2008 19:16:11

Hola
Es interesante el articulo, pero el concepto es aunque algo similar difiere en algunas cosas.
En el caso del articulo se parte de una medida X y una serie de cortes que van a ser catalogados en difirentes tipos, osea para:
pieza X1- 30 cortes, X sobrante
pieza X2- 27 cortes, X sobrante, etc
El costeo de la pieza es relativamente simple de esa manera.

El asunto con mi problema es un poco mas sencillo y complejo a la vez.
Este si tiene que ver con tabla.
Es un poco complicado explicarlo (no me envies a leer la guia):D:D
Estoy trabajando en como planear este asunto.
Cualquier cosa, te lo comento.
Gracias por el aporte.
Saludos

egostar 07-04-2008 19:19:01

Cita:

Empezado por Caral (Mensaje 278048)
......El asunto con mi problema es un poco mas sencillo y complejo a la vez.
Es un poco complicado explicarlo (no me envies a leer la guia)......

:rolleyes::rolleyes: Está bien, que sea la última vez, para la próxima te mando a......... leer no solo la guía de estilo.... :D:D:D

Salud OS

Delphius 07-04-2008 19:34:49

Carlos,

Después de haber visto muy de pasada rápida al documento que señala Eliceo, pues me he quedado pensando "¿qué tiene que ver esto con lo que está haciendo Carlos?" y luego recordé sobre tu negocio. Y luego dije "¡Pues claro!... que tonto he sido! Es posible que Carlos esté buscando el modo de determinar el modo de maximizar el uso de material!"

Y bueno, esto me ha dejado más "picando".
Me gustaría, que en cuanto tengas tiempo, que trates de exponer aqui el tema y tus análisis del asunto. Me gustaría saber cuales son los límites de los requisitos: donde termina lo fácil y donde comienza lo dificil.

El problema es uno, y aqui somos muchos. Le podemos hacer frente.;):)

Saludos,

Caral 07-04-2008 19:42:04

Hola
Bueno ya que quieres pensar un rato, ahi va.
Lo que tengo actualmente:

La Lamina entra en bodega.
Esta entra en cantidades, osea:
lamina tipo1, cantidad 100.
lamina tipo2, cantidad 500.
esto entra como materia prima a la tabla materiales.

programa 1:
Envia a produccion (el corte) de diferentes piezas. (tabla ordenAcrilico)

Programa 2:
Recibe la orden: (ve la tabla OrdenAcrilico)
piezas a cortar:
15 piezas Ibiza
40 piezas mallorca, etc.
El operario va cortando y una por una indica.
(Descuenta de la tabla (ordenAcrilico) e inserta el corte en la tabla (ordenAcrilicoItem)

1 pieza Ibiza, lamina tipo1
1 pieza Ibiza, lamina tipo1
1 pieza Ibiza, lamina tipo2
1 pieza Mallorca, lamina tipo1
1 pieza Mallorca, lamina tipo1

Inmediatamente despues escoge el tipo de lamina: (tabla materiales)
Y descuenta la parte de la lamina que uso, ejemplo:

lamina tipo1, cantidad 100
1 pieza tipo Ibiza, material usado 0.66.
Saldo lamina tipo1, cantidad 99.34

Bueno, el asunto esta bien hasta ahi, se que empece con 100 y ahora tengo 99.34

El problema viene en que no se sabe de que lamina corto ya que como sabes hay sobrantes, estos no me importan, pero si por ejemplo hago otro corte, los numeros no daran.

Mi interes es saber de que lamina corto y cuanto queda de esa lamina en especifico, si se puee sacar otra pieza o solo sera desperdicio.

Lo unico que me quedaria es enumerar las laminas a la hora de pasarla a corte y definirles su area.

No se si me captas.
Saludos

egostar 07-04-2008 19:52:13

Cita:

Empezado por Caral
El problema viene en que no se sabe de que lamina corto ya que como sabes hay sobrantes, estos no me importan, pero si por ejemplo hago otro corte, los numeros no daran.

Bueno, aquí hay algo que seguro se me escapa, pero pienso que una lámina se debe considerar "sobrante" hasta que no se pueda obtener mas cortes de las medida que tú mismo indiques, de tal forma que no debería de haber sobrantes >= a la medida más pequeña que trabajes.

No se si me explico.

Salud OS

Caral 07-04-2008 20:05:13

Hola
Efectivamente No hay sobrantes menores de la medida menor que necesite, pero de que lamina sobro??.

Asumamos que mi corte minimo es de: 0.33

Ejemplo:
lamina tipo 1, cantidad 100.

corte 1, 0.66, lamina tipo 1 cantidad 99.34
corte 2, 0.66, lamina tipo 1 cantidad 98.68
corte 3, 0.37, lamina tipo 1 cantidad 98.31

Los numeros me dirian que si mi corte minimo es de 0.33 y mi sobrante actual es de 98.31, se empezaría una lamina nueva, pero si sigues con ese descuento los numeros no dan.

Tanto es asi que el problema que tengo actualmente es que la lamina en la tabla materiales en ocasiones esta en negativo y si hay corte.

No se si me explico, el problema es la definicion de la lamina, una por una.
Saludos

egostar 07-04-2008 20:12:23

Veamos, no entiendo tus cuentas

Cita:

Empezado por Caral
Lamina tipo 1, cantidad 100.

100 que

Cita:

Empezado por Caral
La menor medida es de 0.33 y te sobran 98.31

Porque dices que se empezaría una lamina nueva.....


Ahora, seria bueno saber cual es el proceso, quiero decir, como ingresan a tu programa esas cantidades, no hablo del código, sino de la capa 8 del Modelo OSI (human interface :D:D:D)

Salud OS

Caral 07-04-2008 20:15:06

Hola
Cita:

Empezado por egostar (Mensaje 278069)
100 que

100 laminas tipo X
Cita:

Empezado por egostar (Mensaje 278069)
sino de la capa 8 del Modelo OSI (human interface :D:D:D)

Ahora si me jodiste.:D:D
Saludos

Delphius 07-04-2008 20:21:35

Bueno... por empezar estoy carburando la idea.

Y quiero decir amigo Carlos, que en tu último ejemplo, me parece que estás mezclando cantidad con área. O yo estoy entendiendo mal.

¿Tu dices que entra 100 láminas, o que el área de la lámina es de 100?:confused:

Ahora me tengo que desaparecer, pero ni bien vuelva estaré posteando de nuevo.

Recuerdo haber leído algo de este tema, de como manejar esto... dejame hacer memoria...

Saludos,

Caral 07-04-2008 20:27:05

Hola
Debo especificar mejor.
100 unidades
0.66 es el porcentaje de una lamina

ejemplo:

1 lamina 100%

1 corte 0.66 %
1 corte 0.34 %
Total sobra 0%

Saludos

egostar 07-04-2008 20:28:31

Cita:

Empezado por Caral (Mensaje 278070)
Hola
100 laminas tipo X

Entonces, menos me cuadran tus cifras, porque 100 piezas solo sería posible si todas fueran de la misma medida, yo haria esa operación a partir de la medida de la lámina y no del número de piezas.

Salud OS

Medida de Lamina 27.5 m2

Código:

27.50        0.66        26.84
26.84        0.66        26.18
26.18        0.37        25.81
25.81        0.66        25.15
25.15        0.37        24.78
24.78        0.37        24.41
24.41        0.66        23.75
23.75        0.66        23.09
23.09        0.37        22.72
22.72        0.66        22.06
22.06        0.66        21.40
21.40        0.37        21.03
21.03        0.66        20.37
......

Salud OS

Caral 07-04-2008 20:29:26

Hola
Otra a la tabla materiales entra como cantidad, no puede entrar ni como area ni como porcentaje.
Saludos

egostar 07-04-2008 20:29:32

Cita:

Empezado por Caral (Mensaje 278075)
Hola
Debo especificar mejor.
100 unidades
0.66 es el porcentaje de una lamina

ejemplo:

1 lamina 100%

1 corte 0.66 %
1 corte 0.34 %
Total sobra 0%

Saludos

Vaya

Pues no es lo mismo que pensé

Ya corrijo lo que he dicho

Salud OS

egostar 07-04-2008 20:42:58

Cita:

Empezado por Caral (Mensaje 278079)
Hola
Otra a la tabla materiales entra como cantidad, no puede entrar ni como area ni como porcentaje.
Saludos

Pues estoy muy liado con tus cuentas amigo Caral, de entrada no puedes decir que una lamina puedes hacer 100 unidades si una de ellas ocupa el 66% de la lámina

Lo correcto sería que vayas "restando" el porcentaje de cada una de las láminas cortadas en relación al tamaño de la lámina.

Por ejemplo

Código:

Residuo        % Corte        Corte
27.50        33%        9.08
18.43        20%        5.50
12.93        33%        9.08
3.85        33%        9.08 <--- No es posible hacer esto

Salud OS

Caral 07-04-2008 20:45:36

Hola
El concepto de área es bueno, pero no aplicable en este caso.
Podria especificar el area de cada lamina, incluso ponerla con numeracion en una tabla independiente, pero no saldrian los numeros igualmente, a ver si me explico.

lamina 1, total

__________________
!...........................!
!...........................!
!_________________!

Corte 1

__________________
!__________!..........!
!................!..........!
!__________!______!

Si te fijas, en color rojo estaria el primer corte.
No llega hasta arriba (ancho), osea sobra un pedazo, y tampoco es del largo.
Si lo paso por m2, ese sobrante engañara en el total.

Es dificil explicarlo asi.
Saludos

egostar 07-04-2008 20:55:27

Cita:

Empezado por Caral (Mensaje 278085)
No llega hasta arriba (ancho), osea sobra un pedazo, y tampoco es del largo.
Si lo paso por m2, ese sobrante engañara en el total.

Es dificil explicarlo asi.
Saludos

Si, pero eso reafirma que lo que necesitas es precisamente lo que se trata en el documento que te proporcioné, no es un asunto de bases de datos, es un asunto de optimización de cortes y eso solo se consigue con algoritmos ya probados en especifico el Método Simulated Annealing, que no es poca cosa.....

Salud OS

Caral 07-04-2008 21:27:24

Hola
Ya llegaremos, ya llegaremos.
Saludos

Delphius 08-04-2008 02:51:17

Ya estoy de vuelta!
Bueno... estuve leyendo lo que han estado hablando y tal parece que Egostar tiene razón, habrá que hacer MSA:o

Lo que tenía sobre el tema era un ejemplo de simulación; no sirve para este caso.

Voy a leer mejor el documento para informarme mejor y ver que opciones tenemos. Puede que haya algo ya hecho, aunque no se que tan factible o viable sea como adaptarlo a tu situación... ni que decir si en el caso de existir alguna biblioteca o componente es de pago.

Saludos,

Delphius 08-04-2008 04:01:45

He estado intentando acceder a documento que muestras egostar pero el navegador me arroja que el servidor no responde. ¿Por casualidad no tienes una copia?

No quisiera ir estudiando de otra fuente, quisiera mantenerme lo más fiel a lo dicho en ese documento por una cuestión de "uniformidad de información" y evitar posibles lios y malinterpretaciones.

Saludos,

Delphius 08-04-2008 16:26:54

Bueno, ya me he leído el documento... y para mi por su simplicidad deja que desear.

Caral, abrá que considerar una serie de factores para saber que tan complicado o simple puede ser el esquema de trabajo.

Cosas como:
¿Qué formas y tamaño tienen las piezas? ¿Varían demasiado? ¿Bajo qué unidades les resulta cómodo trabajar a ti y a tus empleados?¿Todas las láminas con que trabajan son de la misma forma y tamaño?

Necesitaríamos conocer más de cerca tu proceso productivo.

Por lo que he leído del documento, emplea A* para determinar el valor optimo. No quiero hacer propaganda pero creo que puede utilizarse (mejor dicho mejorarse:o) y aprovecharse algo ya hace tiempo había dejado disponible en los foros.

Los archivos que están allí operan razonablemente bien, habría que mejorarlo un poco y eliminar el goteo de memoria;). Recuerden que fue hecho a la apuradas y a los fines del trabajo solicitado me basto con que hallara la solución:p:D.

Saludos,

egostar 08-04-2008 17:19:34

Cita:

Empezado por Delphius (Mensaje 278269)
Bueno, ya me he leído el documento... y para mi por su simplicidad deja que desear.

Bueno bueno, no seas tan exigente, por supuesto que ese documento no es la panacea, pero si da una clara idea por donde van los tiros, ahora es cuestión de profundizar sobre el tema, no crees?

Salud OS

Delphius 08-04-2008 17:26:55

En eso tienes razón amigo. Tienes razón... será cuestión de profundizar en el tema.

Aunque yo primeramente, o en paralelo, estudiaría las posibles restricciones operativas a la que se ve sujeto el negocio de Carlos. Quien sabe, a lo mejor se puede conseguir un modelo más simple que el MSA (o una versión simplificada de éste) y el esfuerzo en emplear lo simple resulte más ventajoso y viable que destinar mayor esfuerzo en MSA.

Saludos,


La franja horaria es GMT +2. Ahora son las 14:11:32.

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