Sei sulla pagina 1di 247

PLANEACIÓN JERÁRQUICA DE LA

PRODUCCIÓN – CORTO PLAZO

HIERARCHICAL PRODUCTION
PLANNING – SCHEDULING

“ HPP – S ”
HERRAMIENTA INFORMÁTICA EN HOJA ELECTRÓNICA
PARA LA PLANEACIÓN A CORTO PLAZO DE LA PRODUCCIÓN
EN AMBIENTES DE PLANIFICACIÓN JERÁRQUICA,
PARA PYMES CON SISTEMA DE PRODUCCIÓN POR LOTES O SERIES CORTAS.
“ HPP – S ”

JESÚS EDUARDO SCARPETTA A.

ELIANA CÚELLAR BERNAL

UNIVERSIDAD DEL VALLE


FACULTAD DE INGENIERÍAS
ESCUELA DE INGENIERÍA INDUSTRIAL Y ESTADÍSTICA
SANTIAGO DE CALI
Agosto de 2002
HERRAMIENTA INFORMÁTICA EN HOJA ELECTRÓNICA
PARA LA PLANEACIÓN A CORTO PLAZO DE LA PRODUCCIÓN
EN AMBIENTES DE PLANIFICACIÓN JERÁRQUICA,
PARA PYMES CON SISTEMA DE PRODUCCIÓN POR LOTES O SERIES CORTAS.
“ HPP – S ”

JESÚS EDUARDO SCARPETTA A.

ELIANA CÚELLAR BERNAL

Proyecto de Grado para optar por el título de Ingeniero Industrial

Director

GERARDO MOTOA G. Ph. D.

UNIVERSIDAD DEL VALLE


FACULTAD DE INGENIERÍAS
ESCUELA DE INGENIERÍA INDUSTRIAL Y ESTADÍSTICA
SANTIAGO DE CALI
Agosto de 2002

iii
UNIVERSIDAD DEL VALLE

FACULTAD DE INGENIERÍAS

ESCUELA DE INGENIERÍA INDUSTRIAL Y ESTADÍSTICA

Programa academico INGENIERÍA INDUSTRIAL

Autores

JESÚS EDUARDO SCARPETTA A.

ELIANA CÚELLAR BERNAL

Titulo

HERRAMIENTA INFORMÁTICA EN HOJA ELECTRÓNICA PARA


LA PLANEACIÓN A CORTO PLAZO DE LA PRODUCCIÓN EN
AMBIENTES DE PLANIFICACIÓN JERÁRQUICA, PARA PYMES
CON SISTEMA DE PRODUCCIÓN POR LOTES O SERIES CORTAS.

Temas

Planeación jerárquica de la producción, Planeación a corto plazo, Programación enfocada a

la carga, Programación (n/1), Reglas de prioridad, Máquinas paralelas, Programación en

máquinas paralelas, Programación (n/2), Programación (n/m), Visual Basic, Procedimiento

de evento (event procedure), Excel, Access, Modelo entidad – relación.

iv
Nota de aceptación

Presidente del Jurado

Jurado

Jurado

Ciudad y fecha (día, mes, año)

v
Agradezco a:

Jesús María Scarpetta y María Oliva Arias

mis padres.

Jorge Enrique Scarpetta y Clara Inés

Scarpetta mis hermanos.

Y a María del Mar Duque Bastidas la mujer

que Amo.

A todos ellos por su apoyo, motivación y

herramientas brindadas.

Jesús Eduardo Scarpetta.

A Dios por ser él todo para mí vida

A la memoria de mí padre, Elías Cúellar

López, que aún está a mi lado.

A mi madre, Araminta Bernal Forero, por su

amor maternal.

A mis hermanos: Giovanny,Katherine,

Vladimir y Jennifer, por su apoyo continuo.

Y a Jhon Cuadros por ser el amor de mi

vida, que me ha motivado a seguir adelante.

Eliana Cúellar Bernal.

vi
AGRADECIMIENTOS.

Los autores expresan sus agradecimientos a:

• Ingeniero Gerardo Motoa G. Ph. D. Director del presente proyecto, por su comprensiva

y valiosa colaboración en el desarrollo del mismo y durante el transcurso de la

formación académica.

• María del Mar Duque en la revisión del documento y la aplicación informática

diseñada, por sus sugerencias, aportes y comentarios.

• A todas aquellas personas que de una u otra manera nos colaboraron en la formación

universitaria, para hacernos profesionales y personas íntegras.

vii
TABLA DE CONTENIDO

Pág.

INTRODUCCIÓN ................................................................................................................ 1
1. PRELIMINARES ........................................................................................................... 3
1.1 OBJETIVOS........................................................................................................... 3
1.2 HIPÓTESIS DEL TRABAJO ................................................................................ 4
1.3 JUSTIFICACIÓN................................................................................................... 5
2. MARCO DEL PROYECTO .......................................................................................... 8
2.1 MARCO DE REFERENCIA.................................................................................. 8
2.2 MARCO CONCEPTUAL. ................................................................................... 11
2.2.1 Planeación jerárquica de la producción............................................................ 13
2.2.2 Planeación a corto plazo................................................................................... 18
2.2.3 Programación enfocada a la carga.................................................................... 26
2.2.4 Modelos de programación. ............................................................................... 32
2.3 PLANTEAMIENTO DEL PROBLEMA............................................................. 47
3. LÓGICA DE DISEÑO ................................................................................................. 49
3.1 PLATAFORMA DE DESARROLLO. ................................................................ 49
3.1.1 Visual Basic...................................................................................................... 51
3.1.2 Hojas de cálculo. .............................................................................................. 55
3.1.3 Bases de datos................................................................................................... 57
3.2 ESTRUCTURA DE LA APLICACIÓN .............................................................. 67
3.2.1 Modelos de datos.............................................................................................. 67
3.2.2 Tablas. .............................................................................................................. 76
3.2.3 Modelo entidad – relación en la aplicación...................................................... 82
3.3 ELEMENTOS OPERACIONALES..................................................................... 88
3.3.1 Aproximación al Job-Shop ............................................................................... 88
3.3.2 Sistema operacional.......................................................................................... 90

viii
4. LÓGICA DE LA APLICACIÓN ................................................................................ 95
4.1 CONCEPTOS TEÓRICOS DE LA APLICACIÓN ............................................ 95
4.2 APLICACIÓN ‘HPP-S’ ..................................................................................... 111
4.2.1 Preparación pedido. ........................................................................................ 113
4.2.2 Scheduling. ..................................................................................................... 128
4.2.3 Control............................................................................................................ 143
4.3 INFORMACIÓN ADICIONAL PARA EL USUARIO. ................................... 149
CONCLUSIONES ............................................................................................................ 152
ANEXOS ........................................................................................................................... 156
ANEXO A. MANUAL DEL USUARIO ..................................................................... 156
Instrucciones de manejo rápido ................................................................................... 156
Datos ejemplo general.................................................................................................. 157
Ingreso de datos ejemplos particulares ........................................................................ 159
ANEXO B. CODIGOS................................................................................................. 163
Formularios en Access................................................................................................. 163
Modulo exportar a Excel.............................................................................................. 200
Modulo funciones de utilidad ...................................................................................... 207
Archivos Excel............................................................................................................. 208

ix
TABLA DE FIGURAS

Pág.

Figura 2-1. Sistema de Fabricación................................................................................. 12


Figura 2-2. Sistema de Planeación Jerárquico................................................................. 15
Figura 2-3. Configuración continua. ............................................................................... 20
Figura 2-4. Configuración por lotes enfocada al producto – flow shop.......................... 22
Figura 2-5. Configuración por lotes enfocada al proceso – Job Shop............................. 23
Figura 2-6. Configuración productiva de bienes. ............................................................ 23
Figura 2-7. Sistema de planeación y programación de operaciones en el corto plazo.... 24
Figura 2-8. Carga vertical................................................................................................ 29
Figura 2-9. Carga horizontal ........................................................................................... 30
Figura 2-10. Caso n/1 ........................................................................................................ 32
Figura 2-11. Caso n/1 continuo. ........................................................................................ 38
Figura 2-12. Máquinas paralelas ....................................................................................... 39
Figura 2-13. Máquinas paralelas – continuo ..................................................................... 40
Figura 2-14. Caso n/2 ........................................................................................................ 43
Figura 2-15. Caso n/m ....................................................................................................... 44
Figura 3-1. Propiedades del objeto Botón de comando................................................... 54
Figura 3-2. Tablas relacionadas ...................................................................................... 59
Figura 3-3. Partes tabla.................................................................................................... 60
Figura 3-4. Botones de desplazamiento entre registros................................................... 63
Figura 3-5. Detalle subformularios ................................................................................. 65
Figura 3-6. Nivel 0. Planeación de la producción. .......................................................... 70
Figura 3-7. Nivel 1. Sistema de Planeación Jerárquico................................................... 71
Figura 3-8. Nivel 2. Planeación a corto plazo. ................................................................ 72
Figura 3-9. Nivel 3. Planeación a Corto Plazo - Preparación Pedido. ............................ 73
Figura 3-10. Nivel 3. Planeación a Corto Plazo - Scheduling........................................... 74

x
Figura 3-11. Nivel 3. Planeación a Corto Plazo - Control. ............................................... 75
Figura 3-12. Relaciones producto ..................................................................................... 83
Figura 3-13. Relaciones pedidos ....................................................................................... 83
Figura 3-14. Relaciones control ........................................................................................ 84
Figura 3-15. Datos ruta P1 ................................................................................................ 85
Figura 3-16. Relaciones tiempo de suministro.................................................................. 85
Figura 3-17. Datos centros de trabajo ............................................................................... 86
Figura 3-18. Cálculo tiempo de suministro....................................................................... 86
Figura 3-19. Carga por operación y duración.................................................................... 88
Figura 3-20. Barra de Menú de la Aplicación ................................................................... 91
Figura 3-21. Barra de Herramientas de la Aplicación....................................................... 91
Figura 3-22. Barra de Menú- Archivo y Edición. ............................................................. 92
Figura 3-23. Barra de Menú- Registros, Información y General. ..................................... 92
Figura 3-24. Barra de Menú- Preparación Pedido............................................................. 93
Figura 3-25. Barra de Menú- Scheduling.......................................................................... 93
Figura 3-26. Barra de Menú- Ventana y ?......................................................................... 94
Figura 4-1. Formularios en la aplicación. ....................................................................... 96
Figura 4-2. Diagrama de ensamblado para el producto ‘Silla’........................................ 97
Figura 4-3. Árbol Estructura del producto ‘Silla’. .......................................................... 99
Figura 4-4. Incidencia de los factores en la obtención de una unidad........................... 104
Figura 4-5. Árbol de Rutas para del producto ‘Silla’. ................................................... 106
Figura 4-6. Detalle relaciones entre paneles de control. ............................................... 112
Figura 4-7. Panel principal ............................................................................................ 113
Figura 4-8. Panel preparación pedido............................................................................ 113
Figura 4-9. Formulario clientes..................................................................................... 114
Figura 4-10. Panel datos producto................................................................................... 115
Figura 4-11. Formulario productos ................................................................................. 115
Figura 4-12. Formulario partes/componentes ................................................................. 116
Figura 4-13. Formulario estructura producto. ................................................................. 117
Figura 4-14. Panel datos ruta........................................................................................... 118

xi
Figura 4-15. Formulario centros de trabajo..................................................................... 118
Figura 4-16. Formulario detalle centros de trabajo. ........................................................ 119
Figura 4-17. Formulario máquinas paralelas CT............................................................. 120
Figura 4-18. Formulario hoja de ruta. ............................................................................. 121
Figura 4-19. Formulario rutas producto. ......................................................................... 122
Figura 4-20. Formulario pedidos..................................................................................... 123
Figura 4-21. Formulario cantidad requerida. .................................................................. 124
Figura 4-22. Formulario tiempo de entrega..................................................................... 125
Figura 4-23. Habilitar macros. ........................................................................................ 126
Figura 4-24. Programación detallada en Excel. .............................................................. 127
Figura 4-25. Programación detallada – detalle inicio y fin operaciones. ........................ 127
Figura 4-26. Panel scheduling......................................................................................... 128
Figura 4-27. Panel Asignación. ....................................................................................... 129
Figura 4-28. Formulario carga pedidos. .......................................................................... 130
Figura 4-29. Formulario carga operaciones. ................................................................... 131
Figura 4-30. Formulario control pedidos. ....................................................................... 132
Figura 4-31. Formulario cargas operaciones iniciadas.................................................... 134
Figura 4-32. Panel secuenciación.................................................................................... 135
Figura 4-33. Formulario reglas de prioridad. .................................................................. 135
Figura 4-34. Reglas de prioridad en Excel. ..................................................................... 136
Figura 4-35. Formulario pedidos pendientes a la fecha. ................................................. 138
Figura 4-36. Formulario método húngaro. ...................................................................... 139
Figura 4-37. Método húngaro en Excel – hoja de cálculo asignar. ................................. 140
Figura 4-38. Método húngaro en Excel – hoja de cálculo Hoja1.................................... 141
Figura 4-39. Formulario regla de Johnson. ..................................................................... 141
Figura 4-40. Johnson en Excel ........................................................................................ 142
Figura 4-41. Panel control. .............................................................................................. 143
Figura 4-42. Formulario producción planeada................................................................ 144
Figura 4-43. Carga finita en Excel – hoja de cálculo ‘cg_finita’. ................................... 145
Figura 4-44. Carga finita en Excel – hoja de cálculo ‘Hoja2’......................................... 146

xii
Figura 4-45. Formulario producción real. ....................................................................... 146
Figura 4-46. Formulario control input-output. ................................................................ 147
Figura 4-47. Control in-out en Excel. ............................................................................. 148
Figura 4-48. Formulario acerca de. ................................................................................. 149
Figura A-1. Dirección para descomprimir Aplicación HPP-S.exe ................................ 158
Figura A-2. Instalación terminada.................................................................................. 158
Figura A-3. Árbol de Estructura del producto ‘P1’........................................................ 160
Figura A-4. Operaciones ruta ‘P1’. ................................................................................ 161
Figura A-5. Árbol de rutas del producto ‘P1’. ............................................................... 162

xiii
LISTADO DE CÓDIGOS

Pág.

Formularios en Access. .................................................................................................... 163


Formulario acerca de ...................................................................................................... 163
Formulario asignación .................................................................................................... 163
Formulario cargas_operaciones_iniciadas...................................................................... 164
Formulario centro de trabajo .......................................................................................... 165
Formulario clientes ......................................................................................................... 167
Formulario componentes producto................................................................................. 167
Formulario componentes subformulario ........................................................................ 167
Formulario componentes1 subformulario ...................................................................... 169
Formulario componentes2 subformulario ...................................................................... 171
Formulario control input output ..................................................................................... 172
Formulario control operaciones...................................................................................... 173
Formulario control pedidos ............................................................................................ 174
Formulario control producción....................................................................................... 175
Formulario control detalle pedidos iniciados ................................................................. 176
Formulario control operaciones...................................................................................... 177
Formulario control operaciones iniciadas....................................................................... 177
Formulario control pedidos iniciados ............................................................................. 177
Formulario control ruta................................................................................................... 178
Formulario ct .................................................................................................................. 179
Formulario entrega ......................................................................................................... 179
Formulario in out planificado ......................................................................................... 179
Formulario inicio ............................................................................................................ 180
Formulario johnson......................................................................................................... 181
Formulario lista materiales ............................................................................................. 181

xiv
Formulario lista rutas...................................................................................................... 182
Formulario máquinas...................................................................................................... 183
Formulario máquinas ct .................................................................................................. 184
Formulario operaciones ruta........................................................................................... 184
Formulario pedidos......................................................................................................... 186
Formulario pedidos pendientes....................................................................................... 187
Formulario pendientes a la fecha.................................................................................... 187
Formulario producción planeada .................................................................................... 188
Formulario producción real ............................................................................................ 189
Formulario rcomponentes subformulario ....................................................................... 189
Formulario rcomponentes1 subformulario ..................................................................... 191
Formulario rcomponentes2 subformulario ..................................................................... 192
Formulario regla de Johnson .......................................................................................... 193
Formulario reglas prioridad ............................................................................................ 194
Formulario rproductos .................................................................................................... 194
Formulario rutas iniciadas .............................................................................................. 196
Subformulario control detalle pedido ............................................................................. 196
Subformulario control pedidos ....................................................................................... 197
Formulario switchboard.................................................................................................. 197
Formulario tipo ............................................................................................................... 200
Formulario unidades ....................................................................................................... 200
Modulo exportar a Excel.................................................................................................. 200
Function Exportar_Prioridades() .................................................................................... 200
Function Exportar_In_Out() ........................................................................................... 202
Function Exportar_Johnson() ......................................................................................... 203
Function Exportar_Asignación() .................................................................................... 204
Function Exportar_Programa_Detallado() ..................................................................... 205
Function Exportar_FINITA() ......................................................................................... 206
Modulo funciones de utilidad .......................................................................................... 207
Function estácargado(ByVal txtNombreFormulario As String) As Boolean................. 207

xv
Function Verventanabasededatos()................................................................................. 207
Function salir() ............................................................................................................... 207
Function cerrar() ............................................................................................................. 208
Archivos Excel .................................................................................................................. 208
Prioridades.Xls ............................................................................................................... 208
Asignación.Xls ............................................................................................................... 208
Johnson.Xls..................................................................................................................... 216
Detallada.Xls .................................................................................................................. 222
Carga_Finita.Xls............................................................................................................. 224
In-out.Xls........................................................................................................................ 227

xvi
INTRODUCCIÓN

El presente proyecto está direccionado a diversificar herramientas para aumentar la

productividad en empresas, específicamente en PYMES, las cuales van abarcando más y

más los campos económicos de productividad en nuestra región, permitiendo el

movimiento de la economía nacional.

Es preciso que los nuevos avances tecnológicos en el campo de la sistematización no se

restrinjan a grandes empresas, como hasta el momento viene ocurriendo, ya que por los

altos costos del software especializado, las pequeñas empresas no cuentan con herramientas

más prácticas para controlar de manera mas acertada su productividad.

Nuestro propósito se enfoca en crear una herramienta funcional y económica que permita

una mejor programación del sistema propio de una PYME en cuanto a controles de

productividad se refiere, esto es, teniendo en cuenta que la productividad es un factor que

depende mucho de: los tiempos de planeación, de toma de decisiones, de aprovechamiento

de mano de obra y maquinaria, fecha de entrega de pedidos, cumplimiento de contratos,

etc., y es en este sentido en el cual contar con herramientas de sistematización como la que

hemos diseñado, se orienta a mejorar el aprovechamiento del tiempo, y a realizar una

1
programación más precisa ejerciendo el control adecuado para una adecuada utilización de

los recursos.

Fundamentamos la realización de este proyecto en el desarrollo de una aplicación dirigida a

manejar de forma integral la planeación de la producción en el corto plazo en PYMES del

sector de manufactura con el propósito de facilitar la toma de decisiones en tiempo real

bajo el sistema de planeación jerárquica.

Hemos estructurado el proyecto en capítulos que permiten dar mayor claridad a cada una

de las partes que forma la aplicación “HPP-S” desarrollada. En ellos abarcamos los

preliminares del proyecto, sus objetivos, justificación y enmarcamos los temas propios de la

planeación a corto plazo, mencionando los elementos informaticos usados en la lógica de

la aplicación; describimos la razón teórico-práctica de la herramienta creada y de forma

detallada el funcionamiento, su estructura, finalidad y manejo.

2
1. PRELIMINARES

1 CAPÍTULO 1. ANTEPROYECTO.
1.1 OBJETIVOS

General.

Diseñar una herramienta informática en hoja electrónica que permita realizar la planeación

a corto plazo en PYMES con fabricación por lotes o series cortas, en sistemas de

planificación jerárquicos.

Específicos.

• Proporcionar un programa informático con el cual se puedan hacer pruebas de

sensibilidad sobre la actividad de producción, para determinar su incidencia en la

programación normal.

• Diseñar una herramienta sencilla, fácil de entender, flexible y dinámica para la

realización de la programación permitiendo la optimización de los recursos utilizados

con miras a cumplir las necesidades de producción.

• Realizar un programa robusto que permita evaluar para determinadas condiciones de

trabajo diferentes opciones en su programación, ofreciendo así información rápida para

la toma de decisiones.

• Reunir información precisa y controlada sobre aspectos que comprometen la

fabricación por lotes o series cortas y usar ésta información bajo criterios de

3
rendimiento y aprovechamiento de los recursos limitados en empresas de manufactura

para hacer más efectiva la terminación de los pedidos en las fechas ofrecidas al cliente.

• Crear un programa que permita el control de la información generada en la ejecución de

las operaciones para conocer el estado de los centros de trabajo, su eficiencia y

utilización.

• Diseñar un sistema o interfaz de control de las órdenes de producción que permita tener

actualizado por operación, y periodo de tiempo, la realización de las diferentes órdenes

de producción.

1.2 HIPÓTESIS DEL TRABAJO

Las PYMES manufactureras requieren de una herramienta informática de planeación a bajo

costo y flexible que integre su sistema productivo permitiéndoles ser más competitivas. El

poco seguimiento que se hace a las órdenes durante el proceso de manufactura limita a las

PYMES para dar una rápida reacción a los cambios eventuales en las demandas, por la

escasa información que se tiene al momento de la toma de decisiones.

Sistematizar la planeación de la producción ofrece a las PYMES entrar a competir con

tiempos de entrega seguros, satisfacción alta de las necesidades de los clientes,

conocimiento interno de las capacidades y nivel de flexibilidad de sus instalaciones.

4
1.3 JUSTIFICACIÓN

La importancia que ha tenido para el mundo empresarial el conocimiento adecuado en el

tratamiento de la función de las operaciones, ha permitido que diversos autores enfoquen

sus investigaciones hacia esta disciplina, brindando métodos e instrumentos para la

planeación de la producción bajo una serie de condiciones básicas con el objetivo de

optimizar el uso de recursos en la satisfacción de las necesidades de los clientes.

En la actualidad existen gran variedad de modelos y programas para dar mejores soluciones

al problema de la toma de decisiones en la planeación de la producción; por tanto

pretendemos adecuar estos modelos y programas existentes a una aplicación informática

que funcione de manera fácil, dinámica y precisa sobre hojas de calculo apoyadas en una

base de datos, para ser implementada en una pequeña o mediana empresa a fin de aumentar

su rendimiento partiendo del principio de que entre mayor información se maneje de los

procesos a realizar es mayor la oportunidad de optimizarlos.

Dentro del sistema manufacturero nos centramos particularmente en las PYMES. Para el

año 2000 es considerada pequeña y mediana empresa la unidad económica cuyo nivel de

activos fiscales a diciembre de 1999 estuviera entre $135 millones y $3335 millones y que

ocupen entre 11 y 199 empleados según la ley 78 de 1998,1 por ser éstas las que

1
¿Qué es una Pyme?. http://www.ifi.gov.co/htm/crpymeque.htm

5
contribuyen a dinamizar la economía (generación del empleo 15%)2, además representan el

15.75% del total de empresas registradas en la Cámara de Comercio de Cali en 1998.

Dentro de éstas seleccionamos las de sistema productivo por lotes o series cortas que

representan los mejores beneficios potenciales al aplicar modelos de producción integrada

que por su volumen y variedad mediana requieren de gran flexibilidad.

Como las hojas electrónicas han aumentado su popularidad por su sencilla implementación3

la herramienta informática se realizará con una base de datos vinculada a hojas electrónicas

por la gran facilidad de aplicación práctica y adaptabilidad a los escenarios del mercado,

generando información de apoyo en la toma de decisiones y mejor utilización de los

recursos productivos.

Los costos de implementación en hoja electrónica son bajos comparados con las

inversiones en software para la planificación de la producción, tales como: el programa

computacional (MAX) que tiene un costo promedio de US$ 9.500 para un fabricante

pequeño o mediano con todos los módulos de manufactura y contabilidad, pero los

requisitos específicos pueden modificar los costos desde US$ 550 hasta US$ 33.200 para

2
Registro mercantil. Cámara de comerció de Cali, Separata (Jun. 1999)
3
SIPPER, Daniel y BUFFIN, L. Robert. Planeación y control de la producción. Mexico : Mc Graw Hill,
1998. p. 91, 189, 215.

6
un paquete multiusuario4, o el sistema de SAP R/3, que es una solución ERP (Planeador de

Recursos Empresariales) cuya inversión puede representar entre 2 y 10 millones de

dólares.5

Acorde con los objetivos de la producción se busca dar una herramienta al programador de

la producción para la solución de situaciones no determinísticas que alteran la realización o

modifican la secuenciación de las órdenes de producción en la planta. Con esto, el

programador podrá analizar varias alternativas de programación en poco tiempo para ver su

impacto sobre la forma de producción y el logro de las fechas previamente determinadas y

comprometidas con los clientes, permitiéndole a la empresa ser más competitiva.

4
CHASE, Richard B. y AQUILANO, Nicolas J. Dirección y administración de la producción y de las
operaciones. 6 ed. Mexico : Mc Graw Hill, 1995, p. 725
5
La revolución de los ERP. En : Dinero. No. 90 (Ago 13 1999), p. 90

7
2. MARCO DEL PROYECTO

2 CAPÍTULO 2. MARCO DEL PROYECTO.


2.1 MARCO DE REFERENCIA.

En el mercado podemos encontrar varios programas para la planeación a corto plazo en las

empresas, los cuales ofrecen cada uno una estructura y forma de trabajo diferente. Software

como: ERP/MRP Systems6, Obvious Professional Services7, pc/MRP8, Solid State

Software, Inc. Software for Manufacturing (ERP/MRP) Planning and Control9 y Merlin

MRP Software10, entre otros. Programas en su mayoría en otro idioma cuya complejidad

podría limitar al programador para obtener una máxima utilización.

Sin duda, uno de los aspectos más trascendentales para la mayoría de las empresas

manufactureras, por su repercusión en los costos de producción y los plazos de fabricación,

es la gestión de materiales y en especial la programación y control de las actividades de

6
ERP/MRP Systems. http://cmit.edi.gatech.edu/cmit/ERPMRP.htm
7
Obvious MRP for Windows. http://www.obviousmrp.com/
8
Pc/MRP the complete Windows MRP Accounting and Inventory Control Software Package with ISO9000
report. http://www.midwesterngallery.com/pcmrp/index.htm
9
Solid State Software : Software for MRP/ERP, Accounting and Distribution. http://www.sssoft.com/
10
Merlin MRP Manufacturing Software. http://www.merlinsys.co.uk/

8
producción, pues están en juego el nivel de confianza que tengan los clientes con respecto a

las fechas ofrecidas, la capacidad de producción y la calidad de los productos elaborados.

Existen paquetes para programación de la producción en abundancia. Esos paquetes van

desde software para computadora de dominio público hasta aplicaciones hechas a la medida

que cuestan millones de dólares. Debe tenerse cuidado al comprar un paquete, ya que las

utilidades varían mucho.

Algunos paquetes de software proporcionan al usuario la posibilidad de cambiar o ajustar

los programas. Los más elaborados permiten “tomar e insertar” operaciones en la misma

gráfica de Gantt; éstos requieren interfaces de usuario (gráficas) complejas. Los paquetes

menos costosos permiten hacer cambios en los tiempos de inicio y terminación de los

trabajos. De la mano con la evaluación del programa, los ajustes permiten al usuario hacer

un análisis sencillo de “que pasa sí”.

Los paquetes más avanzados generan los programas de producción, pero muchos de ellos

no son muy buenos. El paquete puede generar un solo programa, varios programas o el

mejor de un “subconjunto” de programas. Las reglas de despacho simples, como “FIFO”

pueden producir un programa. Al usar varias reglas de despacho se pueden generar varios

programas; después el usuario elige uno o el paquete solo le muestra el “mejor”. Se pueden

usar heurísticos más avanzados para generar un programa. Como la programación es difícil,

el enfoque debe hacerse a la medida del problema que se tiene; un enfoque complejo

equivocado puede ser peor que las reglas de despacho sencillas.

9
Para sistemas de producción complicados (como una planta grande de producción

intermitente), puede ser necesaria una simulación del programa. Al someter a prueba el

programa con simulación se pueden examinar muchos factores no considerados en las

decisiones de programación. Los paquetes que simulan la planta son costosos, por lo

general, superan los 30.000 dólares.11

También existen paquetes “educativos” de programación. Morton y Pentico (1993) ofrecen

el software, Parsifal con su libro; Parsifal resuelve la mayor parte de los modelos de

programación; puede usar varios heurísticos para modelos de una sola máquina, máquinas

paralelas, producción continua y producción intermitente. Dispone de varios algoritmos

generales, incluyendo simulación de recosido. Su desempeño es bastante bueno para

muchos problemas pequeños, y es posible que pueda incorporarse a un sistema de

programación. QS: Quantitative Systems (Chang - 1995) es un software general que realiza

programación de producción continua e intermitente. Se pueden usar muchos de los

heurísticos para producción continua y la mayoría de las reglas de despacho se encuentran

disponibles.

11
SIPPER y BUFFIN, Op cit., p. 467-469

10
2.2 MARCO CONCEPTUAL.

Los modelos referentes a la planeación de la producción que se desarrollarán dentro de este

proyecto de estudio se aplicarán en hoja electrónica tomando la información desde una base

de datos, dado que permiten cambiar muchas variables y crear diferentes combinaciones

para determinar los efectos de situaciones particulares.

Con anterioridad se ha venido aplicando la simulación de la planeación en hoja electrónica.

Los precursores del enfoque de hoja de cálculo son los métodos tabulares y gráficos que

aparecieron en la literatura alrededor de 1960. Estos han sido utilizados en la industria

durante varios años y cada vez más toman mayor importancia gracias al desarrollo de los

computadores personales y a la adaptabilidad de la hoja electrónica al medio dinámico.12

En la planeación de la producción se deben crear alternativas que resuelvan el problema de

nivelar la producción con las demandas fluctuantes. Las alternativas se pueden desarrollar

en hoja electrónica de manera sencilla y con fácil implementación13, de tal modo que se

puede o no obtener la solución óptima, pero si se puede proporcionar soluciones flexibles

para ser usadas14.

12
HEIZER, Jay y RENDER Arry. Dirección de la producción. Madrid : Mc Graw Hill, 1997. p. 144-145
13
NOORI, Hamid y RADFORD Rusell. Administración de operaciones y producción. Santafé de Bogotá :
Mc Graw Hill, 1997. p. 43, 267, 457
14
SIPPER, y BUFFIN. Op cit p. 180-181

11
El proyecto parte de conceptualizar los sistemas de fabricación y entre ellos, en especial,

los de producción por lotes y series cortas. Esto significa revisar conceptos tales como

gerencia de operaciones, sistemas de organización de la producción, etc. Además de

estudiar herramientas para el análisis y diseño de sistemas en ambientes de fabricación, las

cuales se usan para implementar una aplicación informática para la planeación de la

producción en ambientes MRP.

La manufactura de productos en el mundo industrial moderno requiere de un esfuerzo

coordinado y combinado de gente, máquinas y equipos. Así, un sistema de fabricación

puede ser definido como una combinación de mano de obra, maquinaria y equipos,

comprometidos en un flujo común de materiales e información.

Figura 2-1. Sistema de Fabricación.

Las entradas son la materia prima y la energía. La información es también una entrada al

sistema y lo hace en forma de demanda de los clientes por los productos de dicho sistema.

Las salidas podrían dividirse en materiales como bienes terminados, desperdicios, e

información, es decir medidas de rendimiento del sistema. (Ver Figura 2-1)

12
En general, el estudio de los sistemas de fabricación puede ser conceptualizado como la

transformación de los requerimientos de rendimiento (performance) de un sistema de

fabricación, expresados por valores de ciertas medidas de desempeño, en valores

apropiados de variables de decisión, que describan el diseño físico o la manera de operar

del sistema.15

Aunque hay conceptos de uso generalizado en el ambiente de la planeación de la

producción para las empresas de manufactura, no ocurre lo mismo con los nombres a los

cuales se asocian esos conceptos, presentándose así falta de homogeneidad en los términos

usados por los diferentes autores al momento de desarrollar cada uno sus temas. Para hacer

claridad en los conceptos y términos que serán manejados en la realización de este proyecto

se presentan a continuación los términos haciendo referencia al concepto que se le asocia,

así como a los otros nombres más conocidos con los cuales es manejado.

2.2.1 Planeación jerárquica de la producción

Como la planeación de la producción en las empresas manufactureras, se ha enmarcado

dentro de una estructura de largo, mediano y corto plazo. Harlan Meal utiliza el termino

planeación jerárquica de la producción (Hierarchical Production Planning - HPP) para

ajustar la estructura de planeación a la organización.16 Este sistema jerárquico de la

15
MOTOA, T. Gerardo. Algunos apuntes sobre el uso de la simulación en el diseño de sistemas de
fabricación. Madrid junio 1994. Disam. Universidad Politécnica de Madrid.
16
HARLAN, C Meal, ”Putting production decisions where they belong” Harward Business Review 62, N 2
marzo-abril 1984, pp-102-11.

13
producción es uno de los enfoques para el análisis que se basa en los conceptos de desglose

que puede adaptarse a muchas empresas con lo que se convierte en una herramienta útil

para los directivos en sus labores. El enfoque incorpora una filosofía de ajuste de los

agregados del producto a los niveles de toma de decisiones de la organización.17

Principios de este sistema de planeación jerárquico son: el desglose que debe seguir las

líneas de la organización, otro es, proporcionar la información al nivel apropiado de

agregación para la decisión. También, es necesario programar sólo el tiempo de preparación

que se requiere para las decisiones a tomar; esto significa que pueden hacerse los planes

detallados para periodos tan cortos como el tiempo de preparación en la fabricación.

En general, existen cuatro elementos que pueden dar origen a construir la jerarquía: tiempo,

estado, información y criterios de evaluación.18 Las jerarquías no se construyen respecto a

uno solo de tales elementos. En muchos casos, tiempo y estado (de agregación-

descomposición de las actividades y sus atributos) se consideran simultáneamente usando

por ejemplo, en el nivel superior escalas de tiempo gruesas y estados más agregados que en

el nivel inferior. Adicionalmente, se toman diferentes criterios de evaluación (dentro del

problema de toma de decisiones), optimizando el más importante en el más alto. Con

17 VOLLMANN, Thomas E. Sistemas de planificación y control de la fabricación. 3 ed. España : Irwin,


1994. p. 643.
18
MOTOA, T. Gerardo. Sistemas de Planificación Jerárquicos: Aplicaciones a la gestión de producción y
de proyectos. Cali. Escuela de ingeniería industrial y estadística. Universidad del Valle. p. 12

14
relación a la información, cada nivel posee situaciones y tipos diferentes de información en

función de sus propios requerimientos.

Las decisiones de los diferentes niveles en el proceso de planificación se toman en

diferentes momentos en el tiempo. Cada nivel de la jerarquía tiene asociado un horizonte de

