{ =========================================================================== Programa : CTPRMT017 Sistema : Sistema de Costos Proceso : Proporcion de cantidad de material a consumir en un producto semi elaborado-Factor Semielaborado. Autor : Tadeo A. Ferreras Fecha : Diciembre 16, 1993 =========================================================================== } GLOBALS "ctprgb000.4gl" DEFINE datos_pr RECORD cod_prod SMALLINT END RECORD, nom_form CHAR(60) DEFINE datos_ar ARRAY[200] OF RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30), unidad CHAR(3), cant_prop DECIMAL(10,6) END RECORD DEFINE j,i,cod1,cod2,cod3,cod4,cod5 SMALLINT, descrip CHAR(30) FUNCTION ctprmt017() LET int_flag = FALSE # WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 CALL pantalla() DISPLAY "ctprmt017" AT 4,3 DISPLAY "Factor Semi-elaborado" AT 6,29 OPEN FORM ctfmmt017 FROM "ctfmmt017" DISPLAY FORM ctfmmt017 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" CLEAR FORM CALL ctadmt017() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" CLEAR FORM CALL ctmdmt017() COMMAND "Salir" EXIT MENU END MENU END FUNCTION FUNCTION ctadmt017() LABEL nuevo: INPUT BY NAME datos_pr.* AFTER FIELD cod_prod IF datos_pr.cod_prod IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_prod END IF SELECT descripcion INTO descrip1 FROM cttb00001 WHERE cod_prod = datos_pr.cod_prod and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_prod END IF DISPLAY BY NAME descrip1 SELECT unique cod_prod FROM cttb00022 WHERE cod_prod = datos_pr.cod_prod and status_t is null IF status != notfound THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_prod END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF # Captura las informaciones de los productos con sus costos INPUT ARRAY datos_ar FROM datos_sc.* BEFORE ROW LET idx = ARR_CURR() LET j = SCR_LINE() AFTER FIELD cod_sec IF datos_ar[idx].cod_n IS NOT NULL THEN SELECT descrip_esp,unidad_med INTO datos_ar[idx].descrip_esp,datos_ar[idx].unidad FROM intb00001 WHERE cod_n = datos_ar[idx].cod_n AND cod_grupo = datos_ar[idx].cod_grupo AND cod_tipo = datos_ar[idx].cod_tipo AND cod_sec = datos_ar[idx].cod_sec AND status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF DISPLAY datos_ar[idx].descrip_esp,datos_ar[idx].unidad TO datos_sc[j].descrip_esp,datos_sc[j].unidad END IF LET existe = "N" CALL repitec() IF existe = "S" THEN NEXT FIELD cod_n END IF AFTER FIELD cant_prop IF datos_ar[idx].cant_prop is not null THEN IF datos_ar[idx].cant_prop IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cant_prop END IF END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF FOR i = 1 TO ARR_COUNT() IF datos_ar[i].cod_n IS NOT NULL THEN INSERT INTO cttb00022 VALUES (datos_pr.cod_prod, datos_ar[i].cod_n,datos_ar[i].cod_grupo, datos_ar[i].cod_tipo,datos_ar[i].cod_sec, datos_ar[i].cant_prop,null,user, CURRENT,null,null) END IF END FOR LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM GOTO nuevo END FUNCTION FUNCTION ctmdmt017() LET int_flag = FALSE CONSTRUCT criterio ON a.cod_prod FROM cod_prod IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET selec = "SELECT UNIQUE a.cod_prod FROM cttb00022 a ", "WHERE a.status_t IS NULL AND ",criterio CLIPPED," ORDER BY 1" PREPARE comando FROM selec DECLARE pro SCROLL CURSOR FOR comando OPEN pro FETCH FIRST pro INTO datos_pr.* IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF SELECT descripcion INTO descrip1 FROM cttb00001 WHERE cod_prod = datos_pr.cod_prod and status_t is null DISPLAY BY NAME datos_pr.*,descrip1 MENU "Opcion" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT pro INTO datos_pr.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) FETCH LAST pro INTO datos_pr.* END IF SELECT descripcion INTO descrip1 FROM cttb00001 WHERE cod_prod = datos_pr.cod_prod and status_t is null DISPLAY BY NAME datos_pr.*,descrip1 COMMAND "Anterior" "Presenta en pantalla el anterior registro encontrado" FETCH PREVIOUS pro INTO datos_pr.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) FETCH LAST pro INTO datos_pr.* END IF SELECT descripcion INTO descrip1 FROM cttb00001 WHERE cod_prod = datos_pr.cod_prod and status_t is null DISPLAY BY NAME datos_pr.*,nom_form,descrip1 COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST pro INTO datos_pr.* LET numero_msg = 5 CALL msg(numero_msg) SELECT descripcion INTO descrip1 FROM cttb00001 WHERE cod_prod = datos_pr.cod_prod and status_t is null DISPLAY BY NAME datos_pr.*,descrip1 COMMAND "Ultimo" "Presenta en pantalla el primer registro encontrado" FETCH LAST pro INTO datos_pr.* LET numero_msg = 4 CALL msg(numero_msg) SELECT descripcion INTO descrip1 FROM cttb00001 WHERE cod_prod = datos_pr.cod_prod and status_t is null DISPLAY BY NAME datos_pr.*,nom_form,descrip1 COMMAND "Escoger" " Actualiza Registro Cancela Operacion" DECLARE bb CURSOR FOR SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp, b.unidad_med,a.cant_prop FROM cttb00022 a,intb00001 b WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo= b.cod_tipo AND a.cod_sec = b.cod_sec AND a.status_t IS NULL AND a.cod_prod= datos_pr.cod_prod AND a.status_t IS NULL LET idx = 1 FOREACH bb INTO datos_ar[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) # Captura las informaciones de las producciones INPUT ARRAY datos_ar WITHOUT DEFAULTS FROM datos_sc.* BEFORE ROW LET idx = ARR_CURR() LET j = SCR_LINE() AFTER FIELD cod_sec IF datos_ar[idx].cod_sec IS NOT NULL THEN SELECT descrip_esp,unidad_med INTO datos_ar[idx].descrip_esp,datos_ar[idx].unidad FROM intb00001 WHERE cod_n = datos_ar[idx].cod_n AND cod_grupo = datos_ar[idx].cod_grupo AND cod_tipo = datos_ar[idx].cod_tipo AND cod_sec = datos_ar[idx].cod_sec AND status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF DISPLAY datos_ar[idx].descrip_esp,datos_ar[idx].unidad TO datos_sc[j].descrip_esp,datos_sc[j].unidad END IF LET existe = "N" CALL repitec() IF existe = "S" THEN NEXT FIELD cod_n END IF AFTER FIELD cant_prop IF datos_ar[idx].cant_prop is not null THEN IF datos_ar[idx].cant_prop IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cant_prop END IF END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DELETE FROM cttb00022 WHERE @cod_prod = datos_pr.cod_prod and @status_t is null FOR i = 1 TO ARR_COUNT() IF datos_ar[i].cod_n IS NOT NULL THEN INSERT INTO cttb00022 VALUES (datos_pr.cod_prod, datos_ar[i].cod_n,datos_ar[i].cod_grupo, datos_ar[i].cod_tipo,datos_ar[i].cod_sec, datos_ar[i].cant_prop,null,user, CURRENT,null,null) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" UPDATE cttb00022 SET status_t = "E" WHERE @cod_prod = datos_pr.cod_prod COMMAND "Retornar" EXIT MENU END MENU END FUNCTION FUNCTION repitec() DEFINE cod_n1,cod_grupo1,cod_tipo1,cod_sec1 SMALLINT LET cod_n1 = datos_ar[idx].cod_n LET cod_grupo1 = datos_ar[idx].cod_grupo LET cod_tipo1 = datos_ar[idx].cod_tipo LET cod_sec1 = datos_ar[idx].cod_sec FOR i = 1 TO arr_count() IF i != idx THEN IF datos_ar[i].cod_n IS NOT NULL AND datos_ar[i].cod_grupo IS NOT NULL AND datos_ar[i].cod_tipo IS NOT NULL AND datos_ar[i].cod_sec IS NOT NULL THEN IF datos_ar[i].cod_n = cod_n1 AND datos_ar[i].cod_grupo = cod_grupo1 AND datos_ar[i].cod_tipo = cod_tipo1 AND datos_ar[i].cod_sec = cod_sec1 THEN LET numero_msg = 21 CALL msg(numero_msg) LET existe = "S" ELSE IF existe != "S" THEN LET existe = "N" END IF END IF END IF END IF END FOR END FUNCTION