RESPUESTA A LA PREGUNTA 673 Bueno aquí os mando un artículo sobre el año 2000 de la revista ClipperWorld http://www.espacio.com.mx/paginas/clipperworld/ espero que os aclare un poco las ideas. El año 2.000 El año 2,000. ¿ El problema del año o del siglo ? Con el comienzo del año 2,000, mucha gente ha escuchado acerca de los problemas que tendrán las computadoras y los programas. Este artículo está destinado a ayudar a los desarrolladores a identificar, preparar y/o modificar sus aplicaciones para que estos problemas sean minimizados. ¿ Es el BUG del Milenio? Pocas cosas, en el área de Informática, son tan habladas hoy como el Problema del año 2000 (o Y2K). De forma bastante sencilla y objetiva, vea lo que es ese problema. Introducción La computación llamada de Gran Porte, iniciada en los años 50 y 60, hacía y hace uso hasta hoy de computadoras conocidas como mainframes. Esas computadoras, algunas extremamente poderosas en término de capacidad y velocidad de procesamiento tiene, entretanto, un "talón de Aquiles". En aquella época, básicamente para disminuir requerimientos y, desde luego, costos de almacenamiento en discos y cintas magnéticas, se estandarizó en el desarrollo de Sistemas, utilizar 2 posiciones para el año en los campos de fecha. Así, al contrario de DDMMAAAA (12051997), todos los Sistemas Operativos y Aplicaciones de Software, de este tipo de computadoras, almacenan DDMMAA (120597). Este formato ha sido más que suficiente, desde entonces, para resolver todo y cualquier problema relacionado con cálculos con fechas, vencimientos, edades, intereses, etc. Entretanto, con el cambio de siglo, el nuevo año, que tendría que ser representado 2000, pasará a valer 00 , o sea, el 1900. No necesitamos ir a procurar más detalles, ya que seguro usted ya habrá comprendido lo que esto significa en términos de ejecución de programas y sistemas en todo el mundo. Lo más increíble es que, todo técnico de informática siempre supo que habría un gran impacto en el cambio del siglo. Pero, tal vez por considerar que hasta el cambio de siglo todo cambiaría y los mainframes serían cosa del pasado, nada fue hecho. Pero, los mainframes todavía están entre nosotros, y han sido responsables por tareas pesadas en las estructuras de Sistemas de las organizaciones, sea actuando todavía como computadoras centralizadoras de procesos, sea como Servidores poderosos de grandes redes. Hay aún algunos factores que complican un poco más esa situación. Aquí apenas algunos de ellos: No existen técnicos suficientes para solucionar el problema Buena parte de los sistemas instalados no están documentados La poca documentación es deficiente La cantidad de sub-rutinas en un sistema Mainframe es enorme La mayoría de los lenguajes de mainframe no son procedurales Los costos anunciados son enormes, un promedio de $1.00 a $1.30 (USD) por línea de código Así, cuando hablamos de ser ese, en verdad, el Desperdicio del Milenio, es porque los recursos destinados a esa corrección no pueden ser vistos como inversión productiva, pero apenas como un gasto para hacer continuar funcionando lo que ya estaba, con la de que, toda esa montaña de sistemas de mainframes, más temprano o más tarde, dejará de existir. Por otro lado, creer que ese es un problema apenas de las áreas de Sistemas en las empresas, y que no es así tan grave, es "tapar el sol con un dedo". Infelizmente es grave sí, y es indispensable pues afectará todas las áreas de negocios, y tendría que constituir materia al nivel de los altos administradores de empresas, que tiene que presupuestar y planear los recursos necesarios. El problema ... En términos simples se trata de un error de programación en el cual la fecha ha sido procesada y almacenada en los archivos de registros y bases de datos usando un formato de dos dígitos para el valor del año, es decir 99 en vez de 1999. Esto ha ocurrido, principalmente, debido al deseo de minimizar los costos de la cantidad de almacenamiento en disco y memoria utilizada. Los cálculos basados en el valor del año en su formato de dos dígitos producirán resultados no especificados una vez que el valor de la vuelta al 00 en el año 2000 ... pero el problema no para ahí No sólo los programas fallan, si no que también los PCs. Muchas BIOS al llegar al 2.000 no restauran correctamente la fecha al encender de nuevo el Ordenador. Cualquier 486 o inferior tiene ese bug, sólo los últimas PC tienen este bug arreglado (prueba con tu PC no pasa nada, simplemente ponle una fecha del 2.000 apaga y vuelve a encender, y revisa la fecha que te dé el sistema). Esto, que parece algo inocente, puede provocar que algunas copias de seguridad que se hacen por FECHA no funcionen correctamente, que las fechas que se graban automáticamente (tomando la del sistema) sean erróneas. Clipper y el 2000 El 2000 año esta más cerca con cada nuevo día. Si quieres tener la diversión más grande durante las festividades del Año Nuevo (2000) entonces debe prepararte hoy (sé, que, a unas personas les gusta decir "Clipper esta muerto" ), Pero esta mas vivo que nunca, puedes preparar tus aplicaciones si resuelves los problemas siguientes: Estructura de almacenamiento de fechas Clipper y todo producto xBase guardan los valores de fechas en formato YYYYMMDD . Éste significa no necesitas cambiar la estructura de la bases de datos. SET CENTURY ON Si vives en un extraño país donde sólo se usan los 2 últimos dígitos del año, ahora convendrá poner los cuatro dígitos, con SET CENTURY ON. Pon SET CENTURY ON al principio de la aplicación o en la sección de configuración del entorno del sistema. ¡ Nota ! Es posible que tenga que redefinir la entrada de datos, ya que ahora los gets de tipo fecha son 2 caracteres más largos y debe revisar que no se "pisen" algunos campos o se "salgan" de las ventanas... SET EPOCH TO Si sus usuarios todavía quieren mecanografíar dos dígitos del año, entonces debe usar el comando SET EPOCH TO. Esta orden pone un rango de años en uso, por defecto, cuando se ingresan dos dígitos del año. SET EPOCH TO 1950 entonces los años por default son: 1950- 1999 si tecleó valores de 50 a 99 2000- 2049 si tecleó valores de 0 a 49 También puede poner un rango de fechas que se vaya moviendo dependiendo del año que tengo el sistema SET EPOCT TO YEAR(DATE())-50 Dependiendo el tipo de aplicación y claro la preferencia del usuario! CTOD() Necesitas examinar cuidadosamente todos los procesos donde hagas referencia a CTOD() en su codificación y ten cuidado de incluir ahora el año completo (YYYY). LUPDATE() Nos muestra la fecha de la ultima actualización del DBF, pero nos regresa en formato 19xx (no hace caso ni siquiera del EPOCH), en la cabecera de la DBF solo se guardan los últimos 2 dígitos del año (en forma de un solo byte), esto significa que en el 2000 nos regresará 1900. TRANSFORM() Esta función se puede utilizar para dar formato a los campos de tipo fecha, revise en tu código donde la esta utilizando y actualice los parámetros si procede. Otro funcionamiento de la fecha .... Debe verificar otras expresiones donde utiliza la fecha , sobre todo en expresiones índice importantes. Tiene que usar la función DTOS() (en lugar de DTOC()) si quiere evitar malos funcionamientos. Saludos. Félix Pablo Grande Ramos fpgrande@matrici.com