{ ------------------------------------------------------------------ PROGRAMA : IPPRMT005 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla Grupos iptb00020. Clases PROGRAMADOR : Ing. Juan Soto. FECHA REALIZACION : Noviembre 29, 2013. ------------------------------------------------------------------ } GLOBALS "ipprgb000.4gl" DEFINE intb32 RECORD LIKE iptb00029.*, pcod_cat SMALLINT MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ipprmt005() END MAIN FUNCTION ipprmt005() CONNECT to "decomarmol" AS "MSSQL" USER usuarios USING clave --CONNECT TO "marmotech" AS "IFMX" OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ipfmmt012 FROM "ipfmmt019" DISPLAY FORM ipfmmt012 MENU ON ACTION nuevo let int_flag = false CLEAR FORM let int_flag = false CALL ippcad012() ON ACTION buscar CALL ippcmf012() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION ippcad012() ## Captura los datos que va a contener el registro #WHENEVER ERROR CONTINUE INPUT BY NAME p_iptb20.*,pcod_cat BEFORE INPUT SET CONNECTION "MSSQL" CALL categorias() AFTER INPUT IF int_flag THEN LET numero_msg = 3 CALL msg(numero_msg) LET INT_FLAG = false RETURN END IF END INPUT SET CONNECTION "MSSQL" SELECT MAX(a.cod_n) INTO p_iptb20.cod_n FROM iptb00020 a IF p_iptb20.cod_n IS NULL THEN LET p_iptb20.cod_n = 0 END IF LET p_iptb20.cod_n = p_iptb20.cod_n + 1 DISPLAY p_iptb20.cod_n TO cod_n INSERT INTO iptb00020 (cod_n,producto,us_crea,fech_crea,comentario) VALUES (p_iptb20.cod_n,p_iptb20.producto,usuarios,getdate(),p_iptb20.comentario) INSERT INTO iptb00035 (cod_n,cod_cat) VALUES (p_iptb20.cod_n,pcod_cat) { SET CONNECTION "IFMX" INSERT INTO iptb00020 (cod_n,producto,us_crea,fech_crea) VALUES (p_iptb20.cod_n,p_iptb20.producto,usuarios,getdate()) } LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION FUNCTION ippcmf012() DEFINE encontrados INTEGER ## Aqui se prepara para la captura del criterio de seleccion #WHENEVER ERROR CONTINUE SET CONNECTION "MSSQL" CONSTRUCT BY NAME criterio ON a.cod_n,a.producto BEFORE CONSTRUCT CALL categorias() AFTER CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT CONSTRUCT END CONSTRUCT LET SELEC = " SELECT DISTINCT a.*,b.cod_cat FROM iptb00020 a LEFT OUTER JOIN iptb00035 b ON a.cod_n = b.cod_n ", " WHERE ", criterio clipped, " ORDER BY a.cod_n" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR WITH HOLD FOR busca OPEN datos FETCH FIRST datos INTO p_iptb20.*,pcod_cat IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE END IF DISPLAY BY NAME p_iptb20.*,pcod_cat MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO p_iptb20.*,pcod_cat IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME p_iptb20.*,pcod_cat COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO p_iptb20.*,pcod_cat IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME p_iptb20.*,pcod_cat COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO p_iptb20.*,pcod_cat DISPLAY BY NAME p_iptb20.*,pcod_cat LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO p_iptb20.*,pcod_cat DISPLAY BY NAME p_iptb20.*,pcod_cat LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" # Verifica que el movimiento sea del usuario creador IF p_iptb20.status_t IS NOT NULL THEN CALL msg(36) EXIT MENU END IF INPUT BY NAME p_iptb20.producto,pcod_cat,p_iptb20.comentario WITHOUT DEFAULTS AFTER INPUT #### Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE EXIT INPUT END IF UPDATE iptb00020 SET producto = p_iptb20.producto, comentario = p_iptb20.comentario, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE cod_n = p_iptb20.cod_n DELETE FROM iptb00035 WHERE cod_n = p_iptb20.cod_n INSERT INTO iptb00035 (cod_cat,cod_n) VALUES (pcod_cat,p_iptb20.cod_n) { SET CONNECTION "IFMX" UPDATE iptb00020 SET producto = p_iptb20.producto, us_mod = usuarios, fech_mod = getdate() WHERE cod_n = p_iptb20.cod_n } SET CONNECTION "MSSQL" LET numero_msg = 13 CALL msg(numero_msg) EXIT INPUT END INPUT COMMAND KEY ("L") "eLiminar" SET CONNECTION "MSSGL" LET encontrados = 0 SELECT count(*) INTO encontrados FROM iptb00002 WHERE cod_n = p_iptb20.cod_n AND status_t IS NULL IF encontrados = 0 THEN UPDATE iptb00020 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE cod_n = p_iptb20.cod_n { SET CONNECTION "IFMX" UPDATE iptb00020 SET status_t = "E", us_mod = usuarios WHERE cod_n = p_iptb20.cod_n } LET numero_msg = 39 CALL msg(numero_msg) ELSE LET numero_msg = 383 CALL msg(numero_msg) END IF COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION