{ ------------------------------------------------------------------ PROGRAMA : COPRMT006 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Requisiciones. PROGRAMADOR : Ing. Juan Soto. FECHA REALIZACION : Septiembre 1, 1992. ------------------------------------------------------------------ } GLOBALS "coprgb000.4gl" MAIN DEFER INTERRUPT CALL STARTLOG("COPRMT06.TXT") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor # CONNECT TO "exterior" AS "IFMX" CONNECT to "smarmotech_t" AS "MSSQL" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL coprmt006() END MAIN FUNCTION coprmt006() CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 # OPEN FORM cofmmt006 FROM "cofmmt006" # DISPLAY FORM cofmmt006 OPEN WINDOW w WITH FORM "cofmmt006" ATTRIBUTE(TEXT="File:cofmmt006",STYLE="dialog") MENU "OPCIONES" COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" CALL copcmf006() COMMAND "Opciones" "Numero Requisicion Automatico o Manual" CALL determina() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU CLOSE WINDOW w END FUNCTION FUNCTION copcmf006() DEFINE usuario RECORD usuario CHAR(9), fecha LIKE cotb00008.fech_crea END RECORD CLEAR FORM # Aqui se prepara para la captura del criterio de seleccion CONSTRUCT criterio ON cotb00006.num_req,cotb00006.fech_req, cotb00006.departamento,cotb00006.cod_emp_sec FROM num_req,fech_req,departamento,cod_emp_sec IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET SELEC = " SELECT UNIQUE num_req,fech_req,departamento,", "cod_emp_sec,uso,prioridad ", " FROM cotb00006 ", " WHERE ", criterio clipped, " and status_t is null ", " ORDER BY 1" PREPARE busca8 FROM selec DECLARE datos SCROLL CURSOR FOR busca8 OPEN datos FETCH FIRST datos INTO requisi.* IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF END IF SELECT a.nom1_emp,a.apell1_emp INTO descrip2,descrip1 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi.cod_emp_sec and b.departamento = requisi.departamento and a.departamento = b.departamento LET descrip2 = descrip2 clipped," ",descrip1 clipped SELECT nom_dpto INTO descrip1 FROM adtb00001 WHERE @departamento = requisi.departamento and status_t is null DISPLAY BY NAME requisi.*,descrip1,descrip2 LABEL vuelve: MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO requisi.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT a.nom1_emp,a.apell1_emp INTO descrip2,descrip1 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi.cod_emp_sec and b.departamento = requisi.departamento and a.departamento = b.departamento LET descrip2 = descrip2 clipped," ",descrip1 clipped SELECT nom_dpto INTO descrip1 FROM adtb00001 WHERE @departamento = requisi.departamento and status_t is null DISPLAY BY NAME requisi.*,descrip1,descrip2 COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO requisi.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT a.nom1_emp,a.apell1_emp INTO descrip2,descrip1 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi.cod_emp_sec and b.departamento = requisi.departamento and a.departamento = b.departamento LET descrip2 = descrip2 clipped," ",descrip1 clipped SELECT nom_dpto INTO descrip1 FROM adtb00001 WHERE @departamento = requisi.departamento and status_t is null DISPLAY BY NAME requisi.*,descrip1,descrip2 COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO requisi.* SELECT a.nom1_emp,a.apell1_emp INTO descrip2,descrip1 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi.cod_emp_sec and b.departamento = requisi.departamento and a.departamento = b.departamento LET descrip2 = descrip2 clipped," ",descrip1 clipped SELECT nom_dpto INTO descrip1 FROM adtb00001 WHERE @departamento = requisi.departamento and status_t is null DISPLAY BY NAME requisi.*,descrip1,descrip2 LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO requisi.* SELECT a.nom1_emp,a.apell1_emp INTO descrip2,descrip1 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi.cod_emp_sec and b.departamento = requisi.departamento and a.departamento = b.departamento LET descrip2 = descrip2 clipped," ",descrip1 clipped SELECT nom_dpto INTO descrip1 FROM adtb00001 WHERE @departamento = requisi.departamento and status_t is null DISPLAY BY NAME requisi.*,descrip1,descrip2 LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" { LET p_fechas = requisi.fech_req CALL prd() IF bandera = 1 THEN LET bandera = 0 GOTO vuelve END IF } INPUT BY NAME requisi.* WITHOUT DEFAULTS ATTRIBUTE (YELLOW) BEFORE FIELD num_req NEXT FIELD fech_req AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF requisi.num_req IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_req END IF IF requisi.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF IF requisi.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF EXIT INPUT END INPUT DECLARE jh CURSOR FOR SELECT tipo_inv,cod_n,cod_grupo,cod_tipo,cod_sec,cod_sp,cod_sp_sec,precio,cantidad, procesada FROM cotb00008 WHERE @num_req = requisi.num_req LET idx = 1 FOREACH jh INTO arr_requisi[idx].tipo_inv, arr_requisi[idx].cod_n,arr_requisi[idx].cod_grupo, arr_requisi[idx].cod_tipo,arr_requisi[idx].cod_sec, arr_requisi[idx].cod_sp,arr_requisi[idx].cod_sp_sec, arr_requisi[idx].precio,arr_requisi[idx].cantidad, arr_requisi[idx].procesada LET arr_requisi[idx].total_p = arr_requisi[idx].cantidad * arr_requisi[idx].precio LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) INPUT ARRAY arr_requisi WITHOUT DEFAULTS FROM s_requisi.* ATTRIBUTE (YELLOW) BEFORE ROW LET curr = ARR_CURR() LET scr_l = SCR_LINE() ON ACTION suplidor IF arr_requisi[curr].cod_n IS NOT NULL THEN LET identifica = "R" CALL busca_sp() IF int_flag THEN LET int_flag = false NEXT FIELD cod_sp END IF LET identifica = null IF not int_flag THEN DISPLAY arr_requisi[curr].cod_sp TO s_requisi[scr_l].cod_sp DISPLAY arr_requisi[curr].cod_sp_sec TO s_requisi[scr_l].cod_sp_sec DISPLAY BY NAME suplidor.nom_sp NEXT FIELD precio END IF LET int_flag = false END IF AFTER ROW IF arr_requisi[curr].cod_n IS NOT NULL THEN IF arr_requisi[curr].precio IS NULL OR arr_requisi[curr].precio <=0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD precio END IF END IF IF arr_requisi[curr].cod_n IS NOT NULL THEN IF arr_requisi[curr].precio is null THEN LET arr_requisi[curr].precio = 0 END IF IF arr_requisi[curr].cantidad IS NULL THEN LET arr_requisi[curr].cantidad = 0 END IF IF not int_flag then IF m_articulos.base IS NULL THEN LET m_articulos.base = 0 END IF IF m_articulos.base > 0 THEN LET arr_requisi[curr].total_p = (arr_requisi[curr].precio / m_articulos.base) * arr_requisi[curr].cantidad END IF IF m_articulos.base = 0 THEN LET arr_requisi[curr].total_p = arr_requisi[curr].precio * arr_requisi[curr].cantidad END IF DISPLAY arr_requisi[curr].total_p TO s_requisi[scr_l].total_p END IF LET identifica = "R" CALL producto(arr_requisi2[curr].tipo_inv,arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo, arr_requisi2[curr].cod_tipo,arr_requisi2[curr].cod_sec) RETURNING articulos.descrip_esp,articulos.unidad_med IF existe = "S" THEN LET existe = "N" END IF DISPLAY BY NAME articulos.unidad_med DISPLAY BY NAME articulos.descrip_esp DISPLAY BY NAME m_articulos.base END IF BEFORE FIELD cantidad IF arr_requisi[curr].cod_n IS NOT NULL THEN LET identifica = "R" CALL producto(arr_requisi2[curr].tipo_inv,arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo, arr_requisi2[curr].cod_tipo,arr_requisi2[curr].cod_sec) RETURNING articulos.descrip_esp,articulos.unidad_med DISPLAY BY NAME articulos.unidad_med DISPLAY BY NAME articulos.descrip_esp DISPLAY BY NAME m_articulos.base IF arr_requisi[curr].cod_sp IS NOT NULL AND arr_requisi[curr].cod_sp_sec IS NOT NULL THEN LET identifica = "R" CALL nom_suplidor() DISPLAY BY NAME suplidor.nom_sp END IF END IF AFTER FIELD cod_sp_sec IF arr_requisi[curr].cod_n IS NOT NULL THEN IF arr_requisi[curr].cod_sp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF IF arr_requisi[curr].cod_sp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF CALL nom_suplidor() IF existe = "N" THEN NEXT FIELD cod_sp END IF DISPLAY BY NAME suplidor.nom_sp SELECT unique cod_sp_sec FROM cotb00008 WHERE cod_sp = arr_requisi[curr].cod_sp and cod_sp_sec = arr_requisi[curr].cod_sp_sec END IF AFTER FIELD cantidad IF arr_requisi[curr].cod_n IS NOT NULL THEN IF arr_requisi[curr].cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF SELECT UNIQUE cod_sp FROM cotb00008 WHERE cod_sp = arr_requisi[curr].cod_sp IF status < 0 THEN NEXT FIELD total_p END IF END IF AFTER FIELD precio IF arr_requisi[curr].cod_n IS NOT NULL THEN IF arr_requisi[curr].precio IS NULL OR arr_requisi[curr].precio <=0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD precio END IF END IF # Verifica si el usuario tiene permiso de digitar el precio en la requisicion IF arr_requisi[curr].cod_n IS NOT NULL THEN IF arr_requisi[curr].precio IS NOT NULL THEN IF m_articulos.base is null THEN LET m_articulos.base = 0 END IF IF m_articulos.base > 0 THEN LET arr_requisi[curr].total_p = (arr_requisi[curr].precio / m_articulos.base) * arr_requisi[curr].cantidad END IF IF m_articulos.base = 0 THEN LET arr_requisi[curr].total_p = arr_requisi[curr].precio * arr_requisi[curr].cantidad END IF DISPLAY arr_requisi[curr].total_p TO s_requisi[scr_l].total_p END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF arr_requisi[curr].cod_n IS NOT NULL THEN # Busca y Chequea el Nombre De La Materia Prima LET identifica = "R" CALL producto(arr_requisi2[curr].tipo_inv,arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo, arr_requisi2[curr].cod_tipo,arr_requisi2[curr].cod_sec) RETURNING articulos.descrip_esp,articulos.unidad_med # Busca y Chequea el nombre del suplidor CALL nom_suplidor() IF existe = "N" THEN NEXT FIELD cod_sp END IF DISPLAY BY NAME suplidor.nom_sp IF arr_requisi[curr].precio IS NULL OR arr_requisi[curr].precio <=0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD precio END IF # Verifica si el usuario tiene permiso de digitar el precio en la requisicion IF arr_requisi[curr].precio IS NOT NULL THEN IF m_articulos.base is null THEN LET m_Articulos.base = 0 END IF IF m_articulos.base > 0 THEN LET arr_requisi[curr].total_p = (arr_requisi[curr].precio / m_articulos.base) * arr_requisi[curr].cantidad END IF IF m_articulos.base = 0 THEN LET arr_requisi[curr].total_p = arr_requisi[curr].precio * arr_requisi[curr].cantidad END IF DISPLAY arr_requisi[curr].total_p TO s_requisi[scr_l].total_p END IF END IF CALL limpia() EXIT INPUT END INPUT UPDATE cotb00006 SET fech_req = requisi.fech_req, departamento = requisi.departamento, cod_emp_sec = requisi.cod_emp_sec, prioridad = requisi.prioridad, uso = requisi.uso, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE @num_req = requisi.num_req SELECT unique us_crea,max(fech_crea) INTO usuario.* FROM cotb00008 WHERE num_req = requisi.num_req GROUP BY us_crea DELETE FROM cotb00008 WHERE num_req = requisi.num_req FOR idx = 1 TO arr_requisi.getLength() IF arr_requisi[idx].cod_n IS NOT NULL AND arr_requisi[idx].cod_grupo IS NOT NULL AND arr_requisi[idx].cod_tipo IS NOT NULL AND arr_requisi[idx].cod_sec IS NOT NULL THEN INSERT INTO cotb00008 (num_req,tipo_inv,cod_n,cod_grupo, cod_tipo,cod_sec,cantidad, precio,cod_sp,cod_sp_sec, procesada,us_crea,fech_crea, us_mod,fech_mod) VALUES (requisi.num_req,arr_requisi[idx].tipo_inv, arr_requisi[idx].cod_n, arr_requisi[idx].cod_grupo, arr_requisi[idx].cod_tipo, arr_requisi[idx].cod_sec, arr_requisi[idx].cantidad, arr_requisi[idx].precio, arr_requisi[idx].cod_sp, arr_requisi[idx].cod_sp_sec, arr_requisi[idx].procesada, usuario.*,SUSER_SNAME(),GETDATE()) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("N") "aNular" UPDATE cotb00006 set status_t = "N", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_req = requisi.num_req UPDATE cotb00008 set status_t = "E" WHERE num_req = requisi.num_req LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION repite() DEFINE ant_sp,ant_sp_sec SMALLINT LET ant_art.cod_n = arr_requisi[curr].cod_n LET ant_art.cod_grupo = arr_requisi[curr].cod_grupo LET ant_art.cod_tipo = arr_requisi[curr].cod_tipo LET ant_art.cod_sec = arr_requisi[curr].cod_sec LET ant_sp = arr_requisi[curr].cod_sp LET ant_sp_sec = arr_requisi[curr].cod_sp_sec FOR idx = 1 TO arr_count() IF idx != curr THEN IF arr_requisi[idx].cod_n IS NOT NULL AND arr_requisi[idx].cod_grupo IS NOT NULL AND arr_requisi[idx].cod_tipo IS NOT NULL AND arr_requisi[idx].cod_sec IS NOT NULL THEN IF arr_requisi[idx].cod_n = ant_art.cod_n AND arr_requisi[idx].cod_grupo = ant_art.cod_grupo AND arr_requisi[idx].cod_tipo = ant_art.cod_tipo AND arr_requisi[idx].cod_sec = ant_art.cod_sec and arr_requisi[idx].cod_sp = ant_sp and arr_requisi[idx].cod_sp_sec = ant_sp_sec THEN LET numero_msg = 21 CALL msg(numero_msg) LET verdad = "S" ELSE IF verdad != "S" THEN LET verdad = "N" END IF END IF END IF END IF END FOR END FUNCTION FUNCTION nom_suplidor() LET existe = "S" LET suplidor.nom_sp = null SELECT nom_sp INTO suplidor.nom_sp FROM cotb00001 WHERE cod_sp = arr_requisi[curr].cod_sp and cod_sp_sec = arr_requisi[curr].cod_sp_sec and status_t is null IF status = notfound THEN LET numero_msg = 25 CALL msg(numero_msg) LET existe = "N" END IF IF arr_requisi[curr].cod_n = 1 THEN IF existe = "S" THEN SELECT unique cod_sp FROM cotb00002 WHERE cod_sp = arr_requisi[curr].cod_sp and cod_sp_sec = arr_requisi[curr].cod_sp_sec and cod_n = arr_requisi[curr].cod_n and cod_grupo = arr_requisi[curr].cod_grupo and cod_tipo = arr_requisi[curr].cod_tipo and cod_sec = arr_requisi[curr].cod_sec and status_t is null IF status = notfound THEN LET numero_msg = 133 CALL msg(numero_msg) END IF END IF END IF END FUNCTION FUNCTION determina() OPEN WINDOW realiza AT 10,10 WITH 5 ROWS,43 COLUMNS ATTRIBUTE (BORDER) MENU "OPCION" COMMAND "Automatica" "Enumera de Forma Automatica" SELECT UNIQUE MAX(num_req) INTO requisi.num_req FROM cotb00006 LET manual = "N" EXIT MENU COMMAND "Manual" "El usuario tiene que enumerar el documento" LET manual = "S" EXIT MENU END MENU CLOSE WINDOW realiza END FUNCTION FUNCTION limpia() IF arr_requisi[curr].cod_n IS NULL THEN LET arr_requisi[curr].cod_n = null LET arr_requisi[curr].cod_grupo = null LET arr_requisi[curr].cod_tipo = null LET arr_requisi[curr].cod_sec = null DISPLAY arr_requisi[curr].cod_n TO s_requisi[scr_l].cod_n DISPLAY arr_requisi[curr].cod_grupo TO s_requisi[scr_l].cod_grupo DISPLAY arr_requisi[curr].cod_tipo TO s_requisi[scr_l].cod_tipo DISPLAY arr_requisi[curr].cod_sec TO s_requisi[scr_l].cod_sec END IF IF arr_requisi[curr].cod_grupo IS NULL THEN LET arr_requisi[curr].cod_n = null LET arr_requisi[curr].cod_grupo = null LET arr_requisi[curr].cod_tipo = null LET arr_requisi[curr].cod_sec = null DISPLAY arr_requisi[curr].cod_n TO s_requisi[scr_l].cod_n DISPLAY arr_requisi[curr].cod_grupo TO s_requisi[scr_l].cod_grupo DISPLAY arr_requisi[curr].cod_tipo TO s_requisi[scr_l].cod_tipo DISPLAY arr_requisi[curr].cod_sec TO s_requisi[scr_l].cod_sec END IF IF arr_requisi[curr].cod_tipo IS NULL THEN LET arr_requisi[curr].cod_n = null LET arr_requisi[curr].cod_grupo = null LET arr_requisi[curr].cod_tipo = null LET arr_requisi[curr].cod_sec = null DISPLAY arr_requisi[curr].cod_n TO s_requisi[scr_l].cod_n DISPLAY arr_requisi[curr].cod_grupo TO s_requisi[scr_l].cod_grupo DISPLAY arr_requisi[curr].cod_tipo TO s_requisi[scr_l].cod_tipo DISPLAY arr_requisi[curr].cod_sec TO s_requisi[scr_l].cod_sec END IF IF arr_requisi[curr].cod_sec IS NULL THEN LET arr_requisi[curr].cod_n = null LET arr_requisi[curr].cod_grupo = null LET arr_requisi[curr].cod_tipo = null LET arr_requisi[curr].cod_sec = null DISPLAY arr_requisi[curr].cod_n TO s_requisi[scr_l].cod_n DISPLAY arr_requisi[curr].cod_grupo TO s_requisi[scr_l].cod_grupo DISPLAY arr_requisi[curr].cod_tipo TO s_requisi[scr_l].cod_tipo DISPLAY arr_requisi[curr].cod_sec TO s_requisi[scr_l].cod_sec END IF END FUNCTION FUNCTION busca_sp() OPEN WINDOW busqueda AT 8,8 WITH FORM "cofmwd004" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST) LET int_flag = false CONSTRUCT criterio ON a.nom_sp FROM nom_sp LET selec3 = "SELECT a.cod_sp,a.cod_sp_sec,a.nom_sp FROM cotb00001 a ", " WHERE ", " a.status_t is null AND ", criterio clipped, "ORDER BY a.nom_sp " IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO sale4 END IF PREPARE busca3 FROM selec3 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 12 CALL msg(numero_msg) END IF END IF DECLARE johnn3 CURSOR FOR busca3 LET idx = 1 FOREACH johnn3 INTO busca_su2[idx].* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF IF status = notfound THEN EXIT FOREACH END IF LET busca_su1[idx].codigo_1 = busca_su2[idx].cod_sp using "&&","-", busca_su2[idx].cod_sp_sec using "&&&&" LET busca_su1[idx].nom_sp = busca_su2[idx].nom_sp LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY busca_su1 TO s_desp3.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO sale4 END IF LET curr1 = arr_curr() IF identifica = "R" THEN LET arr_requisi[curr].cod_sp = busca_su1[curr1].codigo_1[1,2] LET arr_requisi[curr].cod_sp_sec = busca_su1[curr1].codigo_1[4,7] LET suplidor.nom_sp = busca_su1[curr1].nom_sp END IF LABEL sale4: CLOSE WINDOW busqueda END FUNCTION