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

364 lines
9.2 KiB
Plaintext

{
===========================================================================
Programa : CTPRMT019
Sistema : Sistema de Costos
Proceso : Relacion de Producto Terminado y Semi-Elaborado
Autor : Juan Soto.
Fecha : Julio 09, 1993
===========================================================================
}
GLOBALS
"ctprgb000.4gl"
DEFINE datos_pr RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(30)
END RECORD
DEFINE datos_ar ARRAY[200] OF RECORD
cod_prod INTEGER,
desc_prod CHAR(30),
unidad CHAR(15),
cantidad DECIMAL(12,2)
END RECORD
DEFINE j,i,cod1,cod2,cod3,cod4,cod5 SMALLINT,
descrip CHAR(30)
FUNCTION ctprmt019()
LET int_flag = FALSE
# WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
CALL pantalla()
DISPLAY "ctprmt019" AT 4,3
DISPLAY "Relacion Producto Terminado y Semi-Elaborado" AT 6,18
OPEN FORM ctfmmt019 FROM "ctfmmt019"
DISPLAY FORM ctfmmt019
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Supr> Cancela Operacion"
CLEAR FORM
CALL ctadmt019()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Supr> Cancela Operacion"
CLEAR FORM
CALL ctmdmt019()
COMMAND "Salir"
EXIT MENU
END MENU
END FUNCTION
FUNCTION ctadmt019()
LABEL nuevo:
INPUT BY NAME datos_pr.*
AFTER FIELD cod_n
IF datos_pr.cod_n IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
AFTER FIELD cod_grupo
IF datos_pr.cod_grupo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_grupo
END IF
AFTER FIELD cod_tipo
IF datos_pr.cod_tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_tipo
END IF
AFTER FIELD cod_sec
IF datos_pr.cod_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sec
END IF
SELECT a.descrip_esp INTO datos_pr.descrip_esp FROM iptb00002 a
WHERE a.cod_n = datos_pr.cod_n and a.cod_grupo = datos_pr.cod_grupo and
a.cod_tipo = datos_pr.cod_tipo and a.cod_sec = datos_pr.cod_sec and
a.status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
DISPLAY BY NAME datos_pr.descrip_esp
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_prod
IF datos_ar[idx].cod_prod IS NOT NULL THEN
SELECT a.descripcion,a.unidad_med
INTO datos_ar[idx].desc_prod,datos_ar[idx].unidad
FROM cttb00001 a
WHERE a.cod_prod = datos_ar[idx].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 datos_ar[idx].desc_prod,datos_ar[idx].unidad
TO datos_sc[j].desc_prod,datos_sc[j].unidad
END IF
LET existe = "N"
CALL repite19()
IF existe = "S" THEN
NEXT FIELD cod_prod
END IF
AFTER FIELD cantidad
IF datos_ar[idx].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
FOR i = 1 TO ARR_COUNT()
IF datos_ar[i].cod_prod IS NOT NULL THEN
INSERT INTO cttb00006 VALUES (datos_pr.cod_n,datos_pr.cod_grupo,
datos_pr.cod_tipo,datos_pr.cod_sec,
datos_ar[i].cod_prod,datos_ar[i].cantidad,
null,user,CURRENT,null,null)
END IF
END FOR
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
GOTO nuevo
END FUNCTION
FUNCTION ctmdmt019()
LET int_flag = FALSE
CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
FROM cod_n,cod_grupo,cod_tipo,cod_sec
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_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp ",
"FROM cttb00006 a,iptb00002 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 b.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
DISPLAY BY NAME datos_pr.*
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
DISPLAY BY NAME datos_pr.*
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
DISPLAY BY NAME datos_pr.*
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST pro INTO datos_pr.*
LET numero_msg = 5
CALL msg(numero_msg)
DISPLAY BY NAME datos_pr.*
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST pro INTO datos_pr.*
LET numero_msg = 4
CALL msg(numero_msg)
DISPLAY BY NAME datos_pr.*
COMMAND "Escoger"
DECLARE busca CURSOR FOR
SELECT a.cod_prod,b.descripcion,b.unidad_med,a.cantidad
FROM cttb00006 a,cttb00001 b
WHERE a.cod_prod = b.cod_prod AND a.status_t IS NULL AND b.status_t IS NULL
AND a.cod_n = datos_pr.cod_n AND a.cod_grupo = datos_pr.cod_grupo AND
a.cod_tipo = datos_pr.cod_tipo AND a.cod_sec = datos_pr.cod_sec
ORDER BY 1
LET idx = 1
FOREACH busca 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_prod
IF datos_ar[idx].cod_prod IS NOT NULL THEN
SELECT a.descripcion,a.unidad_med
INTO datos_ar[idx].desc_prod,datos_ar[idx].unidad
FROM cttb00001 a
WHERE a.cod_prod = datos_ar[idx].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 datos_ar[idx].desc_prod,datos_ar[idx].unidad
TO datos_sc[j].desc_prod,datos_sc[j].unidad
END IF
LET existe = "N"
CALL repite19()
IF existe = "S" THEN
NEXT FIELD cod_prod
END IF
AFTER FIELD cantidad
IF datos_ar[idx].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
DELETE FROM cttb00006
WHERE @cod_n = datos_pr.cod_n AND @cod_grupo = datos_pr.cod_grupo AND
@cod_tipo = datos_pr.cod_tipo AND @cod_sec = datos_pr.cod_sec
FOR i = 1 TO ARR_COUNT()
IF datos_ar[i].cod_prod IS NOT NULL THEN
INSERT INTO cttb00006 VALUES (datos_pr.cod_n,datos_pr.cod_grupo,
datos_pr.cod_tipo,datos_pr.cod_sec,
datos_ar[i].cod_prod,datos_ar[i].cantidad,
null,user,CURRENT,null,null)
END IF
END FOR
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY ("L") "eLiminar"
UPDATE cttb00006 SET (status_t,us_mod,fech_mod) = ("E",user,current)
WHERE @cod_n = datos_pr.cod_n AND @cod_grupo = datos_pr.cod_grupo AND
@cod_tipo = datos_pr.cod_tipo AND @cod_sec = datos_pr.cod_sec
COMMAND "Retornar"
EXIT MENU
END MENU
END FUNCTION
FUNCTION repite19()
DEFINE codigo SMALLINT
LET codigo = datos_ar[idx].cod_prod
FOR i = 1 TO arr_count()
IF i != idx THEN
IF datos_ar[i].cod_prod IS NOT NULL THEN
IF datos_ar[i].cod_prod = codigo 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