Files
2026-09-22 20:38:51 -04:00

458 lines
14 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : CTPRMT001
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla catalogo semi-elaborados.
PROGRAMADOR : Ing. Juan F. Soto.
FECHA REALIZACION : Junio 14, 1993.
------------------------------------------------------------------
}
GLOBALS "ctprgb000.4gl"
DEFINE descripcion_origen CHAR(30)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "decomarmol" USER usuarios USING clave
SELECT a.* INTO p_compania.* FROM companias a
CALL ctprmt001()
END MAIN
FUNCTION ctprmt001()
# WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ctfmmt001 FROM "ctfmmt001"
DISPLAY FORM ctfmmt001
DISPLAY "ctprmt001" AT 4,3
DISPLAY "Catalogo de Produccion" AT 6,29
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Supr> Cancela Operacion"
LET int_flag = FALSE
CLEAR FORM
CALL ctpcad001()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Supr> Cancela Operacion"
LET INT_FLAG = FALSE
CALL ctpcmf001()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION ctpcad001()
#WHENEVER ERROR CONTINUE
## Captura los datos que va a contener el registro
LET int_flag = false
LABEL vuelve:
INPUT BY NAME produccion.cod_cia,produccion.cod_prod,produccion.descripcion,
produccion.unidad_med,produccion.nomenclatura
AFTER FIELD cod_prod
IF produccion.cod_prod is null then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_prod
END IF
LET produccion.descripcion = null
LET produccion.unidad_med = null
LET produccion.nomenclatura = null
LET produccion.status_t = null
LET produccion.us_crea = null
LET produccion.fech_crea = null
LET produccion.us_mod = null
LET produccion.fech_mod = null
DISPLAY BY NAME produccion.*
SELECT * INTO produccion.* FROM cttb00001
WHERE @cod_prod = produccion.cod_prod
IF produccion.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
DISPLAY BY NAME produccion.*
NEXT FIELD cod_prod
END IF
IF status != notfound THEN
LET numero_msg = 12
CALL msg(numero_msg)
DISPLAY BY NAME produccion.*
NEXT FIELD cod_prod
END IF
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
AFTER FIELD cod_cia
SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a
WHERE a.cod_cia = produccion.cod_cia
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_cia
END IF
DISPLAY BY NAME descripcion_origen
AFTER FIELD descripcion
IF produccion.descripcion IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD descripcion
END IF
AFTER FIELD unidad_med
IF produccion.unidad_med IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD unidad_med
ELSE
SELECT codigo_unidad FROM cttb00007
WHERE codigo_unidad = produccion.unidad_med and
status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 17
CALL msg(numero_msg)
NEXT FIELD unidad_med
END IF
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
AFTER FIELD nomenclatura
IF produccion.nomenclatura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nomenclatura
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF produccion.cod_prod is null then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_prod
END IF
SELECT * INTO produccion.* FROM cttb00001
WHERE cod_prod = produccion.cod_prod
IF produccion.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
DISPLAY BY NAME produccion.*
NEXT FIELD cod_prod
END IF
IF status != notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
DISPLAY BY NAME produccion.*
NEXT FIELD cod_prod
END IF
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
IF produccion.unidad_med IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD unidad_med
ELSE
SELECT codigo_unidad FROM cttb00007
WHERE codigo_unidad = produccion.unidad_med and
status_t is null
IF STATUS = NOTFOUND THEN
LET numero_msg = 17
CALL msg(numero_msg)
NEXT FIELD unidad_med
END IF
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
EXIT INPUT
END INPUT
INSERT INTO cttb00001 VALUES
(produccion.cod_prod,produccion.descripcion,
produccion.unidad_med,produccion.nomenclatura,
null,SUSER_SNAME(),GETDATE(),null,null,produccion.cod_cia)
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
LET numero_msg = 1
CALL msg(numero_msg)
GOTO vuelve
END FUNCTION
FUNCTION ctpcmf001()
# WHENEVER ERROR CONTINUE
LET int_flag = false
## Aqui se prepara para la captura del criterio de seleccion
CONSTRUCT criterio ON a.cod_prod,a.descripcion FROM cod_prod,descripcion
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC = " SELECT UNIQUE a.* FROM cttb00001 a ",
" WHERE a.status_t is null and ",
criterio clipped," ORDER BY 1,2,3,4"
PREPARE busca FROM selec
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO produccion.*
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
SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a
WHERE a.cod_cia = produccion.cod_cia
DISPLAY BY NAME produccion.*,descripcion_origen
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO produccion.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a
WHERE a.cod_cia = produccion.cod_cia
DISPLAY BY NAME produccion.*,descripcion_origen
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO produccion.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a
WHERE a.cod_cia = produccion.cod_cia
DISPLAY BY NAME produccion.*,descripcion_origen
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO produccion.*
SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a
WHERE a.cod_cia = produccion.cod_cia
DISPLAY BY NAME produccion.*,descripcion_origen
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO produccion.*
SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a
WHERE a.cod_cia = produccion.cod_cia
DISPLAY BY NAME produccion.*,descripcion_origen
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <Supr> Cancela Operacion"
IF produccion.status_t="E" THEN
LET numero_msg= 36
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME produccion.cod_cia,produccion.descripcion,produccion.unidad_med,
produccion.nomenclatura
WITHOUT DEFAULTS
AFTER FIELD cod_cia
SELECT a.descripcion INTO descripcion_origen FROM iptb00022 a
WHERE a.cod_cia = produccion.cod_cia
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_cia
END IF
DISPLAY BY NAME descripcion_origen
AFTER FIELD descripcion
IF produccion.descripcion IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD descripcion
END IF
AFTER FIELD unidad_med
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF produccion.unidad_med IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD unidad_med
ELSE
SELECT codigo_unidad FROM cttb00007
WHERE codigo_unidad = produccion.unidad_med
IF STATUS = NOTFOUND THEN
LET numero_msg = 17
CALL msg(numero_msg)
NEXT FIELD unidad_med
END IF
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
AFTER FIELD nomenclatura
IF produccion.nomenclatura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nomenclatura
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF produccion.unidad_med IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD unidad_med
ELSE
SELECT codigo_unidad FROM cttb00007
WHERE codigo_unidad = produccion.unidad_med
AND status_t is null
IF STATUS = NOTFOUND THEN
LET numero_msg = 17
CALL msg(numero_msg)
NEXT FIELD unidad_med
END IF
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
IF produccion.descripcion IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD descripcion
END IF
EXIT INPUT
END INPUT
#### Verifica si el usuario presiono la tecla <Supr>
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
UPDATE cttb00001 SET cod_cia = produccion.cod_Cia,
descripcion = produccion.descripcion,
unidad_med = produccion.unidad_med,
nomenclatura = produccion.nomenclatura,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE cod_prod = produccion.cod_prod
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY ("L") "eLiminar"
UPDATE cttb00001 SET status_t ="E" ,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
where cod_prod = produccion.cod_prod
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
EXIT MENU
END MENU
END FUNCTION