tiempo y no hay esquema universalmente aceptado en cuanto a su definición. El número de

horizontes puede cambiar dependiendo de la perspectiva o interés de quien los propone y

del sistema de producción que se quiera atender.

Figura 2-2. Sistema de Planeación Jerárquico

El proceso después de la adquisición de instalaciones y equipo aplica las previsiones de la

demanda al sistema (Ver Figura 2-2). Los pronósticos a largo plazo ayudan a los directores

a tratar con los problemas de capacidad y estrategia que son responsabilidad de la alta

gerencia. La dirección se plantea preguntas relacionadas con la política a seguir, como la

15
situación y expansión de las instalaciones, el desarrollo de nuevos productos, la

financiación de la investigación y las inversiones de capital durante un periodo de varios

años.

Una vez tomadas las decisiones de capacidad a largo plazo, los directores de operaciones

pasan a efectuar la planificación a medio plazo para alcanzar los objetivos de la empresa.

Las decisiones de programación táctica suponen crear planes mensuales o trimestrales, que

resuelvan el problema de emparejar la productividad con las demandas fluctuantes. Todos

estos planes necesitan ser consistentes con la estrategia a largo plazo de la alta dirección y

trabajar con los recursos asignados por decisiones estratégicas anteriores. El corazón de la

planificación a mediano plazo es el plan de producción agregada.

En esta fase de la planificación agregada, se toman decisiones con respecto a la utilización

de las instalaciones, inventario, la gente y los contratistas externos. Después el programa

maestro descompone el plan agregado y desarrolla un programa completo de los productos.

La planificación a corto plazo se extiende hasta un año, pero normalmente es menor de tres

meses. Los directores de operaciones hacen estos planes en unión con los jefes de planta

quienes desagregan el plan a mediano plazo en programas semanales, diarios y por horas.

Los métodos para efectuar la planeación a corto plazo traducen las decisiones de capacidad,

la planificación intermedia y los programas maestros en: asignación, secuenciación,

programación detallada y control

16
Este enfoque jerárquico permite la coordinación entre los objetivos, planes y actividades de

los distintos niveles largo (estratégico), mediano (táctico) y corto plazo (operativo),

cumpliendo cada uno sus propias metas, pero teniendo siempre en cuenta las del nivel

superior, de las cuales dependen, y las del nivel inferior, a las que restringe. Sin dicho

enfoque seria difícil, cuando no imposible, llegar a la integración de las funciones.19

En cualquier caso, lo que se pretende es subdividir el problema en niveles de jerarquía de

acuerdo con los diferentes grados de agregación, con la intención de hacer más tratable el

problema. Resultado de las características de la planeación jerarquizada es la relativa

independencia de decisiones. Decisiones de alto nivel pueden usualmente ser hechas sin

tomar en cuenta futuras decisiones de bajo nivel. Las decisiones agregadas de nivel

superior, por ejemplo, con relación a la carga en mano de obra no dependen de las

decisiones detalladas relacionadas con el tamaño de los lotes. En sentido contrario,

decisiones con relación al tamaño del lote se pueden tomar cuando la información sobre

requerimientos de materiales esté disponible y estarán restringidas por los límites de horas

fijadas en la decisión anterior.

Una de las claves de efectividad de estos procesos es la simplicidad de la toma de

decisiones en cada nivel, y la siempre necesaria existencia de un sistema de apoyo para la

toma de decisiones (Decision Support Systems - DSS).20

19
MACHUCA DOMÍNGUEZ, José Antonio et al. Dirección de operaciones : Aspectos tácticos y operativos
en la producción y los servicios. España : Mc Graw Hill, 1995. 8 p.
20
MOTOA, Sistemas de Planificación Jerárquicos , Op cit., p. 8.

17
2.2.2 Planeación a corto plazo

Una vez obtenido el plan de requerimientos de materiales (MRP) que establece las

cantidades o lotes de cada subcomponente, componente y producto final; en cada momento

del horizonte de tiempo. Se realiza la ejecución en las instalaciones productivas, tarea de la

planeación a corto plazo.

El Scheduling o planeación a corto plazo específica la carga de trabajo de acuerdo a las

órdenes emitidas en el mediano plazo, controlando las operaciones y ajustando la capacidad

del sistema para asegurar que se cumplan los requerimientos del programa maestro de

producción.21 Este plan determina el tiempo en que se hace un producto en particular en

una máquina específica; los momentos de comienzo y fin de las actividades de cada

centro de trabajo, así como las operaciones de cada orden para la secuencia realizada. Las

unidades manejadas en este nivel pueden ser productos específicos y la capacidad estará

restringida por las horas disponibles en una máquina dada.

Los planes de requerimientos de materiales –MRP- además establecen los requerimientos

de capacidad asociados. Es evidente que van a existir divergencias entre lo planificado y los

resultados de la ejecución; haciéndose necesario en el corto plazo controlar los múltiples

aspectos de la actividad diaria: unidades realmente obtenidas tras las operaciones, cantidad

de defectuosos, la eficiencia y utilización de los Centros de Trabajo - CT (básicos para

21
CHASE, y AQUILANO, Op cit., p. 757.

18
medir la capacidad de cada uno de ellos en horas estándar), las fechas de entrega, los

tiempos de suministro, la evolución de las colas de espera y, con ellas, la adecuación de las

capacidades y cargas planificadas a las reales, etc. Solo así será posible detectar las

divergencias significativas entre los valores planificados y los reales, con base en los cuales

se adoptarán las medidas correctoras necesarias, que retroalimentarán a los distintos niveles

del sistema.22

Esta planeación nos permite visualizar la programación de piezas componentes basada en la

estructura del producto, con programación de componentes para subensambles y a su vez,

subensambles que sirven para el ensamble final del producto.

El conjunto de órdenes en curso de fabricación y las órdenes planificadas, cuyas fechas de

emisión estén incluidas en el horizonte de planificación considerado, serán objeto de la

programación de operaciones. Esta función tiende a determinar que operaciones se van a

realizar sobre las distintas órdenes, durante cada momento del horizonte planificado, en

cada Centro de Trabajo (CT), de tal forma que, con la capacidad disponible en cada uno de

ellos, se cumplan las fechas de entrega planificadas, empleando el menor volumen de

recursos e inventarios posibles. En cuanto al horizonte de planificación, éste dependerá de

las características del proceso productivo y su entorno, pudiendo variar entre unas horas y

varias semanas.23

22
MACHUCA DOMÍNGUEZ. Op cit., p. 292.
23
Ibid., p. 295.

19
El desarrollo de la programación con lleva a variar notablemente en función del tipo de

configuración productiva. Dado que existen varias clasificaciones de las configuraciones

productivas propuestas por diferentes autores. Nos apoyamos en la clasificación que realiza

Machuca24 en función de la continuidad en la obtención del producto: continua, lotes y

proyectos.

Configuración continua. Cuando se obtiene siempre el mismo producto en la misma

instalación. Cada CT, máquina o equipo está acondicionado para realizar siempre la misma

operación y preparado para aceptar de forma automática el trabajo que le es suministrado

por un CT, máquina o equipo precedente, que esta en igual condición para alimentar a la

máquina que le sigue.

Figura 2-3. Configuración continua.

24
MACHUCA DOMÍNGUEZ, José Antonio et al. Dirección de operaciones : Aspectos estratégicos en la
producción y los servicios. España : Mc Graw Hill, 1995. p. 143

20
La configuración continua hace la programación más elemental pues las únicas actividades

desarrolladas aquí son las encaminadas a ajustar el ritmo de producción. Ejemplo es la

producción masiva donde un producto pasa por los mismos centros de trabajo en grandes

cantidades, (Ver Figura 2-3)

Configuración productiva por lotes. El hecho diferenciador que distingue ésta

configuración está en que utiliza las mismas instalaciones para la obtención de múltiples

productos, de forma que, una vez obtenida la cantidad deseada para uno de ellos, se procede

a ajustar la instalación y a procesar otro lote de producto, repitiéndose continuamente esta

secuencia. No obstante, en función del tamaño de los lotes obtenidos, de la variedad y

homogeneidad de los productos fabricados y de las características de los procesos seguidos,

nos podemos encontrar dos tipos de configuraciones.25

En esencia cuando se trata de fabricación de grandes lotes de pocos productos diferentes

pero técnicamente homogéneos, que utilizan las mismas instalaciones, se trata de

Configuración en línea o configuración por lotes enfocada al producto. Productos cuyo

proceso de obtención en el CT requieren una secuencia similar de operaciones.

Procediéndose a ajustar los CT o máquinas tras fabricar un lote para elaborar otro distinto.

En la configuración por lotes enfocada al producto o flow shop hay pocos productos, lotes

homogéneos de tamaño mediano, pasan por los mismos centros de trabajo con diferentes

25
Ibid., p. 143.

21
valores de utilización, adecuación y alistamiento. Programación que implica secuenciación

de las órdenes para dar respuesta a la pregunta ¿cuál hacer primero? (Ver Figura 2-4.)

Figura 2-4. Configuración por lotes enfocada al producto – flow shop

En la configuración Job Shop se producen lotes más o menos pequeños de una amplia

variedad de productos de poca o nula estandarización (son “a medida” o con muchas

opciones personalizadas), empleándose equipos de escasa especialización, los cuales suelen

agruparse en talleres o centros de trabajo a partir de la función que desarrollan; estos

equipos suelen ser versátiles y permiten ejecutar operaciones diversas, por lo que puede

alcanzarse una amplia variedad de output.26

La configuración por lotes enfocada al proceso o job shop fabrica bajo pedido para lotes de

tamaño pequeño, hay gran variedad de productos y componentes. Programación donde hay

asignación respondiendo a: ¿dónde procesar? y secuenciación ¿cuál hacer primero?. (Ver

Figura 2-5.)

26
MACHUCA DOMÍNGUEZ, José Antonio et al. Aspectos estratégicos en la producción y los servicios,
Op cit., p. 144

22
Figura 2-5. Configuración por lotes enfocada al proceso – Job Shop

La configuración por proyectos es la que se emplea para la elaboración de productos

“únicos” y de cierta complejidad que se obtienen a partir de la coordinación en el uso de

unos inputs que suelen ser de gran tamaño. La programación se da bajo modelos como el

PERT / CPM.

Figura 2-6. Configuración productiva de bienes.

23
La figura 2-6 muestra la relación entre las configuraciones productivas y el número de

productos de una empresa.

Para el tipo de configuración al cual se enfoca el presente trabajo – configuración por lotes

enfocada al producto o flow shop – en el corto plazo se tienen en el caso más complejo las

siguientes actividades: asignación, secuenciación, programación detallada y control. (Ver

Figura 2-7.)

Figura 2-7. Sistema de planeación y programación de operaciones en el corto plazo.

Asignación

Es el direccionado específico de órdenes a cada Centro de Trabajo (CT) durante el periodo

de planeación. Cada trabajo debe tener sus especificaciones únicas de productos y, por

24
tanto, su hoja de ruta o trayectoria a través de los diversos centro de trabajo dentro de las

instalaciones. A medida que las nuevas órdenes de trabajo pasan a proceso, se asignan o

dirigen entre los CT, estableciéndose así la parte de la carga que le corresponde a cada uno

de éstos durante el periodo inmediato de planeación.

Secuenciación.

Esta etapa establece las prioridades para los trabajos en las colas de espera en los centros de

trabajo, la secuencia de prioridad específica el orden en el cual son procesados los trabajos

pendientes.

Programación detallada.

Las fechas especifican cuando hay que efectuar las órdenes de trabajo, emplear los

materiales (insumos), así como los trabajos terminados (productos) que deben estar

disponibles en cada CT. Los detalles sobre fechas y tiempos en general no se especifican

hasta que no se hayan terminado la asignación y la secuencia.

Al calcular la duración de los procesos y las fechas establecidas para todos los trabajos, los

programadores pueden establecer sus fechas de inicio y de terminación, y diseñar así el

programa detallado.

Control

Es el seguimiento que se realiza al avance de los trabajos por las instalaciones, permite

coordinar las acciones especiales requeridas por un trabajo en particular para que éste

25
transite por los CT a tiempo, solucionando las interrupciones generadas en las operaciones

de manufactura: fallas de equipos, falta de disponibilidad de los materiales y cambios de

último momento en las prioridades, que ocasiona desviaciones en los planes y los

programas de producción.

Control Input – Output (Capacidad a corto plazo)

Es el seguimiento que se realiza a los centros de trabajo. Los planes y los programas de

producción implican ciertos niveles de capacidad y producción para un centro de trabajo,

pero su utilización real puede diferir de lo planeado. El control de la capacidad (informe

input-output) pretende gestionar y controlar la capacidad de los CT y reconocer las

desviaciones significativas, proporcionando asi la información necesaria para tomar las

medidas correctoras oportunas y hacer ajustes en la utilización para alcanzar los niveles

deseados.

2.2.3 Programación enfocada a la carga

La carga significa la asignación de tareas a cada Centro de Trabajo (CT) o proceso. Los

directores de operaciones asignan trabajo a los centros de trabajo de tal forma que los

costos, el tiempo ocioso o los tiempos de terminación se mantengan en un mínimo.27 En la

actualidad hay dos enfoques básicos que son la carga infinita y la carga finita.

27
HEIZER, y RENDER , Op cit., p. 208.

26
Carga infinita.

Una característica que distingue a un sistema de programación de otro es la manera como

se considera la capacidad al determinar el programa. Los sistemas de programación pueden

utilizar una carga infinita o finita.

La carga infinita se presenta cuando la tarea ha sido asignada a un CT sin tener en cuenta su

capacidad, la carga que proviene del programa de producción se distribuye en los centros

de trabajo como si su capacidad fuera ilimitada.

Las reglas de secuencia prioritaria (como su nombre lo indica determinan que trabajo debe

procesarse a continuación), no reconocen las capacidades de los centros de trabajo ni otras

tareas programadas, por esta razón estas reglas se emplean con técnicas de planificación de

capacidad basadas en cargas infinitas.28 Otros modelos que usan este enfoque de

programación son: la regla de Johnson y el algoritmo de Kuhn.

Grafica de Gantt.

La gráfica de Gantt útil para la carga o programación, es una herramienta visual para

establecer la secuencia de los trabajos que serán procesados en un centro de trabajo o en

una serie de máquinas así como para vigilar su avance a través de todas ellas. Teniendo

como variables los CT o máquinas, y el tiempo de proceso, proporcionando facilidad y

claridad en la comunicación con el taller de trabajo, señalando la necesidad de reasignación

28
VOLLMANN, Op cit., p. 181.

27
de recursos cuando la carga en cualquier centro de trabajo es demasiado grande para el caso

de carga finita.

El propósito de la gráfica es desplegar el estado de cada recurso, casi siempre centros de

trabajo o tiempo extra, en todo momento. El eje ‘x’ representa el tiempo y el eje ‘y’

consiste en una barra horizontal para cada máquina. Las gráficas de Gantt también se

pueden construir colocando trabajos en lugar de máquinas en el eje ‘y’.29

Esta permite representar el desarrollo de las diferentes operaciones a realizar de cada lote

en cada CT en función del tiempo, apreciándose además, la coordinación de las secuencias,

las colas de espera y los tiempos ociosos.

Tiene como ventajas la facilidad y claridad en la comunicación con el taller de información

importante. Sin embargo, tiene algunas limitaciones importantes. Como la gráfica es un

dispositivo de carácter determinista, no maneja la variabilidad de la duración: de las

actividades, de los equipos (incluyendo fallas), del tiempo que trabajan las personas y

averías inesperadas o errores humanos que requieran una repetición del trabajo, cualquiera

de las cuales puede hacer que el cálculo de la carga estimada sea impreciso. También la

gráfica es estática y debe de actualizarse en forma periódica para que pueda incluir la

29
SIPPER y BUFFIN, Op cit., p. 404

28
llegada de nuevas órdenes de trabajo y los cálculos de tiempo que hubieran sido revisados

para los trabajos existentes.30

Carga finita.

El sistema de carga finita simula el inicio y final de las cargas de trabajo reales para

producir un programa detallado de cada orden a cada centro de trabajo; es decir, lo que la

carga finita hace, en realidad, es cargar todas las tareas en los centros de trabajo necesarios

a lo largo del horizonte de planificación. El resultado es un conjunto de fechas de inicio y

fin para cada operación en cada centro de trabajo. Este programa se basa en los límites de

capacidad de cada centro de trabajo, estableciendo explícitamente un programa detallado

para cada tarea a través de CT, basándose en sus capacidades y las otras tareas

programadas.

Figura 2-8. Carga vertical

30
EVERETT, E. Adam. Jr, y RONALD, J. Ebert. Administración de la producción y las operaciones. 4 ed.
Mexico : Prentice Hall, 1994. p. 455.

29
Dos enfoques para asignar la carga del MRP en la planta son: la carga vertical (por centros

de trabajo) y la carga horizontal (por pedidos)

La carga vertical consiste en llenar cada CT operación por operación donde el recurso

crítico que se programa es el CT. (Ver Figura 2-8). Cuando se determina que un centro de

trabajo a quedado libre, se selecciona el trabajo siguiente teniendo en cuenta las

prioridades establecidas para los trabajos a ser realizados a continuación en el CT.

De esta forma se puede decidir si empezar otro trabajo ya ejecutable al objeto de no dejar

ocioso el CT. Siguiendo así para todos los pedidos en este CT, estableciéndose el programa

de operaciones que va ha desarrollarse durante las horas de cada día. Esta forma de

asignación también es conocida como aproximación vertical.

Figura 2-9. Carga horizontal

La carga horizontal o por pedidos toma los pedidos completos por orden de prioridad,

asignándose la carga de sus operaciones a todos los CT por los que ha de pasar, en su

momento correspondiente, después el siguiente pedido con mayor prioridad, y así

sucesivamente. (Ver Figura 2-9.)

30
Este enfoque horizontal puede estar en contra del criterio de usar un CT a su máxima

capacidad, la creación de programas detallados con carga horizontal puede dar como

resultado neto “huecos” de capacidad para un CT. Esto implica que en ocasiones una

máquina este inactiva aún si esta disponible otra tarea, porque este por llegar otra tarea más

importante.

Ya sea en la carga horizontal o en la carga vertical, existe siempre la decisión de que tarea

programar a continuación para un CT.

Una característica de los sistemas de programación es si esta se genera hacia adelante o

hacia atrás en el tiempo, la más común es la programación hacia adelante.

Programación hacia adelante (Forward).

Programación hacia adelante (carga a futuro o programación prospectiva), comienza con la

fecha actual y carga de los centros de trabajo hacia futuro. El tiempo de procesamiento se

acumula contra cada centro de trabajo, suponiendo una capacidad finita o infinita. En éste

caso es posible exceder las fechas de entrega si es necesario. Como se utilizan tiempos de

espera promedio en las colas, la fecha de terminación del pedido resultante es sólo una

aproximación de la fecha que se calculará mediante la programación más precisa. El

propósito de la carga hacia el futuro es determinar la fecha de terminación aproximada de

cada pedido y, en caso de capacidad infinita, la capacidad necesaria en cada periodo.

31
Programación hacia atrás (Backward).

De manera inversa la programación hacia atrás (o programación retrospectiva) se inicia,

con la fecha de entrega de cada pedido y carga las necesidades de procesamiento contra

cada centro de trabajo. La capacidad de los CT puede excederse si es necesario. El

propósito de la carga hacia atrás es calcular la capacidad requerida en cada CT para cada

periodo de tiempo. Como resultado quizás se tome la decisión de reasignar la capacidad

entre los CT o de disponer de mayor capacidad, mediante una planeación agregada

modificada. Las limitaciones de capacidad encontradas en el corto plazo se retroalimentan

al mediano plazo donde se genera una nueva planeación agregada que desciende en la

jerarquía al corto plazo para dar solución a los problemas de capacidad.

2.2.4 Modelos de programación.

Programación en un CT o máquina (n/1).

Figura 2-10. Caso n/1

Es una situación de programación estática que involucra varias tareas u órdenes en un CT o

máquina donde son utilizadas en su mayoría las reglas de prioridad. La terminología de

programación en esta clase de problemas se denomina “Problemas de n tareas – en 1 CT o

máquina” o simplemente “n/1”. (Ver Figura 2-10)

32
La dificultad teórica de los problemas de programación se incrementa en la medida en que

se consideran más máquinas y no en la medida en que se deben procesar más órdenes; en

consecuencia, la única restricción que hay respecto de n es que éste debe ser un número

específico y finito.31

El método más utilizado en la práctica es el de las reglas de prioridad, técnica heurística

consistente en el establecimiento de una regla basada en un indicador numérico o criterio de

evaluación, que es el objetivo fundamental a lograr en la secuenciación. Se puede lograr

siempre que el objetivo a lograr sea único o sí, existiendo varios, uno de ellos es prioritario

y no existe otro método para contemplarlos simultáneamente. Con base en este indicador

elegido se selecciona el primer trabajo a realizar en el CT, una vez se aproxime su

finalización, se determinará el próximo a realizar y así sucesivamente.

Cada pedido tiene asociados tres elementos principales que lo hacen unico: un identificador

o código, la carga generada y la fecha de entrega dada. Es de las operaciones matemáticas a

éstos elementos de donde salen los factores que forman los cocientes en los criterios de

evaluación:

• El tiempo de flujo por pedido es el tiempo de permanencia del pedido en una instalación

hasta ser trabajado, es igual al acumulado de las cargas de todos los pedidos anteriores en

espera más la carga del mismo pedido analizado.

31
CHASE, y AQUILANO. Op cit., p. 684

33
• La suma de los tiempos totales de flujo es la sumatoria de todos los tiempos de flujo por

pedido o trabajo evaluados, su valor depende del orden dada a los trabajos.

• El tiempo total de procesamiento es la sumatoria de las cargas de los diferentes pedidos

o trabajos evaluados, su valor no cambia con el orden de los trabajos.

• Los días de retrazo son los valores positivos de la resta por pedido del tiempo de flujo

calculado y su fecha de entrega. El valor negativo representa los días de holgura.

• Los días totales de retrazo son la sumatoria de los valores positivos obtenidos en los

días de retrazo por pedido.

Como criterios de evaluación tenemos:

• Tiempo medio de finalización = [suma de los tiempos totales de flujo] / [número de

trabajos]

• Utilización = [tiempo total de procesamiento] / [suma de los tiempos totales de flujo]

• Número medio de trabajos en el sistema = [suma de los tiempos totales de flujo] /

[tiempo total de procesamiento]

• Retraso medio del trabajo = [días totales de retraso] / [número de trabajos]

Reglas de prioridad

Definimos algunas de las reglas de prioridad más utilizadas:

• FCFS (First Come, First Served) o FIFO (First In, First Out) primero en llegar primero

en ser atendido. Las órdenes se ejecutan en el orden en que llegan al CT.

34
• SOT (Shortest Operating Time) Tiempo de operación más corto: primero se ejecuta la

tarea que tenga el tiempo de terminación más corto, luego el segundo más corto y así

sucesivamente, éste es igual al tiempo de procesamiento más corto. De esta forma se

hace máximo el número de trabajos procesados por período en el CT y, por tanto, se

ayuda a minimizar los tiempos ociosos. Sin embargo, se ignora la información relativa a

las fechas de entrega planificadas

• EDD (Earliest Due Date): Se realiza en primer lugar aquel pedido cuya fecha de entrega

está más próxima, cualquiera que sea el tiempo de proceso que le reste. Es una

aplicación simple del objetivo de cumplir las fechas de entrega, que deja fuera las

consideraciones sobre el logro del menor tiempo total de procesamiento de los pedidos.

• LOT(Longest Operation Time) o LIO (Longest Imminent Operation): El próximo

trabajo a realizar en un CT será aquel cuya operación en dicho centro sea la más larga.

La idea que la preside es que, normalmente, los trabajos más largos son los más grandes

y más importantes y, por tanto deben ser los primeros en realizarse. Se supone, además,

que éstos serán los trabajos con menor holgura (aunque no siempre ha de ser así, pues

esto dependerá también de la fecha de entrega).

• Fecha de iniciación: Fecha de vencimiento menos plazo normal. Ejecutar primero la

tarea con la fecha de iniciación más temprana.

35
• SRT (Shortest Remaining Time) Menor tiempo restante. En ésta se ejecuta primero

aquel pedido al que le quede menos tiempo hasta su entrega planificada, ejecutando

primero el pedido más urgente para cumplir las fechas de entrega. No obstante, no

considera un aspecto fundamental, el tiempo que queda para entregar el trabajo (que es

función del tiempo de proceso que le falte para ser terminado).

• CR (Critical Ratio) Coeficiente Crítico: se calcula como la diferencia entre la fecha de

entrega y la fecha actual, dividida por el número de días de trabajo restante. Las órdenes

que tengan el CR más pequeño se ejecutan primero. Esta regla intenta corregir el

defecto señalado para la anterior, proporcionando una visión comparada del tiempo y la

carga que restan para entregar y concluir un trabajo. Su idea básica es la misma.

• STR (Slack Time Remaining) Menor tiempo de holgura restante. Se calcula como la

diferencia entre el tiempo restante antes de la fecha de entrega menos el tiempo de

procesamiento restante. Los pedidos que tienen el STR más corto se ejecutan primero.

Al igual que el Coeficiente Crítico (CR), pretende dar una idea del tiempo que resta

para cumplir con la fecha de entrega planificada en comparación con el tiempo que falta

para acabarlo.

• STR/OP (Slack-Time Remaining per Operation) Los pedidos más cortos son ejecutados

primero. Se calcula de la siguiente manera: [tiempo restante antes de la fecha de entrega

menos el tiempo de procesamiento restante o tiempo total restante en la planta] /

[número de operaciones restantes]. Es una variación de la anterior, en el que la holgura

36
se relaciona además con el número de operaciones que le restan al pedido para ser

terminado. En este caso, a la idea de seleccionar antes el trabajo de menor holgura se le

añade la consideración del número de operaciones restantes, considerándose que es más

difícil completar aquel con mayor número de éstas, al tener que ser programado a través

de más centros de trabajo.

• LCFES (Last Come First Served) o LIFO (Last In, First Out) Último en llegar, primero

en salir: esta norma se presenta con frecuencia por defecto a medida que llegan las

órdenes, estas se colocan encima de la fila; el operador ejecuta la primera en la fila.

Diferentes autores como Sipper o Krajewski entre otros, han clasificado las reglas de

prioridad para la programación, en dos categorías: reglas locales (para una sola dimensión o

miopes) y reglas globales (para dimensiones múltiples), que se definen a continuación,

resaltando la utilización de la primera en el desarrollo de la aplicación.

Reglas locales: A estas reglas las llamamos reglas para una sola dimensión por que

asignan las prioridades tomando como base un solo aspecto del trabajo, como el tiempo de

llegada al centro de trabajo, la fecha de vencimiento o el tiempo de procesamiento.32

Reglas globales: las reglas de prioridad, como la CR, S/RO ( o STR/OP), incluyen

información sobre los demás centros de trabajo en los que deberá ser procesado cada

32
KRAJEWSKI Lee, RITZMAN Larry. Administración de operaciones o producción: Estrategia y análisis.
México: Pearson educación, 2000. p.767.

37
trabajo, además del tiempo de procesamiento en el centro de trabajo actual o la fecha de

entrega, que también se toman en cuenta en las reglas para una sola dimensión. A estas las

llamamos reglas para dimensiones múltiples porque usan más de un aspecto del trabajo.33

Dentro de las reglas de prioridad mencionadas se ha demostrado matemáticamente que la

regla SOT produce una solución optima para el caso n/1 en los criterios de evaluación tales

como el tiempo de espera medio (retraso medio del trabajo) y el tiempo de terminación

medio (tiempo medio de finalización). Por tanto se ha denominado esta regla como el

concepto más importante en todo el tema del secuenciamiento.34

Figura 2-11. Caso n/1 continuo.

Los modelos de una sola máquina también son adecuados para procesos continuos o en

serie que se encuentren balanceados porque su programación se puede tomar de manera

agregada como una situación del caso n/1. (Ver Figura 2-11.)

33
Ibid., p. 770.
34
CHASE, y AQUILANO. Op cit., p. 687.

38
Dentro de n/1 se tiene el caso particular de las máquinas paralelas que explicamos a

continuación.

Máquinas paralelas

Figura 2-12. Máquinas paralelas

Con frecuencia, los problemas de programación consideran varias máquinas. Las máquinas

múltiples pueden estar colocadas en paralelo o en serie. La figura 2-12 describe máquinas

paralelas. Cuando se usan máquinas múltiples en paralelo, se supone que cualquier trabajo

se puede procesar en cualquiera de las máquinas, y que el tiempo para procesar un trabajo

puede ser o no el mismo en cualquiera de ellas, es decir, son o no idénticas. Además, los

trabajos consisten en una sola operación; una vez que comienza el procesado de un trabajo

en una de las máquinas, debe terminarse. La decisión de programación comprende dos

aspectos: qué máquina procesa el trabajo y en qué orden.35

35
SIPPER y BUFFIN, Op cit., p. 439

39
Figura 2-13. Máquinas paralelas – continuo

Una forma de simplificar problemas de programación es el contemplar sistemas

balanceados de producción continua como una variación del caso n/1, como ya se

mencionó. Ahora para el caso de las máquinas paralelas este esquema también es aplicable

para cuando existan varias líneas de producción continua siendo esta la situación de unir

dos esquemas: caso n/1 continuo y máquinas paralelas, para facilitar la programación de las

diferentes órdenes. Obteniéndose así otra variación del caso n/1. (Ver Figura 2-13)

Programación en máquinas paralelas.

Cuando se cuenta con el suficiente tipo correcto de máquinas para comenzar todas las

tareas simultáneamente, se debe pensar en que la adecuada asignación de cada tarea a cada

máquina dará como resultado el mejor programa global. Para este caso es utilizado el

método de asignación.36 Llamado también algoritmo de asignación de Kuhn o método

húngaro.

36
CHASE, y AQUILANO. Op cit., p. 689

40
Para este método la programación se vuelve matemáticamente muy compleja, cuando los

valores de ‘n’ (operaciones) o ‘m’ (máquinas) son altos, siendo necesario para el análisis la

programación por computador.37

La asignación de las operaciones a las máquinas se realiza de forma que cada una de ellas

se ejecute en una sola máquina, y viceversa. Partiendo de una matriz formada por los

tiempos de proceso de cada operación en cada máquina detallamos a continuación los pasos

del algoritmo de asignación de Kuhn o método húngaro.38

Fase1: Obtención de ceros

Se comienza por las columnas de la matriz. En cada una se elige el menor tiempo y se

resta a todos los elementos de dicha columna. Repitiendo este proceso con cada

columna de la matriz, se obtiene la tabla donde los ceros indican los lugares con los

menores tiempos un cada una de ellas. Con la nueva matriz se realiza un procedimiento

análogo, pero en las filas, eligiendo el elemento más pequeño de cada una de ellas y

restándoselo, posteriormente, al resto de los elementos que la integran. Con los cálculos

realizados se asegura que en cada fila y en cada columna exista al menos, un cero, es

decir, un punto de menor tiempo.

Fase 2: Búsqueda de la solución óptima

37
Scheduling, http://www.usd.edu/~rlau/schedule.htm
38
MACHUCA DOMÍNGUEZ, José Antonio et al. Aspectos tácticos y operativos en la producción y los
servicios, Op cit., p. 299.

41
Es evidente que si se puede realizar una asignación biunívoca con los lugares ocupados

por los ceros en la matriz inicial que relacionase a cada Oi, con una sola Mj y viceversa,

ésta sería la solución óptima.

Fase 3:

Obtención de un conjunto mínimo de filas y columnas que contiene todos los ceros para

realizar las asignaciones que faltan.

Fase 4: Desplazamiento de algunos ceros

En este punto se repite la fase 2 y si ello revela que se ha llegado a la solución óptima, el

proceso habrá terminado. De lo contrario se continuará iteractivamente hasta conseguirla.

Programación de centro de trabajo en configuración continua.

El procesado de trabajos de manera secuencial en varios CT o máquinas, recibe el nombre

de configuración continua. Todos los trabajos se procesan en el mismo orden, por lo que se

pueden enumerar los CT de manera que el CT1 hace la primera operación y así

sucesivamente, la figura 2-11 caso n/1 continuo, representa un CT en configuración

continua.

Programación en dos CT (n/2)

El caso siguiente en complejidad es el caso n/2, en donde dos o más órdenes deben

procesarse en dos CT o máquinas en una secuencia común. Como en el caso n/1, existe un

enfoque que lleva a una solución optima de acuerdo con ciertos criterios.

42
Figura 2-14. Caso n/2

El objetivo de este enfoque llamado regla de Johnson por su creador S. M. Johnson, es

utilizado para minimizar el tiempo de proceso resultante de secuenciar un grupo de órdenes

a través de dos CT.39 (Ver Figura 2-14)

Mediante este enfoque se minimiza el tiempo de flujo desde el comienzo de la primera

tarea hasta la terminación de la última, Partiendo del tiempo de ejecución de cada pedido en

cada máquina, éste método heurístico pretende hacer mínimo el tiempo necesario para

concluir todos ellos y, por tanto, el tiempo ocioso de las máquinas. Utilizando al máximo

los CT (makespan)

El makespan se define como:

CTmax = Max (CT1, CT2, CT3, . . . , CTn )

Es decir, el makespan es equivalente al tiempo de terminación de la última tarea para dejar

el sistema. Un makespan mínimo por lo general implica una alta utilización de las

máquinas.40

39
M. Johnson, “Optimal two and three stage production schedule with set up times included,” Naval research
Logistics Quarterly, 1, No 1 (marzo 1954): c61-68.
40
Sheduling – flow shop http://www.informs.org/Conf/no95/talks/ma30.3.html

43
La Regla Johnson consta de los siguientes pasos.

1. Registrar el tiempo de operación para cada tarea en ambas máquinas.

2. Escoger el tiempo de operación mas corto.

3. Si el tiempo más corto es para la primera máquina, hacer la tarea primero; si es para

la segunda, hacer la tarea de último.

4. Repetir los pasos 2 y 3 para cada tarea restante hasta completar el programa.

Programación en más de dos CT (n/m)

El problema de programación n/m (órdenes/CT) se a resuelto para m = 1,2,3 y para valores

arbitrarios de n. No se han desarrollado algoritmos eficientes para m 4 debido el gran

número de secuencias posibles.41 (Ver Figura 2-15)

Figura 2-15. Caso n/m

Si se tienen más de 2 máquinas, el algoritmo de Johnson no funciona excepto en casos

especiales. Un caso especial ocurre cuando la máquina intermedia esta dominada, ya sea

por la primera o por la tercera. Una máquina está dominada

41
SCHROEDER, Roger G. Administración De Operaciones : toma de decisiones en la función de
operaciones. 3 ed. Mexico : Mc Graw Hill, 1992. p. 401

44
Dos enfoques para asignar la carga del MRP en la planta son: la carga vertical (por centros

de trabajo) y la carga horizontal (por pedidos), cuando su tiempo de procesado más largo

