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:
COBOL Código:
comienzo.
move "text" of txtFcpfec to fecha-ing.
perform completa-fecha. *> esta es la rutina que completa la fecha
move fecha-dma to "text" of txtFcpfec.
perform valida-fecha.
if error-fecha = 1
perform fecha-mal
go sale
end-if.
invoke txtFcpfecha "setfocus". *> acá hago foco el text siguiente
sale.
exit program.
#include "Copys\comunpro.cpy". *> acá tengo todas las rutinas de manejo de fechas
Acá pego la rutina "completa-fecha".
COBOL Código:
completa-fecha.
move function current-date to fecha-sis. *> tomo la fecha de sistema
if fecha-ing > zeros and < 32 *> acá pregunto si ingresó el dia solamente
move fecha-ing-2 to fecha-dma-dd
move fecha-sis-fec-mm to fecha-dma-mm
move fecha-sis-fec-aa to fecha-dma-aa
else
if fecha-ing > 31 and < 3113 *> acá pregunto si ingresó dia y mes
move fecha-ing-1 to fecha-dma-dd
move fecha-ing-2 to fecha-dma-mm
move fecha-sis-fec-aa to fecha-dma-aa
else
move fecha-ing to fecha-dma
end-if
end-if.
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
COBOL Código:
01 variables-fecha global.
02 fecha-ing pic 9(8).
02 redefines fecha-ing.
03 pic x(4).
03 fecha-ing-1 pic 99.
03 fecha-ing-2 pic 99.
02 fecha-sis pic x(16).
02 redefines fecha-sis.
03 fecha-sis-fec pic 9(8).
03 redefines fecha-sis-fec.
04 fecha-sis-fec-aa pic 9999.
04 fecha-sis-fec-mm pic 99.
04 fecha-sis-fec-dd pic 99.
03 fecha-sis-hora pic 9(8).
03 redefines fecha-sis-hora.
04 fecha-sis-hora-hh pic 99.
04 fecha-sis-hora-mm pic 99.
04 fecha-sis-hora-ss pic 99.
04 fecha-sis-hora-ms pic 99.
02 fecha-amd pic 9(8).
02 redefines fecha-amd.
03 fecha-amd-aa pic 9999.
03 fecha-amd-mm pic 99.
03 fecha-amd-dd pic 99.
02 redefines fecha-amd.
03 fecha-amd-x pic x(8).
02 fecha-dma pic 9(8).
02 redefines fecha-dma.
03 fecha-dma-dd pic 99.
03 fecha-dma-mm pic 99.
03 fecha-dma-aa pic 9999.
03 redefines fecha-dma-aa.
04 fecha-century pic 99.
04 fecha-siglo pic 99.
02 redefines fecha-dma.
03 fecha-dma-x pic x(8).
02 fecha99-amd pic 9(6).
02 redefines fecha99-amd.
03 fecha99-amd-aa pic 99.
03 fecha99-amd-mm pic 99.
03 fecha99-amd-dd pic 99.
02 redefines fecha99-amd.
03 fecha99-amd-x pic x(6).
02 fecha99-dma pic 9(6).
02 redefines fecha99-dma.
03 fecha99-dma-dd pic 99.
03 fecha99-dma-mm pic 99.
03 fecha99-dma-aa pic 99.
02 redefines fecha99-dma.
03 fecha99-dma-x pic x(6).
02 fecha-4 pic 9999.
02 fecha-bisiesto pic 9999.
02 error-fecha pic 9.
02 fecha-editada.
03 fecha-editar pic zz/zz/zzzz.
02 fecha-inicial pic 9(8).
02 fecha-integer pic 9(8).
02 fecha-dias pic s9(8).
02 fecha-final pic 9(8).
02 fecha-1 pic 9(8).
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...
Marcadores