Files
MBS/PROYECTO/ctdir/ctprmt010.4gl
T

444 lines
14 KiB
Plaintext

{
----------------------------------------------------------------------------
PROGRAMA : CAPRMT010
OBJETIVO : Programa Captura, Modifica, Elimina Registros
de la Tabla de Mantenimiento de Estructura de Costos.
PROGRAMADOR : Ing. Juan F. Soto.
FECHA REALIZACION : Junio 23, 1993.
----------------------------------------------------------------------------
}
GLOBALS
"ctprgb000.4gl"
DEFINE descrip_esp1,unidad_med1 CHAR(30)
DEFINE centro INTEGER
FUNCTION ctprmt010()
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ctfmmt010 FROM "ctfmmt010"
DISPLAY FORM ctfmmt010
DISPLAY "ctprmt010" AT 4,2
CALL pantalla()
DISPLAY "Formulas Estructura de Costos" AT 6,25
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Supr> Cancela Operacion"
LET int_flag = FALSE
CALL ctpcad010()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Supr> Cancela Operacion"
LET int_flag = FALSE
CALL ctpcmf010()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION ctpcad010()
# WHENEVER ERROR CONTINUE
CLEAR FORM
LABEL volver:
INPUT BY NAME proyecta.cod_prod
AFTER FIELD cod_prod
IF proyecta.cod_prod is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_prod
END IF
SELECT a.descripcion INTO descrip1 FROM cttb00001 a
WHERE a.cod_prod = proyecta.cod_prod and a.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 cttb00011
WHERE @cod_prod = proyecta.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
CALL set_count(curr)
INPUT ARRAY arr_proyecta WITHOUT DEFAULTS FROM consart.*
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER FIELD cod_sec_mp
IF arr_proyecta[curr].cod_n_mp IS NULL OR
arr_proyecta[curr].cod_grupo_mp IS NULL OR
arr_proyecta[curr].cod_tipo_mp IS NULL OR
arr_proyecta[curr].cod_sec_mp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n_mp
END IF
CALL repite1()
IF existe = "S" THEN
LET existe = "N"
NEXT FIELD cod_n_mp
END IF
SELECT UNIQUE descrip_esp,unidad_med INTO articulos.descrip_esp,
articulos.unidad_med FROM intb00001 a, intb00002 b
WHERE a.cod_n = arr_proyecta[curr].cod_n_mp and
a.cod_grupo = arr_proyecta[curr].cod_grupo_mp and
a.cod_tipo = arr_proyecta[curr].cod_tipo_mp and
a.cod_sec = arr_proyecta[curr].cod_sec_mp and
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
## CHEQUEA QUE EL CODIGO ESTE EN LA TABLA DE MATERIA PRIMA.
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n_mp
END IF
LET arr_proyecta[curr].descrip_esp = articulos.descrip_esp
LET arr_proyecta[curr].unidad_med = articulos.unidad_med
DISPLAY arr_proyecta[curr].descrip_esp TO consart[scr_l].descrip_esp
DISPLAY arr_proyecta[curr].unidad_med TO consart[scr_l].unidad_med
AFTER FIELD cantidad
IF arr_proyecta[curr].cantidad IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cantidad
END IF
## Verifica si el usuario presiono la tecla <Supr>
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
FOR idx = 1 to arr_count()
IF arr_proyecta[idx].cod_n_mp is not null and
arr_proyecta[idx].cod_grupo_mp is not null and
arr_proyecta[idx].cod_tipo_mp is not null and
arr_proyecta[idx].cod_sec_mp is not null THEN
INSERT INTO cttb00011 VALUES (proyecta.cod_prod,
arr_proyecta[idx].cod_n_mp,arr_proyecta[idx].cod_grupo_mp,
arr_proyecta[idx].cod_tipo_mp,arr_proyecta[idx].cod_sec_mp,
arr_proyecta[idx].cantidad,null,user,current,null,null)
END IF
END FOR
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
GOTO volver
END FUNCTION
## FUNCION QUE BUSCA Y MODIFICA SI ES NECESARIO LAS INFORMACIONES EN PANTALLA
FUNCTION ctpcmf010()
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION
CLEAR FORM
# WHENEVER ERROR CONTINUE
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,b.descripcion ",
"FROM cttb00011 a,cttb00001 b ",
"WHERE a.cod_prod = b.cod_prod AND a.status_t is null and ",
criterio clipped," ORDER BY 1 "
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO proyecta.cod_prod,descrip1
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME proyecta.cod_prod,descrip1
MENU "OPCIONES"
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO proyecta.cod_prod,descrip1
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME proyecta.cod_prod,descrip1
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO proyecta.cod_prod,descrip1
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME proyecta.cod_prod,descrip1
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO proyecta.cod_prod,descrip1
DISPLAY BY NAME proyecta.cod_prod,descrip1
COMMAND "Ultimo"
"Presenta en pantalla el Ultimo registro encontrado"
Let numero_msg = 5
CALL msg(numero_msg)
FETCH LAST datos INTO proyecta.cod_prod,descrip1
Let numero_msg = 4
CALL msg(numero_msg)
DISPLAY BY NAME proyecta.cod_prod,descrip1
COMMAND "Escoger" "<Esc> Actualizacion Exitosa <Supr> Cancela Operacion"
LET centro = NULL
LET centro = proyecta.cod_prod
INPUT BY NAME proyecta.cod_prod WITHOUT DEFAULTS
AFTER FIELD cod_prod
IF proyecta.cod_prod IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_prod
END IF
SELECT a.descripcion INTO descrip1 FROM cttb00001 a
WHERE a.cod_prod = proyecta.cod_prod and a.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
IF proyecta.cod_prod != centro THEN
SELECT unique cod_prod FROM cttb00011
WHERE @cod_prod = proyecta.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 IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DECLARE accion1 CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
b.descrip_esp,b.unidad_med,a.cantidad
FROM cttb00011 a, intb00001 b
WHERE a.cod_prod = centro AND 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
ORDER BY 1,2,3,4
LET idx = 1
FOREACH accion1 INTO arr_proyecta[idx].*
IF status = NOTFOUND AND idx = 1 THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx - 1)
INPUT ARRAY arr_proyecta WITHOUT DEFAULTS FROM consart.*
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER FIELD cod_sec_mp
IF arr_proyecta[curr].cod_sec_mp IS NULL OR
arr_proyecta[curr].cod_grupo_mp IS NULL OR
arr_proyecta[curr].cod_tipo_mp IS NULL OR
arr_proyecta[curr].cod_sec_mp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n_mp
END IF
CALL repite1()
IF existe = "S" THEN
LET existe = "N"
NEXT FIELD cod_n_mp
END IF
SELECT UNIQUE a.descrip_esp,a.unidad_med INTO articulos.descrip_esp,
articulos.unidad_med FROM intb00001 a, intb00002 b
WHERE a.cod_n = arr_proyecta[curr].cod_n_mp and
a.cod_grupo = arr_proyecta[curr].cod_grupo_mp and
a.cod_tipo = arr_proyecta[curr].cod_tipo_mp and
a.cod_sec = arr_proyecta[curr].cod_sec_mp and
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
## CHEQUEA QUE EL CODIGO ESTE EN LA TABLA DE MATERIA PRIMA.
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n_mp
END IF
LET arr_proyecta[curr].descrip_esp = articulos.descrip_esp
LET arr_proyecta[curr].unidad_med = articulos.unidad_med
DISPLAY arr_proyecta[curr].descrip_esp TO consart[scr_l].descrip_esp
DISPLAY arr_proyecta[curr].unidad_med TO consart[scr_l].unidad_med
AFTER FIELD cantidad
IF arr_proyecta[curr].cantidad IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cantidad
END IF
## Verifica si el usuario presiono la tecla <Supr>
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
DELETE FROM cttb00011 WHERE @cod_prod = centro
FOR idx = 1 TO arr_count()
IF arr_proyecta[idx].cod_n_mp is not null and
arr_proyecta[idx].cod_grupo_mp is not null and
arr_proyecta[idx].cod_tipo_mp is not null and
arr_proyecta[idx].cod_sec_mp is not null THEN
INSERT INTO cttb00011 VALUES (proyecta.cod_prod,arr_proyecta[idx].cod_n_mp,
arr_proyecta[idx].cod_grupo_mp,arr_proyecta[idx].cod_tipo_mp,
arr_proyecta[idx].cod_sec_mp,arr_proyecta[idx].cantidad,
null,user,current,null,null)
END IF
END FOR
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY ("L") "eLiminar"
UPDATE cttb00011 SET status_t = "E"
WHERE @cod_prod = proyecta.cod_prod
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION repite1()
DEFINE ant_art RECORD
cod_n_mp SMALLINT,
cod_grupo_mp SMALLINT,
cod_tipo_mp SMALLINT,
cod_sec_mp SMALLINT
END RECORD
LET ant_art.cod_n_mp = arr_proyecta[curr].cod_n_mp
LET ant_art.cod_grupo_mp = arr_proyecta[curr].cod_grupo_mp
LET ant_art.cod_tipo_mp = arr_proyecta[curr].cod_tipo_mp
LET ant_art.cod_sec_mp = arr_proyecta[curr].cod_sec_mp
FOR idx = 1 TO arr_count()
IF idx != curr THEN
IF arr_proyecta[idx].cod_n_mp = ant_art.cod_n_mp AND
arr_proyecta[idx].cod_grupo_mp = ant_art.cod_grupo_mp AND
arr_proyecta[idx].cod_tipo_mp = ant_art.cod_tipo_mp AND
arr_proyecta[idx].cod_sec_mp = ant_art.cod_sec_mp THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET existe = "S"
ELSE
LET existe = "N"
END IF
END IF
END FOR
END FUNCTION