Ver Mensaje Individual
  #3
Antiguo 23 de noviembre de 2017, 23:24
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 21.09.2026 14:47
Posts Posts: 458
Likes enviados Enviados: 269
Likes recibidos Recibidos: 243

Hola Amigos:

Yo siempre usé la fecha en los text como cobol picture zz/zz/zzzz y tengo una rutina de validación hecha por mi para controlarla, teniendo en cuenta bisiestos y todo.

A raiz de los que dice KUK, me puse a probar el rendertext date. Está muy bueno, porque la validación la hace solo.

Pero como siempre hay un pero, quiero preguntar, espero haceme entender.

Para agilizar la carga de las fechas, yo le hago que cuando ingrese el dia y le de enter, automáticamente le complete el mes y año en curso. Tambien si ingresa dia y mes y le da enter completa con el año en curso.

en el evento Return del textbox (txtFcpfec) hago lo siguente:

Código COBOL:
  1.  comienzo.
  2.      move "text" of txtFcpfec    to fecha-ing.
  3.      perform completa-fecha.  *> esta es la rutina que completa la fecha
  4.      move fecha-dma    to "text" of txtFcpfec.
  5.          
  6.      perform valida-fecha.
  7.      if error-fecha = 1
  8.         perform fecha-mal
  9.         go sale
  10.      end-if.  
  11.  
  12.      invoke txtFcpfecha "setfocus". *> acá hago foco el text siguiente
  13.  
  14.  sale.
  15.      exit program.
  16.  
  17.  #include "Copys\comunpro.cpy". *> acá tengo todas las rutinas de manejo de fechas

Acá pego la rutina "completa-fecha".

Código COBOL:
  1.        completa-fecha.
  2.            move function current-date    to fecha-sis.  *> tomo la fecha de sistema
  3.            if fecha-ing > zeros and < 32     *> acá pregunto si ingresó el dia solamente
  4.               move fecha-ing-2           to fecha-dma-dd
  5.               move fecha-sis-fec-mm      to fecha-dma-mm
  6.               move fecha-sis-fec-aa      to fecha-dma-aa
  7.            else
  8.               if fecha-ing > 31 and < 3113  *> acá pregunto si ingresó dia y mes
  9.                  move fecha-ing-1        to fecha-dma-dd
  10.                  move fecha-ing-2        to fecha-dma-mm
  11.                  move fecha-sis-fec-aa   to fecha-dma-aa
  12.               else
  13.                  move fecha-ing          to fecha-dma
  14.               end-if
  15.            end-if.
  16.            perform dma-to-amd. *> esta rutina simplemente es para dar vuelta la fecha dma a amd

Acá les pego la working, por si no se entienden las variables

Código COBOL:
  1.        01  variables-fecha global.
  2.            02 fecha-ing                 pic 9(8).
  3.            02 redefines fecha-ing.
  4.               03                        pic x(4).
  5.               03 fecha-ing-1            pic 99.
  6.               03 fecha-ing-2            pic 99.
  7.  
  8.            02 fecha-sis                 pic x(16).
  9.            02 redefines fecha-sis.
  10.               03 fecha-sis-fec          pic 9(8).
  11.               03 redefines fecha-sis-fec.
  12.                  04 fecha-sis-fec-aa    pic 9999.
  13.                  04 fecha-sis-fec-mm    pic 99.
  14.                  04 fecha-sis-fec-dd    pic 99.
  15.               03 fecha-sis-hora         pic 9(8).
  16.               03 redefines fecha-sis-hora.
  17.                  04 fecha-sis-hora-hh   pic 99.
  18.                  04 fecha-sis-hora-mm   pic 99.
  19.                  04 fecha-sis-hora-ss   pic 99.
  20.                  04 fecha-sis-hora-ms   pic 99.
  21.  
  22.            02 fecha-amd                 pic 9(8).
  23.            02 redefines fecha-amd.
  24.               03 fecha-amd-aa           pic 9999.
  25.               03 fecha-amd-mm           pic 99.
  26.               03 fecha-amd-dd           pic 99.
  27.            02 redefines fecha-amd.
  28.               03 fecha-amd-x            pic x(8).
  29.  
  30.            02 fecha-dma                 pic 9(8).
  31.            02 redefines fecha-dma.
  32.               03 fecha-dma-dd           pic 99.
  33.               03 fecha-dma-mm           pic 99.
  34.               03 fecha-dma-aa           pic 9999.
  35.               03 redefines fecha-dma-aa.
  36.                  04 fecha-century       pic 99.
  37.                  04 fecha-siglo         pic 99.
  38.            02 redefines fecha-dma.
  39.               03 fecha-dma-x            pic x(8).
  40.  
  41.            02 fecha99-amd               pic 9(6).
  42.            02 redefines fecha99-amd.
  43.               03 fecha99-amd-aa         pic 99.
  44.               03 fecha99-amd-mm         pic 99.
  45.               03 fecha99-amd-dd         pic 99.
  46.            02 redefines fecha99-amd.
  47.               03 fecha99-amd-x          pic x(6).
  48.  
  49.            02 fecha99-dma               pic 9(6).
  50.            02 redefines fecha99-dma.
  51.               03 fecha99-dma-dd         pic 99.
  52.               03 fecha99-dma-mm         pic 99.
  53.               03 fecha99-dma-aa         pic 99.
  54.            02 redefines fecha99-dma.
  55.               03 fecha99-dma-x          pic x(6).
  56.  
  57.            02 fecha-4                   pic 9999.
  58.            02 fecha-bisiesto            pic 9999.
  59.  
  60.            02 error-fecha               pic 9.
  61.  
  62.            02 fecha-editada.
  63.               03 fecha-editar           pic zz/zz/zzzz.
  64.      
  65.            02 fecha-inicial             pic 9(8).
  66.            02 fecha-integer             pic 9(8).
  67.            02 fecha-dias                pic s9(8).
  68.            02 fecha-final               pic 9(8).
  69.            02 fecha-1                   pic 9(8).
  70.            02 fecha-2                   pic 9(8).

Esta es la exlpicación de lo que hago.

Ahora el problema es que con el text en date, todo esto no lo voy a poder hacer, porque ya me da la fecha "terminada". Si ingreso solo el día, me completa con 010001 y el dia y mes me completa con año 0001.
Podría controlar que si el año es 0001 lo tomo como que no ingresó año, pero el tema es el mes, cómo diferencio el mes 01, no sé si no le puso mes o realmente puso enero.

A lo mejor me estoy "liando" mucho como dicen uds, pero no le veo la respuesta. Seguramente es más sencilla de lo que parece.

Saludos.

Fito...
Fito is offline   Responder Con Cita