Diseño de una aplicación para la planificación de la capacidad y las necesidades de materiales
Abstract
En este Trabajo Fin de Carrera se ha desarrollado una aplicación que genera la solución a un problema de planificación de materiales y de capacidad en un entorno industrial de producción, generando una solución heurística para el problema de la planificación de la capacidad. La aplicación es abierta, a través de un archivo se puede introducir los datos necesarios iniciales de cada producto y subproducto para obtener un resultado para cualquier tipo de problema que el usuario demande. La obtención de los resultados, generados a través de la aplicación MATLAB, se visualizará en el mismo archivo que se introdujeron los datos, tanto la planificación de los materiales como la de la capacidad.
Full text
Equation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías Industriales Diseño de una aplicación para la planificación de la capacidad y las necesidades de materiales Autor: Adrián Bravo Carrasco Tutor: Luis Onieva Giménez Dpto. Organización Industrial y Gestión de Empresas II Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2019
3 Trabajo Fin de Grado Ingeniería de las Tecnologías Industriales Diseño de una aplicación para la planificación de la capacidad y las necesidades de materiales Autor: Adrián Bravo Carrasco Tutor: Luis Onieva Giménez Catedrático de Universidad Dpto. de Organización Industrial y Gestión de Empresas II Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2019
5 Trabajo Fin de Grado: Diseño de una aplicación para la planificación de la capacidad y las necesidades de materiales Autor: Adrián Bravo Carrasco Tutor: Luis Onieva Giménez El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2019 El Secretario del Tribunal
7 A mi familia A mis maestros
9 Agradecimientos En primer lugar, quería agradecer a mi tutor Luis Onieva Giménez por darme la oportunidad de poder realizar este trabajo fin de carrera con él, por sus orientaciones, facilidades y explicaciones durante éste. Por supuesto agradecer a mi familia por todo su apoyo, especialmente a mis padres, Pablo y Rosalía, por creer en mí y en mis sueños, por su confianza y apoyo depositados en mí. Ellos son responsables de la persona que soy. Por educarme de la manera que lo hicieron, con sus dedicaciones y enseñanzas, por apoyarme en los momentos más bajos y darme la fuerza para continuar y no rendirme nunca. A mis hermanos Francisco y Pablo, por ayudarme en cada momento de debilidad y aconsejarme desde sus experiencias para tomar la decisión más acertada a lo largo de mi período universitario. Y a mi abuela Carmen, por preocuparse por mí y porque con sus historias me hace desconectar cuando los necesito. Agradecer también a mis amigos y compañeros de clase, José Antonio, Idania, Brenda, Noelia, Raquel y Antonio Jesús, por estar siempre cuando he necesitado ayuda, en los momentos difíciles, y por sus apoyos incondicionales en todo momento, así como por aguantarme cuando tengo un mal día o las cosas no salían como lo deseaba. A todos vosotros, MUCHAS GRACIAS.
16 2.3.6 Plazo de aprovisionamiento 33 2.4 Metodología y conceptos del Sistema MRP 34 3 El sistema CRP 38 3.1 Carga de trabajo 38 3.2 Trabajo en máquinas 42 4 Manual de usuario 46 4.1 Alcance de la aplicación 46 4.2 Recogida de datos para MRP 47 4.2.1 Necesidades básicas del producto final 47 4.2.2 Estructura de fabricación 47 4.2.3 Datos sobre el estado de stock 51 4.3 Recogida de datos para CRP 52 4.4 Generación de resultados MRP 53 4.5 Generación de resultados CRP 55 4.5.1 Cargas medias 55 4.5.2 Secuenciación de los trabajos 57 5 Conclusiones 60 6 Bibliografía 61 7 Anexo 62 7.1 Anexo 1. Archivo Excel de entrada. 62 7.2 Anexo 2. Código en Matlab. 64 7.3 Anexo 3. Archivo Excel de salida. 98
17 Índice de tablas Tabla 1.1. Número de empresas en el sector industrial durante 2016 23 Tabla 2.1. Plan Maestro de Producción del producto ‘X’ 27 Tabla 2.2. Estado de stock de las referencias del producto final ‘X’. 33 Tabla 2.3. Cálculo de las necesidades del producto de nivel 0 (X) 35 Tabla 2.4. Cálculo de las necesidades del producto de nivel 1 (A) 35 Tabla 2.5. Cálculo de las necesidades del producto de nivel 2 (C) 35 Tabla 2.6. Cálculo de las necesidades del producto de nivel 3 (B) 36 Tabla 2.7. Cálculo de las necesidades del producto de nivel 3 (M) 36 Tabla 2.8. Cálculo de las necesidades del producto de nivel 4 (N) 36 Tabla 2.9. Cálculo de las necesidades del producto de nivel 4 (P) 37 Tabla 3.1. Maestro de operaciones del producto X 39 Tabla 3.2. Órdenes de producción 40 Tabla 3.3. Cargas medias en S1. 40 Tabla 3.4. Cargas medias en S2. 40 Tabla 3.5. Ruta de fabricación del lote X2 42 Tabla 3.6. Tiempos de operaciones 44 Tabla 3.7. Paso 1 del algoritmo de Johnson 44 Tabla 3.8. Paso 2 del algoritmo de Johnson 44 Tabla 4.1. Necesidades básicas de X 51 Tabla 4.2. Nombre de la referencia de cada producto 51 Tabla 4.3. Recogida de dato del producto final 51 Tabla 4.4. Plantilla modelo de recogida de dato de los productos de nivel inferior 51 Tabla 4.5. Referencia numérica de los lotes 51 Tabla 4.6. Recogida de datos para la capacidad 53 Tabla 4.7. Modelo de tabla de solución de MRP 54 Tabla 4.8. Tabla de generación de resultado de cagas medias por sección 55 Tabla 4.9. Tabla de generación de cargas medias 56 Tabla 4.10. Secuenciación de los trabajos para el producto X 58
18 Índice de figuras Figura 1.1. Evolución del sistema MRP. 21 Figura 1.2. Curva de la bañera. 25 Figura 2.1. Módulos del Sistema MRP 26 Figura 2.2. Árbol del producto ‘X’. 28 Figura 3.1. Planificación de la capacidad 38 Figura 3.2 Carga media de la sección 1 41 Figura 3.3. Carga media de la sección 2 41 Figura 3.4. Diagrama de Gantt del lote X2 43 Figura 3.5. Diagrama de Gantt 45 Figura 4.1. Diagrama de cargas media de la sección 1 56 Figura 4.2. Diagrama de cargas media de la sección 2 57
19 1 INTRODUCCIÓN En este primer capítulo se van a explicar los objetivos y el alcance del proyecto, así como la importancia de este en la actualidad para las empresas tanto nacionales como internacionales. Posteriormente, se analizará la evolución del sistema MRP (Material Requirements Planning) a lo largo de su historia, por qué surgió y con qué fin. Se realizará también referencia a la aparición del sistema CRP (Capacity Relationship Management) y la importancia que tuvo junto al sistema MRP para las empresas de producción y fabricación. A continuación, se explicarán las principales motivaciones por las que se ha decidido realizar el diseño una aplicación para la planificación de la capacidad y las necesidades de materiales y la importancia que tiene. Por último, se argumentará porqué se han terminado adoptando una serie de limitaciones e hipótesis en la aplicación, con base teórica, en este trabajo. 1.1 Objetivo del proyecto La planificación de los materiales es algo fundamental para una empresa de fabricación ya que constantemente hay que realizar una planificación para las necesidades de materiales para cubrir la demanda. De la misma manera, es primordial la planificación de la capacidad puesto que muestra las limitaciones de la empresa para llegar a cumplir la demanda en el instante deseado. A través de la planificación de materiales, se puede realizar un control de las unidades que hay que realizar por período y así tener una visión de las materias primas necesaria para la realización de cada producto. Esto provoca que las empresas realicen sus pedidos externos de manera que minimice las unidades en inventario con lo que el coste disminuye. Por su parte, la planificación de la capacidad es tan importante como la de los materiales ya que a partir de las necesidades de los productos se puede ver si hay capacidad dentro de la fábrica para cumplir la demanda prevista. A través de esta planificación se pueden tomar medidas, como aumentar las horas de los operarios, horas extras, redistribución de los trabajos, etc., para cumplir la capacidad ya que por lo contrario provocaría un retraso en la demanda ocasionando mucha perdida. Esta tarea no es nada fácil ya que no hay un método cerrado para realizar esta planificación y control. Eso se debe a que cada proceso de fabricación es totalmente diferente ya que no es lo mismo, por
20 ejemplo, la fabricación de un coche que la de un televisor. Esta diversidad de casos hace que la planificación sea compleja y que haya una necesidad de realizar un programa abierto para cualquier tipo de fabricación. Este proyecto se ha encargado de realizar una aplicación que genere la planificación de materiales para cualquier estructurar de fabricación. No obstante, tiene limitaciones. Para el caso de la planificación de los materiales solo se puede realizar diez productos de forma exacta con una serie de tamaños de lote. Con respecto a la planificación de la capacidad es algo más complejo, ya que la parte de secuenciación de los trabajos es difícil encontrar el óptimo en un tiempo razonable te corto. Por eso, se ha optado por la realización de una secuenciación admisible y no muy leja del óptimo. Esta secuenciación se realiza mediante un método que consisten en realizar primero los trabajos con más prioridad, es decir, los que antes son demandados según el plan maestro de producción. En definitiva, el presente proyecto se encarga de realizar una aplicación de la planificación y control de materiales y la capacidad siempre en un contexto ideal que no albergue contratiempo desde el momento que se introducen los datos necesarios para la resolución. 1.2 Antecedentes históricos El sistema de planificación de requerimientos de materiales o MRP es un sistema que se encarga de la gestión, la planificación y el control de inventario de un proceso de fabricación o producción. Fue a comienzo de los años 70 cuando surgió el sistema MRP como alternativa a la gestión de inventarios. Esta técnica incluía tanto la gestión de inventario como las soluciones a los problemas de esta debido a la demanda variante y dependiente. A finales de esta década surgió el sistema MRP de Bucle Cerrado, que podían definir las limitaciones de una empresa, consistía en la retroalimentación de la salida del sistema MRP para establecer las nuevas capacidades y la viabilidad a largo plazo de una empresa. Estos sistemas de Bucle Cerrado continuaron mejorando y evolucionando, llegando a convertirse en los conocidos sistemas MRP II (Manufacturing Resource Planning). El MRP II no sólo se encargaba de la planificación, la gestión y el control de inventarios, sino que también abordaba elementos financieros, pudiendo trabajar en distintos sectores mediante elementos de simulación. La evolución del sistema MRP no solo se quedó en los sistemas MRP II ya que se siguió mejorando y desarrollando nuevas técnicas y herramientas no únicamente orientado a la gestión de los materiales de producción sino en ámbito más general como es la gestión empresarial, provocando así la aparición de los Sistemas Integrales de Gestión. El primero de estos sistemas fue el BRP (Business Resources Planning), que evolucionó en la década de los noventa dando lugar a los sistemas ERP (Enterprise
21 Resources Planning), orientados más fuertemente a la planificación global de los recursos de la empresa (incluyendo la gestión de la producción). Los ERP son una herramienta de apoyo para la toma de decisiones que buscan la unión e integración de todos los procesos operativos e información con la finalidad de encontrar las sinergias entre los recursos disponibles dentro de una empresa. Estos sistemas facilitan el control de las actividades principales en las empresas y consigue una integración completa entre los sistemas de información para ayudar a los procesos de mejora continua y la introducción de nuevas tecnologías. La evolución final del sistema MRP es el denominado ERP II que además de centralizar e integrar toda la información de todos los departamentos, amplia los límites de la propia empresa incorporando otros factores de la cadena de suministros como puede ser los clientes, los proveedores… La evolución cronológica de todo el sistema de gestión, planificación y control de una empresa, así como su alcance y funcionalidad viene reflejada en la figura 1.1. Figura 1.1. Evolución del sistema MRP. Fuente: Evolución de los sistemas MRP y ERP. 2017 1.3 Motivación para la realización del proyecto Principalmente, para las factorías dedicadas a la producción y/o fabricación es esencial una planificación de la producción para evitar problemas de ruptura de stock, parada de líneas y garantizar el servicio al cliente. Por eso, las empresas dedican su mayor esfuerzo y tiempo para la elaboración del plan maestro de producción (cuantas unidades necesarias a fabricar de un producto y cuando realizarlas), así como la planificación de todos los materiales necesarios para fabricar el producto principal. Para ello, se tiene que tener en cuenta la sincronización temporal en la fabricación o
22 producción de todos los subproductos para garantizar un trabajo sin errores (o minimizándolos) y optimizando al máximo los productos empleados. A pesar que hoy en día las empresas desean tener software con los que poder controlar y gestionar todos los aspectos relevantes e insignificantes dentro de su negocio, no todas tienen la capacidad de poseer software potentes y sofisticados para gestionar todos los aspectos y las comunicaciones principales dentro de un negocio. Por ello, muchas de ellas priorizan en la resolución de la planificación de la producción y la creación de un planing de los materiales necesarios para la consecución de sus objetivos, es decir, la realización de un MRP para cada producto a fabricar. La creación de un MRP, es un trabajo pesado y tedioso, ya que históricamente se realizaba a mano, pudiendo ocasionar numerosos fallos debido a descuidos humanos. Por este motivo, la aplicación que se realizará en este proyecto es de vital importancia para las empresas, cumpliendo dos aspectos importantes dentro de ellas. El primero es la reducción de tiempo a la hora de realizar la planificación a lo largo de un período para la fabricación un producto. El segundo de ello, es la reducción de errores debido al factor humano, evitando así volver a repetir el proceso desde el principio. Ambas circunstancias facilitan la reducción de costes. En primer lugar, de coste de personal, ya que con la posesión de la aplicación para la planificación de la capacidad y las necesidades de los materiales reduciría una cantidad significante el tiempo para obtener la planificación de producción de un producto. En segundo lugar, con el uso de la aplicación se reducirá el riesgo de volver a repetir el proceso y evitar cualquier desajuste en el número de fabricación, pudiendo provocar una rotura de stock o una sobreproducción de un producto. No obstante, sigue existiendo la posibilidad de un fallo humano en el instante de la introducción de los datos al programa. Por otro lado, un dato que incentiva la realización de este proyecto es que a pesar de haber pasado un periodo de crisis económica en España desde el año 2008, donde numerosas empresas se vieron obligadas a reducir su tamaño o incluso desaparecer, se ha podido superar este desequilibrio industrial y numerosas manufactureras han surgido y han crecido, convirtiéndose en 2016, según el INE, en el sector que más empresa tiene dentro del sector industrial. Como se muestra en la Taba 1.1 el número de empresas dedicadas a la elaboración y fabricación de productos es superior a las del sector, ocupando un 88% del total en el ámbito industrial por lo que la creación de una aplicación que genere resultados de la planificación y de la capacidad en un proceso productivo es interesante a pesar de que existan numerosas aplicaciones en el mercado.
23 Tabla 1.1. Número de empresas en el sector industrial durante 2016 Fuente: Estadística Estructural de Empresas: Sector Industrial, Año 2016. (INE) 1.4 Hipótesis y limitaciones Para la realización de este proyecto, se han barajado numerosos factores, entre los que destacan incluir el rendimiento de los trabajadores en la línea de fabricación, incorporar el rendimiento de las piezas realizadas exitosamente y tener en cuenta probabilidad de fallos de las máquinas para la ejecución del objeto. En primer lugar, cada trabajador tiene una función dentro del sistema de producción, pero a pesar de todo, no todo el tiempo se encuentra realizando su tarea, por lo que su rendimiento baja (ec.1). rendimiento(%)= tiempo real trabajado tiempo teórico trabajado x 100 (ec.1) Esto provocaría una alteración principalmente en el sistema de planificación de la capacidad de los sectores, puesto que a menor rendimiento mayor tiempo medio se necesitaría para fabricar una pieza o subpieza del producto. Este dato puede ser insignificante, pero se debería tener en cuenta aguas abajo ya que ese tiempo va aumentando a medida que sea mayor el proceso (ec.2). Tiempo total=∑ 𝑇𝑖 𝑅𝑖 𝑛 𝑖=1 (ec.2) Siendo: Ti: tiempo del proceso i.
24 Ri: rendimiento medio de los trabajadores en el proceso i. n: número total de procesos. Sin embargo, se ha tomado la decisión de no tener en cuenta este aspecto a la hora de realizar la aplicación ya que este desajuste se podría corregir de forma sencilla de diversas maneras ajenas a este proyecto, ya sea por la incorporación de más trabajadores o aumentando la capacidad de cada sector de acuerdo con el rendimiento de los trabajadores. Otra disyuntiva que se planteó fue la incorporación del rendimiento de las piezas realizadas con éxito. Como se sabe, en un proceso de fabricación, no todas las piezas salen dentro de los parámetros y tolerancias deseadas. De tal forma, se debe tener en cuenta las piezas defectuosas, ya que esto provocaría la necesidad de aumentar en número de piezas a fabricar o producir para cumplir con la planificación del MRP. No obstante, para la elaboración de un producto es necesario la unión o el ensamblado de varios materiales, (p.j. Para tener una bicicleta es necesario tener dos ruedas, un manillar, los pedales y en la estructura o cuadro principal). Como hemos mencionado anteriormente, para la fabricación de una cantidad de cada uno de los elementos, es necesario realizar más unidades de dicha cantidad debido a que la eficiencia de los productos no es la máxima. Para saber qué cantidad de más habría que realizar tenemos que saber cuál es el aprovechamiento en cada máquina, es decir, que porcentaje de elementos fabricados es de forma exitosa. Sin embargo, a medida que se va aguas abajo en el proceso productivo este aprovechamiento se va viendo influenciado por los objetos que le precede. Por ejemplo, si la eficiencia de las bicicletas es de 0.97 y el de las ruedas es del 0.92 por separado, el aprovechamiento de las ruedas en el proceso global sería de 0.97x0.92 = 0.8924, realizándolo esta operación con todos los elementos siguiendo su ruta predefinida de fabricación. Por tanto, la merma de cada elemento va originando que el tamaño del lote teórico no sea el que realmente planificado, sino que se deban realizar más para cumplir la planificación de la demanda. Calcular la merma o desajuste de cada elemento no es nada sencillo teóricamente, ya que es un proceso que se puede estimar, pero no se garantiza la exactitud en el proceso productivo sabiendo que el desajuste tiene una probabilidad aleatoria en cada uno de los elementos. Además, los tipos de mermas son muy diversos, desde mermas originadas por defecto de máquinas hasta por el mal estado de materia prima. A pesar de todo, esto se debe tener en cuenta en la elaboración del Plan Maestro de Producción, el cual la elaboración del mismo excede los objetivos de este trabajo. Por este motivo no se ha tenido en cuenta el factor de fallo del material de fabricación.
25 Por último, el fallo de las máquinas es un factor que hay que tener muy en cuenta ya que las averías están presentes en todos los procesos. Las máquinas de fabricación, al igual que todas, tiene una tasa fallo muy peculiar (Figura 1.3) y similar a la denominada curva de la bañera. Figura 1.2. Curva de la bañera. Fuente: Lecciones de fiablidad Industrial, 2017. Como se muestra en la Figura 1.3, se puede ver tres zonas diferencias. En la primera la tasa de fallo es decreciente, esto se debe a los diversos fallos que puede ocurrir en la fabricación del objeto o la máquina, denominada período infantil. La zona central, correspondiente a la vida útil la tasa de fallo es constante y mínima, con una probabilidad de fallo aleatoria. Al final de la vida útil, se produce el degaste de la maquina por lo que la tasa de fallo es creciente. Debido a la probabilidad de fallos de los componentes de las maquinas en el proceso de producción, es difícil definir con exactitud la planificación de la capacidad. Por este motivo, se ha optado por suponer que las maquinas no fallan nunca por lo que el sistema CRP se ha realizado a partir de esta hipótesis. En definitiva, el presente trabajo se ha realizado de forma ideal, es decir, que no falle nada ni ocurra ningún contratiempo que modifique la planificación de los materiales ni la capacidad a lo largo del periodo planificado ya que es prácticamente imposible prever un fallo mecánico y el rendimiento de los trabajadores como la eficiencia de la fabricación de las piezas en mal estado suele ser variable.
32 2.3.5.5 Mínimo costes medios (MCM) Este tamaño de lote utiliza las necesidades brutas como si fuese una demanda variable y calcula los lotes de forma que minimice los costes medios por períodos. A medida que el horizonte va aumentado, aumenta también la complejidad del método. La cantidad que se demanda mediante el lanzamiento de orden es la suma de las necesidades brutas de los periodos anteriores del mínimo local encontrado por el método (ec.7): 𝐶𝑀𝑡=𝐴+∑ (𝑖−1)∗𝐷𝑖 𝑡 𝑖=1 ∗𝑉∗𝑟 𝑡 (ec.7) Siendo: CMt: Coste medio del período t. A: Coste de lote unitario. Di: Demanda bruta del período i (unidades/período). V: Coste del producto (€/unidad). r: tasa de mantenimiento anual (€/€*período). 2.3.5.6 Mínimos costes unitarios (MCU) Es análoga a la anterior, salvo que los lotes se calculan de forma que se minimicen los costes medios por unidad producida. La cantidad que se demanda mediante el lanzamiento de orden es la suma de las necesidades brutas de los periodos anteriores del mínimo local encontrado por el método (ec.8): 𝐶𝑈𝑡=𝐴+∑ (𝑖−1)∗𝐷𝑖 𝑡 𝑖=1 ∗𝑉∗𝑟 ∑𝐷𝑖 𝑡 𝑖=1 (ec.8) Siendo: CUt: Coste unitario del período t. A: Coste de lote unitario. Di: Demanda bruta del período i (unidades/período). V: Coste del producto (€/unidad). r: tasa de mantenimiento anual (€/€*período).
33 2.3.5.7 Equilibrado de coste (EC) El equilibrado de coste realiza el tamaño de lote aunando las necesidades brutas de los períodos anteriores al mínimo local obtenido mediante (ec.9): 𝐸𝐶𝑡=|𝐴−∑ (𝑖−1)∗𝐷𝑖∗𝑉∗𝑟| 𝑡 𝑖=1 (ec.8) Siendo: ECt: Coste del equilibrado de coste del período t. A: Coste de lote unitario. Di: Demanda bruta del período i (unidades/período). V: Coste del producto (€/unidad). r: tasa de mantenimiento anual (€/€*período). 2.3.6 Plazo de aprovisionamiento El plazo de aprovisionamiento es el periodo que transcurre desde que se lanza la orden de necesidad de un producto hasta la recepción de la misma para tener total disponibilidad de trabajar. Este aspecto está íntimamente relacionado con el tamaño de lote. Estos plazos de aprovisionamiento son perfectamente conocido y constante, y no depende de la cantidad de unidades pedidas para aumentar o disminuir dicho periodo. La Tabla 2.3 se muestra todos los parámetros citados anteriormente para el caso de producto final ‘X’. Tabla 2.2. Estado de stock de las referencias del producto final ‘X’. Producto X A B C N M P Existencia inicial 60 100 200 0 1000 0 550 Cantidad comprometidas Recepciones programadas 500 (semana 2) Stock de seguridad Tamaño de lote LaL 50 LaL 20 100 150 100 Tiempo de aprovisionamiento 1 1 1 2 1 1 2
34 2.4 Metodología y conceptos del Sistema MRP El Sistema MRP diferencia entre una demanda independiente y dependiente en el proceso. Mientras que la demanda dependiente se refiere a los materiales demandado externamente, los cuáles se han calculado mediante el PMP, la demanda dependiente se refriere a los ítems demandados por otras referencias de un nivel superior. La suma de ambas demandas para cada referencia son las denominadas necesidades brutas. Para calcular todas las necesidades brutas de todos los ítems es necesario que todos los ítems de nivel superior estén realizados. De este modo, se empieza calculando las necesidades brutas del producto final (Nivel 0) y descendiendo en la estructura de fabricación se van calculando las necesidades hasta llevar a la materia prima. Otro aspecto importante es eliminar de las necesidades brutas las unidades aquellos ítems que estén en inventario o tengan recepciones programadas de antemano. Así, se obtienen las necesidades netas que son las unidades necesarias de cada referencia que hacen falta fabricar para cumplir con la demanda exigida. De este modo, si las necesidades netas de un período son positivas significa que hay emitir un lanzamiento de orden con un lote (determinado por el usuario) que cubra las necesidades netas exigidas y que dichas unidades estén disponibles para el período considerado (teniendo en cuenta el desfase de período por el tiempo de aprovisionamiento de cada recurso). Así pues, teniendo los datos de entrada, estado de stock, estructura de fabricación y plan maestro de producción, se puede obtener para cada período las necesidades de los productos de los distintos niveles. En concreto puede observarse: - Necesidades brutas = demanda independiente + demanda dependiente. - Recepciones programas conocidas desde el instante inicial. - Inventario disponible = inventario disponible al final del período anterior + recepciones programadas + recepciones de órdenes de producción – necesidades brutas. - Necesidades netas = stock de seguridad + necesidades brutas – inventarios anteriores – recepciones programadas. - Recepciones de órdenes de producción. - Lanzamiento de órdenes de producción que serán recibidas tras el tiempo de aprovisionamiento de cada producto. Observando la estructura del producto ‘X’ (Figura 2.2), poseyendo el estado de stock (Tabla 2.2) y el plan maestro de producción de ‘X’ (Tabla 2.1), el cálculo de las necesidades de cada ítem sería:
35 Tabla 2.3. Cálculo de las necesidades del producto de nivel 0 (X) Período Instante inicial 1 2 3 4 5 6 7 8 Necesidades brutas 0 50 0 50 0 50 0 100 Recepciones programadas Inventario 60 60 10 10 0 0 0 0 0 Necesidades netas 40 50 100 Recepción de órdenes 40 50 100 Lanzamiento de órdenes 40 50 100 Tabla 2.4. Cálculo de las necesidades del producto de nivel 1 (A) Período Instante inicial 1 2 3 4 5 6 7 8 Necesidades brutas 0 0 80 0 100 0 200 0 Recepciones programadas Inventario 100 100 100 20 20 20 20 20 20 Necesidades netas 80 180 Recepción de órdenes 100 200 Lanzamiento de órdenes 100 200 Tabla 2.5. Cálculo de las necesidades del producto de nivel 2 (C) Período Instante inicial 1 2 3 4 5 6 7 8 Necesidades brutas 0 0 0 100 0 200 0 0 Recepciones programadas Inventario 0 0 0 0 0 0 0 0 0 Necesidades netas 100 200 Recepción de órdenes 100 200 Lanzamiento de órdenes 100 200
36 Tabla 2.6. Cálculo de las necesidades del producto de nivel 3 (B) Período Instante inicial 1 2 3 4 5 6 7 8 Necesidades brutas 0 200 40 400 50 0 100 0 Recepciones programadas Inventario 200 200 0 0 0 0 0 0 0 Necesidades netas 40 400 50 100 Recepción de órdenes 40 400 50 100 Lanzamiento de órdenes 40 400 50 100 Tabla 2.7. Cálculo de las necesidades del producto de nivel 3 (M) Período Instante inicial 1 2 3 4 5 6 7 8 Necesidades brutas 0 100 0 200 0 0 0 0 Recepciones programadas 500 Inventario 0 0 400 400 200 200 200 200 200 Necesidades netas Recepción de órdenes Lanzamiento de órdenes Tabla 2.8. Cálculo de las necesidades del producto de nivel 4 (N) Período Instante inicial 1 2 3 4 5 6 7 8 Necesidades brutas 0 40 400 50 0 100 0 0 Recepciones programadas Inventario 1000 1000 960 560 510 510 410 410 410 Necesidades netas Recepción de órdenes Lanzamiento de órdenes
37 Tabla 2.9. Cálculo de las necesidades del producto de nivel 4 (P) Período Instante inicial 1 2 3 4 5 6 7 8 Necesidades brutas 0 120 1200 150 0 300 0 0 Recepciones programadas Inventario 550 550 430 30 80 80 80 80 80 Necesidades netas 770 120 220 Recepción de órdenes 800 200 300 Lanzamiento de órdenes 800 200 300
38 3 EL SISTEMA CRP Tras obtener las cantidades necesarias mediante el MRP, el siguiente paso en la planificación y programación de la fabricación es hallar las capacidades de las distintas secciones dentro de una fábrica. Es aquí, cuando podemos hablar del sistema CRP, siglas del término inglés Capacity requierement planning. Este sistema tiene la funcionalidad de calcular la capacidad de cada sector, ocupación de los operarios en el proceso de producción y también distribuir los diferentes trabajos en el horizonte temporal mediante diagramas de Gantt. Como se muestra en la Figura 3.1, el sistema CRP necesita la solución generada del MRP y los datos de operaciones de cada sector de la fábrica, dando como solución la planificación de la capacidad y la ocupación de los operarios. Figura 3.1. Planificación de la capacidad Fuente: Diseño y gestión de sistemas productivos. Dextra. 2017 3.1 Carga de trabajo Una vez obtenida la solución del módulo MRP es conveniente analizar la carga de los recursos que exige dicha solución. Las necesidades de los recursos se comparan con la capacidad disponible de cada sección. Si la carga es inferior a la capacidad no habría ningún inconveniente en realizar la planificación Solución MRP Cargas de trabajo de las secciones Datos de operaciones Planificación de la capacidad Ocupación de los operarios Datos de sección Datos de operarios
39 cumpliendo todos los plazos. Si por lo contrario la carga es superior a la capacidad, habría que adoptar una serie de medidas, para cumplir con la programación, como puede ser la subcontratación, la realización de hora extras, adelantar la ejecución de las tareas, introducir nuevos turnos, transferir trabajos de una sección a otra, etc. Las entradas necesarias para calcular la carga de las secciones son como muestras la Figura 3.1 las siguientes: - Programa de producción, obtenido del MRP. - La sección en la que se realiza cada ítem y los recursos que consumen. - La capacidad disponible de cada sección. - Los números de turnos de cada operario asociado a cada sección. Y generando las salidas: - Capacidad utilizada de cada sección. - Niveles de ocupación de los operarios en cada sección. A pesar de todo, el informe de cargas de cada sección debe estar supervisado por una persona para priorizar las órdenes de producción en aquellos recursos que sean escasos. A través de un ejemplo se podrá observar la manera en la que el Sistema CRP actúa. Supongamos que se va a calcular las cargas de las secciones que interviene para la fabricación del producto X del capítulo anterior. Para la producción de este producto final es necesario tres materias primas, los productos con referencia N, M y P. Además, la fábrica consta de dos secciones para su producción. La primera de ellas, S1, se realizarán los productos X y B, mientras que en las secciones dos, S2, se obtendrá A y C. La Tabla 3.1, muestra el maestro de operaciones del producto X, donde se recoge las horas de preparación y de producción de cada uno de los productos. Tabla 3.1. Maestro de operaciones del producto X Producto Sección Horas de preparación Horas de producción X 1 7 1 A 2 6 2 B 1 4 0.4 C 2 3 0.5 Sin tener en cuenta las limitaciones de capacidad y usando los plazos de suministro constantes de la Tabla 2.2 se tiene las órdenes de producción de la Tabla 3.2.
40 Tabla 3.2. Órdenes de producción Producto Producto inferior1 Período Cantidad X1 - 3 40 X2 A1 5 50 X3 A2, B4 7 100 A1 C1 4 100 A2 C2 6 200 B1 - 2 40 B2 - 3 400 B3 - 4 50 B4 - 6 100 C1 - 2 100 C2 B2 4 200 A partir de las órdenes de producción de la Tabla 3.1 y suponiendo que el inicio del período en el que el MRP indica que ha de lanzarse la orden, el programa de fabricación da lugar a la siguiente situación para cada sección: Tabla 3.3. Cargas medias en S1. Producto Período Plazo de fabricación Carga total Carga media X1 3 1 47 h. 47 X2 5 1 57 h. 47 X3 7 1 107 h. 107 B1 2 1 20 h. 20 B2 3 1 164 h. 164 B3 4 1 24 h. 24 B4 6 1 44 h. 44 Tabla 3.4. Cargas medias en S2. Producto Período Plazo de fabricación Carga total Carga media A1 4 1 206 h. 206 A2 6 1 406 h. 406 C1 2 2 53 h. 26,5 C2 4 2 103 h. 51,5 La representación de las cargas medias por período de cada sección de la Tabla 3.3 y 3.4 se ve reflejada en la Figura 2.4 y 2.5 respectivamente. 1 Esta columna hace referencia a los productos que deben de estar realizados para poder realizar el ítem de su misma fila.
41 Figura 3.2 Carga media de la sección 1 Figura 3.3. Carga media de la sección 2 0 0 47 0 57 0 107 00 20 164 24 0 44 0 00 0 0 0 00 0 00 0 0 0 00 0 00 0 0 0 00 0 00 0 0 0 00 0 00 0 0 0 00 0 00 0 0 0 00 0 00 0 0 0 00 0 00 0 0 0 00 0 0 0 50 100 150 200 250 1 2 3 4 5 6 7 8 CARGA MEDIA PERIODOS SECCIÓN 1 1 3 0 0 0 0 0 0 0 0 0 0 0 206 0 406 0 00 26,5 26,5 51,5 51,5 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 50 100 150 200 250 300 350 400 450 1 2 3 4 5 6 7 8 CARGA MEDIA PERIODOS SECCIÓN 2 2 4 0 0 0 0 0 0 0 0
48 nivel habrá. Así que, para facilitar el trabajo para la ejecución de la aplicación, la estructura de fabricación se deberá introducir de manera más numérica. La Tabla 4.3 muestra el cuadro de introducción de los datos necesario para que la aplicación realice la planificación de los materiales para el producto final, mientras que la Tabla 4.4 hace lo mismo salvo para los diferentes productos de niveles inferiores. Para introducir la estructura de fabricación se ha de fijar en la primera columna el nivel de cada producto. Anteriormente, se vió que el nivel del producto final era el nivel 0. Sin embargo, para introducir tanto este nivel superior como los inferiores debemos aumentarlos en uno, es decir, para el nivel superior correspondería el nivel 1 y así se iría bajando en los niveles inferiores. Esto es debido a que, si se introduce el nivel superior como nivel 0, genera error en la ejecución del programa según esta codificado el mismo. Solo con la introducción de los niveles no es suficiente para que el programa “sepa” ni cuál es el nivel superior ni cuantas unidades son necesarias para fabricar una pieza de su referencia superior. En la Tabla 4.4 se puede observar un modelo de cuadro de recogida de datos para los niveles inferiores. En la columna cuyo nombre es “antecesor” se introducirá en producto de nivel superior, haciendo referencia a que número de ítem se refiere y no a que referencia, es decir, el producto X tiene como referencia ‘X’ pero su número de ítem es el 1 ya que se ha introducido en la celdilla de nombre ítem 1. El último dato para tener completo de forma no esquemática la estructura de fabricación es la cantidad necesaria de cada producto para fabricar una unidad del “antecesor”. Ese valor se deberá introducir en la columna “múltiplo” de la Tabla 4.4. Estos aspectos no tienen mucho sentido para el producto final, ya que no existe ningún ítem con nivel superior y por eso su ausencia en el cuadro de recogida del ítem 1. Para los productos inferiores, en necesario incluir más de una fila ya que si un producto es inmediatamente inferior de dos o más referencia como ocurre con el producto B (Ver Figura 2.2) habría que estipular los “múltiplos” necesarios para cada antecesor. Hay que tener en cuenta que, si esto ocurre, hay que incluir en todas las filas el nivel del producto, el “antecesor” y los “múltiplos”. Para el caso contrario bastaría con dejar en blanco las distintas casillas. En teoría se dijo que había que tener cuidado con el orden en el que se realizaran la planificación puesto que un producto no puede realizarse si no se han realizado todas las referencias de nivel inmediatamente superior. Sin embargo, en esta aplicación no es necesario cumplir esto ya que se ha introducido en el programa unas líneas de código que realiza las operaciones correspondientes para cumplir esta regla. El siguiente código refleja la ordenanza de los productos para que se pueda realizar de forma correcta la planificación de los materiales.
49 while pos < infor(4,11) antecesores = 0; antecesoreshecho = 0; for i=0:1:6 if infor(8+14*cont+i,10) > 0 antecesores = antecesores +1; end end for i=0:1:6 if infor(8+14*cont+i,10) > 0 && (8+14*cont) > 8 if ordenaitem(infor(8+14*cont+i,10)) > 0 antecesoreshecho = antecesoreshecho+1; end end end if antecesoreshecho == antecesores && ordenaitem(cont+1) == 0 if pos < infor(4,11) pos = pos+1; end if cont < infor(4,11) ordenaitem(cont+1) = pos; end end if cont == infor(4,11)-1 && pos <= infor(4,11) cont = 0; else cont = cont+1; end end La función de esta secuencia de código es la ordenación de los productos dependiendo si los productos de nivel superior se han realizado o no. Para ello cuenta primero los números de productos diferente de nivel inmediatamente superior de un ítem. A continuación, chequea cuanto de esos productos de nivel superior ya se ha realizado la planificación. Si ambos coinciden se insertará en un vector la posición que el producto tendrá en la resolución de la planificación. Si no coinciden se continuará el bucle y se ordenará posteriormente a medida que los antecesores se vayan realizado.
50 Tabla 4.1. Necesidades básicas de X Tabla 4.2. Nombre de la referencia de cada producto Tabla 4.3. Recogida de dato del producto final Tabla 4.4. Plantilla modelo de recogida de dato de los productos de nivel inferior NIVEL EXISTENCIAS TIPO LOTE PLAZO ENTREGA A VR STOCK SEGURIDAD RECEP. PROGRAMADA SEMANA RECECP Lote fijo Demanda anual 160 1 1 0 0 0 0 0 NIVEL EXISTENCIAS TIPO LOTE PLAZO ENTREGA A VR STOCK SEGURIDAD RECEP. PROGRAMADA SEMANA RECECP ANTECESOR MULTIPOLOS Lote fijo Demanda anual 1 2 3 4 5 6 7 8 NECESIDADES BASICAS 0 50 050 050 0100 ITEM 1 X
51 4.2.3 Datos sobre el estado de stock Algo realmente importante es el estado de stock de cada referencia ya que da información de que cantidad hay producida, que política de seguridad de stock tiene la empresa, etc. Por eso es esencial una fácil introducción de los mismos en la plantilla de recogida de datos. De esta manera cada una de las celdas de la Tabla 4.4 corresponde a cada uno de los términos del estado de stock. De izquierda a derecha se puede observar las siguientes celdillas (salvo las tres mencionadas en el apartado anterior): 1) Existencias: en esta columna se introducirá las unidades de las existencias ya fabricadas de cada referencia. 2) Tipo de lote: cada ítem tiene un tipo de lotificación el cual se deberá anotar en esta celdilla de manera numérica conforme se refleja en la siguiente tabla. Tabla 4.5. Referencia numérica de los lotes Tipo de lote Referencia numérica Lote a lote (LaL) 1 Lote fijo (LF) 2 Lote económico (LE) 3 Tiempo de lote económico (LTE) 4 Mínimos costes medios (MCM) 5 Mínimos costes unitarios (MCU) 6 Equilibrado de coste (EC) 7 Así, si nuestro producto tiene un lote del tipo mínimos costes medios, habrá que introducir en la celdilla el valor 5. Un caso especial sería si el lote es un lote fijo ya que es necesario de qué tamaño es ese lote. Por eso, en la columna con nombre lote fijo se tendrá que añadir el tamaño de lote, mientras que en la columna tipo de lote se pondrá el valor 2. Por otro lado, como se vió en teoría para calcular el tamaño de lote es necesario saber tres parámetros, los cuales se obtienen por las condiciones del mercado y por estipulación, valor del producto, coste de lote unitario y tasa de mantenimiento anual. Estos parámetros se deberán anotar en dos columnas distintas. Una de ellas, (columna con nombre “A”) corresponde al coste de lote unitario, mientras que la columna con nombre “VR” corresponde al producto de los parámetros de tasa de mantenimiento anual y valor del producto, el cual deberá insertarse de manera que su unidad global del producto sea €/unidad*período.
52 3) Plazo de entrega: esta columna corresponde al tiempo de aprovisionamiento del lote, por lo que se deberá introducir el valor de los períodos de este plazo. 4) Stock de seguridad: como su propio nombre indica en esta celdilla se colocará el valor de las unidades que se desea tener como seguridad para algún contratiempo como rotura de alguna máquina, variabilidad en la demanda prevista, etc. 5) Recepciones programadas: esta columna va ligada junto a la siguiente, semana recepción. En la primera de ellas, deberá tener, en el caso que existan, las recepciones programadas prevista antes del comienzo de la planificación. Por su parte en la columna semana de recepción se inscribirá el periodo previsto de la recepción. 6) Demanda anual: en esta última columna de recogida de dato, se incluirá la demanda anual de cada producto para facilitar el cálculo de los lotes LE, LTE, MCM, MCU y EC. En el caso de no poder tener este dato, el programa extrapolará la media mediante el valor de los períodos conocido. 4.3 Recogida de datos para CRP Una vez introducido todos los datos para calcular el MRP quedaría anotar solamente los dedicados para la resolución de la planificación de la capacidad. En este apartado se explicará con detalle los pasos a seguir para no obtener soluciones erróneas. La introducción de los datos para el cálculo del sistema CRP es más sencillas que para el apartado anterior ya que solo hace falta cuatros datos para su resolución. Para cada uno de los ítems se ha de saber en qué sector o maquina se ha de realizar, cuanto se tarda en preparar la sección para su fabricación y que tiempo se precisa para realizar una pieza. Por su parte, es necesario tener la información de las horas máxima de trabajo de cada sección o máquina. A pesar que la capacidad no dependa de los productos, es necesario anotar en cada uno de ellos la capacidad de la correspondiente sección en la que se fabricara cada producto para la realización de cuando los diagramas de Gantt cambien de período. Debido a que en cada producto del árbol de producción necesite una sección o máquina para su fabricación, se puede llegar a un escenario extremo en el que se necesite una maquina distinta para cada uno de los productos. Por eso, la aplicación tiene la posibilidad de albergar las mismas secciones que los productos introducidos, es decir, un total de 10.
53 Tabla 4.6. Recogida de datos para la capacidad La Tabla 4.6 es un modelo del cuadro de recogida de los datos para que el usuario introduzca dichos parámetros necesarios para el cálculo de la planificación de la capacidad. Este cuadro es igual para cada producto. La primera columna corresponde a la sección en la que cada producto se fabricará. El usuario deberá incluir de forma numérica a que sección ira cada ítem. En el caso que se requiera realizar el MRP, pero no el CRP de un como el caso de las materias primas, se deberá incluir un 0 en la columna sector es esos productos. La columna siguiente, horas de preparación, se refiere a la hora de set up que se necesita para preparar una sección o máquina para la realización de un lote. Por ejemplo, para pintar un producto es necesario lavar el depósito y cargar la pintura nueva. La tercera columna, h/ud producida, se refiere a lo que tarda en fabricar una sola unidad de cada producto. La última columna, se refiere a la capacidad de cada sección. Si varios productos se realizan en la misma sección, se debe rellenar esta columna, aunque ya se haya rellenado la capacidad en otro producto anterior. Una vez se tenga todos los datos se podrá ejecutar el programa y tener tanto la planificación de los materiales como de la capacidad. Algo que destacar es que se puede obtener la planificación de materiales y no la de la capacidad si se desea, pero no al contrario. Por lo que la aplicación contempla este hecho y se puede calcular solo la planificación de la capacidad si el usuario lo desea. Para ello deberá dejar en blanco o rellenar con 0 las celdillas de la Tabla 4.6. 4.4 Generación de resultados MRP Una vez se conozcan todos los datos y se hayan introducido en sus correspondientes lugares como se explicó en los capítulos anteriores, se ejecutará el programa para hallar la solución deseada que se generará en la hoja de Excel con el nombre de “Resultados”. La interpretación de los resultados es exactamente igual que si se realizase a mano, y acorde con la teoría, para el caso de la planificación de los materiales. sector horas preparacion h/ud producida Capacidad
54 Tabla 4.7. Modelo de tabla de solución de MRP Hay varios aspectos significantes que se pueden extraer de la Tabla 4.7. Para comenzar, puede resultar raro que exista un período 0. Esto no se refiere a un período sino es más bien un instante, concretamente el instante inicial donde puede haber diversos estados de stock de la planificación anterior. Cada una de las filas corresponde a los resultados necesario como se vió en el capítulo dos. En primer lugar, se generará las necesidades brutas de cada producto. En el caso de que el ítem sea el producto final, el programa rellenara esta fila con los datos del plan maestro de producción, mientras que, si es de los productos restantes, corresponderá a la suma de la orden de lanzamiento de los productos de niveles superior en el periodo que se halla lanzado la orden de los mimos. El segundo de las filas corresponde a las recepciones previstas que sea sabe con anterioridad y es un dato que deberá dar el usuario con anterioridad. La siguientes corresponde al inventario que como se ha comentado el instante inicial es un dato introducido por el usuario en el apartado de dato. A partir del instante inicial el inventario se va recalculando conforme a: Inventarioi = Inventario i-1 + Recepciones programadasi + Recepción de ordeni – Necesidades Brutas i. Las necesidades netas es la diferencia entre lo materiales que se necesita y los materiales que se han fabricado en períodos anteriores. Si el resultado de Necesidades netasi = Necesidades brutasi – Inventario i-1 es menor de 0 quiere decir que se puede cubrir las necesidades brutas con material que hay en el inventario. Si por lo contrario esta diferencia sale negativa habría que realizar un lanzamiento de orden. Las dos últimas filas son el lanzamiento de orden y la recepción respectivamente. Ambas filas coinciden en el número que unidades necesarias salvo con un desfase de periodos según el tiempo de aprovisionamiento de cada producto. Todos estos valores de las tablas se generarán automáticamente mediante la aplicación. Además, en cada una de las referencias insertadas en el apartado de recogida de datos, tendrá una tabla asociada de la planificación de los materiales. No habrá confusión puesto encima de cada tabla hay un cuadro con el nombre del ítem de la solución generada. PERIODO 0 1 2 3 4 5 6 7 8 NECESIDADES BRUTAS 0 0 120 1200 150 0300 0 0 RECEPCIONES PREVISTAS 0 0 0 0 0 0 0 0 0 INVENTARIO 550 550 430 30 80 80 80 80 80 NECESIDADES NETAS 0 0 0 770 120 0220 0 0 RECEPCION DE ORDEN 0 0 0 800 200 0300 0 0 LANZAMIENTO DE ORDEN 0 800 200 0300 0 0 0 0
55 4.5 Generación de resultados CRP Para finalizar, solo queda por saber cuáles son los resultados de la planificación de la capacidad para poder tomar las correspondientes medidas en el caso que la planificación sobrepase la capacidad de la empresa. Para ello se puede visualizar las dos soluciones del sistema CRP: Diagramas de cargas medias y secuenciación de trabajos o diagrama de Gantt. 4.5.1 Cargas medias En el Excel se puede encontrar una hoja con el nombre de “Gráficas” donde en ella se encuentra la carga media de cada uno de los sectores o máquinas. En ella se puede distinguir once tablas diferentes. Diez de ellas corresponde a los diez posibles sectores que se ha optado incorporar en esta aplicación. La Tabla 4.8 se puede observar la tabla que recoge la carga media del sector 1 para el caso del producto X y cuyo maestro de operaciones es el de la Tabla 3.1. En la tabla de resolución de las cargas medias la primera columna hace referencia de que producto se trata, usando de referencia el número de ítem que se introdujo en el apartado de recogida de datos, es decir, si el caso del producto final X se introdujo en el Ítem 1 el producto ‘X’ y en el Ítem 3 el producto ‘B’, en la tabla se refleja el trabajo 1 como si fuese ‘X’ y 3 como ‘B’. Las siguientes columnas se refiere a la carga que cada producto por separado aporta a la sección en los diferentes períodos. Tabla 4.8. Tabla de generación de resultado de cagas medias por sección SECTOR 1 ITEM 1 2 3 4 5 6 7 8 1 0 0 47 057 0107 0 3 0 20 164 24 044 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
56 Con respecto a la tabla restante de las once que hay en esta hoja es la correspondiente a la Tabla 4.9 que hace referencia a la conjunción de las cargas medias de todos los sectores y la suma de las cargas de cada uno de los productos de cada sección. Tabla 4.9. Tabla de generación de cargas medias En esta ocasión se puede apreciar el total de las cargas medias por período de cada sector de la fábrica por separado para el ejemplo del producto final X. Además de las tablas, el programa también genera de forma automática y para cada sector por separado el diagrama que muestras las cargas medias. La figura 4.1 y 4.2 muestran los diagramas para este ejemplo. Se puede observar el peso de la carga que genera cada producto. Figura 4.1. Diagrama de cargas media de la sección 1 CARGA DE SECTORES SECTOR 1 2 3 4 5 6 7 8 1020 211 24 57 44 107 0 20 26,5 26,5 257,5 51,5 406 0 0 30 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 70 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 90 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0
57 Figura 4.2. Diagrama de cargas media de la sección 2 La leyenda de los diagramas hacer referencia al número de ítem que corresponde cada color, siguiendo el mismo criterio de referencia del número de ítem y los productos. 4.5.2 Secuenciación de los trabajos Lo último para tener toda la planificación de un proceso es obtener la secuenciación de los trabajos que intervienen en la fabricación de un producto final, sin tener en cuenta las materias primas. A pesar que lo más común es representar la secuenciación de forma gráfica mediante los diagramas de Gantt, en este trabajo no se realizara esta visualización. En su lugar se generará una tabla como muestra la Tabla 4.10 en la que se refleja la secuenciación del periodo de fabricación. Se puede observar que por cada sección o maquina le corresponden cinco filas. La primera de ella corresponde al ítem que se realiza en esa sección. A continuación, la siguiente corresponde al periodo de inicio en el que comenzara la fabricación, mientras que la cuarta fila corresponde al periodo en el que termina de fabricar ese trabajo. Por su parte, la tercera fila muestra el instante dentro del periodo de inicio que comienza a realizarse la fabricación del producto, mientras que la quinta fila se refiere al instante de fin del mismo. Para verse de forma más visual, se puede apreciar que en la Tabla 4.10, el ítem 3 comenzara en el periodo 1, concretamente el instante inicial, y finalizaría en el instante 20 del mismo período. Al lado de cada sector, se puede visualizar la capacidad de cada periodo. Este valor está presente para que el usuario lo pueda visualizar sin acceder a la hoja de recogida de datos y comprobar que cada periodo tiene una capacidad de las horas expuestas y no puede haber un valor superior a dicha capacidad en sus filas correspondientes. De la misma forma, el usuario puede comprobar que ninguna sección realiza dos trabajos al mismo tiempo.
64 7.2 Anexo 2. Código en Matlab. En este capítulo se plasmará el código utilizado para la realización del este trabajo. El código consta de un módulo principal que realiza la planificación de materiales y de la capacidad. El valor de la matriz A es el mismo que el de la Tabla 4.7 y ese se volcara en su correspondiente celdilla de solución del problema. iniciarmatrices; infor = xlsread('TFG.xlsx','Datos','A1:O144'); rp = [0 0 0 0 0 0 0 0 0]; cont = 0; if infor(8,1) == 1 nb = infor(4,1:9); end for j=0:1:6 if infor(8+14*cont+j,8) > 0 rp(infor(8+14*cont+j,9)+1) = infor(8+14*cont+j,8); end end exis = infor(8+14*cont,2); ss = infor(8+14*cont,7); pe = infor(8+14*cont,4); datos = infor(8,5:6);
65 tl = infor(8,10); if infor(8+14*cont,3) == 1 A = lal(nb,rp,exis,ss,pe); elseif infor(8+14*cont,3) == 2 A = lf(nb,rp,exis,ss,pe,tl); elseif infor(8+14*cont,3) == 3 A = lec(nb,rp,exis,ss,pe,datos,cont); elseif infor(8+14*cont,3) == 4 A = tle(nb,rp,exis,ss,pe,datos,cont); elseif infor(8+14*cont,3) == 5 A = mcm(nb,rp,exis,ss,pe,datos); elseif infor(8+14*cont,3) == 6 A = mcu(nb,rp,exis,ss,pe,datos); elseif infor(8+14*cont,3) == 7 A = ec(nb,rp,exis,ss,pe,datos); end xlswrite('TFG.xlsx',A,'Resultados','D9'); ordenaitem = [1 0 0 0 0 0 0 0 0 0 ]; cont = 0; pos = 1; while pos < infor(4,11) antecesores = 0; antecesoreshecho = 0; for i=0:1:6 if infor(8+14*cont+i,10) > 0
66 antecesores = antecesores +1; end end for i=0:1:6 if infor(8+14*cont+i,10) > 0 && (8+14*cont) > 8 if ordenaitem(infor(8+14*cont+i,10)) > 0 antecesoreshecho = antecesoreshecho+1; end end end if antecesoreshecho == antecesores && ordenaitem(cont+1) == 0 if pos < infor(4,11) pos = pos+1; end if cont < infor(4,11) ordenaitem(cont+1) = pos; end end if cont == infor(4,11)-1 && pos <= infor(4,11) cont = 0; else cont = cont+1; end end cont2=2;
67 while cont2<= infor(4,11) for i=2:1:infor(4,11) if ordenaitem(i) == cont2 cont = i-1; end end nb=[0 0 0 0 0 0 0 0 0]; rp=[0 0 0 0 0 0 0 0 0]; infor2=xlsread('TFG.xlsx','Resultados','A1:L140'); for j=0:1:6 if infor(8+14*cont+j,10) > 0 nb= nb + infor(8+14*cont+j,11)*infor2(9+14*(infor(8+14*cont+j,10)-1),1:9); end end for j=0:1:6 if infor(8+14*cont+j,8) > 0 rp(infor(8+14*cont+j,9)+1) = infor(8+14*cont+j,8); end end exis = infor(8+14*cont,2); ss = infor(8+14*cont,7); pe = infor(8+14*cont,4); datos = infor(8+14*cont,5:6); if infor(8+14*cont,3) == 2 tl = infor(8+14*cont,12);
68 end if infor(8+14*cont,3) == 1 A = lal(nb,rp,exis,ss,pe); elseif infor(8+14*cont,3) == 2 A = lf(nb,rp,exis,ss,pe,tl); elseif infor(8+14*cont,3) == 3 A = lec(nb,rp,exis,ss,pe,datos,cont); elseif infor(8+14*cont,3)== 4 A = tle(nb,rp,exis,ss,pe,datos,cont); elseif infor(8+14*cont,3) == 5 A = mcm(nb,rp,exis,ss,pe,datos); elseif infor(8+14*cont,3) == 6 A = mcu(nb,rp,exis,ss,pe,datos); elseif infor(8+14*cont,3) == 7 A = ec(nb,rp,exis,ss,pe,datos); end if cont == 1 xlswrite('TFG.xlsx',A,'Resultados','D23'); elseif cont == 2 xlswrite('TFG.xlsx',A,'Resultados','D37'); elseif cont == 3 xlswrite('TFG.xlsx',A,'Resultados','D51'); elseif cont == 4 xlswrite('TFG.xlsx',A,'Resultados','D65'); elseif cont == 5
69 xlswrite('TFG.xlsx',A,'Resultados','D79'); elseif cont == 6 xlswrite('TFG.xlsx',A,'Resultados','D93'); elseif cont == 7 xlswrite('TFG.xlsx',A,'Resultados','D107'); elseif cont == 8 xlswrite('TFG.xlsx',A,'Resultados','D121'); elseif cont == 9 xlswrite('TFG.xlsx',A,'Resultados','D135'); end cont2=cont2+1; end diagrama gantt disp('fin') De igual forma, cada tamaño de lote se calcula de forma distinta por lo que se ha generado una función para su ejecución en el programa principal. Se puede apreciar los distintos lotes a partir de la etiqueta que del nombre del tipo del lote.
70 Lote a lote. function A=lal(NB,RP,DISP0,SS,PE) A(1,:)=NB(:); A(2,:)=RP(:); A(3,1)=DISP0; A(4,:)=0; A(5,:)=0; A(6,:)=0; for i=2:1:length(NB) A(3,i)=A(3,i-1)-A(1,i)+A(2,i); if (A(3,i))<0 A(4,i) = -A(3,i)+SS; else if A(3,i)<SS && A(3,i)>=0 A(4,i)=SS-A(3,i); else A(4,i)=0; end end A(5,i)=A(4,i); if A(5,i) >0 && i-PE>0 A(6,i-PE)=A(5,i); end
71 A(3,i)=A(3,i)+A(5,i); end end Lote fijo function A=lf(NB,RP,DISP0,SS,PE,TL) A(1,:)=NB(:); A(2,:)=RP(:); A(3,1)=DISP0; A(4,:)=0; A(5,:)=0; A(6,:)=0; for i=2:1:length(NB) A(3,i)=A(3,i-1)-A(1,i)+A(2,i); if (A(3,i))<0 A(4,i) = -A(3,i)+SS; else if A(3,i)<SS && A(3,i)>=0 A(4,i)=SS-A(3,i); else A(4,i)=0; end end if A(4,i)>0 while A(5,i)<A(4,i) A(5,i)=A(5,i)+TL;
72 end end if A(5,i) > 0 && i-PE>0 A(6,i-PE)=A(5,i); end A(3,i)=A(3,i)+A(5,i); end end Lote económico. function A=lec(NB,RP,DISP0,SS,PE,DATOS,CONT) A(1,:)=NB(:); A(2,:)=RP(:); A(3,1)=DISP0; A(4,:)=0; A(5,:)=0; A(6,:)=0; demanda=0; infor = xlsread('TFG.xlsx','Datos','A1:O144'); if infor(8+14*CONT,13) > 0 demanda = infor(8+14*CONT,13); demanda = demanda/52; else for i=2:1:length(NB)
73 demanda=demanda+NB(i); end demanda=demanda/(length(NB)-1); end TL=round(sqrt((2*DATOS(1)*demanda)/(DATOS(2)))); for i=2:1:length(NB) A(3,i)=A(3,i-1)-A(1,i)+A(2,i); if (A(3,i))<0 A(4,i) = -A(3,i)+SS; else if A(3,i)<SS && A(3,i)>=0 A(4,i)=SS-A(3,i); else A(4,i)=0; end end if A(4,i)>0 A(5,i)=TL; end if A(5,i) > 0 && i-PE>0 A(6,i-PE)=A(5,i); end A(3,i)=A(3,i)+A(5,i); end end
80 if cu<=cumin cumin=cu; A(5,i)=A(5,i)+NB(i+j); end end j=j+1; end end if A(5,i) > 0 && i-PE>0 A(6,i-PE)=A(5,i); end A(3,i)=A(3,i)+A(5,i); end end Equilibrado de costes function A=ec(NB,RP,DISP0,SS,PE,DATOS) A(1,:)=NB(:); A(2,:)=RP(:); A(3,1)=DISP0; A(4,:)=0; A(5,:)=0;
81 A(6,:)=0; for i=2:1:length(NB) A(3,i)=A(3,i-1)-A(1,i)+A(2,i); if (A(3,i))<0 A(4,i) = -A(3,i)+SS; else if A(3,i)<SS && A(3,i)>=0 A(4,i)=SS-A(3,i); else A(4,i)=0; end end if A(4,i)>0 ecmin=200; ec=0; j=0; while ec<=ecmin && (length(NB)-i>=j) if NB(i+j)>0 cont=0; ec=DATOS(1); while cont<=j ec=ec-NB(i+cont)*DATOS(2)*cont; cont=cont+1; end ec=abs(ec); if ec<=ecmin
82 ecmin=ec; A(5,i)=A(5,i)+NB(i+j); end end j=j+1; end end if A(5,i) > 0 && i-PE>0 A(6,i-PE)=A(5,i); end A(3,i)=A(3,i)+A(5,i); end end Por su parte, el módulo de ‘inicairmatrices’ es para poner el valor a 0 de todas las celdillas de obtención de resultados ya que, si de un problema a otro hay menos producto, borrar la solución del problema anterior para evitar fallos del programa y confusión del usuario. La codificación de este módulo seria: function iniciarmatrices A(1:6,1:9) = 0; B(1:10,1:8) = 0; C(1:10,1:9) = 0; D(1:20,1:20) = 0; E(1:4,1:2) = 0; xlswrite('TFG.xlsx',A,'Resultados','D9');
83 xlswrite('TFG.xlsx',A,'Resultados','D23'); xlswrite('TFG.xlsx',A,'Resultados','D37'); xlswrite('TFG.xlsx',A,'Resultados','D51'); xlswrite('TFG.xlsx',A,'Resultados','D65'); xlswrite('TFG.xlsx',A,'Resultados','D79'); xlswrite('TFG.xlsx',A,'Resultados','D93'); xlswrite('TFG.xlsx',A,'Resultados','D107'); xlswrite('TFG.xlsx',A,'Resultados','D121'); xlswrite('TFG.xlsx',A,'Resultados','D135'); xlswrite('TFG.xlsx',B,'Graficas','D8'); xlswrite('TFG.xlsx',C,'Graficas','C28'); xlswrite('TFG.xlsx',C,'Graficas','C48'); xlswrite('TFG.xlsx',C,'Graficas','C68'); xlswrite('TFG.xlsx',C,'Graficas','C88'); xlswrite('TFG.xlsx',C,'Graficas','C108'); xlswrite('TFG.xlsx',C,'Graficas','C128'); xlswrite('TFG.xlsx',C,'Graficas','C148'); xlswrite('TFG.xlsx',C,'Graficas','C168'); xlswrite('TFG.xlsx',C,'Graficas','C188'); xlswrite('TFG.xlsx',C,'Graficas','C208'); xlswrite('TFG.xlsx',D,'Gantt','E7'); xlswrite('TFG.xlsx',E,'Gantt','B7');
84 No obstante, los módulos del sistema CRP son más complejo y por eso se ha optado por realizar dos. Uno para el cálculo de las cargas medias y otro para la secuenciación de los trabajos o diagrama de Gantt. El primero de ello es el llamado ‘diagrama’ que se encarga de la resolución del problema de cargas medias y cuyo código es: function diagrama infor1 = xlsread('TFG.xlsx','Datos','A1:S138'); infor2 = xlsread('TFG.xlsx','Resultados','A1:L140'); A(1:10,1:10) = 0; for i=1:1:infor1(4,11) if infor1(8+14*(i-1),15) > 0 A(i,1) = infor1(8+14*(i-1),15); A(i,2) = infor1(8+14*(i-1),4); end for j=0:1:7 A(i,3+j) = infor2(9+14*(i-1),2+j); if A(i,3+j) > 0 A(i,3+j) = A(i,3+j)*infor1(8+14*(i-1),17)+infor1(8+14*(i-1),16); end end end B(1:10,1:9) = 0; for i=1:1:infor1(4,11) B(i,1) = A(i,1);
85 if A(i,2) > 0 carga = 0; for j=1:1:8 if A(i,2+j) > 0 carga = A(i,2+j)/A(i,2); for k=0:1:A(i,2)-1 B(i,1+j+k) = carga; end end end end end C(1:10,1:8) = 0; for i=1:1:10 for j=1:1:8 if A(i,1) > 0 C(A(i,1),j) = C(A(i,1),j) + B(i,j+1); end end end cont1 = 1; for i=1:1:10 E(1:10,1:9) = 0; cont = 1; for j=1:1:10
86 if B(j,1) == cont1 E(cont,1) = j; E(cont,2:9) = B(j,2:9); cont = cont+1; end end if cont1 == 1 xlswrite('TFG.xlsx',E,'Graficas','C28'); elseif cont1 == 2 xlswrite('TFG.xlsx',E,'Graficas','C48'); elseif cont1 == 3 xlswrite('TFG.xlsx',E,'Graficas','C68'); elseif cont1 == 4 xlswrite('TFG.xlsx',E,'Graficas','C88'); elseif cont1 == 5 xlswrite('TFG.xlsx',E,'Graficas','C108'); elseif cont1 == 6 xlswrite('TFG.xlsx',E,'Graficas','C128'); elseif cont1 == 7 xlswrite('TFG.xlsx',E,'Graficas','C148'); elseif cont1 == 8 xlswrite('TFG.xlsx',E,'Graficas','C168'); elseif cont1 == 9 xlswrite('TFG.xlsx',E,'Graficas','C188'); elseif cont1 == 10
87 xlswrite('TFG.xlsx',E,'Graficas','C208'); end cont1 = cont1+1; end xlswrite('TFG.xlsx',C,'Graficas','D8'); Para finalizar el código, el modulo ‘gantt’ realiza la secuenciación de los trabajos. En este código se ha decido apaisar la página para mejor visualización del código. function gantt infor1 = xlsread('TFG.xlsx','Datos','A1:T144'); infor2 = xlsread('TFG.xlsx','Resultados','A1:L140'); nitem = 0; for i=1:1:9 if infor2(9,i) > 0 nitem = nitem + 1; end end V(1:6*nitem,1:infor1(4,11)*infor1(4,11)) = 0; A(1:6*nitem,1:infor1(4,11)*infor1(4,11)) = 0; cont=0; for i=1:1:9 if infor2(9,i) > 0 V(6*cont+1,1) = 1;
88 V(6*cont+2,1) = 1; V(6*cont+3,1) = i-1; V(6*cont+4,1) = infor2(9,i); V(6*cont+5,1) = infor2(9,i)*infor1(8,17)+infor1(8,16); cont = cont + 1; end end for i=1:1:infor1(4,11)*infor1(4,11) for cont=0:1:nitem-1 if V(6*cont+2,i) > 0 for j=1:1:infor1(4,11) for n=0:1:6 if infor1(8+14*(j-1)+n,1) > 0 if infor1(8+14*(j-1)+n,10) == V(6*cont+2,i) && infor2(9+14*(j-1),V(6*cont+3,i)- infor1(8+14*(j-1),4)+1) > 0 A(6*cont+2,i+j-1+n*infor1(4,11)) = j; A(6*cont+3,i+j-1+n*infor1(4,11)) = V(6*cont+3,i)-infor1(8+14*(j-1),4); A(6*cont+4,i+j-1+n*infor1(4,11)) = infor2(9+14*(j-1),V(6*cont+3,i)- infor1(8+14*(j-1),4)+1); if infor1(8+14*(j-1),15) > 0 A(6*cont+5,i+j-1+n*infor1(4,11)) = infor2(9+14*(j-1),V(6*cont+3,i)- infor1(8+14*(j-1),4)+1)*infor1(8+14*(j-1),17)+infor1(8+14*(j-1),16); end end end
89 end end end end V(:,2:infor1(4,11)*infor1(4,11))=A(:,2:infor1(4,11)*infor1(4,11)); end for cont=0:1:nitem-1 par = 2; for i=2:1:infor1(4,11)*infor1(4,11) if A(6*cont+2,i) > 0 V(6*cont+1,i) = par; par = par + 1; end end end for cont=0:1:nitem-1 for i=1:1:infor1(4,11)*infor1(4,11) for j=1:1:infor1(4,11)*infor1(4,11) if V(6*cont+2,j) > 0 for n=0:1:6 if infor1(8+14*(V(6*cont+2,j)-1),1) > 0 if infor1(8+14*(V(6*cont+2,j)-1)+n,10) == V(6*cont+2,i) &&infor1(8+14*(V(6*cont+2,j)-1),4)+ V(6*cont+3,j) == V(6*cont+3,i) V(6*cont+6,j) = V(6*cont+1,i); end
96 end end end end for j=1:1:infor1(4,11)*infor1(4,11) if V(6*cont+6,i) == j && V(6*cont+5,i) > 0 B(2*cont+1,j) = B(2*cont+1,j) -1; end end end end for i=1:1:30 for j=1:1:infor1(4,11)*infor1(4,11) if C(i,j) == 10000000000000000000000 C(i,j) = 0; end end end for i=1:1:50 for j=1:1:infor1(4,11)*infor1(4,11) end end C2(1:20,1:20) = 0; for cont=0:1:3 C2(5*cont+1,1:20) = C(3*cont+1,1:20);
97 C2(5*cont+2,1:20) = C1(2*cont+1,1:20); C2(5*cont+3,1:20) = C(3*cont+2,1:20); C2(5*cont+4,1:20) = C1(2*cont+2,1:20); C2(5*cont+5,1:20) = C(3*cont+3,1:20); end for i=0:1:3 for j=1:1:20 if C2(5*i+1,j) > 0 C2(5*i+3,j) = C2(5*i+3,j)-(C2(5*i+2,j)-1)*infor1(8+14*(C2(5*i+1,j)-1),18); C2(5*i+5,j) = C2(5*i+5,j)-(C2(5*i+4,j)-1)*infor1(8+14*(C2(5*i+1,j)-1),18); end end end D(1:4,1:2) = 0; for i=1:1:4 if C2(5*(i-1)+1,1) > 0 D(i,1) = infor1(8+14*(C2(5*(i-1)+1,1)-1),15); D(i,2) = infor1(8+14*(C2(5*(i-1)+1,1)-1),18); end end xlswrite('TFG.xlsx',C2,'Gantt','E7'); for i=1:1:4 if i==1 xlswrite('TFG.xlsx',D(1,1:2),'Gantt','B7'); end
98 if i==2 xlswrite('TFG.xlsx',D(2,1:2),'Gantt','B12'); end if i==3 xlswrite('TFG.xlsx',D(3,1:2),'Gantt','B17'); end if i==4 xlswrite('TFG.xlsx',D(4,1:2),'Gantt','B22'); end end 7.3 Anexo 3. Archivo Excel de salida. Para la visualización de los resultados, hay un Excel (el mismo que para la recogida de datos) en el que se pueden ver los resultados del problema introducido por el usuario. La primera hoja, llamada Resultados, se puede apreciar una serie de tablas que refleja la solución de la planificación de la producción para cada ítem.
99 En la siguiente hoja, “Graficas”, se recogerán en una serie de tablas la distribución de cargas medias de cada sección y la proporción que cada ítem genera en estas. En la hoja hay un total de diez secciones distintas. No obstante, no es necesario utilizar todas las secciones, rellenándose a cero aquellas que no se utilicen. Justo a la derecha de cada de cada tabla se puede apreciar unos gráficos que reflejan lo recogido en las tablas. En la siguiente página muestra la tabla y la gráfica que recogen esta distribución de cargas. ITEM 6 N SEMANA 0 1 2 3 4 5 6 7 8 NECESIDADES BRUTAS 0 0 40 400 50 0100 0 0 RECEPCIONES PREVISTAS 0 0 0 0 0 0 0 0 0 INVENTARIO 1000 1000 960 560 510 510 410 410 410 NECESIDADES NETAS 0 0 0 0 0 0 0 0 0 RECEPCION DE ORDEN 0 0 0 0 0 0 0 0 0 LANZAMIENTO DE ORDEN 0 0 0 0 0 0 0 0 0
100 SECTOR 2 1 2 3 4 5 6 7 8 2 0 0 0 206 0406 0 0 4 0 26,5 26,5 51,5 51,5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ITEM
101 En la última hoja del Excel, “Gantt” se puede encontrar se encuentra una secuenciación posible al problema que introdujo el usuario. En ella se aprecia, por secciones, el producto, el período y tiempo tanto de inicio y como de fin de ítem en cuestión. Sector Capacidad Item 3 1 3 1 3 3 1 0 0 0 Periodo inicio 1 1 4 4 4 6 7 0 0 0 Intante de inicio 020 024 81 0 100,4 0 0 0 Periodo de fin 1 1 4 4 5 6 8 0 0 0 Intante de fin 20 67 24 81 95 44 57,4 0 0 0 Item 4 2 4 2 0 0 0 0 0 0 Periodo inicio 1 1 5 6 0 0 0 0 0 0 Intante de inicio 053 158,333333 11,3333333 0 0 0 0 0 0 Periodo de fin 1 2 6 7 0 0 0 0 0 0 Intante de fin 53 9 11,3333333 167,333333 0 0 0 0 0 0 Item 0 0 0 0 0 0 0 0 0 0 Periodo inicio 0 0 0 0 0 0 0 0 0 0 Intante de inicio 0 0 0 0 0 0 0 0 0 0 Periodo de fin 0 0 0 0 0 0 0 0 0 0 Intante de fin 0 0 0 0 0 0 0 0 0 0 Item 0 0 0 0 0 0 0 0 0 0 Periodo inicio 0 0 0 0 0 0 0 0 0 0 Intante de inicio 0 0 0 0 0 0 0 0 0 0 Periodo de fin 0 0 0 0 0 0 0 0 0 0 Intante de fin 0 0 0 0 0 0 0 0 0 0 150 250 0 0 1 2 0 0