{ ------------------------------------------------------------------ PROGRAMA : PRPRMT001 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Periodo de Semana PROGRAMPROR : Tpreo A. Ferreras F. FECHA REALIZACION : Sept., 14, 1994. ------------------------------------------------------------------ } GLOBALS "ctprgb000.4gl" DEFINE dia_sem SMALLINT, prtb02 RECORD LIKE prtb00002.* FUNCTION ctprmt030() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ctfmmt031 FROM "ctfmmt031" DISPLAY FORM ctfmmt031 CALL pantalla() DISPLAY "ctprmt030" AT 4,3 DISPLAY "Periodo de Semanas" AT 6,34 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" let int_flag = false CLEAR FORM CALL ctpcpr030() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" let int_flag = false CALL ctpcmf030() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION ctpcpr030() # WHENEVER ERROR CONTINUE ## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO INPUT BY NAME prtb02.* ## VERIFICA QUE EL CODIGO NO EXISTA EN EL CATALOGO DE DEPARTAMENTO. SI EXISTE, ## ENTONCES DESPLEGA LOS DATOS DEL REGISTRO EXISTENTE. BEFORE FIELD num_semana SELECT MAX(num_semana) + 1 INTO prtb02.num_semana FROM prtb00002 DISPLAY BY NAME prtb02.num_semana AFTER FIELD num_semana IF prtb02.num_semana IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_semana ELSE SELECT a.* INTO prtb02.* FROM prtb00002 a WHERE a.num_semana = prtb02.num_semana IF status >= 0 THEN IF status != NOTFOUND THEN IF prtb02.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD num_semana END IF DISPLAY BY NAME prtb02.* LET numero_msg = 12 CALL msg(numero_msg) LET prtb02.semana_del = NULL NEXT FIELD num_semana END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF END IF AFTER FIELD mes IF prtb02.mes is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes END IF BEFORE FIELD semana_del SELECT MAX(a.semana_al) + 1 INTO prtb02.semana_del FROM prtb00002 a DISPLAY BY NAME prtb02.semana_del AFTER FIELD semana_del IF prtb02.semana_del IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD semana_del END IF SELECT MAX(a.semana_del) INTO fecha_c FROM prtb00002 a WHERE a.num_semana < prtb02.num_semana AND a.status_t IS NULL IF fecha_c > prtb02.semana_del THEN LET numero_msg = 300 CALL msg(numero_msg) NEXT FIELD semana_del END IF { LET dia_sem = WEEKDAY(prtb02.semana_del) IF dia_sem != 6 THEN LET numero_msg = 220 CALL msg(numero_msg) NEXT FIELD semana_del END IF } BEFORE FIELD semana_al LET prtb02.semana_al = prtb02.semana_del + 6 DISPLAY BY NAME prtb02.semana_al AFTER FIELD semana_al IF prtb02.semana_al IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD semana_al END IF IF prtb02.semana_del > prtb02.semana_al THEN LET numero_msg = 53 CALL msg(numero_msg) NEXT FIELD semana_del END IF LET fecha_c = NULL SELECT MAX(a.semana_al) INTO fecha_c FROM prtb00002 a WHERE a.num_semana < prtb02.num_semana AND a.status_t IS NULL IF fecha_c > prtb02.semana_al THEN LET numero_msg = 300 CALL msg(numero_msg) NEXT FIELD semana_al END IF LET dia_sem = WEEKDAY(prtb02.semana_al) { IF dia_sem != 5 THEN LET numero_msg = 221 CALL msg(numero_msg) NEXT FIELD semana_del END IF } END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF INSERT INTO prtb00002 VALUES (prtb02.*) UPDATE prtb00002 SET (us_crea,fech_crea) = (USER,CURRENT) WHERE @num_semana = prtb02.num_semana LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM END FUNCTION FUNCTION ctpcmf030() ## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA ## MODIFICACION DE REGISTROS # WHENEVER ERROR CONTINUE CONSTRUCT BY NAME criterio ON a.num_semana,a.ano,a.mes,a.semana_del, a.semana_al IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = " SELECT UNIQUE a.* FROM prtb00002 a ", " WHERE a.status_t is null and ",criterio clipped," ORDER BY 1" PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF DECLARE dato SCROLL CURSOR FOR busca OPEN dato FETCH FIRST dato INTO prtb02.* IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF DISPLAY BY NAME prtb02.* MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrpro" FETCH NEXT dato INTO prtb02.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME prtb02.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrpro" FETCH PREVIOUS dato INTO prtb02.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME prtb02.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrpro" FETCH FIRST dato INTO prtb02.* DISPLAY BY NAME prtb02.* LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrpro" FETCH LAST dato INTO prtb02.* DISPLAY BY NAME prtb02.* LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF prtb02.status_t = "E" THEN LET numero_msg = 39 CALL msg(numero_msg) RETURN END IF ## SE SELECCIONAN LOS CAMPOS QUE SON MODIFICABLES INPUT BY NAME prtb02.ano, prtb02.mes, prtb02.semana_del, prtb02.semana_al, prtb02.status_t, prtb02.us_crea, prtb02.fech_crea, prtb02.us_mod, prtb02.fech_mod WITHOUT DEFAULTS AFTER FIELD semana_del IF prtb02.semana_del IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD semana_del END IF { LET dia_sem = WEEKDAY(prtb02.semana_del) IF dia_sem != 6 THEN LET numero_msg = 220 CALL msg(numero_msg) NEXT FIELD semana_del END IF } BEFORE FIELD semana_al LET prtb02.semana_al = prtb02.semana_del + 6 DISPLAY BY NAME prtb02.semana_al AFTER FIELD semana_al IF prtb02.semana_al IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD semana_al END IF IF prtb02.semana_del > prtb02.semana_al THEN LET numero_msg = 53 CALL msg(numero_msg) NEXT FIELD semana_del END IF LET dia_sem = WEEKDAY(prtb02.semana_al) { IF dia_sem != 5 THEN LET numero_msg = 221 CALL msg(numero_msg) NEXT FIELD semana_del END IF } #### Verifica si el usuario presiono la tecla END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF ## AQUI SE ACTUALIZA EL REGISTRO UPDATE prtb00002 SET mes = prtb02.mes, ano = prtb02.ano, semana_del = prtb02.semana_del, semana_al = prtb02.semana_al, us_mod = USER, fech_mod = CURRENT WHERE @num_semana = prtb02.num_semana LET numero_msg = 13 CALL msg(numero_msg) ## AQUI SE ELIMINAN LOS REGISTROS COMMAND KEY ("L") "eLiminar" UPDATE prtb00002 SET status_t = "E" WHERE num_semana = prtb02.num_semana LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION