{ =========================================================================== Programa : CTPRMT012.4GL Sistema : Sistema de Costos Proceso : Registro de Inventario Producto semi-elaborado Autor : Tadeo A. Ferreras Fecha : Junio 23, 1993 =========================================================================== } GLOBALS "ctprgb000.4gl" DEFINE num_reg INTEGER DEFINE datos_m RECORD cod_prod INTEGER, ano CHAR(4), mes SMALLINT, cantidad DECIMAL(12,5) END RECORD, descrip CHAR(30), unidad CHAR(15) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL ctprmt012() END MAIN FUNCTION ctprmt012() LET int_flag = FALSE #WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 #CALL pantalla() #DISPLAY "ctprmt012" AT 4,3 #DISPLAY "Inventario Semi-Elaborado" AT 6,27 OPEN FORM ctfmmt012 FROM "ctfmmt012" DISPLAY FORM ctfmmt012 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" CLEAR FORM CALL ctadmt012() COMMAND "Consultar/Modificar" " Realiza Busqueda Cancela Operacion" CLEAR FORM CALL ctmdmt012() COMMAND "Salir" EXIT MENU END MENU END FUNCTION FUNCTION ctadmt012() LABEL nuevo: INPUT BY NAME datos_m.* AFTER FIELD cod_prod IF datos_m.cod_prod IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_prod END IF SELECT UNIQUE descripcion,unidad_med INTO descrip,unidad FROM cttb00001 WHERE status_t IS NULL AND cod_prod = datos_m.cod_prod IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_prod END IF DISPLAY BY NAME descrip,unidad IF datos_m.cod_prod >= 200 THEN NEXT FIELD ano END IF { AFTER FIELD num_formula IF datos_m.num_formula IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_formula END IF } BEFORE FIELD ano LET datos_m.ano = YEAR(today) USING "&&&&" DISPLAY BY NAME datos_m.ano AFTER FIELD ano IF datos_m.ano IS NULL THEN LET datos_m.ano = YEAR(today) USING "&&&&" END IF BEFORE FIELD mes LET datos_m.mes = MONTH(today) USING "&&" DISPLAY BY NAME datos_m.mes AFTER FIELD mes IF datos_m.mes IS NULL THEN LET datos_m.mes = MONTH(today) USING "&&&&" END IF SELECT unique cod_prod from cttb00014 WHERE cod_prod = datos_m.cod_prod AND ano = datos_m.ano AND mes = datos_m.mes AND status_t IS NULL IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_prod END IF AFTER FIELD cantidad IF datos_m.cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF INSERT INTO cttb00014 VALUES(datos_m.*,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL) LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM GOTO nuevo END FUNCTION FUNCTION ctmdmt012() LET int_flag = FALSE CONSTRUCT criterio ON a.cod_prod,a.ano,a.mes FROM cod_prod,ano,mes IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET selec = "SELECT '1',a.cod_prod,a.ano,a.mes,a.cantidad, ", " b.descripcion,b.unidad_med,a.us_crea,a.fech_crea,a.us_mod, ", " a.fech_mod ", "FROM cttb00014 a, cttb00001 b WHERE a.status_t IS NULL AND ", "a.cod_prod = b.cod_prod AND ",criterio CLIPPED," ORDER BY 2 " PREPARE comando FROM selec DECLARE pro SCROLL CURSOR FOR comando OPEN pro FETCH FIRST pro INTO num_reg,datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF DISPLAY BY NAME datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m MENU "Opcion" COMMAND "Siguiente" "Presenta en pantalla al proximo registro encontrado" FETCH NEXT pro INTO num_reg,datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) FETCH LAST pro INTO num_reg,datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m END IF DISPLAY BY NAME datos_m.*,descrip,unidad , usuario_c,fecha_c,usuario_m,fecha_m COMMAND "Anterior" "Presenta en pantalla al registro anterior encontrado" FETCH PREVIOUS pro INTO num_reg,datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) FETCH LAST pro INTO num_reg,datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m END IF DISPLAY BY NAME datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m COMMAND "Primero" "Presenta en pantalla al primer registro encontrado" FETCH FIRST pro INTO num_reg,datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m LET numero_msg = 5 CALL msg(numero_msg) DISPLAY BY NAME datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m COMMAND "Ultimo" "Presenta en pantalla al ultimo registro encontrado" FETCH LAST pro INTO num_reg,datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m DISPLAY BY NAME datos_m.*,descrip,unidad, usuario_c,fecha_c,usuario_m,fecha_m COMMAND "Escoger" INPUT BY NAME datos_m.cantidad WITHOUT DEFAULTS AFTER FIELD cantidad IF datos_m.cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF UPDATE cttb00014 SET (cantidad,us_mod,fech_mod) = (datos_m.cantidad,SUSER_SNAME(),GETDATE()) WHERE ano = datos_m.ano and mes = datos_m.mes and cod_prod = datos_m.cod_prod LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" UPDATE cttb00014 SET (status_t,us_mod,fech_mod) = ("E",SUSER_SNAME(),GETDATE()) WHERE ano = datos_m.ano and mes = datos_m.mes and cod_prod = datos_m.cod_prod COMMAND "Retornar" EXIT MENU END MENU END FUNCTION