no es mayor que el tiempo de procesado más corto de otra máquina, es decir, para la

máquina intermedia de tres máquinas,

Entonces se puede formar un problema equivalente de dos máquinas con tiempo de

procesado

Al resolver este problema de dos máquinas se obtiene la secuencia de lapso óptimo para el

problema dominado por tres máquinas. Un trabajo comienza en una máquina tan pronto

como el trabajo anterior en esa máquina termina, o su operación en la máquina anterior

termina. Esto funciona porque en un problema dominado la máquina dos nunca causa un

retraso en el programa.

Para problemas de dos máquinas y problemas de tres máquinas con la máquina dos

dominada, el programa óptimo es un programa de permutación. Esto es, la secuencia de

trabajos es la misma en todas las máquinas. Un programa de no-permutación tiene

diferentes secuencias de trabajo en al menos dos máquinas. Suponga que el trabajo ‘i’ está

programado antes del trabajo ‘j’ en la máquina ‘k’, pero en la máquina ‘k+1’ se procesa ‘j’

antes de ‘i’. El trabajo ‘i’ pudo haberse procesado en la máquina ‘k+1’, mientras ‘j’ estaba

en la máquina ‘k’, de manera que hay tiempo ocioso insertado en la máquina ‘k+1’. Si el

45
objetivo es el lapso de producción, se puede demostrar que un programa óptimo es un

programa de permutación para tres máquinas.

Sin embargo, para cuatro o más máquinas, el programa óptimo puede no ser un programa

de permutación. Para otros objetivos, los problemas de tres máquinas no tienen garantía de

programas de permutación óptimos. Si no hay una máquina dominante en un problema de

tres máquinas, o si se tienen más de tres máquinas, no existe una manera sencilla de obtener

una solución óptima. Debe recurrirse a algoritmos heurísticos o enumerativos para resolver

estos problemas.

Algoritmos heurísticos

Un algoritmo heurístico directo es forzar al problema para que se vea como uno de dos

máquinas y usar el algoritmo de Johnson. Esta secuencia se convierte en un programa de

permutación para el problema original. Los diferentes enfoques para convertir el problema

de m máquinas en un problema de dos máquinas producen programas distintos, entonces se

puede elegir el mejor de ellos.

Cambell, Dude y Smith (1970) propusieron un enfoque de conversión, el heurístico CDS.

Sean Pi1' y Pi '2 los tiempos de procesado para el problema de dos máquinas. Entonces, para

un problema de m máquinas, se tiene

46
ellos sugieren comenzar con k = 1 y l = m y generar un programa con el algoritmo de

Johnson. Después se hace k = 2 y l = (m – 1) y se repite, continuando hasta que k = (m –1)

y l = 2. se usa el mejor de los (m –1) programas generados. Existen otras formas para

generar los tiempos de procesado para seudo máquinas.

Gupta (1972) propuso otro algoritmo heurístico. Sea

y defina

se determina una secuencia de permutación mediante . Gupta basa esta

regla en el algoritmo de Johnson para una máquina intermedia dominada, porque es exacta

para ese caso.42

2.3 PLANTEAMIENTO DEL PROBLEMA.

Las PYMES presentan deficiencias en su sistema productivo, problemas como la

ineficiencia en la planeación de la producción se evidencian en la inoportuna programación

de las operaciones, que contribuye a que se den respuestas tardías a los cambios en la

42
SIPPER y BUFFIN, Op cit., p. 448

47
demanda, la no-optimización de los recursos, entre otros. Esto se da porque su estructura

de costos no le permite adquirir herramientas que integran las áreas funcionales y

sincronicen los niveles de planeación jerárquica43 en especial el corto plazo, a la vez que la

complejidad del software y la falta de adaptación de las herramientas a los requerimientos

de la empresa limitan la flexibilidad44.

La aplicación “HPP-S” se ha diseñado con el fin de solucionar este problema

proporcionando un sistema de apoyo para la planeación a corto plazo, que permite realizar

la programación de la producción de una manera integral al manejar pedidos, rutas,

operaciones y centros de trabajo en conjunto con las necesidades MRP provenientes del

mediano plazo. Sobre la plataforma de un paquete comercial (Office) haciéndola asequible

y fácil de implementar.

43
QUINTERO M, Víctor Manuel. Alternativa empresarial. Cali : Icesi, 1998 p. 257
44
Planificación en línea. En : Dinero. No 79 (Mar 12 1999); p. 90-91.

48
3. LÓGICA DE DISEÑO

3 CAPÍTULO 3. . LÓGICA DE DISEÑO


3.1 PLATAFORMA DE DESARROLLO.

En el desarrollo del presente proyecto, utilizamos principalmente los programas Access y

Excel de la versión 2000 del Office, donde el primero se usa para la captura de los datos y

el segundo para el análisis de los mismos. Adicional a estos dos programas nos apoyamos

en Visual Basic como lenguaje de programación para la automatización de tareas que se

realizan en las macros para Excel y los sucesos de eventos para Access.

Comenzamos el capítulo haciendo una referencia al aporte de Visual en el funcionamiento

de la aplicación. Dado que Access es menos conocido o usado que Excel presentamos una

aproximación a éste programa relacionándolo con el concepto de las bases de datos, ya que

tiene distinta interpretación según la aplicación, comenzamos con Excel para generalizar su

uso en Access y así soportar porque se eligió como recurso válido en la captura de los

datos.

49
Programas usados.

Hoy existe un programa para cada actividad profesional, lo que sólo ha sido posible gracias

a la enorme versatilidad de la informática. El software ha sabido adaptarse perfectamente a

las necesidades de nuestra sociedad, cada vez más especializada, respondiendo con

soluciones prácticas a las demandas concretas de cada sector. En este sentido, los

programas profesionales suelen ser muy complejos y no están al alcance de todo el mundo,

pero existen algunos – como es el caso de la base de datos Access y la hoja de cálculo

Excel – que también pueden ser utilizados por el usuario particular para realizar algunas

tareas cotidianas y, muy especialmente, de oficina.45

Access es una base de datos relacional, lo cual significa que es capaz de combinar la

información registrada en distintas tablas gracias a la presencia de campos clave. Este

sistema permite tener almacenados los datos de forma lógica en tablas de tamaño pequeño

que hacen más fácil el trabajo – y que el computador opere con mayor rapidez.

Si en algún momento desea extraer información muy específica de una base de datos

necesitará crear lo que en Access se conoce como consulta. La función de este elemento es

buscar entre los registros que contienen las tablas aquellos que se ajustan a unas

condiciones determinadas.

45
Manual de Informática Básica, Barcelona: editorial SOL 90 Ltda.

50
De otro lado, para trabajar óptimamente con operaciones matemáticas lo más adecuado es

utilizar una hoja de cálculo. Aunque en el mercado existen diversos programas de este tipo,

con presencia y funciones similares, Excel la versión de Microsoft – incluida en el paquete

Office – es el de uso más extendido. Su éxito está ligado a la capacidad que tiene de hacer

fácil lo difícil, lo cual la convierte en una herramienta fundamental para el trabajo y para la

casa.46

Su principal función es realizar operaciones matemáticas – de la misma manera que trabaja

la más potente calculadora, pero también la de computar complejas interrelaciones, ordenar

y presentar en forma de gráfico los resultados obtenidos.

3.1.1 Visual Basic

La creación de una aplicación en Windows con Visual Basic es sorprendentemente sencilla.

Para crear los elementos de una interfaz, bastará con pulsar los controles de interfaz de

usuario en el cuadro de herramientas de Visual Basic y después ‘dibujar’ el elemento

arrastrando y pulsando con el ratón. Para completar el programa se escribe el código a

utilizar en una ventana especial llamada Ventana Código. La escritura del código de

programa proporciona mayor control sobre el modo de trabajo del programa. El uso del

código de programación nos permitirá expresar de forma completa el modo en que

deseamos que se procesen los datos de entrada y salida. El lenguaje de programación

Visual Basic contiene varios cientos de sentencias, funciones y caracteres especiales, pero

46
Ibid., p. 210.

51
la mayoría de las tareas de programación podrán ser gestionadas por unas cuantas docenas

de palabras clave muy sencillas de recordar. El lenguaje de Visual Basic no es exclusivo;

Microsoft Visual Basic para aplicaciones se incluye dentro del Microsoft Excel, Microsoft

Access, Microsoft Project y otras aplicaciones para Windows.47

La aplicación diseñada muestra paneles de control, menús, objetos y cuadros de diálogos en

pantalla para guiar al usuario en la manipulación de los elementos en el orden en que

aparecen. Los programas esperan al usuario a que de una respuesta (la entrada) para

después procesarla de forma predecible. En los círculos de programación, ésta metodología

se conoce como Programación dirigida por eventos. La creación de un programa se realiza

a partir de un grupo de objetos ‘inteligentes’ que saben como responder cuando el usuario

interactúa con ellos, y después procesamos la entrada utilizando procedimientos de eventos

asociados con dichos objetos.

Procedimiento de evento (event procedure).

Un procedimiento es una unidad de código de Visual Basic que contiene una serie de

instrucciones y métodos que realizan una operación específica. Un evento es una acción

determinada que se produce en, o con, un objeto particular.

Microsoft Access responde a una variedad de eventos: clic del mouse, cambios en los datos,

formularios que se abren o cierran, y muchos otros. Es por eso que apoyados con la

47
HALVORSON, Michael. Microsoft Visual Basic 4 : paso a paso. Colombia : Mc Graw Hill, 1996.

52
programación en Visual Basic se aprovecha en el desarrollo de la aplicación esta potente

característica.

Los eventos son normalmente el resultado de una acción del usuario. Si se usa un

procedimiento de evento o una macro se pueden agregar respuestas personalizadas a un

evento que se produzca en un formulario, informe o control.

Cuando se crea un procedimiento de evento para un objeto se agrega: una plantilla de

evento nombrada para el evento y el objeto al modulo del respectivo. Lo que se necesita

hacer es agregar el código que responda de la forma que se desee cuando se produzca el

evento al cual esta asociado.

Una sola acción, como puede ser pasar de un control a otro puede desencadenar varios

eventos diferentes que suceden de una determinada secuencia. El saber cuándo ocurren los

eventos y en qué orden lo hacen es importante, porque esto afecta a cómo y cuándo se

ejecutan los procedimientos de evento. Mover el enfoque a registros, actualizar registros,

modificar y/o actualizar datos en un control, eliminar registros, crear nuevos registros,

pulsaciones de teclas, son muestra de los variados eventos que pueden ocurrir.

Se puede utilizar además un procedimiento de evento para validar datos en la mayoría de

los casos, se puede comprobar la correcta introducción de los datos en un control de un

formulario estableciendo la propiedad regla de validación (Validation Rule) del control, o

estableciendo reglas de validación del registro o el campo en la tabla base de la que

53
depende el control. Las macros y los procedimientos de evento proporcionan una mayor

potencia y flexibilidad para conseguir una validación más compleja.

La naturaleza, dirigida por eventos de Visual Basic, significa que la mayoría de los cálculos

realizados en nuestros programas se producirán por procedimientos de eventos. Es decir,

bloques de códigos específicos procesan entradas, calculan nuevos valores, gestionan tareas

y muestran la salida.

Figura 3-1. Propiedades del objeto Botón de comando.

Cada objeto de Visual Basic tiene un conjunto predefinido de eventos a los que puede

responder. Estos sucesos se listan para cada uno de los objetos en el cuadro de lista

desplegable Proc (procedimiento) de la ventana Código. Access por su lado tiene

predeterminadas varias propiedades para cado uno de sus objetos, es así como podremos

escribir un procedimiento de suceso para cualquiera de estas propiedades, y, si alguno de

estos eventos se produce en el programa, Visual Basic ejecutará el procedimiento de evento

asociado con el mismo. Por ejemplo, cuando se pulsa el botón de comando en un programa,

54
el evento (Al hacer clic) ejecuta el procedimiento de evento Command_Clic asociado. (Ver

Anexos B Códigos). La figura 3-1 muestra los eventos predeterminados que Access tiene

para el objeto Botón de comando.

3.1.2 Hojas de cálculo.

Con la masificación de los computadores en la industria, el uso de hojas de cálculo para la

modelación y toma de decisiones es ampliamente usado en los negocios contemporáneos.

Las funciones proporcionadas dentro de los paquetes integrados permiten a los usuarios

desarrollar modelos muy complicados de las actividades a evaluar o controlar.

Desafortunadamente, la mayoría de los usuarios de las hojas de cálculo no siguen una

metodología determinada cuando construyen bases en hojas de cálculo para modelar. Esto

conduce alternadamente a la perdida de muchas horas en puestas a punto y reprogramación

que producen modelos que parecen más complejos de lo que ellos necesitan ser y son

además más complicados y aburridos de entender y de modificar.48

En el desarrollo de la aplicación se usará un formato para el modelo que sea fácil de

entender, de usar y de modificar, a partir de una clara y correcta discriminación de la

información necesaria y relevante al momento de realizar la planeación a corto plazo.

48
A framework for building spreadsheet based decision models, D Mather, Monash University, Australia,
1997. http://www.stockton-press.co.uk/0160-5682/v50n1/pdf/2600672.pdf

55
Excel

En Excel se identifica el concepto de base de datos con el de lista (o tabla). Por lo tanto una

base de datos en Excel es un conjunto de filas en las cuales una columna tiene siempre el

mismo tipo de información. La definición que da Excel de lista es: “Serie rotulada de filas

de hojas de cálculo que contiene grupos similares de datos, como una base de datos de

facturas o un conjunto de nombres y números telefónicos de clientes. Una lista puede

usarse como una base de datos, donde las filas son registros y las columnas son campos.”

Durante la generación de la hoja de cálculo, no es necesario definir ninguna propiedad

específica para realizar operaciones de base de datos como: introducir, borrar, buscar,

ordenar o efectuar el subtotal de los datos, el programa reconoce la lista como una base de

datos.

Para crear una base de datos o una lista en Excel se debe introducir una primera fila en la

que se describe el contenido de cada columna. A continuación se introducen en las filas

siguientes cada uno de los datos. Estas filas constituyen los registros de la lista. Por ejemplo

se crea una lista para contener los datos de carné, nombre, dos apellidos y curso de una

serie de alumnos. Dos de las operaciones que Excel permite realizar con dichos datos son:

edición y ordenación.

Ordenar mediante criterios, realizar un filtro para obtener una nueva sublista o hallar

subtotales de los campos que se deseen, son funciones propias de una aplicación de gestión

de bases de datos, sin embargo existe una diferencia fundamental entre Excel y una

56
aplicación de base de datos: Excel sólo puede tener una lista en cada hoja y no puede

establecer relaciones entre dichas listas. En la terminología de las aplicaciones de bases

de datos, lo que Excel llama lista o base de datos se denomina tabla. Y el conjunto de todas

las tablas con sus relaciones es lo que realmente constituye la base de datos.

3.1.3 Bases de datos

Access, programa comercial de Microsoft Corporation. Se trata de un sistema gestor de

bases de datos diseñado para ser utilizado en computadoras personales tipo PC. Aunque no

está considerado como un sistema ‘serio’, lo cierto es que permite realizar las mismas

tareas que los tradicionalmente considerados sistemas ‘serios’, como puede ser Oracle. A

diferencia de éste, Access puede funcionar en sistemas de bajo costo, y es mucho más

asequible. Además, dispone de un entorno muy amigable (al estilo Windows 98). Por esta

razón, cada vez más empresas apuestan por este sistema; tanto es así que los fabricantes de

los sistemas ‘serios’, incluido Oracle, tienden a hacer que sus productos se parezcan, en

cuanto a interfaz de usuario se refiere, a lo que el usuario pide, que no es otra cosa que el

entorno visual. Así aparece Developer 2000, un entorno visual para crear aplicaciones para

Oracle.49

49
Prácticas de Bases de Datos / Bases de Datos I, Curso 1997-98. Universidad de Huelva. España.

57
Access es un programa para la gestión de información. Permite diseñar las estructuras para

almacenar la información y los medios para su introducción y explotación.50

Una peculiaridad que se debe tener en cuenta al trabajar con programas de gestión de bases

de datos, como es el caso de Access, es que no existe la opción Save (Guardar), referida a

los datos de la aplicación, debido a que los cambios en los datos se van guardando siempre

en el dispositivo de almacenamiento permanente. Cuando se presenta la opción Save, se

refiere a guardar los cambios realizados en el diseño de los distintos objetos que componen

la base de datos, no a los datos.

Access

Una aplicación de base de datos que almacena y gestiona información se denomina un

Sistema de Gestión de Bases de Datos SGBD o DBMS (Data Base Management System).

La estructura básica de esta información son tablas, que se corresponden con las listas de

Excel. Para una mejor gestión de la información y para reducir el número de datos, las

tablas se relacionan, por ejemplo si se desean tener listas con los pedidos de cada cliente, en

vez de incluir el nombre, Nit y otros en la lista de cada pedido, bastará con almacenar el

código de cada cliente. El código del cliente en la lista de pedidos sirve para establecer una

relación con los datos de la cada cliente en la tabla clientes, ( Ver Figura 3-2.) Debido a este

50
SARRIEGUI, José María, SERRANO, Nicolás, MURO, Iván. Aprenda Microsoft Access 97 como si
estuviera en primero. San Sebastián, Octubre 1998 Escuela Superior de Ingenieros Industriales,
Universidad de Navarra

58
carácter relacional, Access es un sistema de gestión de bases de datos relacional SGBDR o

RDBMS (Relational Data Base Management System).

Figura 3-2. Tablas relacionadas

Es importante mencionar que en Access es posible exportar hojas de datos a páginas HTML

estáticas o dinámicas del World Wide Web, así como toda una serie de utilidades para

trabajar con intranets privadas y con la red pública Internet. Aunque esta característica no

se utilizo en el desarrollo de la aplicación, sí amplía la proyección de la herramienta creada

al poder ser instalada en un servidor para permitir consultas desde diferentes terminales.

Conceptos generales

El ejemplo de la base de datos o lista de Excel nos sirve para exponer los tres conceptos

básicos de bases de datos: tablas, campos y registros. Una tabla es una colección de datos

con la misma estructura. Si se disponen los datos en una hoja de cálculo, una columna

siempre tiene el mismo tipo de dato, por ejemplo un nombre, un número de teléfono etc.

59
Cada tabla es un conjunto de información relativa a una categoría específica, consta, de un

cierto número de campos, en cada uno de los cuales se guarda un dato, que puede ser

numérico, alfanumérico, fecha, etc.

Figura 3-3. Partes tabla.

Un campo es cada una de las columnas de la tabla y el nombre de la columna es el nombre

del campo. Un registro es cada una de las filas de la tabla, y está formado por el dato de

cada uno de los campos almacenados en una misma operación.(Ver Figura 3-3.) En el

ejemplo anterior, la lista de clientes constituye una tabla en Access. Esta tabla consta de 12

campos: Idcliente, Nombre_cliente, NIT, Persona_contacto, Dirección, Ciudad, País,

Teléfono, Fax, Celular, Descuento y Observaciones.

Una base de datos es un conjunto de tablas que se utilizan para gestionar un determinado

tipo de información. Son ejemplos de base de datos: la base de datos de la gestión

académica de una universidad, la base de datos de los pedidos de una empresa o la base de

datos de centros de trabajo. Por lo tanto la base de datos está constituida por la estructura de

información y la información en ella contenida. Es frecuente denominar a Access como una

60
base de datos. Para ser exactos Access es una aplicación de gestión de base de datos. Es la

misma diferencia que existe entre un procesador de textos como Word y un documento de

Word..

Entre los objetos que forman una base de datos tenemos:

Tablas (Tables): La tabla es el tipo principal de objeto de una base de datos. El concepto de

tabla se ha explicado al ver la relación de Excel con las bases de datos. Como resumen, una

tabla es un conjunto de datos estructurados en columnas (los campos) y filas (los registros).

En las tablas de la base de datos es donde se almacena toda la información de la base de

datos.

Consultas (Queries) Operaciones que pueden realizarse sobre los datos de las tablas:

limitaciones de acceso, selección de datos, inserción, modificación y borrado, cálculos

entre otras.

Macros y módulos: segmentos de código en lenguaje de alto nivel (Access Basic, Visual

Basic, lenguaje de macros,...) que permiten realizar operaciones complejas con los datos y

objetos de la base de datos.

Formularios: Un formulario es una ventana diseñada para la introducción y edición de

datos. En Excel, a partir de una lista se puede generar automáticamente un formulario para

introducir los datos. Access posee herramientas para realizar el diseño de los formularios de

una manera mucho más elaborada utilizando listas desplegables, rejillas, botones de opción

61
y de selección, etc. El formulario permite introducir, modificar, consultar y borrar los

registros de la tabla o consulta para la que se ha diseñado. La ventaja frente a la

presentación como hoja de datos es que los campos se presentan de manera más adecuada

al usuario, con un diseño que ayuda a su comprensión, utilizando los controles más

adecuados a cada tipo de información. En algunos casos la tabla puede ser la mejor manera

de presentar los datos y no es necesario recurrir a modos de presentación más sofisticados.

Informes (Reports): Si el formulario es la forma idónea de introducir y editar los datos, la

mejor forma de mostrarlos es mediante un informe en una página impresa o mediante su

representación en la pantalla.

Una página de acceso a datos es muy similar a un formulario, pero puede utilizarse para

acceder a la base de datos desde un navegador web de la misma manera que lo haría desde

Access. De hecho, a diferencia de un formulario, que se guarda como parte de una base de

datos, las páginas de acceso a datos se almacenan en el disco duro de forma independiente

con extensión de archivo HTML.

En general, se puede afirmar que el diseño de la presentación de los datos es uno de los

aspectos clave a la hora de valorar una aplicación informática. Un diseño de pantallas

adecuado a cada usuario reduce el tiempo de aprendizaje y motiva al usuario, lo que es casi

una garantía de éxito.

62
Los formularios son la principal interfaz o vía de comunicación entre el usuario y la base de

datos. Entre las utilidades más importantes de los formularios se pueden citar las de mostrar

y editar datos de una o varias tablas o consultas, la de controlar el flujo de la aplicación con

botones, la de inserción de datos en la base de datos o la de enviar mensajes al usuario.

Dependiendo del tamaño y número de campos de la tabla o consulta que se va a mostrar en

el formulario se decide cuál es el tipo de formulario que mejor se adapta a cada situación.

El tipo de formulario más sencillo muestra los valores de todos los campos de una tabla o

consulta. Es posible avanzar uno a uno a lo largo de todos los registros y moverse al

primero o al último de la tabla, para ver sus valores y/o modificarlos. También se puede

realizar la inserción de un nuevo registro al final de la tabla.

Figura 3-4. Botones de desplazamiento entre registros.

Para moverse entre los diferentes registros ingresados a la base o para ingresar uno nuevo

debe desplazarse mediante los botones de desplazamiento situados en la parte inferior de la

ventana activa (Ver Figura 3-4). Puede utilizar estos botones para desplazarse rápidamente

entre los registros.

63
Los formularios en Access son versátiles: permiten realizar tareas que no son posibles en

las hojas de datos tabla o consulta. Es posible validar las entradas con base en la

información contenida en otras tablas distintas a la editada. Se pueden crear formularios

que incorporen otros formularios (subformularios). Además, desde un formulario, es

posible realizar cálculos y mostrar totales o activar distintas funciones de la aplicación.

Un formulario puede mostrar los datos de tablas o consultas con una relación uno a varios

mediante un formulario que contenga subformularios, de manera que en el formulario

principal aparezcan los datos del lado único de la relación y en el subformulario se pueda

acceder a cada uno de los datos del lado varios de la relación.

Un subformulario es un formulario dentro de un formulario. El formulario primario se

llama Formulario Principal y el formulario dentro del formulario se llama Subformulario.

Una combinación formulario / subformulario se llama a menudo Formulario Jerárquico,

formulario principal / detalle o formulario principal / secundario.

El formulario principal y subformulario de este tipo de formularios están vinculados para

que el subformulario presente sólo los registros que están relacionados con el registro

actual del formulario principal. Cuando se utiliza un formulario con un subformulario para

introducir nuevos registros, Microsoft Access guarda el registro actual en el formulario

principal cuando se introduce el subformulario. Esto asegura que los registros de la tabla

‘varios’ tengan un registro en la tabla ‘uno’ con el que relacionarse. También guarda

automáticamente cada registro conforme lo agregue al subformulario.

64
Figura 3-5. Detalle subformularios

El ejemplo más típico es el formulario correspondiente a un pedido, en el que en la parte

superior se muestran los datos propios del pedido y en la inferior los distintos artículos que

forman las líneas del mismo. En la aplicación se manejan formularios jerárquicos anidados,

es decir que, un mismo formulario puede ser subformulario (lado ‘varios’ de la relación)

para una relación de datos y ser al tiempo formulario principal (lado ‘uno’ de la relación)

para otra. La figura 3-5 presenta formularios anidados que muestran esta condición.

Los formularios son la parte de la aplicación que va a estar a disposición de los usuarios,

constituyendo el núcleo de la interfaz aplicación-usuario. Por eso es necesario tener un

especial cuidado en su diseño y construcción. Los usuarios que manejen los formularios

deben encontrarlos sencillos y eficientes. Aunque es posible utilizar las hojas de datos de

65
tablas y consultas para realizar muchas de las funciones de los formularios, éstos tienen la

ventaja de presentar la información de forma clara y ordenada. Un formulario

convenientemente diseñado acelera la introducción de datos y minimiza los errores de los

usuarios.

Un formulario especial es el panel de control que funciona como un menú, esto facilita la

realización de tareas en una base de datos al permitir direccionar al usuario a los

formularios específicos. Frente a cada uno de los elementos que conforman el panel de

control hay un botón que al hacer clic en él abre el formulario relacionado.

Controles

Los controles son los objetos que forman el formulario para componer su aspecto externo o

para editar los contenidos de las tablas o consultas. El control más habitual es la caja de

texto (text box) pero hay otros controles que pueden resultar más adecuados para

determinados tipos de datos. Entre otros tenemos las listas (list), la lista desplegable

(combo list), y para datos que sólo puede tomar dos valores (verdadero o falso, uno o cero,

etc.) el botón de verificación (Check box). Uno de los controles más utilizados es el botón

de comando (command button) especialmente útil para controlar el flujo de la aplicación,

ya que permite que determinada acción no comience hasta que sea requerida por el usuario,

entre otras.

66
3.2 ESTRUCTURA DE LA APLICACIÓN

3.2.1 Modelos de datos.

Para describir la estructura de una base de datos es necesario definir el concepto de moldeo

de datos, una colección de herramientas conceptuales para describir datos, relaciones entre

ellos, semántica asociada a los datos y restricciones de consistencia. Los diversos modelos

de datos basados en objetos se dividen en tres grupos: modelos lógicos basados en objetos,

modelos lógicos basados en registros y modelos físicos de datos.51 En este proyecto

trabajamos solo con el primero.

Los modelos lógicos basados en objetos se usan para describir datos en los niveles

conceptual y de visión. Se caracterizan por el hecho de que proporcionan capacidad de

estructuración bastante flexible y permiten especificar restricciones de datos

explícitamente. Hay muchos modelos diferentes, y es probable que aparezcan más. Algunos

de los más extensamente conocidos son:

• El modelo funcional de datos.

• El modelo entidad-relación.

• El modelo orientado a objetos.

51
KORTH, Henry F y SILBERSCHATZ, Abraham. Fundamentos de bases de datos. 2 ed. España : Mc
Graw Hill, 1995. p. 6-7.

67
Modelo funcional.

El modelo funcional muestra la forma en que se derivan los valores producidos en un

cálculo a partir de los valores introducidos. Consta de múltiples diagramas de flujo de

datos, que muestran el flujo de valores desde las entradas externas a través de las

operaciones y almacenes internos de datos hasta las salidas externas.

Los diagramas de flujo de datos son una herramienta gráfica que se emplea para describir y

analizar el movimiento de datos a través de un sistema, ya sea que éste fuera manual o

automatizado, incluyendo procesos, lugares para almacenar datos y retrasos en el sistema.

Los diagramas de flujo de datos son la herramienta más importante y la base sobre la cual

se desarrollan otros componentes. La transformación de datos de entrada en salida por

medio de procesos puede describirse en forma lógica e independiente de los componentes

físicos (computadores, archivos) asociados con el sistema.

A menudo el diagrama de alto nivel se denomina ‘diagrama de contexto’ o ‘nivel cero’.

Contiene un solo proceso pero juega un papel muy importante en el estudio del sistema en

uso. El diagrama de contexto define el sistema que va ha ser estudiado en el sentido que

determina las fronteras. Los procesos de bajo nivel son operaciones que se desagregan de

acuerdo a los procesos macros, como nivel 1, nivel 2 y así sucesivamente.

Los métodos para el análisis de flujo de datos fueron desarrollados y promovidos al mismo

tiempo por dos organizaciones (Yourdon Inc., Mc Donnell-Douglas.) En el desarrollo de la

68
aplicación de utiliza el enfoque de Yourdon el cual utiliza cuatro notaciones sencillas,

símbolos especiales o iconos y anotaciones que los asocian con un sistema especifico.52

1. Flujo de datos (flecha): movimiento de datos en determinada dirección desde un origen

hacia un destino en forma de documentos, cartas, llamadas telefónicas o virtualmente

por cualquier otro medio. El flujo de datos es un ‘paquete’ de datos.

2. Procesos (circulo): personas, procedimientos o dispositivos que utilizan o producen

(transforman) datos. No se identifica el componente físico.

3. Fuente o destino de los datos (cuadro): fuentes o destinos externos de datos que pueden

ser personas, programas, organizaciones u otras entidades que interactúan con el

sistema pero se encuentran fuera de su frontera.

4. Almacenamiento de datos (líneas paralelas): es el lugar donde se guarda los datos o al

que hacen referencia los procesos en el sistema. El almacenamiento de datos puede

representar dispositivos tanto computarizados como no computarizados.

52
SENN, James A : Análisis y diseño de sistemas de información. 2 ed. México : Mc Graw Hill, 1992. p 181.

69
Cada componente en un diagrama de flujo de datos tiene una etiqueta con un nombre

descriptivo. Los nombres de los procesos también reciben un número que es utilizado con

fines de identificación.

Diagramas de flujo
políticas y
estrategias

Dirección requerimientos
y de inversion Finanzas
Gestión
0

comportamiento Planeación capital


de competencia de disponible
la
producción
pronósticos requerimiento
de demanda de personal

Mercadeo datos de
datos de Recursos
y personal
clientes orden entrada Humanos
Ventas
de materiales

Ingeniería
Compras datos de de
procesos procesos
orden de compra

Figura 3-6. Nivel 0. Planeación de la producción.

Los diagramas de flujo que se muestran a continuación detallan la información utilizada

para la creación de la base de datos.

Los diagramas están estructurados por niveles que representan la jerarquía de la planeación

de la producción. Se inicia en el nivel 0, superior (Ver Figura 3-6.), y se profundiza hasta el

nivel 3 de la planeación a corto plazo. Mostrando en ellos los procesos, las entidades y los

flujos de información que los relacionan.

70
objetivos a
largo plazo
DIRECCIÓN
Y
GESTIÓN
presupuesto políticas y
de producción estrategias

Centro
nivel de fuerza laboral Personal
de
1
Costos

aprobación de
fondos personal asignado

PLANEACIÓN A LARGO PLAZO

ventas reales

estimaciones
de demanda Ventas Compras
a largo plazo datos plan pedidos
agregado comprometidos
clientes

orden de compra
Planeación de materiales
Pronósticos datos familias
Agregada 2
agregadas

estimaciones de demanda a mp.


PLANEACIÓN A MEDIANO PLAZO
orden de entrada de materiales

Lista de materiales
mix de productos
Mercadeo MRP

órdenes
de pedido
materiales disponibles
planificadas
Métodos
Inventarios de
requerimientos de materiales Programación
métodos
requeridos
métodos
solicitados
capacidad detallada
CRP
3
datos capacidad planificada

ajustes de capacidad
PLANEACIÓN A CORTO PLAZO

(HPP-S)
orden producción

programación de las operaciones


Planta
control

datos de producción diaria

Figura 3-7. Nivel 1. Sistema de Planeación Jerárquico.

71
La figura 3-7 presenta y relaciona los tres niveles del sistema de planeación jerárquica,

centrándonos en el tercer proceso ‘planeación corto plazo’ que es el origen de la aplicación

‘HPP-S’.
Lista de
Materiales

MRP datos cliente Clientes

Órdenes 3.1
de pedido
planificadas métodos requeridos
solicitud Métodos
PREPARACIÓN datos cliente de
PEDIDO Programación
datos producto
solicitud de métodos
3.2
seleccionar gráfico

Producto SCHEDULING

pedidos
asignados
datos pedido
pedidos para Gráficos
programar de
Gantt

datos del carga ct


centro de pedidos
trabajo programados

PLANTA orden de
DE producción
PRODUCCIÓN

datos de producción diarios 3.3

control de la capacidad
CRP CONTROL

capacidad
planificada ajustes de
capacidad

Figura 3-8. Nivel 2. Planeación a corto plazo.

La figura 3-8 desagrega el tercer proceso de la ‘planeación corto plazo’ de la figura

anterior, en los tres procesos básicos tomados para el modelo de datos, soporte para el

diseño de la aplicación ‘HPP-S’.

72
Producto

datos producto

componentes
productos
Estructura
Producto
3.1.1

partes componente
producto
INGRESAR
DATOS Partes
PRODUCTO Componente
datos productos

detalles rutas
producto
Rutas
producto

Hoja detalle ruta


de datos personales
ruta CLIENTE
3.1.2

INGRESAR
RUTAS
3.1.4

Centro detalle CT INGRESAR


de DATOS
trabajo CLIENTE
factor de
utilización

datos producto

Producto

datos cliente

Tiempo
de programación
Entrega hacia delante
3.1.3 elemento

cantidad a emitir

INGRESAR tipo
DATOS Cantidad
PEDIDOS requerida
unidad
detalle pedido

duración en
días de
fecha de entrega operaciones
Pedido

fecha de emisión
# pedido

Programacion
detallada

carga por
operación al
CT

Figura 3-9. Nivel 3. Planeación a Corto Plazo - Preparación Pedido.

73
La figura 3-9 desagrega el subproceso 3.1 ‘preparación pedido’ de la figura anterior en las

operaciones desarrolladas a este nivel mostrando el flujo de datos generado. Contiene el

ingreso de datos para los clientes, producto, rutas y pedido.

Control pedido

rutas producto Carga


Pedido
3.2.1

detalle pedido

Control Carga
ASIGNACIÓN
Producción Operaciones
Rutas producto
rutas iniciadas

control operaciones

datos del CT
cargas por CT

N/1CT/Mmaq
MÉTODO
3.2.2 HÚNGARO

datos del CT
datos de
N/1
las máquinas
CT/1maq
carga operaciones SECUENCIACIÓN
REGLAS
DE
PRIORIDAD

