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.

Responder a