{ ------------------------------------------------------------------ PROGRAMA : IPPRMT005 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla Grupos iptb00020. Clases PROGRAMADOR : Ing. Juan Soto. FECHA REALIZACION : Noviembre 29, 2013. ------------------------------------------------------------------ } DEFINE xgenera_orden VARCHAR(10) GLOBALS "ipprgb000.4gl" DEFINE pcod_cat SMALLINT, xinstalacion VARCHAR(10) 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.*,pcod_cat,xgenera_orden,xinstalacion 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 xinstalacion IS NULL THEN CALL msg(16) NEXT FIELD xinstalacion 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,genera_orden,instalacion) VALUES (p_iptb20.cod_n,p_iptb20.producto,usuarios,getdate(),p_iptb20.comentario,xgenera_orden,xinstalacion) 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,instalacion) VALUES (p_iptb20.cod_n,p_iptb20.producto,usuarios,getdate(),xinstalacion) 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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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.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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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, pcod_cat,p_iptb20.comentario, Xgenera_orden,xinstalacion 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,xgenera_orden,xinstalacion 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, genera_orden = xgenera_orden, us_mod = SUSER_SNAME(), fech_mod = GETDATE() , instalacion = xinstalacion 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(), instalacion = xinstalacion 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