N/2CT
REGLA órdenes Planta
DE datos del CT
secuenciadas
JOHNSON

Figura 3-10. Nivel 3. Planeación a Corto Plazo - Scheduling.

La figura 3-10 desagrega el subproceso 3.2 ‘scheduling’ de la figura 3-8 en las operaciones

desarrolladas a este nivel mostrando el flujo de datos generado. Contiene la asignación y

secuenciación.

74
La figura 3-11 desagrega el subproceso 3.3 ‘scheduling’ de la figura 3-8 en las operaciones

desarrolladas a este nivel mostrando el flujo de datos generado. Contiene básicamente el

subproceso de análisis de la capacidad por periodo.

carga operaciones
Producción
Producción Real
Planeada centros periodo
trabajo
3.3.1 avance
producto
gráficos de Gantt ANÁLISIS
POR
PERIODO

control input/output ajustes de


capacidad
INPUT/OUTPUT CRP

Figura 3-11. Nivel 3. Planeación a Corto Plazo - Control.

Modelo entidad - relación

Es una descripción del aspecto del mundo real que el diseñador intenta capturar en un

sistema de información, en este modelo, la estructura se describe por un conjunto de

entidades u objetos de interés relacionados entre sí por interrelaciones que son la relación

que vincula a dos o más entidades no necesariamente distintas.53 Estas relaciones pueden

53
RUMBAUGH et al. Modelado y diseño orientado a objetos. 4 ed. México : Prentice may, 1995

75
ser: relaciones 1:1 , uno a uno; relaciones 1: , uno a varios; relaciones : , varios a

varios.

En Access la relación entre tablas se muestra por líneas que las une. Para evitar que se

generen errores en las bases de datos permite usar integridad referencial obligatoria para

cada una. La integridad referencial es lo que en realidad le da poder a la relación, ya que se

asegura que no exista un registro ‘varios’ que no coincida con un registro en ‘uno’. Además

esta también permite habilitar las opciones de: actualizar en cascada los campos

relacionados y Eliminar en cascada los registros relacionados.54

La integridad referencial es entonces un sistema de reglas que utiliza Access para garantizar

que las relaciones entre los registros de tablas relacionadas son válidas y que no se eliminan

ni modifican accidentalmente datos relacionados.

3.2.2 Tablas.

Las tablas son los almacenes de datos, y su diseño consiste en la definición de los campos

necesarios para almacenar correctamente la información en la base de datos.

Detallamos ahora cuales son y como están definidos los campos para cada una de las 20

tablas que conforman la base de datos de la aplicación ‘HPP-S’ sin profundizar en la

explicación de cada campo.

54
NEIBAUER, Alan. Access 2000 para gente ocupada. Mexico : Mc Graw Hill, 2000. p. 183

76
Centro_trabajo
Idcentro Auto numérico Clave principal
Nombre_centro Texto
cap_d_hr_reales Numérico
cap_d_hr_estándar Numérico
Eficiencia Numérico
Utilización Numérico
t_ medio_preparación Numérico
t_medio_de_cola Numérico

Clientes
Idcliente Auto numérico Clave principal
Nombre_cliente Texto
Teléfono Texto

Componentes
Idcomp Auto numérico Clave principal
Producto Numérico
Material Numérico
Cant Numérico
Idund Numérico
Idlistaruta Numérico
Factor Numérico

Componentes1
Idcomp1 Auto numérico Clave principal
Idcomp Numérico
Material Numérico
Cant Numérico

77
Idund Numérico
Idlistaruta Numérico
Factor Numérico

Componentes2
Idcomp2 Auto numérico Clave principal
Idcomp1 Numérico
Material Numérico
Cant Numérico
Idund Numérico
Idlistaruta Numérico
Factor Numérico

Control_operaciones
Idcontxopr Auto numérico Clave principal
Idcontrolruta Numérico
Idoperación Numérico
Iniciada Sí/No
Terminada Sí/No

Control_ruta
Idcontrolruta Auto numérico Clave principal
Idpedido Numérico
Idproducto Numérico
Nombre_ruta Texto
Cant_emitir Numérico
Cant_pend Numérico
cantidad Numérico
Iniciada Sí/No
Terminada Sí/No

78
Detalle_pedido
Iddetallepedido Auto numérico Clave principal
Idpedido Numérico
producto Numérico
cantidad Numérico
Iniciada Sí/No
Terminada Sí/No

In_out
Idin_out Auto numérico Clave principal
Idper Numérico
Idcentro Numérico
Hr Numérico
Input_planeado Numérico
Input_real Numérico
output_planeado Numérico
output_real Numérico

Lista_materiales
Idmaterial Auto numérico Clave principal
material Texto
Tipo Texto

Lista_rutas
Idlistaruta Auto numérico Clave principal
Nombre_ruta Texto
Factor Numérico

Máquinas
Idmaq Auto numérico Clave principal

79
Idcentro Numérico
Idoperación Numérico
operación Texto
Maq1 Numérico
Maq2 Numérico
Maq3 Numérico
Maq4 Numérico
Maq5 Numérico
Maq6 Numérico
Maq7 Numérico
Maq8 Numérico
Maq9 Numérico

Operaciones
Idoperación Auto numérico Clave principal
Idlistaruta Numérico
Centro Numérico
Operación Texto
T_ejec Numérico
T_medio_desplaz Numérico
Aprovech Numérico
Fact Numérico

Operaciones_CT
IdoperxCT Auto numérico Clave principal
Centro Numérico
Operacion Texto

Pedidos
Idpedido Auto numérico Clave principal

80
Cliente Numérico
Fecha_emisión Fecha/hora
Fecha_entrega Fecha/hora
F_entrega _real Fecha/hora
Iniciado Sí/No

Periodo
Idper Auto numérico Clave principal
Fecha Fecha/hora

Productos
Idproducto Auto numérico Clave principal
Producto Texto
Idlistaruta Numérico
Factor Numérico

Switchboard Items
switchboardID Numérico Clave principal
ItemNumber Numérico
ItemText Texto
command Numérico
Argument Texto

Tipo
Idtipo Auto numérico Clave principal
tipo Texto

Unidad
Idund Auto numérico Clave principal
unidad Texto

81
3.2.3 Modelo entidad – relación en la aplicación

En general, nunca se debe poner toda la información que se tenga en una sola tabla. Por

definición, mientras más campos e información se disponga en una tabla, más difícil será

trabajar con ella. La mayor parte de las veces se debe dividir la información en dos o más

tablas, y luego se le indicará a Access qué relación tienen las tablas entre sí. Se relacionan

las tablas unas con otras mediante uno o más campos para que los registros de cada una

coincidan. En una base de datos, se pueden crear varios tipos de relaciones. En una relación

de las que se denominan uno a uno, cada registro de una tabla se relaciona sólo con un

registro en la otra. Así por cada registro con la dirección de un cliente existe un solo

registro de crédito. También puede haber relaciones llamadas uno a varios, esto significa

que un registro en una tabla puede estar relacionado con uno o más registros en otra tabla.

El registro de un cliente en la tabla clientes, puede estar relacionado con más de un registro

de la tabla pedidos.55

Las relaciones que existen en la base de datos se dividen principalmente en tres bloques que

forman la estructura principal:

• Las relaciones para identificar el producto, sus componentes y rutas. Figura 3-12.

• Las relaciones para identificar los pedidos. Figura 3-13.

• Las relaciones para realizar la carga a planta de los pedidos y su posterior control

durante la elaboración. Figura 3-14.

55
Ibid., p. 17-18.

82
Figura 3-12. Relaciones producto

Figura 3-13. Relaciones pedidos

83
Figura 3-14. Relaciones control

Como se mencionó la base de datos en Access principalmente tiene la función de captura

de datos mientras que la hoja de cálculo de Excel tiene la función de manipulación de los

mismos. Pero hay que controlar lo que se envía a Excel para obtener datos veraces al

momento de servir de apoyo en la toma de decisiones. Es por eso que Access también hace

filtros para la información que está guardada en la base de datos por medio del uso de

casillas de verificación, las cuales al estar marcadas o no, permiten controlar la información

que se presenta en los formularios a medida que se navega por ellos. Es así, como esta

condición de iniciado/terminado, sí/no, permite o habilita la aparición en pantalla de

información (datos), como en el caso de los pedidos entregados o pendientes, que de

calcularse cuando no son necesarios (por ejemplo pedidos entregados) aumentan el tamaño

en bytes – espacio de disco – de la base de datos (archivo en Access).

84
Figura 3-15. Datos ruta P1

Como Excel procesa los datos pero Access los guarda, éste último puede también generar

nuevos datos con los almacenados. Como es el caso del tiempo de entrega o tiempo de

suministro y de la carga (ejecución + preparación).

Figura 3-16. Relaciones tiempo de suministro

El cálculo del tiempo de suministro y la carga se realiza siguiendo el ejemplo 5.1 del libro

de Machuca56, de donde traemos los datos de la ruta P1 (Ver Figura 3-15). Las relaciones

en la aplicación para este fin se muestran en la figura 3-16. Las ecuaciones se explican a

56
MACHUCA DOMÍNGUEZ, José Antonio et al. Aspectos tácticos y operativos en la producción y los
servicios, Op cit., p. 160

85
continuación. (Sin tener un tiempo para la confección del pedido, la espera final ni la

inspección.)

Figura 3-17. Datos centros de trabajo

Tomando el tiempo de suministro como el intervalo de tiempo que transcurre entre el

momento en que se solicita un pedido y el instante de su llegada, entendida ésta como el

momento en que está disponible para ser utilizado, se desglosa este tiempo en sus distintos

componentes, considerando las distintas operaciones necesarias para obtener cada ítem, los

centros de trabajo en que se realizan, la capacidad diaria disponible en horas reales y en

horas estándar. La figura 3-17 muestra los datos de los centros de trabajo para la ruta ‘P1’.

Desplazamiento a CT3 1 hr./8,5 (hr. /día) = 0,12 días


Cola en CT3 = 4 hr./ 5,45 (he./día) = 0,73 días
Preparación CT3 = 1 he./5,45,(he./día) = 0,18 días
Ejecución O1 = 5,48 min.e x 186 un x 0.9124 = 15.48 he./5,45 (he./día) = 2,84 días

Desplazamiento a CT2 1 hr./8,5 (hr. /día) = 0,12 días


Cola en CT2 = 4 hr./ 6,5 (he./día) = 0,62 días
Preparación CT3 = 1 he./6,5 (he./día) = 0,15 días
Ejecución O2 = 1,04 min.e x 186 un x 0.9124/60 (min.e/he.) = 2,94 he = 2,94 he./6,5
(he./día) = 0,45 días

Desplazamiento a CT3 2 hr./8,5 (hr. /día) = 0,24 días


Cola en CT3 = 4 hr./ 5,45 (he./día) = 0,73 días
Preparación CT3 = 1 he./5,45,(he./día) = 0,18 días
Ejecución O3 = 1,53 min.e x 186 un x 0.9124/60 (min.e/he.) = 4,32 he./5,45 (he./día)=
0,79 días

Tiempo de suministro total = 7,15 días

Figura 3-18. Cálculo tiempo de suministro.

86
De esta forma, se ve claramente el desarrollo de cada proceso y los tiempos que ello

implica; por ejemplo para obtener un lote de 186 unidades de P1 se comienza realizando la

primera operación en el primer centro de trabajo según la ruta, continuando con la segunda

y así sucesivamente. La suma de todos estos tiempos da lugar al tiempo de suministro total.

(Ver Figura 3-18).

En la figura anterior el lado izquierdo muestra como se construyo en la aplicación los

cálculos del lado derecho provenientes del apéndice 5A de Machuca57. La diferencia en los

totales en el tiempo de suministro, se debe al uso de más cifras significativas en la

aplicación creada.

Las ecuaciones para el cálculo de la carga se usan los datos de la ruta y los del centro de

trabajo por donde pasa. La carga se calcula en horas estándar (h.e) para cada operación de

la ruta tomando en cuenta para cada una los valores propios al centro de trabajo por donde

pasa.

Carga (h.e) = ejecución (h.e) + preparación (h.e) [tiempo medio de preparación del CT]

donde

ejecución (h.e) = unidades lote x [ tei (min) / vi ] x factor ruta / 60 (min).

57
Ibid., p. 190

87
En la ruta de ‘P1’ los valores para la carga por operación en cada centro de trabajo son:

para la operación 01 de 16,15 h.e, para la operación 02 de 3,94 h.e, y para la operación 03

última de 5,33 h.e.

Figura 3-19. Carga por operación y duración.

Observe en la figura anterior para las 3 operaciones de la ruta ‘P1’, el tiempo (duración) en

días necesarios para elaborar el producto, y la carga que se genera por las 186 unidades

requeridas.

3.3 ELEMENTOS OPERACIONALES

Tratamos ahora los elementos que se tuvieron en cuenta al momento de construir la

aplicación para un mejor procesamiento de la información: una aproximación al job shop

por medio de Johnson. La versión del Office en la que debe ejecutarse la aplicación, las

barras de apoyo para complementar la aplicación, consideraciones sobre el funcionamiento

de algunos formularios y su razón de ser.

3.3.1 Aproximación al Job-Shop

Aunque la aplicación se diseño para empresas que tienen configuración orientada al Flow-

shop. En el caso de empresas que suelen fabricar bajo pedido (job shop), se da la opción

88
por medio de Johnson para realizar una programación de los centros de trabajo que son

utilizados en el desarrollo de una o varias operaciones en las rutas de algunos de los

componentes.

Para filtrar los datos antes de enviarlos a Johnson en Excel, se tomó en cuenta lo siguiente:

dada la complejidad para dejar de forma automática el cargar un centro de trabajo luego

que el usuario eligiera uno, por la variedad de opciones que se deberían tener en cuenta, por

ejemplo cargar el centro 3 al seleccionar el 2 o el 2 al seleccionar el 1, pues por variedad en

la composición de las rutas algunas pasaran del centro 1 al 3, otras entraran al centro 2 sin

pasar por el 1 o las que del centro 2 no pasan al 3 sino que regresan al 1.

Por la complejidad que se toma el tratar de desarrollar un algoritmo para que cubra esas y

muchas otras condiciones se deja en manos del usuario, que sea él, quien conociendo los

dos centros que desea analizar, seleccione y ordene los centros según requiera.

Internamente lo que se hizo en la aplicación fue realizar dos consultas, la segunda

vinculada a la primera, donde la primera filtra para el centro de trabajo seleccionado las

rutas y cargas de las operaciones iniciadas en el centro; la segunda busca entre las rutas

resultado de la primera consulta, cuales pasan por el centro seleccionado en segundo lugar,

mostrando el número de operación en el centro 2 y su respectiva carga.

Después de esto se envían a Excel los datos resultado de las consultas para ser ordenados

según la regla de Johnson, como se mencionó en el capítulo anterior.

89
3.3.2 Sistema operacional.

La aplicación desarrollada funciona correctamente bajo el Office 2000 o superior. En

prueba realizada al convertir el archivo en Access a una versión anterior y el ejecutarla en

un computador con un Office inferior se presentaron problemas por el no-reconocimiento

de algunos códigos o comandos.

Durante el desarrollo de este documento se ha hecho mención a la integridad de la

planeación y en ese sentido a que deben tenerse unos datos resultado del mediano plazo que

son elementos de entrada para éste el corto plazo, así como la información proveniente de

la propia empresa del conocimiento de sus procesos: información del mediano plazo en el

MRP y de la empresa en sus productos, rutas y centros de trabajo.

Independientemente de sí el sistema de programación de las operaciones sea manual o

automático, debe ser preciso y apropiado. Esto significa que necesita una base de datos de

producción con archivos de planificación y control. Existen tres tipos de archivos de

planificación que son: (1) el archivo maestro de artículos, que contiene información sobre

cada componente que la empresa fabrica o compra; (2) un archivo de rutas, que indica la

marcha de cada componente por el centro de trabajo; y (3) un archivo maestro del centro de

trabajo, que contiene la información sobre el centro de trabajo, como la capacidad y la

eficiencia.58

58
HEIZER, y RENDER, Op cit., p. 207-208.

90
Como el objetivo de este proyecto es el de entregar una aplicación funcionando, se

adecuaron los espacios para ingresar la información necesaria para que la planeación a

corto plazo se realice. Es por eso que en el interior de la aplicación se creo un MRP

modificado al no contener los tiempos de reposición, elemento éste que sí es importante en

la planeación a mediano plazo.

Barras de menú y herramientas.

La aplicación cuenta con una barra de menú y una barra de herramientas que ofrecen al

usuario rapidez al momento de interactuar con la misma permitiéndole accesos directos a

formularios y funciones.

Figura 3-20. Barra de Menú de la Aplicación

Figura 3-21. Barra de Herramientas de la Aplicación.

Mostramos ahora el despliegue de los nombres que integran la barra de menú sin detallar en

algunos submenú su contenido: Archivo, Edición, Registros, Información, General,

Preparación pedido, Scheduling, Control, Ventana y para terminar la ayuda ‘?’ (símbolo

interrogante)

91
Figura 3-22. Barra de Menú- Archivo y Edición.

En el menú Archivo la opción compactar y reparar base de datos es útil para mantener el

tamaño del archivo en espacio de disco acorde con los datos ingresados y evitar que se

explosione por los diferentes cálculos que se realizan en su interior.

Figura 3-23. Barra de Menú- Registros, Información y General.

En ‘Datos empresa’ del menú General se encuentra el formulario donde, como su nombre

lo indica, se ingresan los datos propios a la empresa: nombre, nit, teléfonos, fax, etc.

92
Figura 3-24. Barra de Menú- Preparación Pedido.

El menú preparación pedido contiene las divisiones del panel con el mismo nombre, y

dentro se han colocado los submenú ‘Ingresar datos producto’ y ‘Ingresar datos ruta’ que se

despliega al ubicarse sobre cada uno. Esto para reunir en un solo menú los datos que se

deben ingresar a la base.

Figura 3-25. Barra de Menú- Scheduling.

Los dos últimos submenús de la barra de menú, figura 3-26, son los convencionales que

vienen en la barra de menús de los programas del office: ventana y ayuda.

93
Figura 3-26. Barra de Menú- Ventana y ?.

Selección en formularios.

Se crearon formularios donde se guía al usuario y se le da libertad de elegir o seleccionar

los nombres de rutas u operaciones que vaya a iniciar por medio de formularios

relacionados que crean formularios de selección, debido a la imposibilidad que ofrece

Access como base de datos relacional de heredar características de las tablas padre

relacionadas, como sí ocurre en las bases de datos orientadas a objetos.

Por eso, como no se logró cargar de forma automática las operaciones asociadas a una ruta

o las rutas a un producto, se dio solución a esté inconveniente ofreciendo al programador la

facilidad de que sea el mismo quien controle todo el proceso, decidiendo que se hace y en

que momento.

Una ventaja divisada en esta solución es la posibilidad de indirectamente manejar la

aplicación con los valores o cantidades reales por las existencias en los diferentes

inventarios, teniéndose así, el no tener que iniciar una ruta desde la operación inicial si ya

se encuentra algún material en proceso o el no tener que cargar todas las rutas para elaborar

un producto al tener existencia de alguna.

94
4. LÓGICA DE LA APLICACIÓN

4 CAPÍTULO 4. LÓGICA DE LA APLICACIÓN.


Este capítulo inicia aclarando los conceptos teóricos que se tuvieron en cuenta para el

desarrollo de algunos formularios de la aplicación. Luego, se describen las partes que

componen la aplicación diseñada haciendo un recorrido sobre la misma. Terminando con

algunos comentarios dirigidos al usuario sobre las posibilidades que tiene la aplicación

desarrollada al no ser tan rigida.

4.1 CONCEPTOS TEÓRICOS DE LA APLICACIÓN

El proyecto se basa en la integración jerárquica de los diferentes niveles de la planeación.

Para el corto plazo se hace referencia a los datos que provienen del nivel anterior según

sean requeridos. Los conceptos teóricos se mencionarán según se aplicaron en la

realización de los diferentes formularios que se muestran en la herramienta desarrollada.

(Ver Figura 4-1)

95
Figura 4-1. Formularios en la aplicación.

La figura 4-1 muestra para las tres divisiones principales de la aplicación: los formularios

que tienen conceptos teóricos y el orden de aparición de los mismos. Para explicar mejor el

concepto dentro de la estructura de cada formulario utilizamos el producto ‘Silla’. (Ver

Figura 4-2)

96
Figura 4-2. Diagrama de ensamblado para el producto ‘Silla’.

Partes/componestes.

Los componentes y cantidades para una unidad del producto ‘Silla’ son:

1 F (1) = Sub ensamble asiento patas delanteras cantidad 1


2 G(1) = Sub ensamble respaldo patas traseras cantidad 1
3 E(4) = Remaches cantidad 4
4 A(1) = Marco asiento patas delanteras cantidad 1
5 E(4) = Remaches cantidad 4
6 C(1) = Asiento cantidad 1
7 B(1) = Marco respaldo patas traseras cantidad 1
8 E(4) = Remaches cantidad 4
9 D(1) = Respaldo cantidad 1
10 RMa = Insumo
11 RMb = Insumo
12 RMc = Insumo
13 RMd = Insumo

Los nombre de las partes o componentes que son usados en la elaboración de los diferentes

productos ofrecidos por la empresa se ingresan a la base de datos. Teniéndose así, una lista

97
única que centraliza y codifica cada parte o componente que requiere la empresa para su

normal funcionamiento, ya sean externos – insumos - o internos – componentes,

subcomponentes, subensambles, etc.-

Estructura del producto.

Con el listado de partes/componentes generado se realiza después el ‘armado’ de cada

producto según sea su composición. Aquí se usa el concepto de lista materiales que hace

una descripción clara y precisa de la estructura que caracteriza la obtención de un

determinado producto mostrando claramente:

• Componentes que lo integran

• Las cantidades necesarias de cada uno de ellos para formar una unidad del producto

• La secuencia en que los distintos componentes se combinan para obtener un artículo

intermedio o final.

En el formulario estructura producto por los enlaces entre los subformularios anidados que

lo conforman, se puede armar el árbol del producto al desagregarse hasta cuatro niveles:

producto, componente, subcomponente1 y subcomponente2. Diferenciando niveles de

fabricación y montaje.

La división por niveles facilita la explosión de las partes requeridas MRP para un producto

terminado particular. La estructura presenta la siguiente lógica:

98
Nivel 0 (Producto): El producto terminado, como resultado del ensamble de varios

componentes; es el nivel más complejo de la lista.

Nivel 1 (Componentes): Los componentes unidos directamente a un elemento de nivel 0,

identificando su tipo.

Nivel 2 (Componentesub1): Los componentes unidos directamente a un elemento de nivel

1, identificando su tipo

Nivel 3 (Componentesub2): Los componentes unidos directamente a un elemento de nivel

2, identificando su tipo.

Figura 4-3. Árbol Estructura del producto ‘Silla’.

La figura muestra el árbol de estructura para el producto ‘Silla’ La forma como se obtiene

el producto a partir de la unión de cada una de sus partes.

99
La aplicación se diseño para soportar productos que se desagreguen hasta un tercer nivel.

Porque al incrementar en la base de datos el número de niveles aumenta la complejidad en

su diseño, dificultando a su vez, la presentación completa del formulario en la pantalla

debido a su tamaño.

La estructura diseñada es útil para presentar el árbol estructura del producto que se apoya

en el concepto de Lista de materiales descrito anteriormente. (Ver Figura 4-3)

Centros de trabajo.

Los centro y las operaciones que interviene en la realización del producto ‘Silla’son:

1. CORTE.
1. Medición.
2. Corte de pieza.
3. Mecanizado.
2. TROQUELADO.
4. Doblado pieza.
5. Lijado.
3. PERFORADO.
6. Medición.
7. Perforado.
4. TERMINADO.
8. Pintura.
9. secado.
5. ENSAMBLE.
10. Armado.
11. Remachado.

Detalle centros de trabajo.

Los datos de los centros de trabajo para el ejemplo son:

100
Capacidad Capacidad Tiempo medio Tiempo
id Nombre centro diaria horas diaria horas eficiencia utilización preparación medio de
reales estándar (h.e) cola (h.e)
1 CORTE 8,5 8,16 0,98 0,98 1 3
2 TROQUELADO 8,5 6,50 0,9 0,85 1 4
3 PERFORADO 8,5 5,44 0,8 0,8 1 4
4 TERMINADO 8 6,12 0,9 0,85 0,15 0
5 ENSAMBLE 8 6,62 0,92 0,9 0,1 0

La capacidad para los centros de trabajo se determina en el mediano plazo mediante

factores y tiempos. En la aplicación ‘HPP-S’ los factores se calculan en las hojas de ruta, y

los tiempos por centros de trabajo para el cálculo de la capacidad se ingresan en el

formulario detalles centro de trabajo. los cuales definidos a continuación:

• La capacidad diaria en horas reales (hr) es igual una jornada normal de trabajo.

• Utilización (Factor de Utilización – U). Se define como cociente entre el número de

horas productivas desarrolladas (Nhp) y el número de horas reales (Nhr) de trabajo por

periodo. (día)

• Eficiencia (Factor de eficiencia – E). Cuando una actividad u operación se repite y es

ejecutada por distintas máquinas u operarios puede desarrollar distintas eficiencias,

dando lugar a un número diferente de horas productivas en función de quien las ejecute.

Por tal razón se hace necesario la aplicación de una medida homogénea basada en los

valores de hr (horas reales), U (Utilización) y de E de referencia, al objeto de poder

compararlas. Dicha unidad se denomina hora estándar (he) y supone un valor de 1 para

los valores de Eficiencia y Utilización.

• El tiempo de preparación es el necesario para ajustar y disponer la maquinaria e

instalaciones bajo las condiciones adecuadas para llevar acabo una nueva operación

101
tras haber desarrollado otra diferente, y este valor podrá variar para una operación en

función de la cual sea previamente realizada por lo que se suele emplear el tiempo de

preparación medio.

• El tiempo de cola es el que sufre el pedido en cada uno de los centros de trabajo por los

que ha de pasar hasta que se realicen todas las operaciones que sean necesarias. Como

se asume que la empresa tiene un conocimiento del funcionamiento de sus centros de

trabajo emplearemos el tiempo de cola medio general para cada uno.

Máquinas paralelas.

Aplica el concepto de máquinas paralelas explicado en el capítulo dos, y se trabajó bajo la

idea de máquinas por ser esta la situación más tratada por los diferentes autores

consultados. Hemos realizado el montaje de este concepto ampliándolo de máquinas hasta

las operaciones. Esta definición se puede implementar para la situación de operaciones

específicas que se realizan en determinado centro. Detallándose para las rutas que pasan por

el centro de trabajo las operaciones paralelas que se presentan en éste, y para cada

operación de la ruta los diferentes tiempos de ejecución que se presentan según la

‘máquina’ donde se realice.

Hoja de ruta.

Para cada parte/componente del producto, que se elabora en la planta se toma la secuencia

de las operaciones, en cada uno de los centros de trabajo por los que pasa, asignándose a

cada secuencia un nombre representativo que la hace única en la base de datos. Además se

registran los tiempos estándar (tiempo de ejecución), tiempo de desplazamiento, y el factor

102
de aprovechamiento, que se emplean para evaluar los requerimientos de capacidad para

cada CT. (En la aplicación no se incluye en esta hoja los tiempos de espera o cola por

trabajar con tiempos medios asociados directamente a los centros de trabajo.)

El tiempo de ejecución es el tiempo necesario para desarrollar una operación una vez se

procese en el centro de trabajo correspondiente.

El tiempo de desplazamiento es el que incluye el traslado de los materiales que requiere el

pedido hasta el centro de trabajo.

El aprovechamiento es la proporción de referencias que cumplen los requisitos de calidad

en cada una de las operaciones y es igual a (1-defectuosos)

Normalmente de cada una de las operaciones, que forman la ruta de un componente o de un

producto final, se obtiene una cierta proporción de elementos que no cumplen los requisitos

de calidad. Esta proporción, expresada en tanto por uno, se denomina Factor de defectuosas

(d) y su complementario (1-d), determina el Factor de Aprovechamiento. En el caso de que

cualquier operación tenga un ‘d’ > 0, habría que corregir el TCjk (tiempo de carga de cada

componente o producto final ‘j’ en un centro de trabajo ‘k’), dado que la obtención de un

elemento “bueno” originaría en realidad más carga que la calculada, es decir habría que

incluir las que han generado las piezas defectuosas en cada una de las operaciones.

103
Figura 4-4. Incidencia de los factores en la obtención de una unidad

En la figura 4-4, se observa como los diferentes valores de aprovechamiento (ai) por

operación generan que para obtener 1 unidad de ‘P1’ se debe emitir una orden por 1,10

unidades. Esto es, en caso de ser requeridas 100 unidades de ‘P1’ hay que emitir una orden

por 110 unidades.

Para el producto ejemplo se identifican 7 hojas de rutas que son:

Silla = Silla
F = Asiento patas delanteras
G = Respaldo patas traseras
A = Marco asiento patas delanteras
C = Asiento
B = Marco respaldo patas traseras
D = Respaldo

En cada hoja de ruta se detallan las siguientes operaciones:

Ruta # oper Centro de trabajo Operación t ejec t desplaz aprovech


A 1 CORTE Medición.
A 2 CORTE Corte pieza.
A 3 CORTE Mecanizado.
A 4 TROQUELADO Doblado pieza.
A 5 TROQUELADO Lijado.
A 6 PERFORADO. Medición.

104
A 7 PERFORADO. Perforado.
A 8 TERMINADO. Pintura.
A 9 TERMINADO. secado.
B 10 CORTE Medición.
B 11 CORTE Corte pieza.
B 12 CORTE Mecanizado.
B 13 TROQUELADO Doblado pieza.
B 14 TROQUELADO Lijado.
B 15 PERFORADO. Medición.
B 16 PERFORADO. Perforado.
B 17 TERMINADO. Pintura.
B 18 TERMINADO. Secado.
C 19 CORTE Medición.
C 20 CORTE Corte pieza.
C 21 PERFORADO. Medición.
C 22 PERFORADO. Perforado.
C 23 TERMINADO. Pintura.
C 24 TERMINADO. Secado.
D 25 CORTE Medición.
D 26 CORTE Corte pieza.
D 27 PERFORADO. Medición.
D 28 PERFORADO. Perforado.
D 29 TERMINADO. Pintura.
D 30 TERMINADO. Secado.
F 31 ENSAMBLE. Armado.
F 32 ENSAMBLE. Remachado.
G 33 ENSAMBLE. Armado.
G 34 ENSAMBLE. Remachado.
Silla 35 ENSAMBLE. Armado.
Silla 36 ENSAMBLE. Remachado.

Los datos de tiempos de ejecución, tiempos desplazamiento y aprovechamiento se dejan a

libertad del usuario para ingresar los que valores que desee.

Rutas producto.

Cada parte/componente, que no sea insumo, de la estructura de un producto se relaciona

con una hoja de ruta específica. Las hojas de ruta asociadas a partes componentes en cada

uno de los diferentes niveles de la estructura forman el árbol de rutas del producto.

105
Este árbol de rutas del producto (Ver Figura 4-5) es la forma en que se expresa en

diferentes niveles de fabricación y montaje las hojas de rutas. La codificación por niveles

facilita la explosión de las necesidades a partir del elemento final y su lógica es la siguiente:

Nivel 0 (producto): Unión de las rutas necesarias para obtener el producto terminado. Esta

ruta es esencial en la elaboración del producto.

Figura 4-5. Árbol de Rutas para del producto ‘Silla’.

Nivel 1 (Ruta de ensamble): Los componentes unidos directamente a un elemento de nivel

0, identificados por su nombre.

106
Nivel 2 (Subruta de subensamble): Los componentes unidos directamente a un elemento

de nivel 1, identificados por su nombre.

Nivel 3 (Subruta de componente): Los componentes unidos directamente a un elemento

de nivel 2, identificados por su nombre.

Pedidos.

Los pedidos planificados (pedidos que se entregarán en fechas futuras) pueden ingresarse

desde el mismo instante de su solicitud, quedando a opción del programador el definir el

momento de inicio de cada uno. La aplicación tiene la opción de mostrar para todos los

pedidos ingresados, los días de retraso que tiene cada uno contra la fecha de entrega dada al

cliente, esto en las opciones pedidos pendientes hasta hoy y pedidos pendientes a la fecha.

Secuenciación.

El secuenciamiento tiene que ver con el desarrollo de un orden exacto de procesamiento de

tareas. En la práctica, los programas de producción son difíciles de mantener, si no

imposibles, debido a las condiciones cambiantes; Las máquinas se descomponen, se

enferma un operario calificado, los materiales no llegan a tiempo y así sucesivamente.59

Teniendo en cuenta lo anterior se ofrecen al programador de la producción tres

herramientas principales: reglas de prioridades, el método de asignación y la regla de

59
SCHROEDOER, Op cit., p. 388.

107
Johnson como elementos en los cuales se puede apoyar para dar rápida respuesta a las

condiciones dinámicas de una planta de producción.

Reglas de prioridad.

Una regla de prioridad específica qué trabajo debe seleccionarse para realizarlo después,

entre una cola de trabajos. Cuando se dispone de una máquina o de un trabajo, se aplica la

regla de despacho y se selecciona la tarea siguiente. Una regla de despacho resulta, por lo

tanto, dinámica por naturaleza y se ajusta constantemente a las condiciones cambiantes. Las

reglas de despacho sirven para responder la pregunta inmediata del trabajador ¿qué hago

ahora?60

En el desarrollo de esta aplicación tomamos las siguientes reglas explicadas en el capítulo

dos: FCFS, EDD, LOT y SOT, para con ellas secuenciar las cargas en cada uno de los

diferentes centros de trabajo ingresados en la base de datos.

Método húngaro.

Como se mencionó en el Capítulo dos, para operaciones paralelas la programación de n

tareas en m centros de trabajo o máquinas se vuelve matemáticamente muy compleja, por

esto cuando el caso lo permite, la utilización de los modelos basados en programación

matemática pueden proporcionar una solución teóricamente óptima al problema. El más

empleado por los diferentes autores es el Algoritmo de Asignación de kuhn, que parte de

60
Ibid, p. 403.

108
una matriz formada, en nuestro caso, por los tiempos para realizar cada operación en cada

instalación.

Este es el método que se incluyó en el desarrollo de la aplicación para dar respuesta a éste

tipo de programación. La asignación mediante el método húngaro se realiza partiendo de

una matriz que refleja los tiempos que provocaría la asignación de una determinada

operación Oi, a una máquina Mj.

El planeamiento matemático de un problema de estas características es un caso particular

de programación binaria. No obstante, existe un algoritmo específico que facilita su

resolución, el algoritmo húngaro o de Kuhn, que, partiendo de una matriz de costos, para

nosotros de tiempos, escoge un elemento, y sólo uno, por fila y por columna, de modo que

se minimicen los tiempo totales. El procedimiento que lleva a conseguir una solución

óptima para realizar la asignación se menciono en el capítulo dos, y el algoritmo que realiza

la asignación en Excel como se detalla en Machuca61, se presenta en el anexo B códigos

apartado archivos Excel.

Este método presenta algunos inconvenientes que lo hacen excesivamente rígido. Entre

ellos cabria destacar, por una parte, que de los distintos trabajos, sólo uno puede ser

asignado a cada CT o instalación. Dado que aquellos tendrán distinta duración, esto

61
MACHUCA DOMÍNGUEZ, José Antonio et al. Aspectos tácticos y operativos en la producción y los
servicios, Op cit., p. 299.

109
implicará desperdiciar las instalaciones más eficientes si a éstas se asigna un trabajo corto.

Por otra parte, no se contempla la posibilidad de que los trabajos se puedan subdividir,

puesto que la asignación es biunívoca.

Regla de Johnson.

La programación de n tareas en dos máquinas mencionada en el Capítulo dos, la incluimos

en la aplicación al desarrollar para ésta la regla de Johnson, que parte del tiempo de

ejecución de cada pedido en cada máquina, este método heurístico pretende hacer mínimo

el tiempo necesario para concluir todos ellos y, por tanto, el tiempo ocioso de las máquinas.

El algoritmo creado para realiza la regla de Johnson en Excel, se presenta en el anexo B

códigos apartado archivos Excel.

Producción planeada.

La planeación se realiza para cada centro de trabajo bajo el concepto de la carga vertical

explicado en el Capítulo dos, controlando así la capacidad del centro. El control de la

capacidad pretende “gestionar y controlar la capacidad de los centros de trabajo y reconocer

las desviaciones significativas, proporcionando así la información necesaria para tomar las

medidas correctoras oportunas”. Sólo así se podrán mantener actualizados los factores de

eficiencia y utilización y la capacidad disponible, permitiendo desarrollar una planificación

de capacidad confiable. Dada, además, la influencia que las colas de espera tienen en los

tiempos de suministro de las referencias fabricadas, el control de capacidad resulta básico

110
para su mantenimiento actualizado y, en consecuencia, para una adecuada planificación y

control de la producción62

Esta planeación es la que viene del mediano plazo por el CRP. Como la planeación a corto

plazo se realiza por periodos se creó el formulario Producción Planeada por CT para suplir

los datos del nivel anterior.

Producción planeada por CT.

La programación finita supera las desventajas de los sistemas basados en reglas ofreciendo

cálculos y gráficos interactivos al programador. Este sistema se caracteriza por dar la

capacidad al programador de hacer cambios basados en la información de última hora.

Estos programas aparecen normalmente en diagramas de Gantt. El programador tiene

flexibilidad para manejar cualquier situación, incluyendo cambios en los pedidos, trabajos o

máquinas.63 Esta flexibilidad se ofrece al usuario en este formulario por medio de los

escenarios y el archivo vinculado en Excel.

4.2 APLICACIÓN ‘HPP-S’

Para el diseño de la aplicación ‘HPP-S’ se consideró lo siguiente:

62
Ibid p. 322.
63
HEIZER, y RENDER, Op cit., p. 244.

111
• La aplicación esta diseñada para funcionar en una PYME manufacturera, que tenga sus

procesos estandarizados.

• Como ayuda puntual la mayoría de los formularios cuentan con botones de información

que orientan al usuario en el uso de estos. Así como, botones en algunos para avanzar

entre los formularios relacionados de forma rápida.

• Para el desarrollo de la aplicación se consideró que un pedido es una orden de trabajo

sin importar la cantidad de referencias que compongan el pedido.

Figura 4-6. Detalle relaciones entre paneles de control.

112
La secuencia de pasos o divisiones que contiene la aplicación según los paneles de control

para acceder a los diferentes formularios que contiene se muestra en la figura 4-6.

Figura 4-7. Panel principal

La exploración de la aplicación se inicia desde el panel principal que contiene los tres

procesos macro para funcionamiento de la misma: Preparación pedido, Scheduling y

Control (Ver Figura 4-7.)

4.2.1 Preparación pedido.

Figura 4-8. Panel preparación pedido

113
Al hacer clic en el botón Preparación pedido en el panel principal se despliega el panel que

se muestra en la figura 4-8, que contiene los vínculos a los formularios Clientes y Pedidos

como a los paneles Datos productos y Datos ruta.

La relación entre los productos de la empresa y los pedidos de los clientes, genera el flujo

de información que se apoya en los registros de la base de datos. Información sobre:

clientes, productos, rutas y centros de trabajo. Por eso, al iniciar la aplicación ‘HPP-S’ se

debe ingresar esta información.

Clientes.

Figura 4-9. Formulario clientes

Este formulario Clientes, figura 4-9, aparece después de oprimir en botón Ingresar clientes

en el panel Preparación pedido, recoge información sobre cada uno de los clientes. Lo

114
importante para el desarrollo de la aplicación es la vinculación de éstos con la empresa por

medio de los pedidos.

Figura 4-10. Panel datos producto

El panel ‘Datos productos’, figura 4-10, contiene los vínculos a los formularios Productos,

Partes/componentes y Estructura producto.

Productos

Figura 4-11. Formulario productos

115
El botón Producto del panel anterior activa el formulario de la figura 4-11, en éste se

ingresan el nombre y descripción del producto. Dándose a cada producto un identificador

que lo hace único en la base de datos.

El símbolo ‘ ‘ que aparece en el extremo izquierdo de cada formulario o subformulario

indica la fila o registro que se encuentra activo en el momento.

Partes/componentes.

Figura 4-12. Formulario partes/componentes

El botón Partes/componentes del panel ‘Datos producto’ abre el formulario de la figura 4-

12, en éste se ingresan el nombre y tipo del elemento usado en la elaboración de los

diferentes productos. Dándose a cada elemento un identificador que lo hace único en la

116
base de datos. La columna tipo es para clasificar el elemento según sea en: insumo,

componente y ensamble, tipos que aparecen en la aplicación por defecto, los cuales pueden

ser modificados o complementados con otros según la necesidad del usuario.

Estructura producto.

Figura 4-13. Formulario estructura producto.

El botón Estructura producto del panel ‘Datos producto’ abre el formulario de la figura 4-

13, en éste se forma el árbol del producto o estructura del producto al armar el producto con

las diferentes partes/componetes ingresadas en el formulario Partes/componentes, teniendo

117
presente los diferentes niveles para su composición. Indicando las cantidades requeridas y

las unidades respectivas.

Figura 4-14. Panel datos ruta.

El panel ‘Datos ruta’, figura 4-14, contiene los vínculos a los formularios Centros de

trabajo, Detalles centros de trabajo, Máquinas paralelas CT, Hoja de ruta y Rutas producto.

Centros de trabajo.

Figura 4-15. Formulario centros de trabajo.

118
El botón Centros de trabajo del panel anterior activa el formulario de la figura 4-15, en éste

se ingresan el nombre de cada centro de trabajo. Dándose a cada uno un identificador que

lo hace único en la base de datos.

Detalle centros de trabajo.

Figura 4-16. Formulario detalle centros de trabajo.

El botón Detalle centros de trabajo del panel ‘Datos ruta’ abre el formulario, figura 4-16, en

que se ingresan los detalles de los centros de trabajo usados en la planta: horas reales de

trabajo (capacidad diaria), la eficiencia, utilización y los nombres de las operaciones

realizadas en dicho centro de trabajo. Además del el tiempo medio de preparación y el

tiempo medio de cola, ambos en horas estándar.

119
Máquinas paralelas.

Figura 4-17. Formulario máquinas paralelas CT.

El botón Máquinas paralelas CT del panel ‘Datos ruta’ abre el formulario, figura 4-17, en

donde se ingresan los valores en minutos para las operaciones que son paralelas en el centro

de trabajo seleccionado. Hay posibilidad de ingresar valores hasta para nueve operaciones

paralelas.

Hoja de ruta.

El botón Hoja de ruta del panel ‘Datos ruta’ abre el formulario, figura 4-18, donde se

ingresan para cada ruta las operaciones necesarias para su elaboración, los centros de
120
trabajo por donde pasa y los valores en minutos para el tiempo de ejecución y el tiempo de

desplazamiento.

Figura 4-18. Formulario hoja de ruta.

Además del aprovechamiento por operación que genera el factor de aprovechamiento de la

ruta. Cada ruta ingresada queda identificada con un número y nombre que la hacen única en

la base de datos. En el formulario se muestran también la cantidad de operaciones de la

ruta, la suma de los tiempos de ejecución y desplazamiento por todas las operaciones

ingresadas asociadas a la ruta.

121
Rutas producto.

El botón Rutas producto del panel ‘Datos ruta’ abre el formulario, figura 4-19, donde para

un producto ingresado se seleccionan las rutas necesarias para su elaboración, teniendo en

cuenta los diferentes niveles de su estructura. Los elementos que son insumo para el

producto terminado en el árbol de rutas del producto quedarán con un factor igual a 1, pues

no tiene asociada una ruta por ser de origen externo a la planta.

Figura 4-19. Formulario rutas producto.

122
Pedidos.

El botón Ingresar pedidos del panel ‘Preparación pedido’ abre el formulario, figura 4-20,

donde se relacionan los productos con los clientes en cantidades por ellos suministradas.

Aquí se identifica cada pedido con un número único en la base de datos, se detalla la

composición del mismo y se ingresan las fechas respectivas de emisión, entrega

programada y entrega real. Desde este formulario se puede averiguar las cantidades

necesarias por cada componente para cumplir con el número de productos que el cliente

requiere. Además de, conocer la cantidad de días necesarios para la elaboración del mismo.

Figura 4-20. Formulario pedidos.

123
Cantidad requerida.

Al hacer clic en el botón Cantidad requerida de la figura 4-20 aparece el formulario

cantidad requerida por pedido, figura 4-21, el cual muestra las cantidades por tipo (partes,

componentes e insumos), con sus unidades que son requeridas para elaborar los productos

en las cantidades que aparecen en el pedido.

Figura 4-21. Formulario cantidad requerida.

Es de aclarar que las cantidades de partes/componentes que aparecen para un producto,

puede diferir de las cantidades que están en el pedido. Esto porque, al tenerse en la base de

datos registrado el factor de utilización por rutas asociadas a componentes e incluso hasta

las rutas de ensamble, las cantidades mostradas, son las que se deben emitir como entrada

124
al proceso para que luego en la salida se obtengan las cantidades requeridas por el cliente.

Contando con un margen de error establecido por los imperfectos.

Observe como las cantidades a emitir para los productos, P1 (186) y Silla (26), son mayores

a las solicitadas por el cliente en su pedido, P1 (170) y Silla (25).

Tiempo de entrega.

Figura 4-22. Formulario tiempo de entrega.

Oprimir el botón Tiempo de entrega de la figura 4-20, muestra el formulario Tiempo de

entrega el cual realiza la carga horizontal, es decir, carga todos los tiempos de las

operaciones involucradas en la orden de trabajo real para producir su programa de duración

en el tiempo. Lo que se hace, es cargar todas las tareas en los centros de trabajo necesarios

125
a lo largo del horizonte de planificación, siendo la sumatoria de todas las duraciones, el

tiempo total en días para la elaboración del pedido desde la fecha actual tomada como cero.

Figura 4-23. Habilitar macros.

Hacer clic en el botón Programación detallada del formulario Tiempo de entrega, realiza el

envió de la información en Access del pedido actual al archivo en Excel donde se

procesaran los datos según corresponda. Como los archivos en Excel tienen todos una

programación vinculada en Visual Basic – Macros – al iniciar el programa aparece el

cuadro de mensaje de la figura 4-23, al cual hay que responder haciendo clic en el botón

Habilitar macros.

Programación detallada.

El propósito de la carga hacia el futuro es determinar la fecha de terminación aproximada

de cada trabajo. La figura 4-25, es un detalle de la figura 4-24 donde muestra las fechas de

inicio y finales para cada operación asociada a la ruta que compone. Basándose en los

límites de capacidad de cada centro de trabajo por los cuales pasa.

126
Figura 4-24. Programación detallada en Excel.

La figura 4-24 es la imagen del archivo ‘detallada’ en Excel que ofrece al programador una

gráfica de Gantt, que representar el desarrollo de las diferentes operaciones a realizar para

el lote en función del tiempo.

Figura 4-25. Programación detallada – detalle inicio y fin operaciones.

La gráfica generada es sin solapamientos, es decir, se trabaja bajo la hipótesis de que no se

podrá dar comienzo a ninguna actividad hasta que se haya finalizado la operación anterior

sobre todas y cada una de las unidades a fabricar. Esta situación concuerda con el concepto

del flow shop donde hay una secuencia establecida para la elaboración de los productos En

127
estas condiciones, el gráfico de Gantt resultante da lugar a un tiempo total para el tamaño

del pedido.

Se deja al lector comprobar, que al ingresar una fecha en el campo fecha de entrega real del

formulario Pedido al oprimir los botones de comando Cantidad requerida y Tiempo de

entrega en los formularios que aparecen no se muestra ningún valor. Esto para evitar que se

generen dentro de la base de datos valores que ya no son útiles ¿para qué necesito mantener

cantidades requeridas o tiempo de programación para un pedido que ya entregue?. De esta

forma no se cargara la base con información innecesaria, conservando rapidez al usar el

mínimo espacio de memoria.

4.2.2 Scheduling.

Figura 4-26. Panel scheduling.

El panel ‘Scheduling’, figura 4-26, contiene los vínculos a los paneles de control

Asignación y Secuenciación.

Asignación.

El panel ‘Asignación’, figura 4-27, contiene los vínculos a los formularios Carga pedidos,

Carga operaciones y Control pedidos.

128
Para el desarrollo del Scheduling, hemos dividido el proceso en dos momentos que son: la

asignación o direccionado de las órdenes de trabajo a cada CT en la planta y el

secuenciamiento posterior para determinar el orden de realización de cada una.

Figura 4-27. Panel Asignación.

Como diversos centros de trabajo son capaces de procesar los nuevos pedidos de los

clientes, ¿cómo determinar cuáles trabajos deben asignarse a cada centro?. Por medio del

programa de producción podemos manejar los productos con margen de cómo y cuándo

deberán terminarse. Además, se cuenta con la trayectoria o ruta del proceso de cada

elemento, de manera que conocemos cuáles son los centros que deben intervenir.

Carga pedidos.

El botón Carga pedidos del panel ‘Asignación’ abre el formulario, figura 4-28, donde la

carga de cada pedido se realiza al marcar la casilla de verificación como iniciado en la tabla

Control pedidos, Control detalle pedido y en Control de ruta.

129
Figura 4-28. Formulario carga pedidos.

Si se selecciona alguna fila o registro de una tabla y no se marca como iniciada, la

aplicación no generará los valores de la carga respectiva pues está no se reconocerá como

iniciada.

El programador frente al formulario Carga pedidos, debe iniciar (cargar) los pedidos, los

productos que lo componen, y las operaciones que conforman cada uno de las rutas. Es

decir, debe descender desde el pedido hasta las rutas para poder calcular en el formulario

siguiente los valores de las cargas para los centros de trabajo donde se realizan las

operaciones.

130
Carga operaciones.

Figura 4-29. Formulario carga operaciones.

El botón Carga operaciones del panel ‘Asignación’ abre el formulario, figura 4-29, donde

para las rutas marcadas como iniciadas en el formulario anterior se selecciona la operación

marcándo la casilla de verificación como iniciado o terminada según sea el caso.

El programador selecciona una ruta de entre las rutas marcadas como iniciadas (tabla Rutas

iniciadas) y selecciona en la tabla Control operaciones cual de las operaciones asociadas a

la ruta elegida (tabla Operaciones), va a cargar para su manufactura marcando la casilla de

iniciada.

Si se selecciona la operación de una ruta y no se la marca como iniciada la aplicación no

mostrara en los pasos siguientes la carga para el centro de trabajo en el cual se procese.

131
Control pedidos.

Figura 4-30. Formulario control pedidos.

El botón Control pedidos del panel ‘Asignación’ abre el formulario, figura 4-30, donde

aparecen las acciones realizadas en los formularios anteriores, en este punto el programador

puede verificar que aparecen iniciadas las operaciones seleccionadas.

Pasamos a aclarar lo anterior. Recuerde que el símbolo ‘ ‘ que aparece en el extremo

izquierdo de cada subformulario indica la fila que se encuentra activa en el momento, así es

como en la figura 4-28, formulario carga pedidos, se muestran los detalles para el pedido 2,

(que se compone de dos productos ‘Silla’ y ‘P1’), que ambos están iniciados y que, en el

132
control ruta para el producto ‘Silla’ aunque tiene seleccionadas varias rutas solo se dan

como iniciadas una: asiento con 37 como cantidades a emitir.

El formulario Control pedidos, figura 4-30, muestra en la tabla rutas producto para el

pedido ‘1’, producto ‘Silla’, y ruta ‘8’ con nombre ‘asiento delantero’ que de 124 unidades

sólo quedan pendientes 8 unidades. Cantidad con la cual se calculará la nueva carga para el

centro de trabajo que utilice la operación marcada como iniciada en ésta ruta. El formulario

Control pedidos permite la actualización de las cantidades a realizar por operación

ofreciéndole al usuario dinamismo en la realización de su trabajo, ya sea para modificar

cantidades en el periodo o para actualizar datos en el nuevo periodo a programar.

Dejamos para el usuario, por ejemplo desmarcar el producto ‘P1’ del formulario Carga

pedidos y observar lo que pasa en los formularios Carga operaciones y Control pedidos, así

como el marcar o desmarcar rutas en el mismo formulario Carga Pedidos, y el marcar o

desmarcar operaciones en el formulario Carga operaciones. Regresando al formulario

Control pedidos para apreciar que efectos tienen estos cambios, con esto, si no se dan por

iniciadas adecuadamente las rutas en la secuencia descrita, no se llevará de forma

conveniente el sistema de control.

Cargas operaciones iniciadas.

Hacer clic en el botón Cargas operaciones iniciadas del formulario Control pedidos. Abre el

formulario de la figura 4-31 que muestra para todas las operaciones iniciadas: la cantidad

133
de unidades a elaborar, la carga por operación, la duración de cada una, su nombre y pedido

al cual esta vinculada, entre otros datos también útiles para el programador.

Figura 4-31. Formulario cargas operaciones iniciadas.

Observe que para el caso mencionado pedido ‘1’ ruta ‘asiento delantero’ con ‘8’unidades

pendientes solamente se realizará la operación ‘39’. Compruebe como cambian los valores

para la duración y carga modificando en el formulario Control pedidos figura 4-30, el valor

de ‘8’ cantidad de unidades pendientes.

134
Secuenciación.

Figura 4-32. Panel secuenciación.

El panel ‘Secuenciación’ de la figura 4-32, contiene los vínculos a los formularios Reglas

de prioridad, Método húngaro y Regla de Johnson.

Prioridades.

Figura 4-33. Formulario reglas de prioridad.

El botón Reglas de prioridad del panel ‘Secuenciación’ abre el formulario, figura 4-33,

donde aparece para el centro de trabajo seleccionado el siguiente detalle de datos: pedidos

135
asignados al CT, número de operación, la fecha de entrega, el nombre de la ruta y la carga

por operación.

Para el caso de la figura el centro seleccionado es ‘Corte’. La información de la tabla

‘Operaciones cargadas’ es enviada al archivo ‘Prioridades’ en Excel luego de oprimir el

botón ‘Reglas de prioridad’ para que sea procesada y mostrada al usuario en la forma como

se presenta en la figura 4-34 para el mismo centro de trabajo seleccionado.

Figura 4-34. Reglas de prioridad en Excel.

En el desarrollo de esta aplicación tomamos las siguientes reglas para locales: FCFS, EDD,

LOT y SOT, para con ellas secuenciar las cargas en cada uno de los diferentes centros de

trabajo ingresados en la base de datos.

136
El archivo en Excel ‘Prioridades’, tiene en una hoja de cálculo para cada prioridad, otra

hoja de cálculo ‘reglas’ (resumen) que se muestra en la figura 4-34, y un gráfico que

representa las datos contenidos en el hoja ‘reglas’.

Detallando la relación entre las figuras 4-33 y 4-34, se observa que los datos enviados son

presentados en diferente orden según la regla que los evalúa. Por ejemplo los datos del

pedido 2 operación 5 ruta 112, bajo la regla FCFS se ubica de primero, en la regla SOT

esta segundo, en la regla EDD está último y en la regla LOT está de tercero.

Las prioridades son un método que el programador puede usar para secuenciar las órdenes

de trabajo y definir así su orden en la elaboración. Adicionales a las reglas nombradas se

presentan otras dos opciones: pedidos pendientes hasta hoy y pedidos pendientes a la fecha.

En el submenú Prioridades que se encuentra dentro de Secuenciación en el menú

Scheduling de la barra de menú de la aplicación, se encuentran las opciones que el

programador puede usar para priorizar las órdenes.

137
Figura 4-35. Formulario pedidos pendientes a la fecha.

En pedidos pendientes hasta hoy se puede conocer por sus días de retraso hasta el día actual

los pedidos. En pedidos pendientes a la fecha se seleccionan los pedidos pendientes de

entrega hasta una fecha específica ingresada por el usuario ofreciéndole la posibilidad de

buscar los pedidos hasta la fecha que desee sin importar si es anterior o posterior a la fecha

actual, mostrándose también el número de sus días de retraso hasta la fecha ingresada. (Ver

Figura 4-35)

138
Método húngaro.

Figura 4-36. Formulario método húngaro.

El botón Método húngaro del panel ‘Secuenciación’ abre el formulario, figura 4-36, donde

aparece para el centro de trabajo seleccionado los diferentes tiempos de ejecución de la

operación en cada una de las máquinas paralelas. En el caso mostrado el centro de trabajo

es ‘1 – Corte’.

Esté método tiene asociado el concepto de máquinas paralelas descrito anteriormente por el

cual se obtienen diferentes valores de carga para una misma operación según las máquinas

donde se realice.

139
Lo anterior solo aplica para los centros de trabajo en los que se hayan ingresado datos en

las operaciones que presentan actividades paralelas. Como es el caso de las operaciones 8 y

5 que se realizan en el centro de trabajo 1 ‘Corte’, (Ver Figura 4-17)

Figura 4-37. Método húngaro en Excel – hoja de cálculo asignar.

La información de la tabla ‘Matriz de cargas’ en el formulario Método húngaro, es enviada

a Excel al archivo ‘Asignación’ luego de oprimir el botón ‘Método húngaro’. Los datos se

copian en la hoja de cálculo llamada ‘asignar’,(Ver Figura 4-37). Para ejecutar el método el

usuario debe oprimir el botón ‘Ejecutar método húngaro’ el cual muestra los resultados

generados por el algoritmo en la hoja de cálculo llamada ‘Hoja 1’.

La figura 4-38 muestra al usuario la asignación resultado del proceso para los datos del

centro de trabajo seleccionado en la figura 4-37.

140
Figura 4-38. Método húngaro en Excel – hoja de cálculo Hoja1.

Figura 4-39. Formulario regla de Johnson.

141
Regla de Johnson.

El botón Regla de Johnson del panel ‘Secuenciación’ abre el formulario, figura 4-39, que

aplica para las rutas que tienen operaciones que deben pasar a través de dos máquinas o

centro de trabajo en el mismo orden. Así en el formulario se relacionan las cargas del

centro de trabajo 1 y el centro de trabajo 2 para las rutas que cumplen la condición anterior.

2 3

2 3

Figura 4-40. Johnson en Excel

La información de la tabla ‘johnson’ del formulario Regla de Johnson, es enviada al

archivo ‘johnson’ en Excel luego de oprimir el botón ‘Regla de Johnson’. Los datos se

copian en la hoja de cálculo llamada ‘johnson’, y para que se corra el algoritmo, el usuario

debe oprimir el botón ‘johnson’. Los resultados generados se muestran en la hoja de cálculo

llamada ‘Hoja 1’ (Ver Figura 4-40).

142
La figura 4-40 muestra al usuario el orden -columna A- resultado del proceso para los

datos de los centros de trabajo seleccionados en la figura 4-39. En el gráfico de la figura

anterior se han colocado los números de fila (2,3) de la columna A, sobre los espacios de

carga (barras horizontales) para indicar la secuencia de los pedidos en los CT. En el archivo

‘Johnson’ de Excel, estos números no aparecen dentro de la gráfica.

4.2.3 Control.

Figura 4-41. Panel control.

El panel ‘Control’, figura 4-41, contiene los vínculos a los formularios Producción

planeada, Producción real e Input-output.

Producción planeada.

El formulario Producción planeada por CT, figura 4-42, muestra el detalle de cargas

actuales asignadas al centro de trabajo seleccionado en el periodo de análisis. Este

formulario ofrece al programador de la producción la posibilidad de observar como se

afectan los próximos cinco periodos a partir del actual con el total de carga pendiente, para

realizar una programación más real de este centro.

143
Cambiando para el centro deseado el valor de hr (horas reales de trabajo) en la tabla ‘Input,

output planificado’, se modifican los valores para los escenarios en la tabla

‘Comportamiento del ct a cinco periodos’ donde para los próximos periodos se suponen

condiciones normales de trabajo.

Figura 4-42. Formulario producción planeada.

Como apoyo adicional se ofrecen en Excel otras opciones para ejecutar una programación

más dinámica y óptima. El botón ‘Gráfico de Gantt’ envía los datos del centro seleccionado

en el formulario al archivo ‘carga_finita’ de Excel. Donde los datos se copian en la hoja de

cálculo llamada ‘cg_finita’, (Ver Figura 4-43), para con estos realizar los cálculos y las

gráficas que se presentan en las hojas de cálculo que conforman el archivo.

144
Figura 4-43. Carga finita en Excel – hoja de cálculo ‘cg_finita’.

Como la programación finita supera las desventajas de los sistemas basados en reglas

ofreciendo cálculos y gráficos interactivos al programador. La hoja de cálculo mostrada en

la figura 4-43. permite al usuario interactuar con ella al modificar los datos de la columna F

‘carga_operación’, mostrando en el grafico de la misma hoja los efectos que estos cambios

tienen.

De igual manera se permite interactuar en la hoja de cálculo ‘Hoja2’, figura 4-44, al

cambiar las horas reales normales de trabajo. Observando por cifras y gráficamente los

efectos que tales cambios tienen en los cinco próximos periodos teniendo estos condiciones

normales de trabajo.

145
Figura 4-44. Carga finita en Excel – hoja de cálculo ‘Hoja2’.

Figura 4-45. Formulario producción real.

146
Producción real.

El botón Producción real del panel ‘Control’ abre el formulario, figura 4-45, en el cual se

ingresan los datos reales de funcionamiento, terminadas todas las operaciones en los

centros de trabajo a los que se les programó actividad al inicio del periodo.

Input-output.

Figura 4-46. Formulario control input-output.

Para terminar el botón Input – Output del panel ‘Control’ abre el formulario, figura 4-46,

que ofrece al programador conocer el funcionamiento del centro de trabajo seleccionado en

diferentes periodos. Este informe de control sobre el análisis de insumos y productos es de

utilidad para hacer el seguimiento de los desempeños de cada uno de los centros de trabajo.

Al oprimir el botón ‘Informe input/Output’ del formulario Control input-output envían los

datos en la tabla control Input – Output del centro seleccionado al archivo ‘in-out’ en Excel.

Donde los datos se copian en la hoja de cálculo activa, figura 4-47, y se procesan para

mostrar la información importante para el centro seleccionado en las columnas H hasta la P,

147
además de mostrar gráficas que representan lo planeado y la real para ambos casos el input

y el output.

Figura 4-47. Control in-out en Excel.

Otros.

Para finalizar se enumeran algunos elementos de apoyo a la aplicación.

La opción Productos en el menú General, de la barra de menú aplicación, abre la tabla

productos desde donde se pueden modificar o borrar los productos o componentes de

productos en sus diferentes niveles.

El botón ‘Acerca de’ en el panel principal, activa la ventana, figura 4-48, donde aparecen:

El título del trabajo de grado y los autores. El botón salir del mismo panel cierra la

aplicación y Access.

148
Figura 4-48. Formulario acerca de.

4.3 INFORMACIÓN ADICIONAL PARA EL USUARIO.

Para los productos así como para los centros de trabajo se ha dispuesto un formulario en el

que se pueden ingresar todos los nombres de los productos y centros de trabajo que utiliza

la planta. Después de listados y según se necesite se puede buscar: el producto o el CT.

Detallándose la composición de una referencia particular o ingresar los valores de

funcionamiento para el cálculo de su capacidad.

Al realizar el árbol de rutas para un producto es necesario ingresar como mínimo la ruta de

ensamble del mismo, ruta de nivel más alto. De no ser así, la cantidad de elementos

componentes del producto necesarios para cumplir con un pedido no se presentan, pues,

por los factores de utilización de las rutas, las cantidades requeridas son el resultado de

multiplicaciones sucesivas entre los factores de las rutas según los niveles ingresados al

producto y la cantidad de partes ingresadas en la estructura del producto. Por eso se debe

asociar al producto la ruta de ensamble, siendo esta la unión de las otras rutas que

conforman el producto. Al no existir un factor en este nivel la aplicación asocia un valor de

cero a esta posición dándose así multiplicaciones de datos por cero.

149
El formulario Cargas operaciones iniciadas figura 4-31 permite conocer para todas las

operaciones iniciadas: el valor de la carga, el centro de trabajo por el que pasa, la duración

en días de la misma, el nombre de la ruta, el nombre y el identificador de la operación, el

número del pedido al que corresponde, la fecha de entrega del mismo, la cantidad a

elaborar, y el detalle de los tiempos de: desplazamiento al centro de trabajo, la cola de

espera, la preparación en el centro de trabajo, y la ejecución de la operación. Estos datos

pueden ser utilizados por el usuario para realizar cualquier otro tipo de ordenamiento de las

operaciones en el centro de trabajo analizado.

En las diferentes opciones presentadas para realizar la secuenciación o la carga de los

pedidos a los centros de trabajo se trabaja siempre con los mismos datos, carga por

operación, esto se puede confirmar al comparar los valores de carga por operación que

aparecen en los diferentes formularios presentados en la aplicación (Ver Figuras 4-33, 4-39,

4-42), contra los valores que aparecen el formulario cargas iniciadas por operación. (Ver

Figura 4-31).

Los formularios Carga operaciones y Control pedido permiten elegir los componentes del

producto o elegir las operaciones en la ruta del componente que en realidad se necesitan

para elaborarlo. Esto es poder programar actividadas de producción reflejo real del avance

en la elaboración de las diferentes partes/componentes o produtos de la empresa según se

manufacturan, teniendo en cuenta las presedencias e inventarios existentes. La aplicación se

diseñó de manera tal que sea el usuario quien controle los momentos de inicio y fin de las

150
operaciones de producción, ésto por medio de las casillas de verificación, generando un

control sobre todas las operaciones realizadas en la planta.

En la Aplicación ‘HPP-S’ no presenta la ventana Base de datos cuando se abre la misma

para proteger su estructura interna (tablas, consultas, formularios, informes, macros o

módulos), de modificaciones como: cambio en los nombres, eliminación, alteración de

relaciones, edición de formularios, de informes, etc., que afectarían el optimo

funcionamiento de la aplicación. Sin embargo, la ventana Base de datos se puede activar al

oprimir la tecla ‘F11’ permitiendo al usuario trabajar sobre la propia estructura de la base

de datos. Recuerde que al trabajar con programas de gestión de bases de datos, como es el

caso de Access, no existe la opción Save (Guardar), referida a los datos de la aplicación,

debido a que los cambios en los datos se van guardando siempre en el dispositivo de

almacenamiento permanente.

La aplicación esta diseñada para trabajar ubicada en la carpeta ‘Aplicación’ en el disco C

del PC (C:\Aplicación). Instalarla en otra dirección provocaría problemas para el envió de

la información del archivo ‘HPP-S’en Access a los diferentes archivos vinculados en Excel.

Por otra parte, los archivos en Excel cuentan con botones para la creación de los elementos

de apoyo en cada uno de ellos, como: gráficos y cuadros de texto. Esto para evitar que se

afecte su funcionamiento por eliminaciones accidentales de alguno de ellos.

151
CONCLUSIONES

5 CAPÍTULO 6. CONCLUSIONES.
La herramienta informática diseñada permite al programador realizar la planeación de la

producción a corto plazo de una manera rápida y precisa en empresas manufactureras con

fabricación por lotes o series cortas que tengan sus procesos normalizados. Y para las que

no, les ayuda a ordenar su información sobre productos, rutas, operaciones y centros de

trabajo al ofrecer una estructura coherente y de fácil manejo.

La aplicación ofrece al usuario diferetes opciones para la programación de la producción de

acuerdo a las condiciones del momento en que esta se realiza. Para nuevas condiciones de

programación, la aplicación por su flexibilidad permite incluir éstas nuevas necesidades

producción en el sistema para gerenerar así, una nueva programación de la producción

actualizada.

La carga de los trabajos a la planta en la aplicación se realiza para cada uno de los centros

de trabajos, el usuario programador puede entonces identificar cual es el centro con mayor

carga, dedicando así, más tiempo para buscar opciones de programación en dicho centro.

Los archivos en Excel funcionan independientes a la base de datos. Permitiendo realizar

modificaciones en los valores de estos archivos sin que se altere la información en el

152
archivo de Access, ofreciendose así una herramienta de apoyo a nivel académico para los

cursos de producción.

La aplicación desarrollada calcula para un CT específico el valor de la carga asignada al

mismo, independiente de los demás CT. Permitendose así, una aproximación a la

programación en configuraciones por lotes enfocadas al proceso o job shop.

La apliacción desarrollada aporta aporta a las PYMES manufactureras que no tengan un

orden en su información:

• Centralización de la información.

• Codificación de productos, partes/componentes, rutas, operaciones, centros de trabajo.

• Unificación de normbres o terminos usados al interior de la empresa, haciendo más

clara la comunicación de la información.

• La realización de catalogos de: productos con sus partes/componentes, rutas, productos

con sus rutas. Esto por medio de los impresos que se pueden realizar de la información

en la base de datos.

Para reclamos por defectos de fabricación de algún producto o para la trazabilidad de los

mismos, en la aplicación queda el historial de pasos que se siguieron para la realización de

cada una de las partes que componen un producto ternimado. Historial unico para cada uno

de los pedidos manufacturados en la planta.

153
BIBLIOGRAFÍA

6 CAPÍTULO 7. BIBLIOGRAFÍA.
BRIMELE, Ricardo. ¡EXCEL FÁCIL!. México : Prentice Hall, 1994. 286 p.

CHASE, Richard B, y AQUILANO, Nicolás J. Dirección y administración de la


producción y de las operaciones. 6 ed. Mexico : Mc Graw Hill, 1995.

CHASE, Richard B, AQUILANO, Nicolas J, y JACOBS, F. Robert. Administración de la


producción y de las operaciones; manufactura y servicios. 8 ed. Colombia : Mc
Graw Hill, mayo 2000. 885 p.

