{ ------------------------------------------------------------------ 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" MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" AS "MSSQL" USER usuarios USING clave CONNECT TO "marmotech" AS "IFMX" USER usuarios USING clave CALL ipprmt005() END MAIN FUNCTION ipprmt005() 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.* 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 IF p_iptb20.instalacion IS NULL THEN CALL msg(16) NEXT FIELD instalacion END IF IF p_iptb20.cod_cat IS NULL THEN CALL msg(16) NEXT FIELD p_iptb20.cod_cat 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 BEGIN WORK INSERT INTO iptb00020 (cod_n,producto,us_crea,fech_crea,comentario,genera_orden,instalacion) VALUES (p_iptb20.cod_n,p_iptb20.producto,usuarios,getdate(),p_iptb20.comentario,p_iptb20.genera_orden,p_iptb20.instalacion) INSERT INTO iptb00035 (cod_n,cod_cat) VALUES (p_iptb20.cod_n,p_iptb20.cod_cat) COMMIT WORK SET CONNECTION "IFMX" INSERT INTO iptb00020 (cod_n,producto,us_crea,fech_crea,instalacion) VALUES (p_iptb20.cod_n,p_iptb20.producto,usuarios,getdate(),p_iptb20.instalacion) 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.cod_n,a.producto,a.us_crea,a.us_mod,a.fech_crea,a.fech_mod,a.cod_inv,b.cod_cat, a.comentario,a.genera_orden,a.instalacion 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.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion 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.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO p_iptb20.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME p_iptb20.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO p_iptb20.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME p_iptb20.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO p_iptb20.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion DISPLAY BY NAME p_iptb20.*,p_iptb20.cod_cat LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO p_iptb20.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion DISPLAY BY NAME p_iptb20.cod_n,p_iptb20.producto,p_iptb20.us_crea,p_iptb20.us_mod,p_iptb20.fech_crea, p_iptb20.fech_mod,p_iptb20.cod_inv, p_iptb20.cod_cat,p_iptb20.comentario, p_iptb20.genera_orden,p_iptb20.instalacion 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,p_iptb20.cod_cat,p_iptb20.comentario,p_iptb20.genera_orden,p_iptb20.instalacion 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 IF p_iptb20.cod_cat IS NULL THEN CALL msg(16) NEXT FIELD p_iptb20.cod_cat END IF BEGIN WORK UPDATE iptb00020 SET producto = p_iptb20.producto, comentario = p_iptb20.comentario, genera_orden = p_iptb20.genera_orden, us_mod = SUSER_SNAME(), fech_mod = GETDATE() , instalacion = p_iptb20.instalacion 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 (p_iptb20.cod_cat,p_iptb20.cod_n) COMMIT WORK SET CONNECTION "IFMX" UPDATE iptb00020 SET producto = p_iptb20.producto, us_mod = usuarios, fech_mod = getdate(), instalacion = p_iptb20.instalacion 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 "MSSQL" 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