Ya te han contado que el compilador parece que "adapta" el tipo de datos de una
variable según convenga. En determinadas circunstancias esta conversión puede
venir muy bien, ¡pero es una trampa mortal! Te comento un caso REAL.
Hace poco tuve que modificar un programa que utilizaba un campo empaquetado
para almacenar una fecha (¿te suena?), precisamente porque tenía que parsarla
por parámetro (creo que también te suena). El cambio consistía en cambiar el
día (por ejemplo) en la fecha y no se me ocurrió otra cosa que descomponer la
fecha en una estructura de datos como decimal con zona. ¡Perfecto!, que cambio
tan rápido, ni lo pruebo, esto funciona ¡sí o sí! Me equivoqué, la compilación
perfecta, pero la llamada al programa que utilizaba la fecha terminó con un
error de datos decimales.
En OPM es complicado tratar por separado el día, mes y año de una fecha
empaquetada. En ILE yo utilizo la estrategia 'NO UTILIZAR DSs CON LAS FECHAS'.
Para ello me he definido en un programa de servidio una serie de funciones para
manipular valores de fecha en campos numéricos. Por ejemplo, podría utilizar
una función para extraer el día de una fecha numérica:
dia = DecDate_day( fechaNum );
Yo hago algo un poco más complicado (que creo que cambiaré), convierto el campo
numérico a tipo fecha y trabajo con ésta:
fecha = DecToDate( fechaNum: '*EUR' ); // Envía un mensaje de error si no es
una fecha correcta.
día = %Subdt( fecha: *DAYS );
Si quiero cambiar, por ejemplo, el mes:
fechaCambiada = SetDateElem( fecha: 'M': 6 ); // Cambiar la fecha al mes de
Junio
No sé si te he liado más ;-)
Javier
________________________________
De: [email protected]
[mailto:[email protected]] En nombre de JUAN García
Enviado el: miércoles, 28 de mayo de 2014 11:03
Para: forum.help400
Asunto: Re: Ds con subcampos empaquetados
Ya lo he tenido en cuenta es por eso por lo que me da el error, mas que
nada es una cuestión de tozudez porque podría poner la DS decimal con zona y
los subcampos también y luego moverlos a campos autónomos empaquetafos, pero
quería saber si habría alguna forma de hacerlo con campos empaquetados
Un saludo
El miércoles, 28 de mayo de 2014, Javier Mora <[email protected]>
escribió:
Tienes que tener en cuenta que:
Año 4P = 3 bytes
Mes 2P = 2 bytes
Día 2P = 2 bytes
Total 7 bytes
Mientras que 8P (el tamaño de la fecha) ocupa en memoria 5
bytes, por eso el compilar se queja con el error que te da.
Yo no sabría descomponer una fecha empaquetada en día, mes y
año utilizando un DS. Probablemente programando una
función podrías conseguirlo.
Un saludo,
Javier
________________________________
De: [email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');>
[mailto:[email protected]
<javascript:_e(%7B%7D,'cvml','[email protected]');> ] En
nombre de JUAN García
Enviado el: miércoles, 28 de mayo de 2014 10:21
Para: forum. help400
Asunto: Ds con subcampos empaquetados
Hola a todos
Tengo una DS como esta:
D DS
D fecha 8P 0
D Any 4P 0
Overlay(fecha)
D Mes 2P 0
Overlay(fecha:*next)
D Dia 2P 0
Overlay(fecha:*next)
Pero al compilar me da un error RNF7303 que dice que el
subcampos Dia es demasiado grande.
¿Sabe alguien como hacer una DS con campos empaquetados
para mover una fecha y que los subcampos contengan el día, mes y año?
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.