EVERETT, E. Adam. Jr, y RONALD, J. Ebert. Administración de la producción y las


operaciones. 4 ed. Mexico : Prentice Hall, 1994. 739 p.

HALVORSON, Michael. Microsoft Visual Basic 4 : paso a paso. Colombia : Mc Graw


Hill, 1996. 372 p.

HEIZER, Jay y RENDER Arry. Dirección De la Producción. Madrid : Mc Graw Hill,


1997.

KORTH, Henry F y SILBERSCHATZ, Abraham. Fundamentos de bases de datos. 2 ed.


España : Mc Graw Hill, 1995. 739 p.

KRAJEWSKI, Lee y RITZMAN, Larry. Administración de operaciones o producción :


Estrategia y análisis. México: Pearson educación, 2000. p.762.

MACHUCA DOMÍNGUEZ, José Antonio et al. Dirección de operaciones : Aspectos


estratégicos en la producción y los servicios. España : Mc Graw Hill, 1995. p. 143

154
-------- : Aspectos tácticos y operativos en la producción y los servicios. España : Mc Graw
Hill, 1995. p. 267 – 487.

MOTOA, T. Gerardo Algunos apuntes sobre el uso de la simulación en el diseño de


sistemas de fabricación. Madrid junio 1994. Universidad Politécnica de Madrid.
Disam.

-------- Sistemas de Planificación Jerárquicos: Aplicaciones a la gestión de producción y de


proyectos. Cali. Escuela de ingeniería industrial y estadística. Universidad del Valle.
41 P.

NEIBAUER, Alan. Access 2000 para gente ocupada. Mexico : Mc Graw Hill, 2000. 312 p.

NOORI, Hamid y RADFORD Rusell. Administración De Operaciones y Producción.


Santafé de Bogotá : Mc Graw Hill, 1997.

RUMBAUGH, James et al. Modelado y diseño orientado a objetos. 4 ed. México : Prentice
may, 1995

SARRIEGUI, José María, SERRANO, Nicolás, MURO, Ivan. Aprenda Microsoft Access
97 como si estuviera en primero. San Sebastián, Octubre 1998 Escuela Superior de
Ingenieros Industriales, Universidad De Navarra

SCHROEDER, Roger G. Administración De Operaciones : toma de decisiones en la


función de operaciones. 3 ed. Mexico : Mc Graw Hill, 1992. 503 p.

SENN, James A : Análisis y diseño de sistemas de información. 2 ed. México : Mc Graw


Hill, 1992. p 181.

SIPPER, Daniel y BUFFIN L., Robert. Planeación y Control De La Producción. Mexico :


Mc Graw Hill, 1998.

VOLLMANN, Thomas E. Sistemas De Planificación Y Control De La Fabricación. 3 ed.


España : Irwin, 1994.

155
ANEXOS

ANEXO A. MANUAL DEL USUARIO

Instrucciones de manejo rápido

1. Para el ingreso de nuevos productos haga clic en Productos del menú Preparación

pedido, e ingrese las partes/componentes y la estructura en el submenú ingresar datos

producto del menú Preparación.

2. Para el ingreso de nuevos clientes haga clic ingresar clientes del menú Preparación

pedido.

3. Para el ingreso de nuevos pedidos haga clic en ingresar pedidos del menú Preparación

pedido.

4. Cargue los pedidos a la planta oprimiendo en carga pedidos del submenú Asignación en

el menú Scheduling y seleccione el pedido, los productos que lo componen e inicie las

rutas necesarias.

156
5. Para determinar que operaciones cargar en las rutas iniciadas en el punto anterior.

Oprima carga operaciones del submenú Asignación en el menú Scheduling.

6. Verifique las rutas y operaciones iniciadas a los pedidos al hacer clic en control pedido

del submenú Asignación en el menú Scheduling.

7. Oprima secuenciación en el menú Scheduling y evalué las ordenaciones posibles de las

cargas en cada centro de trabajo según las opciones presentadas.

8. Determine la capacidad de cada centro de trabajo al oprimir producción planeada del

submenú control en el menú Scheduling.

9. Registre la producción real al hacer clic en producción real del submenú control en el

menú Scheduling.

10. Conozca el informe input-output por centro de trabajo presionando control input-output

del submenú control en el menú Scheduling.

Datos ejemplo general

Para trabajar con la aplicación ‘HPP-S’ debe instalarse en su computador:

1. Descomprima el archivo ‘ Aplicación HPP-S.exe ’ en el disco C de su computador.

2. La aplicación se debe descomprimir en C:\Aplicación como se muestra en la figura A-1.

157
Figura A-1. Dirección para descomprimir Aplicación HPP-S.exe

En la figura A-1 presione el botón ‘Unzip’ para iniciar la instalación. Terminada esta

debe aparecer la figura A-2 que confirma la perfecta instalación de la herramienta en el

disco C del computador.

Figura A-2. Instalación terminada.

3. En la carpeta ‘Aplicación’ Busque el archivo ‘ HPP-S ’ y ábralo para entrar a la

aplicación.

4. Navegue a través de las diferentes ventanas que se presentan en la aplicación para

manejarla según su necesidad.

5. La aplicación cuenta con botones de información en sus diferentes formularios según

sea necesario para ayudar o guiar al usuario en su manejo.

158
Ingreso de datos ejemplos particulares

El ingreso de datos se realizará con casos de productos de estructuras cortas para producto

y rutas, con el objeto de mostrar como se ingresan los datos en las estructuras iniciales

pues, para los siguientes los pasos, son los mismos.

Como apoyo para el usuario en la comprensión de la metodología usada se ingresará el

producto 'P1' que Machuca64 usa en el ejemplo 5.1. Se dará información que guíe al usuario

en lo básico dejando que esté lea la información en los botones que contienen los

formularios que active.

Ingreso productos.

El producto P1 tiene la siguiente estructura

producto Componentes Componentes1


111
P1 211
112
212

1. Ingrese las partes / componentes del producto P1 al oprimir Partes/componentes en el

submenú ingresar datos producto del menú Preparación.

64
MACHUCA DOMÍNGUEZ, José Antonio et al. Dirección De Operaciones : Aspectos tácticos y
operativos en la producción y los servicios. España : Mc Graw Hill, 1995. p. 160

159
2. Ingrese la estructura del producto P1 al oprimir la estructura en el submenú ingresar

datos producto del menú Preparación. Debe verse al final como se muestra en la figura

A-3 Árbol de Estructura del producto ‘P1’.

Figura A-3. Árbol de Estructura del producto ‘P1’.

Si coloca el cursor en la casilla ‘111’ de la tabla componentes, Figura A-3, observe que

no aparece nada en la tabla componentes1.

3. En el formulario ‘Detalle centro de Trabajo’ ingrese los datos por centro de trabajo.

[Preparación pedido/ ingresar datos ruta/ detalles centros de trabajo].

160
4. Rutas. Siguiendo con el producto P1 del ejemplo, los datos de la ruta de ensamble ‘P1’

queda como se muestra en la figura A-4. [preparación pedido/ ingresar datos ruta/ Hoja

de ruta].

El producto ‘P1’ tiene dos rutas más ‘P1’ y ‘112’.

Figura A-4. Operaciones ruta ‘P1’.

5. Rutas por producto. Con las tres rutas, la estructura de rutas del producto ‘P1’ se

aprecia en la figura A-4. siendo estas las que tienen un factor diferente de 1.

[preparación pedido/ ingresar datos ruta/ Rutas producto].

161
Figura A-5. Árbol de rutas del producto ‘P1’.

Observe en la figura A-5, como solo las rutas tienen un factor diferente de 1

Ingreso pedidos.

6. Active el formulario clientes. [Preparación pedido/ ingresar clientes] e ingrese los datos.

7. Active el formulario pedidos. [Preparación pedido/ ingresar pedidos] seleccione el

cliente y detalle la composición del pedido.

162
Elaboración pedidos.

8. Cargue (asigne) los pedidos, productos, rutas y operaciones a los centros de trabajo en

los formularios carga pedidos [Scheduling /Asignación /carga pedidos] y carga

operaciones [Scheduling /Asignación /carga operaciones].

9. Ordene (secuencie) los pedidos usando las opciones para secuenciación ofrecidas

[Scheduling /secuenciación ].

Control pedidos.

10. Controle las instalaciones programando y haciendo seguimiento de las actividades de

producción por cada centro de trabajo según opciones del submenú control. [Scheduling

/Control].

Salir.

11. Para salir oprima el botón salir del panel principal.

ANEXO B. CODIGOS

Formularios en Access.

Formulario acerca de
Option Compare Database
Private Sub Aceptar_Click()
DoCmd.Close
End Sub

Formulario asignación
Option Compare Database
Private Sub Comando12_Click()
MsgBox "El botón MÉTODO HÚNGARO envía al archivo asignación de excel la " _

163
& "información de la tabla MATRÍZ DE DATOS para que sea presentada según " _
& "la asignación del MÉTODO HÚNGARO.", vbInformation, "INFORMACIÓN"
End Sub

Private Sub Comando9_Click()


MsgBox "Al seleccionar el centro en la tabla CENTROS DE TRABAJO el nombre del mismo " _
& "aparece en el campo Centro Seleccionado. "_
& "La tabla MATRÍZ DE DATOS muestra los diferentes valores de cargas para " _
& "cada una de las máquinas en el centro seleccionado que tiene máquinas.", vbInformation,
"INFORMACIÓN"
End Sub

Private Sub ASIGNACIÓN_Click()


On Error GoTo Err_ASIGNACIÓN_Click
Dim stDocName As String
stDocName = "ASIGNACIÓN"
DoCmd.RunMacro stDocName
Exit_ASIGNACIÓN_Click:
Exit Sub
Err_ASIGNACIÓN_Click:
MsgBox Err.Description
Resume Exit_ASIGNACIÓN_Click
End Sub

Private Sub MAQUINA__CT_Click()


On Error GoTo Err_MAQUINA__CT_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "MAQUINAS CT"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_MAQUINA__CT_Click:
Exit Sub
Err_MAQUINA__CT_Click:
MsgBox Err.Description
Resume Exit_MAQUINA__CT_Click
End Sub

Formulario cargas_operaciones_iniciadas
Option Compare Database
Private Sub DETALLES_CT_Click()
On Error GoTo Err_DETALLES_CT_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "centro_trabajo"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_DETALLES_CT_Click:
Exit Sub
Err_DETALLES_CT_Click:
MsgBox Err.Description

164
Resume Exit_DETALLES_CT_Click
End Sub

Private Sub Form_Activate()


Me.Refresh
End Sub

Private Sub Comando10_Click()


On Error GoTo Err_Comando10_Click
Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70
Exit_Comando10_Click:
Exit Sub
Err_Comando10_Click:
MsgBox Err.Description
Resume Exit_Comando10_Click

End Sub

Private Sub imprimir_cargas_oper_inic_Click()


On Error GoTo Err_imprimir_cargas_oper_inic_Click
Dim stDocName As String
stDocName = "cargas_operaciones_iniciadas"
DoCmd.OpenReport stDocName, acPreview
Exit_imprimir_cargas_oper_inic_Click:
Exit Sub
Err_imprimir_cargas_oper_inic_Click:
MsgBox Err.Description
Resume Exit_imprimir_cargas_oper_inic_Click
End Sub

Formulario centro de trabajo


Option Compare Database
Private Sub Comando9_Click()
MsgBox "En la tabla OPERACIONES REALIZADAS EN EL CENTRO DE TRABAJO ingrese "
_
& "los nombres de estas para el centro de trabajo activo en el campo NOMBRE CENTRO del
formulario." _
& "Para la utilización de MÁQUINAS dentro del centro de trabajo los datos de los tiempos de
ejecución " _
& "de estas se ingresan para cada operación en particular en el formulario MÁQUINAS CT " _
& "por ser estas únicas a la capacidad de la máquina y el producto procesado.", vbInformation,
"INFORMACIÓN"
End Sub

Private Sub Comando12_Click()


MsgBox "Ingrese los datos pedidos en los campos en blanco. " _
& "El campo ' Capacidad diaria horas estándar ' se calcula automático como resultado de la
multiplicación de " _

165
& "la capacidad diaria horas reales, la eficiencia y la utilización.", vbInformation,
"INFORMACIÓN"
End Sub

Private Sub capacidad_diaria_horas_reales_AfterUpdate()


capacidad_diaria_horas_estándar = [capacidad diaria horas reales] * [eficiencia] * [utilización]
End Sub

Private Sub eficiencia_AfterUpdate()


capacidad_diaria_horas_estándar = [capacidad diaria horas reales] * [eficiencia] * [utilización]
End Sub

Private Sub Form_Error(DataErr As Integer, Response As Integer)


MsgBox "No se permiten nombres de Centros de Trabajo repetidos", vbCritical, "ERROR EN
CENTROS DE TRABAJO"
On Error GoTo Err_LISTADO_CT_Click

Dim stDocName As String


Dim stLinkCriteria As String
stDocName = "CT"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_LISTADO_CT_Click:
Exit Sub
Err_LISTADO_CT_Click:
MsgBox Err.Description
Resume Exit_LISTADO_CT_Click
End Sub

Private Sub Form_Open(Cancel As Integer)


DoCmd.GoToRecord , , acNewRec
End Sub

Private Sub utilización_Exit(Cancel As Integer)


capacidad_diaria_horas_estándar = [capacidad diaria horas reales] * [eficiencia] * [utilización]
End Sub

Private Sub LISTADO_CT_Click()


On Error GoTo Err_LISTADO_CT_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "CT"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_LISTADO_CT_Click:
Exit Sub
Err_LISTADO_CT_Click:
MsgBox Err.Description
Resume Exit_LISTADO_CT_Click
End Sub

166
Formulario clientes
Option Compare Database
Private Sub Form_Error(DataErr As Integer, Response As Integer)
MsgBox "No se permiten nombres de clientes repetidos", vbCritical, "ERROR EN NOMBRE
CLIENTE"
End Sub

Formulario componentes producto


MsgBox "Para BORRAR alguna parte/componente o todo un producto." _
& "Haga clic en productos en el menú General de la barra de menú aplicación " _
& "una vez abierta la tabla presione en el signo (+) de la izquierda para descender “_
& "en la estructura del producto seleccionado.", vbInformation, "INFORMACIÓN"
End Sub

Private Sub Form_Open(Cancel As Integer)


DoCmd.GoToRecord , , acLast
End Sub

Private Sub arbol_Click()


On Error GoTo Err_arbol_Click
Dim stDocName As String
stDocName = "árbol_producto"
DoCmd.OpenReport stDocName, acPreview
Exit_arbol_Click:
Exit Sub
Err_arbol_Click:
MsgBox Err.Description
Resume Exit_arbol_Click
End Sub

Private Sub INFORMACION_Click()


MsgBox "Ingrese el producto o búsquelo por su código o nombre, desplazándose entre los registros
u "_
& "oprimiendo el botón Buscar en la barra de herramientas de la aplicación después de tocar la
casilla " _
& " donde desea realizar la búsqueda Defina la estructura del producto utilizando los. " _
& " niveles componentes, componentes1 o componentes2 según requiera", vbInformation,
"INFORMACIÓN "
End Sub

Formulario componentes subformulario


Option Compare Database
Private Sub elemento_DblClick(Cancel As Integer)
On Error GoTo Err_elemento_DblClick
Dim lngelemento As Long
If IsNull(Me![elemento]) Then
Me![elemento].Text = ""

167
Else
lngelemento = Me![elemento]
Me![elemento] = Null
End If
DoCmd.OpenForm "lista_materiales", , , , , acWindowNormal, NewRecord
Me![elemento].Requery
If lngelemento <> 0 Then Me![elemento] = lngelemento
Exit_elemento_DblClick:
Exit Sub
Err_elemento_DblClick:
MsgBox Err.Description
Resume Exit_elemento_DblClick
End Sub

Private Sub elemento_GotFocus()


Me.Refresh
End Sub

Private Sub elemento_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Private Sub Form_Activate()


Me.Refresh
End Sub

Sub Form_Current()
Dim ParentDocName As String
On Error Resume Next
ParentDocName = Me.Parent.Name
If Err <> 0 Then
GoTo Form_Current_Exit
Else
On Error GoTo Form_Current_Err
Me.Parent![componentes1_Subformulario].Requery
End If
Form_Current_Exit:
Exit Sub
Form_Current_Err:
MsgBox Error$
Resume Form_Current_Exit
End Sub

Private Sub unidad_DblClick(Cancel As Integer)


On Error GoTo Err_unidad_DblClick
Dim lngunidad As Long
If IsNull(Me![unidad]) Then
Me![unidad].Text = ""

168
Else
lngunidad = Me![unidad]
Me![unidad] = Null
End If
DoCmd.OpenForm "unidades", , , , , acWindowNormal, NewRecord
Me![unidad].Requery
If lngunidad <> 0 Then Me![unidad] = lngunidad
Exit_unidad_DblClick:
Exit Sub
Err_unidad_DblClick:
MsgBox Err.Description
Resume Exit_unidad_DblClick
End Sub

Private Sub unidad_GotFocus()


Me.Refresh
End Sub

Private Sub unidad_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Formulario componentes1 subformulario


Option Compare Database
Private Sub elemento_DblClick(Cancel As Integer)
On Error GoTo Err_elemento_DblClick
Dim lngelemento As Long
If IsNull(Me![elemento]) Then
Me![elemento].Text = ""
Else
lngelemento = Me![elemento]
Me![elemento] = Null
End If
DoCmd.OpenForm "lista_materiales", , , , , acWindowNormal, NewRecord
Me![elemento].Requery
If lngelemento <> 0 Then Me![elemento] = lngelemento
Exit_elemento_DblClick:
Exit Sub
Err_elemento_DblClick:
MsgBox Err.Description
Resume Exit_elemento_DblClick
End Sub

Private Sub elemento_GotFocus()


Me.Refresh
End Sub

Private Sub elemento_NotInList(NewData As String, Response As Integer)

169
MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Private Sub Form_Activate()


Me.Refresh
End Sub

Sub Form_Current()
Dim ParentDocName As String
On Error Resume Next
ParentDocName = Me.Parent.Name
If Err <> 0 Then
GoTo Form_Current_Exit
Else
On Error GoTo Form_Current_Err
Me.Parent![componentes2_Subformulario].Requery
End If
Form_Current_Exit:
Exit Sub
Form_Current_Err:
MsgBox Error$
Resume Form_Current_Exit
End Sub

Private Sub unidad_DblClick(Cancel As Integer)


On Error GoTo Err_unidad_DblClick
Dim lngunidad As Long
If IsNull(Me![unidad]) Then
Me![unidad].Text = ""
Else
lngunidad = Me![unidad]
Me![unidad] = Null
End If
DoCmd.OpenForm "unidades", , , , , acWindowNormal, NewRecord
Me![unidad].Requery
If lngunidad <> 0 Then Me![unidad] = lngunidad
Exit_unidad_DblClick:
Exit Sub
Err_unidad_DblClick:
MsgBox Err.Description
Resume Exit_unidad_DblClick
End Sub

Private Sub unidad_GotFocus()


Me.Refresh
End Sub

Private Sub unidad_NotInList(NewData As String, Response As Integer)

170
MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Formulario componentes2 subformulario


Option Compare Database
Private Sub elemento_DblClick(Cancel As Integer)
On Error GoTo Err_elemento_DblClick
Dim lngelemento As Long
If IsNull(Me![elemento]) Then
Me![elemento].Text = ""
Else
lngelemento = Me![elemento]
Me![elemento] = Null
End If
DoCmd.OpenForm "lista_materiales", , , , , acWindowNormal, NewRecord
Me![elemento].Requery
If lngelemento <> 0 Then Me![elemento] = lngelemento
Exit_elemento_DblClick:
Exit Sub
Err_elemento_DblClick:
MsgBox Err.Description
Resume Exit_elemento_DblClick
End Sub

Private Sub elemento_GotFocus()


Me.Refresh
End Sub

Private Sub elemento_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Private Sub Form_Activate()


Me.Refresh
End Sub

Private Sub unidad_DblClick(Cancel As Integer)


On Error GoTo Err_unidad_DblClick
Dim lngunidad As Long
If IsNull(Me![unidad]) Then
Me![unidad].Text = ""
Else
lngunidad = Me![unidad]
Me![unidad] = Null
End If
DoCmd.OpenForm "unidades", , , , , acWindowNormal, NewRecord

171
Me![unidad].Requery
If lngunidad <> 0 Then Me![unidad] = lngunidad
Exit_unidad_DblClick:
Exit Sub
Err_unidad_DblClick:
MsgBox Err.Description
Resume Exit_unidad_DblClick
End Sub

Private Sub unidad_GotFocus()


Me.Refresh
End Sub

Private Sub unidad_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Formulario control input output


Option Compare Database
Private Sub Comando12_Click()
MsgBox "El botón INFORME INPUT/OUTPUT envía al archivo in-out de Excel la " _
& "información de la tabla CONTROL INPUT-OUTPUT para que sea presentada según " _
& "las desviaciones acumuladas y medias para los periodos enviados." _
& "Oprima el botón CONTROL DE PRODUCCIÓN para actualizar el avance " _
& "de los pedidos según las operaciones y rutas asociadas.", vbInformation, "INFORMACIÓN"
End Sub

Private Sub Comando9_Click()


MsgBox "Al seleccionar el centro en la tabla CENTROS DE TRABAJO el nombre del mismo " _
& "aparece en el campo Centro Seleccionado. "_
& "La tabla CONTROL INPUT-OUTPUT muestra el comportamiento del centro seleccionado " _
& "en los periodos ingresados a la base de datos.", vbInformation, "INFORMACIÓN"
End Sub

Private Sub IN_OUT_Click()


On Error GoTo Err_IN_OUT_Click
Dim stDocName As String
stDocName = "IN_OUT"
DoCmd.RunMacro stDocName
Exit_IN_OUT_Click:
Exit Sub
Err_IN_OUT_Click:
MsgBox Err.Description
Resume Exit_IN_OUT_Click
End Sub

Private Sub CONTROL_PRODUCCION_Click()


On Error GoTo Err_CONTROL_PRODUCCION_Click

172
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "CONTROL PRODUCCIÓN"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_CONTROL_PRODUCCION_Click:
Exit Sub
Err_CONTROL_PRODUCCION_Click:
MsgBox Err.Description
Resume Exit_CONTROL_PRODUCCION_Click
End Sub

Formulario control operaciones


Option Compare Database
Private Sub Comando12_Click()
MsgBox "En la tabla CONTROL OPERACIONES seleccione " _
& "el número de identificación de las operaciones por " _
& "ruta que aparecen en la tabla RUTAS OPERACIONES necesarias." _
& " para elaborar el componente Los campos iniciada y terminada se usan para" _
& " controlar el avance de las operaciones seleccionadas"
End Sub

Private Sub Comando13_Click()


MsgBox "Todas las casillas de control de estado de avance en las diferentes " _
& "tablas deben ser marcadas en iniciado o terminado cuando las operaciones o actividades" _
& " se han empezado o finalizado. Pues de esto depende el cargar o no los " _
& "diferentes centros de trabajo con las operaciones adecuadas."
End Sub

Private Sub Comando9_Click()


MsgBox "La tabla RUTAS INICIADAS, muestra todas las rutas que fueron marcadas " _
& "como iniciadas en la tabla CONTROL RUTA del formulario CONTROL PEDIDOS. " _
& "En la columna 'pend' el usuario puede ingresar las cantidades pendientes, que permiten " _
& "cálcular la carga respectiva. " _
& "En la casilla de estado el usuario puede marcar cuando la ruta esta terminada "_
& "La tabla RUTAS OPERACIONES muestra todas las operaciones asociadas a la ruta " _
& "seleccionada en la tabla RUTAS INICIADAS con su número único de identificación, " _
& "el centro de trabajo por donde pasa y la operación realizada en el mismo"
End Sub

Private Sub CONTROL_PEDIDOS_Click()


On Error GoTo Err_CONTROL_PEDIDOS_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "CONTROL PEDIDOS"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_CONTROL_PEDIDOS_Click:
Exit Sub
Err_CONTROL_PEDIDOS_Click:

173
MsgBox Err.Description
Resume Exit_CONTROL_PEDIDOS_Click
End Sub

Private Sub CONTROL_PRODUCCIÓN_Click()


On Error GoTo Err_CONTROL_PRODUCCIÓN_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "CONTROL PRODUCCIÓN"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_CONTROL_PRODUCCIÓN_Click:
Exit Sub
Err_CONTROL_PRODUCCIÓN_Click:
MsgBox Err.Description
Resume Exit_CONTROL_PRODUCCIÓN_Click
End Sub

Private Sub Form_Activate()


Me.Refresh
End Sub

Formulario control pedidos


Option Compare Database
Private Sub Comando12_Click()
MsgBox "La tabla RUTAS PRODUCTO muestra todas las rutas asociadas al producto seleccionado
"_
& "en la tabla CONTROL DETALLE PEDIDO " _
& "En la tabla CONTROL RUTA el usuario selecciona " _
& "las rutas por producto que aparecen en la tabla RUTAS PRODUCTO " _
& "necesarias para elaborar el producto. cargándose automáticamente las" _
& " cantidades requeridas por esa ruta para ese producto. " _
& " La casilla iniciado puede ser modificada a voluntad del usuario"
End Sub

Private Sub Comando13_Click()


MsgBox "Todas las casillas de control de estado de avance en las diferentes " _
& "tablas deben ser marcadas en iniciado cuando las operaciones o actividades" _
& " se han empezado. Pues de esto depende que más adelante aparezcan o no en " _
& "los formularios siguientes dentro de la aplicación."
End Sub

Private Sub Comando9_Click()


MsgBox "La primera tabla CONTROL PEDIDOS muestra para cada pedido pendiente " _
& "el número, la fecha de entrega dada al cliente y el estado del mismo. " _
& "Siendo usado este último campo por el usuario para indicar cuando " _
& "el pedido esta iniciado marcando la casilla. "_
& "En la tabla CONTROL DETALLE PEDIDO se muestra la composición por productos " _
& "del pedido seleccionado en la tabla CONTROL PEDIDOS y el estado para cada" _
& " uno. Siendo usados estos últimos campos por el usuario para indicar cuando" _

174
& " el producto esta iniciado y/o terminado marcando la casilla respectiva."
End Sub

Private Sub Control_Operaciones_Click()


On Error GoTo Err_Control_Operaciones_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "CONTROL OPERACIONES"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Control_Operaciones_Click:
Exit Sub
Err_Control_Operaciones_Click:
MsgBox Err.Description
Resume Exit_Control_Operaciones_Click
End Sub

Formulario control producción


Option Compare Database
Private Sub Comando12_Click()
MsgBox "La tabla RUTAS PRODUCTO muestra la información necesaria para las " _
& "rutas iniciadas asociadas al producto seleccionado en la tabla DETALLE PEDIDOS.
"_
& "La columna 'Pend' es para ingresar las cantidades pendientes o faltantes del componente " _
& "terminado el periodo. Con este nuevo valor se determina la carga de los centros de trabajo " _
& "para el periodo siguiente. "_
& "La tabla OPERACIONES RUTAS muestra para cada ruta seleccionada en la tabla anterior " _
& "las operaciones iniciadas. El campo TERMINADO en ambas tablas es para indicar la " _
& "terminación de la ruta o la operación al marcar la casilla.", , "INFORMACIÓN 2"
End Sub

Private Sub Comando13_Click()


MsgBox "Todas las casillas de control de estado en las diferentes " _
& "tablas (f_entrega_real o terminado) deben ser llenadas o marcadas según las operaciones o
actividades" _
& "que se realizan, Pues de esto depende la carga en los diferentes centros de trabajo " _
& "dentro de la aplicación.", , "IMPORTANTE"
End Sub

Private Sub Comando9_Click()


MsgBox "La tabla PEDIDOS muestra para los pedidos iniciados " _
& "el número, la fecha de entrega dada al cliente, el estado del mismo y " _
& "el campo FECHA DE ENTREGA REAL. Siendo usado este último por el usuario " _
& "para indicar cuando el pedido es entregado finalmente al cliente. (El formato es DD/MM/AA)
"_
& "La tabla DETALLE PEDIDOS muestra la composición por productos " _
& "del pedido seleccionado en la tabla PEDIDOS. El estado TERMINADO en cada " _
& "producto es usado para indicar cuando la" _
& " realización del producto ha terminado.", , "INFORMACIÓN 1"
End Sub

175
Private Sub Control_Operaciones_Click()
On Error GoTo Err_Control_Operaciones_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "CONTROL OPERACIONES"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Control_Operaciones_Click:
Exit Sub
Err_Control_Operaciones_Click:
MsgBox Err.Description
Resume Exit_Control_Operaciones_Click
End Sub

Private Sub Carga_operacione_iniciadas_Click()


On Error GoTo Err_Carga_operacione_iniciadas_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "cargas_operaciones_iniciadas"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Carga_operacione_iniciadas_Click:
Exit Sub
Err_Carga_operacione_iniciadas_Click:
MsgBox Err.Description
Resume Exit_Carga_operacione_iniciadas_Click
End Sub

Private Sub Form_Activate()


Me.Refresh
End Sub

Private Sub IMPRIMIR_CARGA_INIC_Click()


On Error GoTo Err_IMPRIMIR_CARGA_INIC_Click
Dim stDocName As String
stDocName = "cargas_operaciones_iniciadas"
DoCmd.OpenReport stDocName, acPreview
Exit_IMPRIMIR_CARGA_INIC_Click:
Exit Sub
Err_IMPRIMIR_CARGA_INIC_Click:
MsgBox Err.Description
Resume Exit_IMPRIMIR_CARGA_INIC_Click
End Sub

Formulario control detalle pedidos iniciados


Option Compare Database
Private Sub iniciado_AfterUpdate()
Me.Refresh
End Sub

176
Private Sub terminado_AfterUpdate()
Me.Refresh
End Sub

Formulario control operaciones


Option Compare Database
Private Sub Form_Activate()
Me.Refresh
End Sub

Private Sub idoperación_Click()


Me.Refresh
End Sub

Private Sub idoperación_DblClick(Cancel As Integer)


Me.Refresh
End Sub

Private Sub idoperación_Enter()


Me.Refresh
End Sub

Private Sub iniciada_AfterUpdate()


Me.Refresh
End Sub

Private Sub terminada_AfterUpdate()


Me.Refresh
End Sub

Formulario control operaciones iniciadas


Option Compare Database
Private Sub iniciada_AfterUpdate()
Me.Refresh
End Sub

Private Sub terminada_AfterUpdate()


Me.Refresh
End Sub

Formulario control pedidos iniciados


Option Compare Database
Private Sub iniciado_AfterUpdate()
Me.Refresh
End Sub

177
Formulario control ruta
Option Compare Database
Private Sub Form_Activate()
Me.Refresh
End Sub

Private Sub iniciado_AfterUpdate()


Me.Refresh
End Sub

Private Sub nombre_ruta_AfterUpdate()


Dim dbs As Database
Dim qdfTemp As QueryDef
Dim rstver As Recordset
Dim strSQL As String, p As Integer, n As String
Set dbs = CurrentDb
strSQL = "SELECT rutas.cant_emitir FROM rutas WHERE (((rutas.idpedido)=[p]) AND
((rutas.nombre_ruta)=[n]));"
Set qdfTemp = dbs.CreateQueryDef("", strSQL)
qdfTemp.Parameters!p = idpedido
qdfTemp.Parameters!n = nombre_ruta
Set rstver = qdfTemp.OpenRecordset
'Debug.Print rstver!cant_emitir
Me!cant_emitir = rstver!cant_emitir
rstver.Close
dbs.Close
If IsNull(cant_pend) Then
cantidad = cant_emitir
Else:
If cant_pend > 0 And cant_pend < cant_emitir Then
cantidad = cant_pend
Else
cantidad = cant_emitir
MsgBox "la cantidad ingresada en la casilla pendiente: cero, negativa o superior a la cantidad a
emitir inicial", , "error cantidad"
End If
End If
End Sub

Private Sub nombre_ruta_Click()


Me.Refresh
End Sub

Private Sub nombre_ruta_DblClick(Cancel As Integer)


Me.Refresh
End Sub

Private Sub nombre_ruta_Enter()


Me.Refresh

178
End Sub

Private Sub nombre_ruta_GotFocus()


Me.Refresh
End Sub

Private Sub terminado_AfterUpdate()


Me.Refresh
End Sub

Formulario ct
Option Compare Database
Private Sub DETALLES_CT_Click()
On Error GoTo Err_DETALLES_CT_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "centro_trabajo"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_DETALLES_CT_Click:
Exit Sub
Err_DETALLES_CT_Click:
MsgBox Err.Description
Resume Exit_DETALLES_CT_Click
End Sub

Formulario entrega
Option Compare Database
Private Sub Comando9_Click()
MsgBox "El botón PROGRAMACIÓN DETALLADA envía al archivo detallada de Excel la " _
& "información de la tabla TIEMPO REQUERIDO para que sea presentada en el grafico de
GANTT " _
& "para un secuenciamiento sin solapamientos", vbInformation, "INFORMACIÓN"
End Sub

Private Sub PROGRAMACIÓN_DETALLADA_Click()


On Error GoTo Err_PROGRAMACIÓN_DETALLADA_Click
Dim stDocName As String
stDocName = "programa_detallado"
DoCmd.RunMacro stDocName
Exit_PROGRAMACIÓN_DETALLADA_Click:
Exit Sub
Err_PROGRAMACIÓN_DETALLADA_Click:
MsgBox Err.Description
Resume Exit_PROGRAMACIÓN_DETALLADA_Click
End Sub

Formulario in out planificado


Option Compare Database

179
Private Sub hr_Change()
output_planificado = capac
End Sub

Private Sub idcentro_AfterUpdate()


On Error GoTo error_Err
Dim txtFiltro As String
txtFiltro = "idcentro = " & Me!idcentro
Me!hr = DLookup("cap_d_hr_reales", "centro_trabajo", txtFiltro)
Me!output_planificado = DLookup("cap_d_hr_estándar", "centro_trabajo", txtFiltro)
idcentro_AfterUpdate_Exit:
Exit Sub
error_Err:
If Err.Number = -2147352567 Then
Resume Next
Else
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
End If
Resume idcentro_AfterUpdate_Exit
End Sub

Private Sub input_planificado_GotFocus()


output_planificado = capac
End Sub

Formulario inicio
Option Compare Database 'Usar orden de la base de datos para las comparaciones de cadenas.
Option Explicit

Private Sub cmdCerrarFormulario_Click()


' Cerrar la pantalla de presentación.
DoCmd.Close
End Sub

Private Sub cmdCerrarFormulario_Click()


' Cerrar la pantalla de presentación.
DoCmd.Close
End Sub

Private Sub Form_Activate()


' Ocultar la barra de herramientas incorporada Vista Formulario.
DoCmd.ShowToolbar "Vista Formulario", acToolbarNo
'DoCmd.ShowToolbar "BASE DE DATOS", acToolbarNo
End Sub

Private Sub Form_Open(Cancel As Integer)


If EstáCargado("Switchboard") Then
' Si está abierto el formulario Switchboard,
' entonces este formulario se abrió como un ejemplo

180
' y se debe mostrar el botón Cerrar.
cmdCerrarFormulario.Visible = True
Else
' Este formulario se abrió como el formulario de inicio de la aplicación,
' entonces se debe ocultar el botón Cerrar y establecer TimerInterval
' para cerrar el formulatio después de 1.2 segundos.
cmdCerrarFormulario.Visible = False
Me.TimerInterval = 1200
End If
End Sub

Private Sub Form_Timer()


If Me.TimerInterval <> 0 Then
Me.TimerInterval = 0
End If
DoCmd.OpenForm "Switchboard", , , , acNormal
DoCmd.Close acForm, "Inicio"
End Sub

Formulario johnson
Option Compare Database
Private Sub Form_Activate()
Me.Refresh
End Sub

Formulario lista materiales


Option Compare Database
Private Sub Comando9_Click()
MsgBox "Escriba el nombre del elemento en el espacio correspondiente e identifique el tipo del
mismo." _
& " Sí en la columna ''tipo'' no encuentra un nombre en las opciones presentadas haga doble clic
sobre el espacio tipo para agregar un nuevo registro a la lista " _
& " ", vbInformation, " INFORMACIÓN"
End Sub
Formulario lista materiales subformulario
Option Compare Database
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acNewRec
End Sub

Private Sub tipo_DblClick(Cancel As Integer)


On Error GoTo Err_tipo_DblClick
Dim lngtipo As String
If IsNull(Me![tipo]) Then
Me![tipo].Text = ""
Else
lngtipo = Me![tipo]
Me![tipo] = Null

181
End If
DoCmd.OpenForm "tipo", , , , , acWindowNormal, NewRecord
Me![tipo].Requery
If lngtipo <> "" Then Me![tipo] = lngtipo
Exit_tipo_DblClick:
Exit Sub
Err_tipo_DblClick:
MsgBox Err.Description
Resume Exit_tipo_DblClick
End Sub

Private Sub tipo_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Formulario lista rutas


Option Compare Database
Sub Comando18_Click()
factor = fact
End Sub

Private Sub Comando21_Click()


MsgBox "El TIEMPO DE EJECUCIÓN de una operación no es más que el necesario para
desarrollarla una vez en el CT " _
& "correspondiente y sus unidades son MINUTOS ESTÁNDAR TIEMPO MEDIO
DESPLAZAMIENTO incluye" _
& " el traslado de los materiales que se requieren hasta el CT, y el necesario para mover los
inventarios en curso" _
& " dentro del CT y el envío al almacén de elementos finalizados" APROVECHAMIENTO
proporción de" _
& " item que cumplen los requisitos de calidad en cada una de las operaciones"
End Sub

Private Sub Comando9_Click()


MsgBox "PRIMERO asigne a la ruta un nombre de los desplegados en el campo, o coloque uno
según sea el caso." _
& "SEGUNDO detalle las operaciones en orden, coloque los valores requeridos " _
& "en cada uno de los campos y presione la tecla Enter para ingresar los datos a la base. y "_
& "TERCERO oprima el botón FACTOR para calcular el factor de la ruta", vbInformation,
"INFORMACIÓN"
End Sub

Private Sub Form_Current()


nombre_ruta.SetFocus
End Sub

Private Sub Form_Open(Cancel As Integer)


DoCmd.GoToRecord , , acLast

182
End Sub

Private Sub nombre_ruta_NotInList(NewData As String, Response As Integer)


MsgBox "NO HAY MATERIAL O PRODUCTO con ese nombre en la base de datos. " _
& "Ingrese primero el Nombre en el formulario producto o lista de materiales según sea el caso. " _
Response = acDataErrContinue
End Sub

Private Sub operaciónes_Subformulario_Exit(Cancel As Integer)


factor = fact
End Sub

Private Sub Comando29_Click()


On Error GoTo Err_Comando29_Click
DoCmd.GoToRecord , , acNext
Exit_Comando29_Click:
Exit Sub
Err_Comando29_Click:
MsgBox Err.Description
Resume Exit_Comando29_Click
End Sub

Private Sub Comando30_Click()


On Error GoTo Err_Comando30_Click
DoCmd.GoToRecord , , acPrevious
Exit_Comando30_Click:
Exit Sub
Err_Comando30_Click:
MsgBox Err.Description
Resume Exit_Comando30_Click
End Sub

Private Sub imprimir_ruta_Click()


On Error GoTo Err_imprimir_ruta_Click
Dim stDocName As String
stDocName = "Hoja_de_rutas"
DoCmd.OpenReport stDocName, acPreview
Exit_imprimir_ruta_Click:
Exit Sub
Err_imprimir_ruta_Click:
MsgBox Err.Description
Resume Exit_imprimir_ruta_Click
End Sub

Formulario máquinas
Option Compare Database
Private Sub idoperación_Click()
Me.Refresh
End Sub

183
Private Sub idoperación_Enter()
Me.Refresh
End Sub

Formulario máquinas ct
Option Compare Database
Private Sub Comando12_Click()
MsgBox "En la tabla TIEMPO DE EJECUCIÓN DE LAS MÁQUINAS EN EL CENTRO
seleccione " _
& "la operación entre las listadas en la tabla CENTRO OPERACIONES y luego coloque los " _
& "valores para los tiempos de ejecución en minutos estándar para cada una de las " _
& "máquinas del centro.", vbInformation, "INFORMACIÓN"
End Sub

Private Sub Comando9_Click()


MsgBox "Al seleccionar el centro en la tabla CENTROS DE TRABAJO el nombre del mismo " _
& "aparece en el campo Centro Seleccionado. "_
& "La tabla CENTRO OPERACIONES muestra la información de las operaciones " _
& "que se realizan en el centro seleccionado en los periodos ingresados a " _
& "la base de datos.", vbInformation, "INFORMACIÓN"
End Sub

Formulario operaciones ruta


Option Compare Database
Sub factores()
fact = aprovech
Dim rst As DAO.Recordset, j, n As Integer, i As Single
Set rst = Me.Recordset
j = rst.RecordCount
'MsgBox j, vbDefaultButton2, "CANTIDAD REGISTROS RUTA"
i=1
rst.MoveLast
For n = 1 To j
If n = 1 Then
fact = aprovech
i = fact
'MsgBox i, vbQuestion, "valor MovePrevious"
rst.MovePrevious
Else
If n = j Then
fact = aprovech
fact = i * fact
'MsgBox i
Else
If n > 1 And n < j Then
fact = aprovech
fact = i * fact
i = fact

184
rst.MovePrevious
'MsgBox i
End If
End If
End If
Next n
rst.MoveLast
End Sub

Private Sub fact_Change()


factores
End Sub

Private Sub fact_Click()


factores
End Sub

Private Sub Form_AfterDelConfirm(Status As Integer)


factores
End Sub

Private Sub idcentro_DblClick(Cancel As Integer)


On Error GoTo Err_idcentro_DblClick
Dim lngidcentro As Long
If IsNull(Me![idcentro]) Then
Me![idcentro].Text = ""
Else
lngidcentro = Me![idcentro]
Me![idcentro] = Null
End If
DoCmd.OpenForm "centro_trabajo", , , , , acWindowNormal, NewRecord
Me![idcentro].Requery
If lngidcentro <> 0 Then Me![idcentro] = lngidcentro
Exit_idcentro_DblClick:
Exit Sub

Err_idcentro_DblClick:
MsgBox Err.Description
Resume Exit_idcentro_DblClick
End Sub

Private Sub idcentro_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Private Sub Form_Activate()


Me.Refresh
End Sub

185
Private Sub operación_Enter()
Me.Refresh
End Sub

Formulario pedidos
Option Compare Database
Private Sub Comando9_Click()
MsgBox "El botón CANT REQUERIDA muestra las cantidades necesarias por " _
& " partes / componentes para cumplir con el pedido actual. El botón TIEMPO " _
& " DE ENTREGA bajo una programación hacia delante indica la cantidad de días " _
& " necesarios para producir el pedido en condiciones normales de trabajo. "_
& "Las cantidades solo se muestran para los pedidos que no tienen fecha de entrega real."
End Sub

Private Sub fecha_entrega_LostFocus()


' Este procedimiento se utiliza para validar la introducción de la fecha. Asegurarse
' de que se introduce una fecha válida y de que FechaEntrega no es anterior a FechaPedido.
If IsDate(Me!fecha_entrega) Then
If Me!fecha_entrega <= Me!fecha_emisión Then
MsgBox "Introduzca una 'Fecha de entrega' que sea posterior a la Fecha de pedido"
Me![fecha_entrega] = Null
Me!fecha_entrega.SetFocus
Exit Sub
End If
End If
If IsNull(Me!fecha_entrega) Then
MsgBox "Introduzca una fecha válida"
Exit Sub
End If
End Sub

Private Sub Form_Open(Cancel As Integer)


DoCmd.GoToRecord , , acLast
End Sub

Private Sub cant_requerida_Click()


On Error GoTo Err_cant_requerida_Click
Dim stDocName As String
'Dim stLinkCriteria As String
stDocName = "cant_requerida"
DoCmd.OpenForm stDocName
Exit_cant_requerida_Click:
Exit Sub
Err_cant_requerida_Click:
MsgBox Err.Description
Resume Exit_cant_requerida_Click
End Sub

186
Private Sub idcliente_DblClick(Cancel As Integer)
On Error GoTo Err_idcliente_DblClick
Dim lngtipo As Long
DoCmd.OpenForm "clientes", , , , , acDialog, "GotoNew"
Me![idcliente].Requery
If lngtipo <> 0 Then Me![idcliente] = lngtipo
Exit_idcliente_DblClick:
Exit Sub
Err_idcliente_DblClick:
MsgBox Err.Description
Resume Exit_idcliente_DblClick
End Sub

Private Sub idcliente_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Private Sub Tiempo_Entrega_Click()


On Error GoTo Err_Tiempo_Entrega_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "entrega"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Tiempo_Entrega_Click:
Exit Sub
Err_Tiempo_Entrega_Click:
MsgBox Err.Description
Resume Exit_Tiempo_Entrega_Click
End Sub

Formulario pedidos pendientes


Option Compare Database
Private Sub Comando9_Click()
MsgBox "los pedidos que aparecen en el formulario son todos los pedidos que " _
& "están pendientes de entregar hasta el día de HOY. Mostrándose los días " _
& " de mora para los pedidos retrasados en positivo y en negativo los días que " _
& " faltan para llegar a la Fecha de entrega dada al cliente."
End Sub

Formulario pendientes a la fecha


Option Compare Database
Private Sub Comando9_Click()
MsgBox "Los pedidos que aparecen en el formulario son todos los pedidos que " _
& "están pendientes de entregar hasta la fecha ingresada al abrirse el formulario." _
& " Mostrándose el número de pedido, la fecha de emisión, la fecha de " _
& " entrega dada al cliente y los días de retrazo del mismo"
End Sub

187
Formulario producción planeada
Option Compare Database
Private Sub Comando12_Click()
MsgBox "La tabla CENTROS DE TRABAJO muestra el número y nombre de todos los centro de
trabajo ingresados en la base de datos La tabla COMPORTAMIENTO DEL CT A CINCO
PERIODOS muestra como se afecta el CT por la carga vs la capacidad para los próximos cinco
periodos.", , "INFORMACIÓN"
End Sub

Private Sub Comando13_Click()


MsgBox "Cambie el valor de hr (horas reales de trabajo) en la tabla INPUT, OUTPUT
PLANIFICADO para el centro deseado y observe en la tabla COMPORTAMIENTO DEL CT A
CINCO PERIODOS como se modifican los valores. Para los escenarios se consideran constantes la
eficiencia & y utilización para los centro de trabajo. Teniendo así como la única variable a las
horas reales del centro de trabajo. El escenario solo aplica para el periodo de " _
programación. Para los próximos periodos se suponen " condiciones normales de trabajo.", ,
"ESCENARIOS"
End Sub

Private Sub Comando76_Click()


MsgBox "El botón GRAFICA DE GANTT envía al archivo carga_finita de Excel la " _
& "información del CENTRO SELECCIONADO en las tablas INPUT, OUTPUT PLANIFICADO
y CARGA OPERACIONES para que sean presentadas gráficamente En excel se ofrecen más
posibilidades para el uso de escenarios", vbInformation, "INFORMACIÓN"
End Sub

Private Sub Comando9_Click()


MsgBox "Use los botones de desplazamiento para ubicarse en un nuevo registro " _
& "para agregar un nuevo periodo y coloque la fecha del mismo en su campo En la tabla INPUT,
OUTPUT PLANIFICADO seleccione el centro de trabajo a programar en el periodo. e ingrese el
valor de la carga planeada en la casilla input " _.
& "La tabla CARGA OPERACIONES muestra el detalle de las operaciones cargadas al centro de "
_
& "trabajo activo de entre los seleccionado en la tabla Input, Output Planificado. " _
& "La suma de las cargas por operaciones es la carga total del centro.", , "INFORMACIÓN"
End Sub

Private Sub Form_Open(Cancel As Integer)


DoCmd.GoToRecord , , acLast
End Sub
Private Sub GRAFICO_GANTT_Click()
On Error GoTo Err_GRAFICO_GANTT_Click
Dim stDocName As String
stDocName = "FINITA"
DoCmd.RunMacro stDocName
Exit_GRAFICO_GANTT_Click:
Exit Sub
Err_GRAFICO_GANTT_Click:
MsgBox Err.Description

188
Resume Exit_GRAFICO_GANTT_Click
End Sub

Formulario producción real


Option Compare Database
Private Sub Comando12_Click()
MsgBox "La tabla CENTROS DE TRABAJO muestra el número y nombre de todos los centro de
trabajo ingresados " en la base de datos.", , "INFORMACIÓN"
End Sub

Private Sub Comando9_Click()


MsgBox "Use los botones de desplazamiento para encontrar el periodo requerido. " _
& "En la tabla IN OUT REAL coloque para cada centro de trabajo, el listado, los datos " _
& "o valores reales de carga ingresada y producción obtenida", , "INFORMACIÓN"
End Sub

Private Sub PRODUCCIÓN_PLANEADA_Click()


On Error GoTo Err_PRODUCCIÓN_PLANEADA_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "PRODUCCIÓN PLANEADA"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_PRODUCCIÓN_PLANEADA_Click:
Exit Sub
Err_PRODUCCIÓN_PLANEADA_Click:
MsgBox Err.Description
Resume Exit_PRODUCCIÓN_PLANEADA_Click
End Sub

Private Sub Comando11_Click()


On Error GoTo Err_Comando11_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "CONTROL PRODUCCIÓN"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Comando11_Click:
Exit Sub
Err_Comando11_Click:
MsgBox Err.Description
Resume Exit_Comando11_Click
End Sub

Formulario rcomponentes subformulario


Option Compare Database
Sub Form_Current()
Dim ParentDocName As String
On Error Resume Next
ParentDocName = Me.Parent.Name
If Err <> 0 Then

189
GoTo Form_Current_Exit
Else
On Error GoTo Form_Current_Err
Me.Parent![Rcomponentes1_Subformulario].Requery
End If
Form_Current_Exit:
Exit Sub
Form_Current_Err:
MsgBox Error$
Resume Form_Current_Exit
End Sub

Private Sub nombre_ruta_AfterUpdate()


On Error GoTo Err_nombre_ruta_AfterUpdate
Dim txtFiltro As String
If nombre_ruta <> "" Then
' Evaluar el filtro antes de pasarlo a la funcion DLookup.
txtFiltro = "idlistaruta = " & Me!nombre_ruta
' Buscar el precio por unidad del producto y asignarlo al control PrecioUnidad.

Me!factor = DLookup("factor", "lista_rutas", txtFiltro)


Else
Me!factor = 1
End If
Salir_nombre_ruta_AfterUpdate:
Exit Sub
Err_nombre_ruta_AfterUpdate:
MsgBox Err.Description
Resume Salir_nombre_ruta_AfterUpdate
End Sub

Private Sub nombre_ruta_DblClick(Cancel As Integer)


On Error GoTo Err_nombre_ruta_DblClick
Dim lngnombre_ruta As Long
If IsNull(Me![nombre_ruta]) Then
Me![nombre_ruta].Text = ""
Else
lngnombre_ruta = Me![nombre_ruta]
Me![nombre_ruta] = Null
End If
DoCmd.OpenForm "lista_rutas", , , , , acWindowNormal, NewRecord
Me![nombre_ruta].Requery
If lngnombre_ruta <> 0 Then Me![nombre_ruta] = lngnombre_ruta
Exit_nombre_ruta_DblClick:
Exit Sub
Err_nombre_ruta_DblClick:
MsgBox Err.Description
Resume Exit_nombre_ruta_DblClick
End Sub

190
Private Sub nombre_ruta_NotInList(NewData As String, Response As Integer)
MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Formulario rcomponentes1 subformulario


Option Compare Database
Private Sub Form_Current()
Dim ParentDocName As String
On Error Resume Next
ParentDocName = Me.Parent.Name
If Err <> 0 Then
GoTo Form_Current_Exit
Else
On Error GoTo Form_Current_Err
Me.Parent![Rcomponentes2_Subformulario].Requery
End If
Form_Current_Exit:
Exit Sub
Form_Current_Err:
MsgBox Error$
Resume Form_Current_Exit
End Sub

Private Sub nombre_ruta_AfterUpdate()


On Error GoTo Err_nombre_ruta_AfterUpdate
Dim txtFiltro As String
If nombre_ruta <> "" Then
' Evaluar el filtro antes de pasarlo a la funcion DLookup.
txtFiltro = "idlistaruta = " & Me!nombre_ruta
' Buscar el precio por unidad del producto y asignarlo al control PrecioUnidad.

Me!factor = DLookup("factor", "lista_rutas", txtFiltro)


Else
Me!factor = 1
End If
Salir_nombre_ruta_AfterUpdate:
Exit Sub
Err_nombre_ruta_AfterUpdate:
MsgBox Err.Description
Resume Salir_nombre_ruta_AfterUpdate
End Sub

Private Sub nombre_ruta_DblClick(Cancel As Integer)


On Error GoTo Err_nombre_ruta_DblClick
Dim lngnombre_ruta As Long
If IsNull(Me![nombre_ruta]) Then
Me![nombre_ruta].Text = ""

191
Else
lngnombre_ruta = Me![nombre_ruta]
Me![nombre_ruta] = Null
End If
DoCmd.OpenForm "lista_rutas", , , , , acWindowNormal, NewRecord
Me![nombre_ruta].Requery
If lngnombre_ruta <> 0 Then Me![nombre_ruta] = lngnombre_ruta
Exit_nombre_ruta_DblClick:
Exit Sub
Err_nombre_ruta_DblClick:
MsgBox Err.Description
Resume Exit_nombre_ruta_DblClick
End Sub

Private Sub nombre_ruta_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Formulario rcomponentes2 subformulario


Option Compare Database
Private Sub nombre_ruta_AfterUpdate()
On Error GoTo Err_nombre_ruta_AfterUpdate
Dim txtFiltro As String
If nombre_ruta <> "" Then
' Evaluar el filtro antes de pasarlo a la funcion DLookup.
txtFiltro = "idlistaruta = " & Me!nombre_ruta
' Buscar el precio por unidad del producto y asignarlo al control PrecioUnidad.
Me!factor = DLookup("factor", "lista_rutas", txtFiltro)
Else
Me!factor = 1
End If
Salir_nombre_ruta_AfterUpdate:
Exit Sub
Err_nombre_ruta_AfterUpdate:
MsgBox Err.Description
Resume Salir_nombre_ruta_AfterUpdate
End Sub

Private Sub nombre_ruta_DblClick(Cancel As Integer)


On Error GoTo Err_nombre_ruta_DblClick
Dim lngnombre_ruta As Long
If IsNull(Me![nombre_ruta]) Then
Me![nombre_ruta].Text = ""
Else
lngnombre_ruta = Me![nombre_ruta]
Me![nombre_ruta] = Null
End If
DoCmd.OpenForm "lista_rutas", , , , , acWindowNormal, NewRecord

192
Me![nombre_ruta].Requery
If lngnombre_ruta <> 0 Then Me![nombre_ruta] = lngnombre_ruta
Exit_nombre_ruta_DblClick:
Exit Sub
Err_nombre_ruta_DblClick:
MsgBox Err.Description
Resume Exit_nombre_ruta_DblClick
End Sub

Private Sub nombre_ruta_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue
End Sub

Formulario regla de Johnson


Option Compare Database
Private Sub Comando11_Click()
MsgBox "El botón REGLA DE JOHNSON envía al archivo johnson de Excel la información de la
tabla JOHNSON para que sea presentada según la regla para N pedidos y 2 centros de trabajo.",
vbInformation, "INFORMACIÓN"
End Sub

Private Sub Comando12_Click()


MsgBox "La tabla JOHNSON muestra en el campo nombre: el número de pedido, el nombre de la
ruta, el número de operación iniciada que cargan el centro 1 seleccionado. Además de el número de
la operación siguiente en la ruta para el centro 2 seleccionado. "_
& "El campo CARGA_CT1 muestra el valor de la carga de la operación en el centro 1, y El campo
CARGA_CT2 muestra el valor de la carga de la operación siguiente en la ruta para el centro 2
seleccionado.", vbInformation, "INFORMACIÓN 2"
End Sub

Private Sub Comando9_Click()


MsgBox "Al seleccionar el centro en la tabla CENTROS DE TRABAJO 1 el nombre del mismo
aparece en el campo Centro 1 Seleccionado. Al seleccionar el centro en la tabla CENTROS DE
TRABAJO 2 el nombre del mismo aparece en el campo Centro 2 Seleccionado.", vbInformation,
"INFORMACIÓN 1"
End Sub

Private Sub Form_Activate()


Me.Refresh
End Sub

Private Sub REGLA_DE_JOHNSON_Click()


On Error GoTo Err_REGLA_DE_JOHNSON_Click
Dim stDocName As String
stDocName = "JOHNSON"
DoCmd.RunMacro stDocName
Exit_REGLA_DE_JOHNSON_Click:
Exit Sub

193
Err_REGLA_DE_JOHNSON_Click:
MsgBox Err.Description
Resume Exit_REGLA_DE_JOHNSON_Click
End Sub

Formulario reglas prioridad


Option Compare Database
Private Sub Comando12_Click()
MsgBox "El botón REGLAS DE PRIORIDAD envía al archivo prioridades de Excel la información
de la tabla OPERACIONES CARGADAS para que sea presentada según los criterios de evaluación
que la aplicación maneja: EDD, FCFS, LOT, SOT.", vbInformation, "INFORMACIÓN"
End Sub

Private Sub Comando9_Click()


MsgBox "Al seleccionar el centro en la tabla CENTROS DE TRABAJO el nombre del mismo " _
& "aparece en el campo Centro Seleccionado La tabla OPERACIONES CARGADAS muestra
todas las operaciones marcadas como iniciadas que pasan por el centro seleccionado.",
vbInformation, "INFORMACIÓN"
End Sub

Private Sub Reglas_Prioridad_Click()


On Error GoTo Err_Reglas_Prioridad_Click
Dim stDocName As String
stDocName = "reglas prioridad"
DoCmd.RunMacro stDocName
Exit_Reglas_Prioridad_Click:
Exit Sub
Err_Reglas_Prioridad_Click:
MsgBox Err.Description
Resume Exit_Reglas_Prioridad_Click
End Sub

Formulario rproductos
Option Compare Database
Private Sub buscar_producto_Click()
On Error GoTo Err_buscar_producto_Click
Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70
Exit_buscar_producto_Click:
Exit Sub
Err_buscar_producto_Click:
MsgBox Err.Description
Resume Exit_buscar_producto_Click
End Sub

Private Sub Comando9_Click()


MsgBox "Busque el producto al cual va asignar las rutas presionando el botón BUSCAR
PRODUCTO. Seguido Ingrese primero la ruta de ensamble en la primera tabla, para ingresar las
subrutas del producto use las otras tablas que forman los diferentes subniveles La estructura que se

194
presenta en las diferentes tablas depende de la forma con se ingresaron los datos en el formulario ''
Estructura Producto ''"
Me!producto.SetFocus
End Sub

Private Sub Form_Current()


Me!producto.SetFocus
End Sub

Private Sub idlistaruta_AfterUpdate()


On Error GoTo Err_idlistaruta_AfterUpdate
Dim txtFiltro As String
If idlistaruta <> "" Then
' Evaluar el filtro antes de pasarlo a la funcion DLookup.
txtFiltro = "idlistaruta = " & Me!idlistaruta
' Buscar el precio por unidad del producto y asignarlo al control PrecioUnidad.
Me!factor = DLookup("factor", "lista_rutas", txtFiltro)
Else
Me!factor = 1
End If
Salir_idlistaruta_AfterUpdate:
Exit Sub
Err_idlistaruta_AfterUpdate:
MsgBox Err.Description
Resume Salir_idlistaruta_AfterUpdate
End Sub

Private Sub idlistaruta_DblClick(Cancel As Integer)


On Error GoTo Err_idlistaruta_DblClick
Dim lnglistaruta As Long
If IsNull(Me![idlistaruta]) Then
Me![idlistaruta].Text = ""
Else
lngidlistaruta = Me![idlistaruta]
Me![idlistaruta] = Null
End If
DoCmd.OpenForm "lista_rutas", , , , , acWindowNormal, NewRecord
Me![idlistaruta].Requery
If lngidlistaruta <> 0 Then Me![idlistaruta] = lngidlistaruta
Exit_idlistaruta_DblClick:
Exit Sub
Err_idlistaruta_DblClick:
MsgBox Err.Description
Resume Exit_idlistaruta_DblClick
End Sub

Private Sub idlistaruta_NotInList(NewData As String, Response As Integer)


MsgBox "Haga DOBLE clic en este campo para agregar una entrada a la lista."
Response = acDataErrContinue

195
End Sub

Private Sub IMPRIMIR_RUTAS_Click()


On Error GoTo Err_IMPRIMIR_RUTAS_Click
Dim stDocName As String
stDocName = "árbol_rutas_producto"
DoCmd.OpenReport stDocName, acPreview
Exit_IMPRIMIR_RUTAS_Click:
Exit Sub
Err_IMPRIMIR_RUTAS_Click:
MsgBox Err.Description
Resume Exit_IMPRIMIR_RUTAS_Click
End Sub

Formulario rutas iniciadas


Option Compare Database
Sub real()
If IsNull(cant_pend) Then
cantidad = cant_emitir
Else:
If cant_pend > 0 And cant_pend < cant_emitir Then
cantidad = cant_pend
Else
cantidad = cant_emitir
MsgBox "la cantidad ingresada en la casilla pendiente: cero, negativa o superior a la cantidad a
emitir inicial", , "error cantidad"
End If
End If
End Sub

Private Sub cant_emitir_AfterUpdate()


real
End Sub

Private Sub cant_pend_AfterUpdate()


real
End Sub

Private Sub Form_Load()


Me.Refresh
End Sub

Private Sub rutas_iniciadas2_terminado_AfterUpdate()


Me.Refresh
End Sub

Subformulario control detalle pedido


Option Compare Database
Private Sub Form_Activate()

196
Me.Refresh
End Sub

Private Sub iniciado_AfterUpdate()


Me.Refresh
End Sub

Private Sub terminado_AfterUpdate()


Me.Refresh
End Sub

Subformulario control pedidos


Option Compare Database
Private Sub Form_Activate()
Me.Refresh
End Sub

Private Sub iniciado_AfterUpdate()


Me.Refresh
End Sub

Formulario switchboard
Option Compare Database
Private Sub Form_Open(Cancel As Integer)
' Minimize the database window and initialize the form.
' Move to the switchboard page that is marked as the default.
Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Default' "
Me.FilterOn = True
End Sub

Private Sub Form_Current()


' Update the caption and fill in the list of options.
Me.Caption = Nz(Me![ItemText], "")
FillOptions
End Sub

Private Sub FillOptions()


' Fill in the options for this switchboard page. The number of buttons on the form.
Const conNumButtons = 8
Dim con As Object
Dim rs As Object
Dim stSql As String
Dim intOption As Integer
' Set the focus to the first button on the form, and then hide all of the buttons on the form but the
first. You can't hide the field with the focus.
Me![Option1].SetFocus
For intOption = 2 To conNumButtons
Me("Option" & intOption).Visible = False

197
Me("OptionLabel" & intOption).Visible = False
Next intOption
' Open the table of Switchboard Items, and find the first item for this Switchboard Page.
Set con = Application.CurrentProject.Connection
stSql = "SELECT * FROM [Switchboard Items]"
stSql = stSql & " WHERE [ItemNumber] > 0 AND [SwitchboardID]=" & Me![SwitchboardID]
stSql = stSql & " ORDER BY [ItemNumber];"
Set rs = CreateObject("ADODB.Recordset")
rs.Open stSql, con, 1 ' 1 = adOpenKeyset
' If there are no options for this Switchboard Page, display a message. Otherwise, fill the page
with the items.
If (rs.EOF) Then
Me![OptionLabel1].Caption = "There are no items for this switchboard page"
Else
While (Not (rs.EOF))
Me("Option" & rs![ItemNumber]).Visible = True
Me("OptionLabel" & rs![ItemNumber]).Visible = True
Me("OptionLabel" & rs![ItemNumber]).Caption = rs![ItemText]
rs.MoveNext
Wend
End If
' Close the recordset and the database.
rs.Close
Set rs = Nothing
Set con = Nothing

End Sub

Private Function HandleButtonClick(intBtn As Integer)


' This function is called when a button is clicked. intBtn indicates which button was clicked.
Constants for the commands that can be executed.
Const conCmdGotoSwitchboard = 1
Const conCmdOpenFormAdd = 2
Const conCmdOpenFormBrowse = 3
Const conCmdOpenReport = 4
Const conCmdCustomizeSwitchboard = 5
Const conCmdExitApplication = 6
Const conCmdRunMacro = 7
Const conCmdRunCode = 8
Const conCmdOpenPage = 9
' An error that is special cased.
Const conErrDoCmdCancelled = 2501
Dim con As Object
Dim rs As Object
Dim stSql As String
On Error GoTo HandleButtonClick_Err
' Find the item in the Switchboard Items table that corresponds to the button that was clicked.
Set con = Application.CurrentProject.Connection
Set rs = CreateObject("ADODB.Recordset")

198
stSql = "SELECT * FROM [Switchboard Items] "
stSql = stSql & "WHERE [SwitchboardID]=" & Me![SwitchboardID] & " AND [ItemNumber]="
& intBtn
rs.Open stSql, con, 1 ' 1 = adOpenKeyset
' If no item matches, report the error and exit the function.
If (rs.EOF) Then
MsgBox "There was an error reading the Switchboard Items table."
rs.Close
Set rs = Nothing
Set con = Nothing
Exit Function
End If
Select Case rs![Command]
' Go to another switchboard.
Case conCmdGotoSwitchboard
Me.Filter = "[ItemNumber] = 0 AND [SwitchboardID]=" & rs![Argument]
' Open a form in Add mode.
Case conCmdOpenFormAdd
DoCmd.OpenForm rs![Argument], , , , acAdd
' Open a form.
Case conCmdOpenFormBrowse
DoCmd.OpenForm rs![Argument]
' Open a report.
Case conCmdOpenReport
DoCmd.OpenReport rs![Argument], acPreview
' Customize the Switchboard.
Case conCmdCustomizeSwitchboard
' Handle the case where the Switchboard Manager
' is not installed (e.g. Minimal Install).
On Error Resume Next
Application.Run "ACWZMAIN.sbm_Entry"
If (Err <> 0) Then MsgBox "Command not available."
On Error GoTo 0
' Update the form.
Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Default' "
Me.Caption = Nz(Me![ItemText], "")
FillOptions
' Exit the application.
Case conCmdExitApplication
CloseCurrentDatabase
' Run a macro.
Case conCmdRunMacro
DoCmd.RunMacro rs![Argument]
' Run code.
Case conCmdRunCode
Application.Run rs![Argument]
' Open a Data Access Page
Case conCmdOpenPage
DoCmd.OpenDataAccessPage rs![Argument]

199
' Any other command is unrecognized.
Case Else
MsgBox "Unknown option."
End Select
' Close the recordset and the database.
rs.Close

HandleButtonClick_Exit:
On Error Resume Next
Set rs = Nothing
Set con = Nothing
Exit Function
HandleButtonClick_Err:
' If the action was cancelled by the user for some reason, don't display an error message.Instead,
resume on the next line.
If (Err = conErrDoCmdCancelled) Then
Resume Next
Else
MsgBox "There was an error executing the command.", vbCritical
Resume HandleButtonClick_Exit
End If
End Function

Formulario tipo
Option Compare Database
Private Sub Form_Close()
Form_lista_materiales.Refresh
End Sub

Private Sub Form_Open(Cancel As Integer)


DoCmd.GoToRecord , , acNewRec
End Sub

Formulario unidades
Option Compare Database
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acNewRec
End Sub

Modulo exportar a Excel

Option Compare Database


'------------------------------------------------------------
' actualizar_tabla_rutas_producto'
'------------------------------------------------------------

Function Exportar_Prioridades()

200
On Error GoTo EXPORTAR_prioridades_Err
Dim i, c As Integer, m, n As String
c=1
Set fs = Application.FileSearch
With fs
.LookIn = "c:\aplicación" 'para buscar en los discos c y d pege esté comando .LookIn = "c:\;d:\"
.SearchSubFolders = True
.FileName = "prioridades.xls"
m = "c:\aplicación\prioridades.xls"
If .Execute > 0 Then
' MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
n = .FoundFiles(i)
If n = m Then
'MsgBox "igual"
c=0
End If
Next i
End If
End With

If c = 0 Then
DoCmd.TransferSpreadsheet acExport, 8, "edd", [m], True, ""
DoCmd.TransferSpreadsheet acExport, 8, "fcfs", [m], True, ""
DoCmd.TransferSpreadsheet acExport, 8, "lot", [m], True, ""
DoCmd.TransferSpreadsheet acExport, 8, "sot", [m], True, ""

stAppName = "excel.exe C:\aplicación\prioridades.xls"


Call Shell(stAppName, 1)

Else
MsgBox "No se encontró prioridades.xls en la ruta ( c:\aplicación ) Copie el archivo ORIGINAL
a esta ruta para que la aplicación funcione correctamente.", vbCritical, "ERROR - ARCHIVO NO
ENCONTRADO"
End If

EXPORTAR_prioridades_Exit:
Exit Function

EXPORTAR_prioridades_Err:
If Err.Number = 3010 Then
MsgBox Err.Number & " - Cierre el archivo de Excel ''prioridades.xls'' para realizar
correctamente " _
& "el envio de la información - " & Err.Description, vbCritical, "Error - EL ARCHIVO
DESTINO ESTA ABIERTO"
Else
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
End If

201
Resume EXPORTAR_prioridades_Exit
End Function

