Te cuento una historia: El paso de parámetros entre programas se hace “por referencia”, es decir, en lugar de pasar el valor como tal lo que realmente hace el compilador es informar al programa llamado de la dirección de memoria de la variable (o valor) pasado. Esto no es evidente en los programas, porque lo que se aprecia en ellos es que estamos trabajando con variables.
En las llamadas “dinámicas” a programas no se realiza ningún tipo de chequeo en los tipos de los parámetros, es decir, yo puedo pasar una variable de tipo cadena en un parámetro numérico empaquetado. Nada ni nadie se dará cuenta, ni recibirás queja alguna. Sólo cuando un programa utiliza una variable/parámetro numérico, si no está convenientemente codificado, se producirá un error. Y aquí viene lo interesante, el programa llamado puede estar modificando el valor de una variable o parámetro y, de forma colateral, el contenido de otra variable que haya en las posiciones de memoria contiguas. Un caso muy sencillo: imagina que tu programa está esperando un campo alfanumérico de 10 posiciones, pero en realidad le pasas una variable de 5, cuando asignes cualquier valor al parámetro de 10 posiciones, estará cambiado el valor de las cinco primeras del parámetro pasado y los cinco bytes contiguos (que puede ser cualquier cosa), por ejemplo un campo numérico decimal con zona de dos posiciones. Este es uno de los errores más difíciles de detectar porque te va a tocar revisar todos los parámetros, sus tipos, el orden y, sobre todo, cuando exactamente se cambia el valor del campo (que puede ser de forma indirecta). Esto último es lo más difícil. Nuestros programa pueden (involuntariamente) modificar el valor de una variable sin hacer referencia a ella. Es más, en unas ejecuciones todo funciona y en otras no. Esto es una verdadera historia de terror que yo he sufrido en mis propias carnes. ¡Menudo rollo para empezar el fin de semana! Mira a ver si los tiros van por aquí. ¡Suerte! Javier Mora De: forum.help400-boun...@listas.combios.es [mailto:forum.help400-boun...@listas.combios.es] En nombre de Dpto. Informática (José Sánchez) Enviado el: viernes, 1 de junio de 2018 17:07 Para: forum.help400 Asunto: RE: Error datos decimales Me trae loco el tema…. Pasa por un CL anterior y creo que ahí pasa de Packed a decimal con zona, estoy investigando eso, que es mucho antes del pantallazo que mandé. Lo que no entiendo es que con debug el valor es correcto en el primer call (no usa ese parámetro) y el breakpoint justo en el call del programa que falla ya está mal el valor. Sino hay nada por en medio que modifique ese valor, ¿Dónde “leches“ ☺ está cambiando el valor? José Sánchez Dpto.Informática Productos Climax, S.A Pol. Ind. Sector Mollet C/Llobregat Nº 1 08150 - Parets del Valles (Barcelona) Teléfono: +34 935621311 Fax: +34 935621413 www.productosclimax.com<http://www.productosclimax.com/> Follow us: [Descripción: YouTube-logo-full_color baja] <https://www.youtube.com/user/productosclimax> [Descripción: descarga baja] <https://www.facebook.com/productosclimax> [Descripción: Descripción: image001] [Descripción: logo motos baja] De: forum.help400-boun...@listas.combios.es<mailto:forum.help400-boun...@listas.combios.es> [mailto:forum.help400-boun...@listas.combios.es<mailto:forum.help400-boun...@listas.combios.es>] En nombre de Javier Mora Enviado el: viernes, 1 de junio de 2018 16:35 Para: forum.help400 Asunto: RE: Error datos decimales ¿El parámetro numérico está definido en el PARM? Si es así, ten en cuenta que las llamadas a programas siempre esperan los parámetros numéricos en empaquetado y cuando se definen en la hoja C o en el PARM se convierten en decimal con zona. Revisa también que el parámetro tamaño del parámetro formal coincida con el parámetro utilizado en la llamada. Saludos, Javier Mora De: forum.help400-boun...@listas.combios.es<mailto:forum.help400-boun...@listas.combios.es> [mailto:forum.help400-boun...@listas.combios.es<mailto:forum.help400-boun...@listas.combios.es>] En nombre de Dpto. Informática (José Sánchez) Enviado el: viernes, 1 de junio de 2018 16:04 Para: forum.help400 Asunto: Error datos decimales Buenas, tengo un programa que recibe varios parámetros, uno de ellos numérico de 2 posiciones. Mando mail al foro porque llevo rato depurando y ya no se que mirar. Al ejecutarlo me da error de datos decimales. Lo he depurado todo y no veo donde ese parámetro cambia su valor. Justo antes de ejecutarlo, ejecuto otro programa(ODP001) y el valor es correcto al depurarlo. Cuando acaba, ejecuto el programa ODP002 y el valor ya está mal. No está usando la QRPLOBJ, ejecuta el correcto. [cid:image005.jpg@01D3F9D2.2873C340] José Sánchez Dpto.Informática Productos Climax, S.A Pol. Ind. Sector Mollet C/Llobregat Nº 1 08150 - Parets del Valles (Barcelona) Teléfono: +34 935621311 Fax: +34 935621413 www.productosclimax.com<http://www.productosclimax.com/> Follow us: [Descripción: YouTube-logo-full_color baja] <https://www.youtube.com/user/productosclimax> [Descripción: descarga baja] <https://www.facebook.com/productosclimax> [Descripción: Descripción: image001] [Descripción: logo motos baja] Nota de Confidencialidad Este mensaje se envía desde el sistema de correo electrónico de la empresa Productos Climax, S.A.. Podría contener por lo tanto secretos de empresa y otra información confidencial tutelados por las leyes de la Unión Europea y otros Estados. Si Vd. lo recibiera por error o sin ser una de las personas indicadas en el encabezamiento, deberá destruirlo sin copiarlo ni revelarlo o cualquier otra acción relacionada con el contenido del mensaje e informar inmediatamente por correo electrónico al emisor del mensaje. Las personas y entidades que violen sus deberes de confidencialidad podrán ser perseguidas ante los Tribunales de Justicia al amparo de la legislación civil, penal y administrativa nacional e internacional. Gracias por su colaboración. Política de Privacidad En base a la Ley 34/2002 de Servicios de la Sociedad de la Información y de Comercio Electrónico (LSSICE), en vigor desde el 12 de octubre de 2002 y de la Ley Orgánica 15/1999 del 13/12/1999 de Protección de Datos Personales, le comunicamos que su dirección de correo electrónico forma parte de nuestro fichero automatizado, al objeto de continuar enviándole ofertas de nuestros servicios y / o el mantenimiento de las comunicaciones en nuestras relaciones contractuales. En virtud de las Leyes antes mencionadas, tiene derecho de oposición, acceso, rectificación y cancelación de sus datos. Le recordamos que sus datos nunca son suministrados a terceros bajo ningún concepto, siendo únicamente utilizados para el envío de nuestras comunicaciones con Vd. Nota de Confidencialidad Este mensaje se envía desde el sistema de correo electrónico de la empresa Productos Climax, S.A.. Podría contener por lo tanto secretos de empresa y otra información confidencial tutelados por las leyes de la Unión Europea y otros Estados. Si Vd. lo recibiera por error o sin ser una de las personas indicadas en el encabezamiento, deberá destruirlo sin copiarlo ni revelarlo o cualquier otra acción relacionada con el contenido del mensaje e informar inmediatamente por correo electrónico al emisor del mensaje. Las personas y entidades que violen sus deberes de confidencialidad podrán ser perseguidas ante los Tribunales de Justicia al amparo de la legislación civil, penal y administrativa nacional e internacional. Gracias por su colaboración. Política de Privacidad En base a la Ley 34/2002 de Servicios de la Sociedad de la Información y de Comercio Electrónico (LSSICE), en vigor desde el 12 de octubre de 2002 y de la Ley Orgánica 15/1999 del 13/12/1999 de Protección de Datos Personales, le comunicamos que su dirección de correo electrónico forma parte de nuestro fichero automatizado, al objeto de continuar enviándole ofertas de nuestros servicios y / o el mantenimiento de las comunicaciones en nuestras relaciones contractuales. En virtud de las Leyes antes mencionadas, tiene derecho de oposición, acceso, rectificación y cancelación de sus datos. Le recordamos que sus datos nunca son suministrados a terceros bajo ningún concepto, siendo únicamente utilizados para el envío de nuestras comunicaciones con Vd.
____________________________________________________ Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) Forum.Help400 © Publicaciones Help400, S.L.