Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Formatear Fecha dariodr COBOL - General 4 30 de noviembre de 2023 11:57
[Sintaxis] Calculo entre dos fecha jmeza RM/COBOL 7 30 de noviembre de 2021 16:09
[Sintaxis] Pasar fecha a formato unix Fito PowerCOBOL (ActiveX, v4 - v11) 3 16 de noviembre de 2021 20:19
[Sintaxis] Formato de Fecha jmeza PowerCOBOL (ActiveX, v4 - v11) 1 3 de diciembre de 2017 18:03
[Aporte] DLL de cáculo de fecha y hora Kuk Software 2 11 de enero de 2016 22:32

Respuesta

  #1
Antiguo 22 de noviembre de 2017, 16:55
jmeza
Forero Senior
Última Actividad 23.05.2026 02:04
Posts Posts: 106
Likes enviados Enviados: 26
Likes recibidos Recibidos: 4
Predeterminado Validación de Fecha
0 Inactivo Inactivo

Hola, alguien me podría ayudar como validar los ingresos de fechas en powercobolv9,
ya que este es un dato muy sensible de ingresar en forma errónea.
Ejemplo, que el día no sea mayor a 30 o 31 según el mes, que el mes no sea mayor 12, etc.

Favor si alguien me puede ayudar con una rutina de validación

Saludos
jmeza is offline   Responder Con Cita
  #2
Antiguo 22 de noviembre de 2017, 19:04
Kuk
Administrador
Última Actividad 21.09.2026 18:24
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

jmeza, el control CmText tiene la opción de parseo de fecha que lo hace todo él solito!



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #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
  #4
Antiguo 24 de noviembre de 2017, 03:11
jmeza
Forero Senior
Última Actividad 23.05.2026 02:04
Posts Posts: 106
Likes enviados Enviados: 26
Likes recibidos Recibidos: 4

Ok, acostumbrado al rmcobol (dos) que hay que programar todas las validaciones.
Ahora lo haré con lo que me recomiendan.

Saludos
jmeza is offline   Responder Con Cita
  #5
Antiguo 24 de noviembre de 2017, 10:32
Kuk
Administrador
Última Actividad 21.09.2026 18:24
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Fito, yo nunca he hecho lo que tu haces, pero podrías probar con el evento "KeyPressed". Validando si lo que se ha pulsado es la tecla Enter, miras los valores.

Es posible que al darle, el control ya ponga el resto, pero puede que no. Pruébalo y nos cuentas.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:52.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.