Function Exportar_In_Out()
On Error GoTo EXPORTAR_IN_OUT_Err
Dim i, c As Integer, m, n As String
c=1
Set fs = Application.FileSearch
With fs
.LookIn = "c:\aplicación" 'para buscar en los discos c y d pege esté comando .LookIn = "c:\;d:\"
.SearchSubFolders = True
.FileName = "in-out.xls"
m = "c:\aplicación\in-out.xls"
If .Execute > 0 Then
' MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
n = .FoundFiles(i)
If n = m Then
'MsgBox "igual"
c=0
End If
Next i
End If
End With

If c = 0 Then
DoCmd.TransferSpreadsheet acExport, 8, "control_input_output", [m], True, ""

stAppName = "excel.exe C:\aplicación\in-out.xls"


Call Shell(stAppName, 1)

Else
MsgBox "No se encontró prioridades.xls en la ruta ( c:\aplicación ) Copie el archivo ORIGINAL
a esta ruta para que la aplicación funcione correctamente.", vbCritical, "ERROR - ARCHIVO NO
ENCONTRADO"
End If

EXPORTAR_IN_OUT_Exit:
Exit Function

EXPORTAR_IN_OUT_Err:
If Err.Number = 3010 Then
MsgBox Err.Number & " - Cierre el archivo de Excel ''in-out.xls'' para realizar correctamente
"_
& "el envio de la información - " & Err.Description, vbCritical, "Error - EL ARCHIVO
DESTINO ESTA ABIERTO"
Else
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"

202
End If
Resume EXPORTAR_IN_OUT_Exit
End Function

Function Exportar_Johnson()
On Error GoTo EXPORTAR_JOHNSON_Err
Dim i, c As Integer, m, n As String
c=1
Set fs = Application.FileSearch
With fs
.LookIn = "c:\aplicación" 'para buscar en los discos c y d pege esté comando .LookIn = "c:\;d:\"
.SearchSubFolders = True
.FileName = "johnson.xls"
m = "c:\aplicación\johnson.xls"
If .Execute > 0 Then
' MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
n = .FoundFiles(i)
If n = m Then
'MsgBox "igual"
c=0
End If
Next i
End If
End With

If c = 0 Then
DoCmd.TransferSpreadsheet acExport, 8, "johnson", [m], True, ""

stAppName = "excel.exe C:\aplicación\johnson.xls"


Call Shell(stAppName, 1)

Else
MsgBox "No se encontró johnson.xls en la ruta ( c:\aplicación ) Copie el archivo ORIGINAL a
esta ruta para que la aplicación funcione correctamente.", vbCritical, "ERROR - ARCHIVO NO
ENCONTRADO"
End If

EXPORTAR_JOHNSON_Exit:
Exit Function

EXPORTAR_JOHNSON_Err:
If Err.Number = 3010 Then
MsgBox Err.Number & " - Cierre el archivo de Excel ''johnson.xls'' para realizar
correctamente " _
& "el envio de la información - " & Err.Description, vbCritical, "Error - EL ARCHIVO
DESTINO ESTA ABIERTO"
Else

203
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
End If
Resume EXPORTAR_JOHNSON_Exit
End Function

Function Exportar_Asignación()
On Error GoTo EXPORTAR_ASIGNACIÓN_Err
Dim i, c As Integer, m, n As String
c=1
Set fs = Application.FileSearch
With fs
.LookIn = "c:\aplicación" 'para buscar en los discos c y d pege esté comando .LookIn = "c:\;d:\"
.SearchSubFolders = True
.FileName = "asignación.xls"
m = "c:\aplicación\asignación.xls"
If .Execute > 0 Then
' MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
n = .FoundFiles(i)
If n = m Then
'MsgBox "igual"
c=0
End If
Next i
End If
End With

If c = 0 Then
DoCmd.TransferSpreadsheet acExport, 8, "asignar", [m], True, ""

stAppName = "excel.exe C:\aplicación\asignación.xls"


Call Shell(stAppName, 1)

Else
MsgBox "No se encontró asignación.xls en la ruta ( c:\aplicación ) Copie el archivo ORIGINAL
a esta ruta para que la aplicación funcione correctamente.", vbCritical, "ERROR - ARCHIVO NO
ENCONTRADO"
End If

EXPORTAR_ASIGNACIÓN_Exit:
Exit Function

EXPORTAR_ASIGNACIÓN_Err:
If Err.Number = 3010 Then
MsgBox Err.Number & " - Cierre el archivo de Excel ''asignación.xls'' para realizar
correctamente " _

204
& "el envio de la información - " & Err.Description, vbCritical, "Error - EL ARCHIVO
DESTINO ESTA ABIERTO"
Else
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
End If
Resume EXPORTAR_ASIGNACIÓN_Exit
End Function

Function Exportar_Programa_Detallado()
On Error GoTo EXPORTAR_Err
Dim i, c As Integer, m, n As String
c=1
Set fs = Application.FileSearch
With fs
.LookIn = "c:\aplicación" 'para buscar en los discos c y d pege esté comando .LookIn = "c:\;d:\"
.SearchSubFolders = True
.FileName = "detallada.xls"
m = "c:\aplicación\detallada.xls"
If .Execute > 0 Then
' MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
n = .FoundFiles(i)
If n = m Then
'MsgBox "igual"
c=0
End If
Next i
End If
End With

If c = 0 Then
DoCmd.TransferSpreadsheet acExport, 8, "prog_detallada", [m], True, ""

stAppName = "excel.exe C:\aplicación\detallada.xls"


Call Shell(stAppName, 1)

Else
MsgBox "No se encontró detallada.xls en la ruta ( c:\aplicación ) Copie el archivo ORIGINAL a
esta ruta para que la aplicación funcione correctamente.", vbCritical, "ERROR - ARCHIVO NO
ENCONTRADO"
End If

EXPORTAR_Exit:
Exit Function

EXPORTAR_Err:
If Err.Number = 3010 Then

205
MsgBox Err.Number & " - Cierre el archivo de Excel ''detallada.xls'' para realizar
correctamente " _
& "el envio de la información - " & Err.Description, vbCritical, "Error - EL ARCHIVO
DESTINO ESTA ABIERTO"
Else
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
End If
Resume EXPORTAR_Exit
End Function

Function Exportar_FINITA()
On Error GoTo EXPORTAR_Err
Dim i, c As Integer, m, n As String
c=1
Set fs = Application.FileSearch
With fs
.LookIn = "c:\aplicación" 'para buscar en los discos c y d pege esté comando .LookIn = "c:\;d:\"
.SearchSubFolders = True
.FileName = "carga_finita.xls"
m = "c:\aplicación\carga_finita.xls"
If .Execute > 0 Then
' MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
n = .FoundFiles(i)
If n = m Then
'MsgBox "igual"
c=0
End If
Next i
End If
End With

If c = 0 Then
DoCmd.TransferSpreadsheet acExport, 8, "cg_finita", [m], True, ""

stAppName = "excel.exe C:\aplicación\carga_finita.xls"


Call Shell(stAppName, 1)

Else
MsgBox "No se encontró carga_finita.xls en la ruta ( c:\aplicación ) Copie el archivo
ORIGINAL a esta ruta para que la aplicación funcione correctamente.", vbCritical, "ERROR -
ARCHIVO NO ENCONTRADO"
End If

EXPORTAR_Exit:
Exit Function

EXPORTAR_Err:

206
If Err.Number = 3010 Then
MsgBox Err.Number & " - Cierre el archivo de Excel ''carga_finita.xls'' para realizar
correctamente " _
& "el envio de la información - " & Err.Description, vbCritical, "Error - EL ARCHIVO
DESTINO ESTA ABIERTO"
Else
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
End If
Resume EXPORTAR_Exit
End Function

Modulo funciones de utilidad

Option Compare Database


Option Explicit

Function estácargado(ByVal txtNombreFormulario As String) As Boolean


' Devuelve Verdadero si se ha cargado el formulario especificado.
Const conObjetoEstaCerrado = 0
Const conModoDiseño = 0

If SysCmd(acSysCmdGetObjectState, acForm, txtNombreFormulario) <> conObjetoEstaCerrado


Then
If Forms(txtNombreFormulario).CurrentView <> conModoDiseño Then
EstáCargado = True
End If
End If

End Function

Function Verventanabasededatos()
On Error GoTo Err_VerVentanaBaseDeDatos
Dim txtNombreDoc As String
txtNombreDoc = "Centro_trabajo"
' Cerrar el formulario Panel de control principal.
DoCmd.Close
' Mandar el enfoque a la ventana de base de datos; seleccionar la tabla
' Categorías (primer formulario de la lista).
DoCmd.SelectObject acTable, txtNombreDoc, True
Salir_VerVentanaBaseDeDatos:
Exit Function

Err_VerVentanaBaseDeDatos:
MsgBox Err.Description
Resume Salir_VerVentanaBaseDeDatos
End Function

Function salir()

207
On Error GoTo Err_salir

DoCmd.ShowToolbar "BASE DE DATOS", acToolbarYes


DoCmd.Quit

Exit_salir:
Exit Function
Err_salir:
MsgBox Err.Description
Resume Exit_salir
End Function

Function cerrar()
DoCmd.ShowToolbar "BASE DE DATOS", acToolbarYes
CloseCurrentDatabase
End Function

Archivos Excel

Prioridades.Xls
'Diseñado por Jesús Eduardo Scarpetta jescarpe@yahoo.com
'Feb 2002 Trabajo de grado

Sub msg()
MsgBox "TRABAJO DE GRADO Herramienta informática en hoja electrónica para la planeación a
corto plazo de la producción en ambientes de planificación jerárquica, para PYMES con sistema de
producción por lotes o series cortas. REALIZADO POR Jesús Eduardo Scarpetta y Eliana Cuellar
Bernal. Este archivo es un vinculo del archivo en Access HPP-S.mdb", vbInformation, "Acerca de"
End Sub

Asignación.Xls
'Diseñado por Jesús Eduardo Scarpetta jescarpe@yahoo.com
'Feb 2002 Trabajo de grado

Sub msg()
MsgBox "TRABAJO DE GRADO Herramienta informática en hoja electrónica para la
planeación a corto plazo de la producción en ambientes de planificación jerárquica, para
PYMES con sistema de producción por lotes o series cortas. REALIZADO POR Jesús
Eduardo Scarpetta y Eliana Cuellar Bernal. Este archivo es un vinculo del archivo en
Access HPP-S.mdb Método Húngaro, VER: MACHUCA DOMÍNGUEZ, José Antonio et
al. Dirección De Operaciones : Aspectos tácticos y operativos en la producción y los
servicios. España : Mc Graw Hill, 1995. 299 p.", vbInformation, "Acerca de"
End Sub

Sub algoritmo()

208
Dim n, m, i As Integer, aux As Double
Dim mat(1 To 99, 1 To 99) As Double
Dim cero(1 To 99, 1 To 99)
Dim temp(1 To 99, 1 To 99)
Dim cont(1 To 99, 1 To 1)
Dim fila(1 To 99, 1 To 99) As Double
On Error GoTo algoritmo_Err
Worksheets("asignar").Select
Range("B2:CU99").Select
ActiveWorkbook.Names.Add Name:="tabla",
RefersToR1C1:="=asignar!R2C2:R99C99"
Range("CV2").Select
ActiveCell.FormulaR1C1 = "=COUNT(RC[-98]:RC[-1])"
n = Range("Cv2") 'busca el limite para las columnas
Range("B100").Select
ActiveCell.FormulaR1C1 = "=COUNT(R[-98]C:R[-1]C)"
m = Range("B100") 'busca el limite para las filas
Range("B2").Select
If n = 0 Or m = 0 Then 'condicional primario
MsgBox "alguno o ambos limites de la matriz igual a cero. verifique que los datos
comienzan desde la casilla B2", vbInformation, "ERROR EN LOS LIMITES"
Else

If n >= m Then 'control ok para saber en que momento


ok = m 'las iteraciones son validas
Else: ok = n
End If

m=m+1
n=n+1

For r = 2 To m 'lee los datos de las celdas y los coloca en la


For c = 2 To n 'matriz mat
With Worksheets("asignar").Cells(r, c)
mat(r, c) = .Value
End With
Worksheets("asignar").Cells(r, c).Select
Next c
Next r
'*****************************************************************
For c = 2 To n '
aux = mat(2, c)
For r = 2 To m 'MÍNIMO por COLUMNA
If mat(r, c) < aux Then '
aux = mat(r, c) '

209
End If
Next r

For r = 2 To m ' resta Mínimo por COLUMNA


mat(r, c) = mat(r, c) - aux
Next r
Next c
'*****************************************************************
For r = 2 To m 'MÍNIMO por fila OK!
aux = mat(r, 2)
For c = 2 To n
If mat(r, c) < aux Then
aux = mat(r, c)
End If
Next c

For c = 2 To n ' resta Mínimo por fila


mat(r, c) = mat(r, c) - aux
Next c
Next r
'*****************************************************************
Worksheets("Hoja1").Select
Range("B2:CU99").Select
Selection.ClearContents 'limpia la zona donde se pegan los datos
'*****************************************************************
fase3 = False
Do
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ciclo fase tres\\\\\\\\
'FASE 3
'----------------------------------------------------------------
If fase3 = True Then

For r = 2 To m
i=0
For c = 2 To n
If cero(r, c) = "asignar" Then
i=i+1
End If
Next c
If i = 0 Then
p=r
End If
Next r

210
For c = 2 To n
temp(p, c) = mat(p, c)
Next c

For c = 2 To n
If temp(p, c) = 0 Then
For r = 2 To m
If cero(r, c) = "asignar" Then
For q = 2 To n
If cero(r, q) = "asignar" Then
temp(r, q) = cero(r, q)
Else: temp(r, q) = mat(r, q)
End If
Next q
Else: temp(r, c) = mat(r, c)
End If
Next r
End If
Next c

For r = 2 To m 'contador de casillas con ceros o


i=0 'asignar en la matriz temp
For c = 2 To n
If temp(r, c) = 0 Or temp(r, c) = "asignar" Then
If IsEmpty(temp(r, c)) Then
i=i
Else: i = i + 1
End If
Else: i = i
End If
Next c

If i > 0 Then
For c = 2 To n 'asigna las filas con ceros o asignacion
fila(r, c) = temp(r, c) 'a la matriz fila, borrando esa casillas
temp(r, c) = Null 'de la matriz temp
Next c
End If
Next r

For c = 2 To n
If fila(p, c) = 0 Then
For r = 2 To m
fila(r, c) = Null
Next r

211
End If
Next c

aux = fila(2, 2)
For r = 2 To m
For c = 2 To n
If IsEmpty(fila(r, c)) Then 'busca el mínimo en la matriz
Else 'fila
If fila(r, c) < aux Then
aux = fila(r, c)
End If
End If
Next c
Next r

For r = 2 To m
For c = 2 To m
If IsEmpty(fila(r, c)) Then 'resta el mínimo a la matriz
Else: fila(r, c) = fila(r, c) - aux 'fila
End If
If IsEmpty(temp(r, c)) Then 'suma el mínimo a la matriz
Else: temp(r, c) = temp(r, c) + aux 'temp
End If
If IsNull(fila(r, c)) Or IsEmpty(fila(r, c)) Then
Else: temp(r, c) = fila(r, c) 'pasa los datos de la
End If 'matriz fila a temp

If IsNull(temp(r, c)) Or IsEmpty(temp(r, c)) Then


Else: mat(r, c) = temp(r, c) 'pasa los datos de la
End If

Next c
Next r
End If
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'================================================================
' FASE DOS BUSQUEDA SOLUCIÓN ÓPTIMA
'================================================================
For r = 2 To m 'cambia los ceros por
For c = 2 To n 'sus valores en la hoja
If mat(r, c) = 0 Then 'de calculo matriz y los
With Worksheets("asignar").Cells(r, c) 'guarda en la matriz cero
cero(r, c) = .Value
End With
End If

212
Next c
Next r
'**********************************************************ciclo externo
vacio = False 'valor de la variable de control
Do 'inicio del ciclo externo
aux = 0: min = 1000

For r = 2 To m 'contador de casillas con números


i=0 'en la matriz ceros y guardado de la
For c = 2 To n 'cantidad en el vector cont(contador)
If cero(r, c) <> 0 And cero(r, c) <> "asignar" Then
i=i+1
cont(r, 1) = i
Else: cont(r, 1) = i
End If

Next c
Next r
'---------------------------------------------------------ciclo interno--
i=1
Do
j=1
For r = 2 To m
If cont(r, 1) = 0 Then 'contador de ceros en el vector cont(r,1)
j=j+1
End If

If j = m Then
vacio = True
Exit Do 'sale del ciclo interno cuando el vector
Else: vacio = False 'este lleno de ceros
End If
If cont(r, 1) = i Then
For c = 2 To n
If cero(r, c) <> 0 Then
With Worksheets("asignar").Cells(r, c)
aux = .Value
If aux < min Then
min = aux: p = r: q = c
End If
End With
End If
Next c
End If
Next r

213
If min = 1000 Then
i = 1 + i: vacio = True
End If
Loop Until vacio = False
'----------------------------------------------------fin---ciclo interno--
If vacio = True Then
i=0
For r = 2 To m '
For c = 2 To n '
If cero(r, c) = "asignar" Then
i=1+i
End If
Next c
Next r

If i = ok Then
fase3 = False
Exit Do
Else: fase3 = True
Exit Do
End If
End If

For r = 2 To m 'coloca vacios en la columna


If p <> r Then 'con menor valor y asignar en la
cero(r, q) = Null 'posición del menor
Else: cero(r, q) = "asignar" '
End If
Next r
'*****************************************************************
For c = 2 To n 'coloca vacios en la fila
If q <> c Then 'con el menor valor
cero(p, c) = Null
End If
Next c

Loop Until vacio = True


'**************************************************fin****ciclo externo
Loop Until fase3 = False
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\fin--ciclo fase tres\\\\\\\\

For r = 2 To m 'imprime los datos del array en


For c = 2 To n 'la hoja1 del archivo por columna
Cells(r, c) = cero(r, c)

214
Worksheets("Hoja1").Cells(r, c).Select
Next c
Next r
End If

ActiveSheet.Shapes(2).Select
Range("A1").Select
'MsgBox "fin"
algoritmo_Exit:
Exit Sub
algoritmo_Err: ' Rutina de control de errores.
'MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
If Err.Number = -2147024809 Then
cuadro_de_texto
Resume
Else
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
Resume algoritmo_Exit
End If
End Sub 'algoritmo

Sub cuadro_de_texto()
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 151.5, 92.25, 299.25,
72#).Select
Selection.Font.Bold = False
ActiveSheet.Shapes(2).Select
Selection.ShapeRange.Line.Visible = msoFalse
With Selection
.HorizontalAlignment = xlJustify
.VerticalAlignment = xlJustify
.Orientation = xlHorizontal
.AutoSize = False
End With
Selection.Characters.Text = _
"La palabra ASIGNAR indica que trabajo debe asignarse a que maquina para obtener
el menor tiempo de proceso posible."
With Selection.Characters(Start:=1, Length:=117).Font
.Name = "Times New Roman"
.FontStyle = "Normal"
.Size = 16
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False

215
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
With Selection.Characters(Start:=12, Length:=7).Font
.Name = "Times New Roman"
.FontStyle = "Negrita"
.Size = 16
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 7
End With
Range("A1").Select
End Sub

Johnson.Xls
'Diseñado por Jesús Eduardo Scarpetta jescarpe@yahoo.com
'Feb 2002 Trabajo de grado

Sub algoritmo()
Dim g, t, y, j, m, i As Integer, aux, s As Variant
Dim dat(1 To 99, 1 To 3) As Variant
Dim JOHN(1 To 99, 1 To 3): Dim graf(1 To 99, 1 To 3)

On Error GoTo algoritmo_Err


Worksheets("johnson").Select
Range("B2:C99").Select
ActiveWorkbook.Names.Add Name:="tabla", RefersToR1C1:="=johnson!R2C2:R99C3"
Range("B100").Select
ActiveCell.FormulaR1C1 = "=COUNT(R[-98]C:R[-1]C)"
m = Range("B100") 'busca el limite para las filas
Range("B2").Select
If m = 0 Then 'condicional primario
MsgBox "el limite vertical de la matriz es igual a cero. verifique que los datos comienzan
desde la casilla B2", vbInformation, "ERROR EN LOS LIMITES"
Else
ok = m: i = 2: j = 0: m = m + 1
For r = 1 To m 'lee los datos de las
For c = 1 To 3 'celdasy los coloca en
With Worksheets("johnson").Cells(r, c) 'la matriz dat
dat(r, c) = .Value
End With

216
Worksheets("johnson").Cells(r, c).Select
Next c
Next r

Do 'ciclo hasta que la matriz dat este vacía


aux = 1000
For r = 2 To m
For c = 2 To 3
If dat(r, c) < aux Then
aux = dat(r, c)
p = r: q = c
End If
Next c
Next r

If q = 2 Then
For c = 1 To 3
JOHN(i, c) = dat(p, c)
dat(p, c) = Null
Next c
i=i+1
Else
t=m-j
For c = 1 To 3
JOHN(t, c) = dat(p, c)
dat(p, c) = Null
Next c
j=j+1
End If

k=0
For r = 2 To m
If IsNull(dat(r, 2)) Then
k=k+1
End If
Next r

If k = ok Then
Exit Do
End If
Loop
'*****************************************************************

For c = 1 To 3 'copia los encabezados


JOHN(1, c) = dat(1, c) 'de la matriz dat a la

217
graf(1, c) = JOHN(1, c) 'matriz john y graf
Next c

Worksheets("Hoja1").Select
Range("A1:CU99").Select 'limpia la zona donde
Selection.ClearContents 'se pegan los datos

For r = 1 To m 'imprime los datos del array en


For c = 1 To 3 'la hoja1 del archivo por columna
Cells(r, c) = JOHN(r, c)
Worksheets("Hoja1").Cells(r, c).Select
Next c
Next r

i=0
For c = 2 To 3
For r = 2 To m
p=r+i
graf(p, c) = JOHN(r, c)
Next r
i=i+1
Next c

q=m+1
s=0
For r = 2 To m
s = graf(r, 2) + s
Next r
s = graf(q, 3) + s

graf(2, 3) = JOHN(2, 2)
For r = 1 To q 'imprime los datos del array en
For c = 1 To 3 'la hoja1 del archivo por columna
q=8-c
Cells(r, q) = graf(r, c)
'Worksheets("Hoja1").Cells(r, q).Select
Next c
Next r
t=0
g=0
For i = 1 To 3
ActiveSheet.Shapes(i).Select
Next i

If g = 0 And t = 0 Then

218
g=2
Else:
If t <> 0 Then
MsgBox "EN CASO DE REALIZARSE MAL LA OPERACIÓN BORRE EL
OBJETO E INTENTE DE NUEVO LA OPERACIÓN. ", vbInformation,
"IMPORTANTE"
g=2
End If
End If
ActiveSheet.Shapes(g).Select
Selection.Characters.Text = "los trabajos se terminan en " & s & " horas estándar "
With Selection.Characters(Start:=1, Length:=43).Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 16
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With

End If
Worksheets("Hoja1").Cells(1, 1).Select

algoritmo_Exit:
Exit Sub
algoritmo_Err: ' Rutina de control de errores.
'MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
If Err.Number = -2147024809 Then
y = InputBox("Falta uno de estos elementos en la hoja de cálculo: "_
&" "_
& "1 - El grafico representativo de la Regla de Johnson. "_
& "2 - El Texto explicación de la respuesta obtenida. "_
& "3 - El botón que ejecuta el algoritmo. "_
& "4 - Todas las anteriores", "FALTA ALGO EN LA HOJA DE CÁLCULO")
Select Case y
Case 1
grafico
t=1
Case 2
cuadro_de_texto
g=i

219
Case 3
boton
t=1
Case 4
grafico
cuadro_de_texto
boton
t=1
Case Else
MsgBox "El número no es valido"
Resume algoritmo_Exit
End Select
Resume
Else
MsgBox Err.Number & "- - " & Err.Description, vbCritical, "ERROR"
Resume algoritmo_Exit
End If
End Sub 'JOHNSON
MODULO 2
'Diseñado por Jesús Eduardo Scarpetta
'jescarpe@yahoo.com
'Feb 2002
'Trabajo de grado

Sub grafico()
'ActiveWindow.Visible = False
'Windows("grafico johnson.xls").Activate
Range("A1:C99").Select
Charts.Add
ActiveChart.HasLegend = False
ActiveChart.ChartType = xlBarStacked
ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A1:A99,E1:F99"), _
PlotBy:=xlRows
For r = 1 To 98
ActiveChart.SeriesCollection(r).Select
Selection.Interior.ColorIndex = xlNone
Next r
ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Secuenciación Regla de Johnson para N trabajos en 2
maquinas"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With

220
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
ActiveChart.PlotArea.Select
ActiveChart.ChartArea.Select
'MsgBox "borrar"
' ActiveWindow.Visible = False
' Selection.Delete
End Sub

Sub cuadro_de_texto()
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 203.25, 16.5, _
388.5, 43.5).Select
Selection.ShapeRange.Line.Visible = msoFalse
Selection.Characters.Text = "los trabajos se terminan en " & s & " horas estándar"
With Selection.Characters(Start:=1, Length:=63).Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 16
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

Sub boton()
ActiveSheet.Buttons.Add(49.5, 249, 123.75, 28.5).Select
Selection.OnAction = "algoritmo"
'ActiveSheet.Shapes("1").Select
Selection.Characters.Text = "JOHNSON"
With Selection.Characters(Start:=1, Length:=4).Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
.Strikethrough = False
.Superscript = False

221
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Range("A2").Select
End Sub

Sub msg()
MsgBox "TRABAJO DE GRADO Herramienta informática en hoja electrónica para la
planeación a corto plazo de la producción en ambientes de planificación jerárquica, para
PYMES con sistema de producción por lotes o series cortas. REALIZADO POR Jesús
Eduardo Scarpetta y Eliana Cuellar Bernal. Este archivo es un vinculo del archivo en
Access HPP-S.mdb", vbInformation, "Acerca de"
End Sub

Detallada.Xls
Sub Macro1()
ActiveSheet.ChartObjects("Gráfico 12").Activate
ActiveChart.Axes(xlValue).Select
ActiveChart.ChartArea.Select
With ActiveChart
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "he"
End With
Selection.Left = 282
Selection.Top = 162
Selection.Font.Bold = False
End Sub

MODULO 2
'Diseñado por Jesús Eduardo Scarpetta jescarpe@yahoo.com
'Feb 2002 Trabajo de grado

Sub msg()
MsgBox "TRABAJO DE GRADO Herramienta informática en hoja electrónica para la
planeación a corto plazo de la producción en ambientes de planificación jerárquica, para
PYMES con sistema de producción por lotes o series cortas. REALIZADO POR Jesús
Eduardo Scarpetta y Eliana Cuellar Bernal. Este archivo es un vinculo del archivo en
Access HPP-S.mdb", vbInformation, "Acerca de"
End Sub

Sub grafico()
Range("A1:B100").Select

222
Charts.Add
ActiveChart.ChartType = xlBarStacked
ActiveChart.SetSourceData Source:=Sheets("prog_detallada").Range("A1:B100"), _
PlotBy:=xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:="prog_detallada"
ActiveChart.HasLegend = False
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 2
.Background = xlTransparent
End With
ActiveChart.Shapes.AddTextbox(msoTextOrientationHorizontal, 6.75, 24#, 37.5 _
, 22.5).Select
Selection.ShapeRange.Line.Visible = msoFalse
Selection.Characters.Text = "Pedido"
Selection.AutoScaleFont = False
With Selection.Characters(Start:=1, Length:=6).Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
With ActiveChart
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "he"
End With
Range("A1").Select
End Sub

223
Carga_Finita.Xls
'Diseñado por Jesús Eduardo Scarpetta jescarpe@yahoo.com
'Feb 2002 Trabajo de grado

Sub msg()
MsgBox "TRABAJO DE GRADO Herramienta informática en hoja electrónica para la
planeación a corto plazo de la producción en ambientes de planificación jerárquica, para
PYMES con sistema de producción por lotes o series cortas. REALIZADO POR Jesús
Eduardo Scarpetta y Eliana Cuellar Bernal. Este archivo es un vinculo del archivo en
Access HPP-S.mdb", vbInformation, "Acerca de"
End Sub

Sub Informacion1()
MsgBox "Cambie las horas reales de la celda en verde claro para variar las horas reales
normales de trabajo que se muestran en la celda de arriba en color naranja. Realice los
cambios en la celda verde y observe las modificaciones en el grafico. Al cerrar el archivo
copie el nuevo valor de las horas de trabajo para el periodo evaluado en el centro de análisis
en la base de datos en Access archivo 'PLANEACIÓN CORTO PLAZO' en el formulario
PRODUCCIÓN PLANEADA del menú CONTROL en la columna HR de la tabla INPUT,
OUTPUT PLANIFICADO para el centro seleccionado.", vbInformation,
"INFORMACIÓN"
End Sub

Sub Informacion2()
MsgBox "Suprima o borre cargas de la columna F (números en Fucsia) y observe los
cambios en el grafico al realizar lo anterior", vbInformation, "INFORMACIÓN"
End Sub

MODULO 2
'Diseñado por Jesús Eduardo Scarpetta jescarpe@yahoo.com
'Feb 2002 Trabajo de grado

Sub grafico()
Range("B5:H8").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Hoja2").Range("B5:H8"), PlotBy:= _
xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja2"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = _
"GANTT de carga finita para el centro seleccionado"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "periodos"

224
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "carga"
End With
ActiveChart.Axes(xlValue).Select
ActiveChart.PlotArea.Select
Selection.Left = 1
Selection.Top = 61
Selection.Top = 6
Selection.Width = 278
Selection.Height = 135
ActiveChart.Legend.Select
Selection.Left = 188
Selection.Top = 25
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.AutoScaleFont = False
With Selection.TickLabels.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
ActiveChart.Axes(xlCategory).AxisTitle.Select
Selection.AutoScaleFont = False
With Selection.Font
.Name = "Arial"
.FontStyle = "Negrita"
.Size = 7
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
Selection.Left = 230
ActiveChart.Axes(xlValue).Select

225
Selection.TickLabels.AutoScaleFont = False
With Selection.TickLabels.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
ActiveChart.Axes(xlValue).AxisTitle.Select
Selection.AutoScaleFont = False
With Selection.Font
.Name = "Arial"
.FontStyle = "Negrita"
.Size = 7
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = xlHorizontal
End With
Selection.Left = 3
Selection.Top = 1
ActiveChart.ChartTitle.Select
Selection.Left = 117
Selection.Top = 1
Selection.AutoScaleFont = False
With Selection.Font
.Name = "Arial"
.FontStyle = "Negrita"
.Size = 10
.Strikethrough = False

226
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
ActiveChart.Legend.Select
Selection.AutoScaleFont = False
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
ActiveWindow.Visible = False
Windows("carga_finita.xls").Activate
Range("B5").Select
End Sub

In-out.Xls
'Diseñado por Jesús Eduardo Scarpetta jescarpe@yahoo.com
'Feb 2002 Trabajo de grado

Sub msg()
MsgBox "TRABAJO DE GRADO Herramienta informática en hoja electrónica para la
planeación a corto plazo de la producción en ambientes de planificación jerárquica, para
PYMES con sistema de producción por lotes o series cortas. REALIZADO POR Jesús
Eduardo Scarpetta y Eliana Cuellar Bernal. Este archivo es un vinculo del archivo en
Access HPP-S.mdb", vbInformation, "Acerca de"
End Sub

MODULO 2
Sub gráfico()
Range("D1:E100").Select
ActiveWindow.SmallScroll Down:=-8
End Sub

227
Sub graf()
Charts.Add
ActiveChart.ChartType = xlColumnStacked
ActiveChart.SetSourceData Source:=Sheets("control_input_output").Range( _
"D1:E100"), PlotBy:=xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:= _
"control_input_output"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "input para el CT"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
ActiveChart.HasLegend = False
ActiveSheet.Shapes("Gráfico 3").ScaleWidth 1.14, msoFalse, _
msoScaleFromBottomRight
ActiveSheet.Shapes("Gráfico 3").ScaleHeight 1.34, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes("Gráfico 3").IncrementLeft -93.75
ActiveSheet.Shapes("Gráfico 3").IncrementTop 36#
End Sub

Sub outgraf()
Charts.Add
ActiveChart.ChartType = xlColumnStacked
ActiveChart.SetSourceData Source:=Sheets("control_input_output").Range( _
"F1:G100"), PlotBy:=xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:= _
"control_input_output"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "out para el CT"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.HasLegend = False

228
ActiveSheet.Shapes("Gráfico 4").ScaleWidth 1.07, msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes("Gráfico 4").ScaleHeight 1.16, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes("Gráfico 4").ScaleWidth 1.05, msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes("Gráfico 4").ScaleHeight 1.1, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes("Gráfico 4").IncrementLeft 192#
ActiveSheet.Shapes("Gráfico 4").IncrementTop 54#
ActiveSheet.Shapes("Gráfico 4").IncrementLeft -1.5
ActiveSheet.Shapes("Gráfico 4").IncrementTop -17.25
ActiveWindow.Visible = False
Windows("in-out.xls").Activate
ActiveSheet.ChartObjects("Gráfico 3").Activate
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Gráfico 3").IncrementLeft -8.25
ActiveSheet.Shapes("Gráfico 3").ScaleWidth 0.97, msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes("Gráfico 3").ScaleHeight 1.01, msoFalse, _
msoScaleFromBottomRight
ActiveWindow.Visible = False
Windows("in-out.xls").Activate
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Gráfico 4").IncrementLeft -16.5
ActiveSheet.Shapes("Gráfico 4").IncrementTop -1.5
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
Windows("in-out.xls").SmallScroll ToRight:=1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
Windows("in-out.xls").SmallScroll ToRight:=1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
Windows("in-out.xls").SmallScroll ToRight:=-1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate

229
Windows("in-out.xls").SmallScroll ToRight:=1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
Windows("in-out.xls").SmallScroll ToRight:=1
Windows("in-out.xls").SmallScroll Down:=3
ActiveSheet.Shapes("Gráfico 4").ScaleWidth 0.94, msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes("Gráfico 4").ScaleHeight 0.99, msoFalse, _
msoScaleFromBottomRight
Windows("in-out.xls").LargeScroll ToRight:=-1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
Windows("in-out.xls").SmallScroll Down:=-1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
Windows("in-out.xls").SmallScroll Down:=-1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
Windows("in-out.xls").SmallScroll Down:=-1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
Windows("in-out.xls").SmallScroll Down:=1
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate
ActiveWindow.Visible = False
ActiveSheet.ChartObjects("Gráfico 4").Activate

230
Windows("in-out.xls").SmallScroll Down:=-1
ActiveWindow.Visible = False
Windows("in-out.xls").Activate
Range("A1").Select
End Sub

231

Potrebbero piacerti anche