{ ------------------------------------------------------------------ PROGRAMA : CTPRMT001 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla catalogo semi-elaborados. PROGRAMADOR : Ing. Juan F. Soto. FECHA REALIZACION : Junio 14, 1993. ------------------------------------------------------------------ } GLOBALS "ctprgb000.4gl" DEFINE descripcion_origen CHAR(30) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "decomarmol" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL ctprmt001() END MAIN FUNCTION ctprmt001() # WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ctfmmt001 FROM "ctfmmt001" DISPLAY FORM ctfmmt001 DISPLAY "ctprmt001" AT 4,3 DISPLAY "Catalogo de Produccion" AT 6,29 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" LET int_flag = FALSE CLEAR FORM CALL ctpcad001() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" LET INT_FLAG = FALSE CALL ctpcmf001() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION ctpcad001() #WHENEVER ERROR CONTINUE ## Captura los datos que va a contener el registro LET int_flag = false LABEL vuelve: INPUT BY NAME produccion.cod_cia,produccion.cod_prod,produccion.descripcion, produccion.unidad_med,produccion.nomenclatura AFTER FIELD cod_prod IF produccion.cod_prod is null then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_prod END IF LET produccion.descripcion = null LET produccion.unidad_med = null LET produccion.nomenclatura = null LET produccion.status_t = null LET produccion.us_crea = null LET produccion.fech_crea = null LET produccion.us_mod = null LET produccion.fech_mod = null DISPLAY BY NAME produccion.* SELECT * INTO produccion.* FROM cttb00001 WHERE @cod_prod = produccion.cod_prod IF produccion.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) DISPLAY BY NAME produccion.* NEXT FIELD cod_prod END IF IF status != notfound THEN LET numero_msg = 12 CALL msg(numero_msg) DISPLAY BY NAME produccion.* NEXT FIELD cod_prod END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF AFTER FIELD cod_cia SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a WHERE a.cod_cia = produccion.cod_cia IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_cia END IF DISPLAY BY NAME descripcion_origen AFTER FIELD descripcion IF produccion.descripcion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF AFTER FIELD unidad_med IF produccion.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD unidad_med ELSE SELECT codigo_unidad FROM cttb00007 WHERE codigo_unidad = produccion.unidad_med and status_t is null IF status = NOTFOUND THEN LET numero_msg = 17 CALL msg(numero_msg) NEXT FIELD unidad_med END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF AFTER FIELD nomenclatura IF produccion.nomenclatura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nomenclatura END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF produccion.cod_prod is null then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_prod END IF SELECT * INTO produccion.* FROM cttb00001 WHERE cod_prod = produccion.cod_prod IF produccion.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) DISPLAY BY NAME produccion.* NEXT FIELD cod_prod END IF IF status != notfound THEN LET numero_msg = 3 CALL msg(numero_msg) DISPLAY BY NAME produccion.* NEXT FIELD cod_prod END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF IF produccion.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD unidad_med ELSE SELECT codigo_unidad FROM cttb00007 WHERE codigo_unidad = produccion.unidad_med and status_t is null IF STATUS = NOTFOUND THEN LET numero_msg = 17 CALL msg(numero_msg) NEXT FIELD unidad_med END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF EXIT INPUT END INPUT INSERT INTO cttb00001 VALUES (produccion.cod_prod,produccion.descripcion, produccion.unidad_med,produccion.nomenclatura, null,SUSER_SNAME(),GETDATE(),null,null,produccion.cod_cia) CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF LET numero_msg = 1 CALL msg(numero_msg) GOTO vuelve END FUNCTION FUNCTION ctpcmf001() # WHENEVER ERROR CONTINUE LET int_flag = false ## Aqui se prepara para la captura del criterio de seleccion CONSTRUCT criterio ON a.cod_prod,a.descripcion FROM cod_prod,descripcion 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 cttb00001 a ", " WHERE a.status_t is null and ", criterio clipped," ORDER BY 1,2,3,4" PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO produccion.* 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 LET bandera = 0 RETURN END IF END IF SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a WHERE a.cod_cia = produccion.cod_cia DISPLAY BY NAME produccion.*,descripcion_origen MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO produccion.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a WHERE a.cod_cia = produccion.cod_cia DISPLAY BY NAME produccion.*,descripcion_origen COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO produccion.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a WHERE a.cod_cia = produccion.cod_cia DISPLAY BY NAME produccion.*,descripcion_origen COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO produccion.* SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a WHERE a.cod_cia = produccion.cod_cia DISPLAY BY NAME produccion.*,descripcion_origen LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO produccion.* SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a WHERE a.cod_cia = produccion.cod_cia DISPLAY BY NAME produccion.*,descripcion_origen LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF produccion.status_t="E" THEN LET numero_msg= 36 CALL msg(numero_msg) RETURN END IF INPUT BY NAME produccion.cod_cia,produccion.descripcion,produccion.unidad_med, produccion.nomenclatura WITHOUT DEFAULTS AFTER FIELD cod_cia SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a WHERE a.cod_cia = produccion.cod_cia IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_cia END IF DISPLAY BY NAME descripcion_origen AFTER FIELD descripcion IF produccion.descripcion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF AFTER FIELD unidad_med IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF produccion.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD unidad_med ELSE SELECT codigo_unidad FROM cttb00007 WHERE codigo_unidad = produccion.unidad_med IF STATUS = NOTFOUND THEN LET numero_msg = 17 CALL msg(numero_msg) NEXT FIELD unidad_med END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF AFTER FIELD nomenclatura IF produccion.nomenclatura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nomenclatura END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF produccion.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD unidad_med ELSE SELECT codigo_unidad FROM cttb00007 WHERE codigo_unidad = produccion.unidad_med AND status_t is null IF STATUS = NOTFOUND THEN LET numero_msg = 17 CALL msg(numero_msg) NEXT FIELD unidad_med END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF IF produccion.descripcion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF EXIT INPUT END INPUT #### Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF UPDATE cttb00001 SET cod_cia = produccion.cod_Cia, descripcion = produccion.descripcion, unidad_med = produccion.unidad_med, nomenclatura = produccion.nomenclatura, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE cod_prod = produccion.cod_prod LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" UPDATE cttb00001 SET status_t ="E" , us_mod = SUSER_SNAME(), fech_mod = GETDATE() where cod_prod = produccion.cod_prod LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" EXIT MENU END MENU END FUNCTION