Files
MBS/PROYECTO/codir/coprcs006.4gl
T

247 lines
7.6 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : COPRCS006
OBJETIVO : Consulta Requisicion Por Fecha
PROGRAMADOR : Ing. Juan Fco. Soto.
FECHA REALIZACION : Octubre 6, 1992
FECHA MODIFICACION : Noviembre 24, 1992 (Betania Guerrero)
MODIFICADO POR : Ing. Juan Soto
DESCRIPCION : Poner Mensaje de no existe y limpiar campos.
FECHA : Marzo 12, 1993.
-------------------------------------------------------------------------------
}
GLOBALS "coprgb000.4gl"
FUNCTION coprcs006()
DEFINE seleccion CHAR(1000)
DEFINE total_g_e CHAR(15)
DEFINE p,sale,pendiente CHAR (1)
DEFINE h,i SMALLINT
DEFINE requisiciones RECORD
cantidad DECIMAL(10,2),
precio DECIMAL(11,3),
num_req2 INTEGER,
monto DECIMAL(12,3)
END RECORD
DEFINE busca_req RECORD
codigo4 SMALLINT,
num_req INTEGER,
fecha DATE,
nom_dpto CHAR(30),
base LIKE intb00002.base,
monto DECIMAL(12,3)
END RECORD
DEFINE desp_req ARRAY[500] OF RECORD
num_req1 INTEGER,
fecha1 DATE,
codigo1 SMALLINT,
nom_dpto CHAR(30),
monto1 CHAR(15)
END RECORD
DEFINE encontrado INTEGER
DEFINE total_d,total_g DECIMAL(14,3)
DEFINE primera CHAR(1)
#WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
LET formulario = formulario CLIPPED,"cofmcs006"
OPEN FORM cofmcs006 FROM formulario
DISPLAY FORM cofmcs006
CALL PANTALLA()
DISPLAY "<Esc> Consulta de Registros" AT 2,3
DISPLAY "<Delete> Cancela Operacion" AT 2,50
DISPLAY "coprcs006" AT 4,3
DISPLAY "Requisicion Por Rango de Fecha" AT 6,25
LABEL volver:
LET sale = null
CONSTRUCT criterio ON a.num_req,a.departamento FROM num_req,departamento
INPUT BY NAME pendiente,rango.* ATTRIBUTE (YELLOW)
BEFORE FIELD fech_in
SELECT MIN(fech_req) INTO rango.fech_in FROM cotb00006
WHERE status_t is null
DISPLAY BY NAME rango.fech_in ATTRIBUTE (BOLD)
BEFORE FIELD fech_fi
LET rango.fech_fi = today
DISPLAY BY NAME rango.fech_fi ATTRIBUTE (BOLD)
AFTER FIELD pendiente
IF pendiente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD pendiente
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
IF sale = "S" THEN
GOTO volver
END IF
## Se seleccionan los campos que el usuario debe ver en la pantalla
IF pendiente = "T" THEN
LET selec =
"SELECT a.departamento,a.num_req,a.fech_req,b.nom_dpto,d.base, ",
" sum(c.cantidad * c.precio) ",
"FROM cotb00006 a,adtb00001 b,cotb00008 c,OUTER intb00002 d ",
"WHERE a.num_req = c.num_req AND c.cod_n = d.cod_n AND ",
" c.cod_grupo = d.cod_grupo AND c.cod_tipo = d.cod_tipo AND ",
" c.cod_sec = d.cod_sec AND a.departamento = b.departamento AND ",
" a.fech_req between ? AND ? AND a.status_t is NULL AND ",
" (c.procesada = ? OR c.procesada = 'S') and ",criterio clipped,
" GROUP BY 1,2,3,4,5 ORDER BY 1,2,3 "
ELSE
LET p = "N"
LET selec =
"SELECT a.departamento,a.num_req,a.fech_req,b.nom_dpto,d.base, ",
" sum(c.cantidad * c.precio) ",
"FROM cotb00006 a,adtb00001 b,cotb00008 c,OUTER intb00002 d ",
"WHERE a.num_req = c.num_req AND c.cod_n = d.cod_n AND ",
" c.cod_grupo = d.cod_grupo AND c.cod_tipo = d.cod_tipo AND ",
" c.cod_sec = d.cod_sec AND a.departamento = b.departamento AND ",
" a.fech_req between ? AND ? AND a.status_t is NULL AND ",
" c.procesada = ? and ",criterio clipped,
" GROUP BY 1,2,3,4,5 ORDER BY 1,2,3 "
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 21,1
ATTRIBUTE (YELLOW)
PREPARE busca FROM selec
DECLARE accion CURSOR FOR busca
OPEN accion using rango.fech_in,rango.fech_fi,p
LET i = 1
LET sale = null
LET idx = 1
LET primera = "S"
LET total_g = 0
LET total_d = 0
FOR h = 1 to 6
LET desp_req[h].codigo1 = NULL
LET desp_req[h].num_req1 = NULL
LET desp_req[h].fecha1 = NULL
LET desp_req[h].nom_dpto = NULL
LET desp_req[h].monto1 = NULL
END FOR
WHILE STATUS != NOTFOUND
FETCH accion INTO busca_req.*
IF busca_req.base is not null THEN
IF busca_req.base != 0 THEN
LET busca_req.monto = busca_req.monto / busca_req.base
END IF
END IF
IF STATUS = NOTFOUND AND sale IS NULL THEN
LET desp_req[idx].num_req1 = NULL
LET desp_req[idx].fecha1 = NULL
LET desp_req[idx].codigo1 = NULL
LET idx = idx + 1
LET desp_req[idx].codigo1 = NULL
LET desp_req[idx].num_req1 = NULL
LET desp_req[idx].fecha1 = NULL
LET desp_req[idx].nom_dpto = "Total Departamento ==> "
LET desp_req[idx].monto1 = total_d using "###,###,###.##"
LET total_g = total_g + total_d
LET sale = "S"
END IF
IF primera = "S" THEN
LET desp_req[idx].codigo1 = busca_req.codigo4
LET primera = "N"
END IF
IF desp_req[idx].codigo1 = busca_req.codigo4 THEN
LET desp_req[idx].num_req1 = busca_req.num_req
LET desp_req[idx].fecha1 = busca_req.fecha using "dd/mm/yy"
LET desp_req[idx].codigo1 = busca_req.codigo4
LET desp_req[idx].nom_dpto = busca_req.nom_dpto
LET desp_req[idx].monto1 = busca_req.monto using "###,###,###.###"
LET total_d = total_d + desp_req[idx].monto1
END IF
IF desp_req[idx].codigo1 != busca_req.codigo4 THEN
LET desp_req[idx].num_req1 = NULL
LET desp_req[idx].fecha1 = NULL
LET desp_req[idx].codigo1 = NULL
LET idx = idx + 1
LET desp_req[idx].num_req1 = NULL
LET desp_req[idx].fecha1 = NULL
LET desp_req[idx].codigo1 = NULL
LET desp_req[idx].nom_dpto = "Total Departamento ==> "
LET desp_req[idx].monto1 = total_d using "###,###,###.##"
LET total_g = total_g + total_d
LET total_d = 0
LET primera = "S"
LET idx = idx + 1
LET desp_req[idx].num_req1 = NULL
LET desp_req[idx].fecha1 = NULL
LET desp_req[idx].codigo1 = NULL
LET idx = idx + 1
LET desp_req[idx].num_req1 = busca_req.num_req
LET desp_req[idx].fecha1 = busca_req.fecha using "dd/mm/yy"
LET desp_req[idx].codigo1 = busca_req.codigo4
LET desp_req[idx].nom_dpto = busca_req.nom_dpto
LET desp_req[idx].monto1 = busca_req.monto using "###,###,###.###"
LET total_d = total_d + desp_req[idx].monto1
END IF
LET idx = idx + 1
IF sale = "S" THEN
EXIT WHILE
END IF
LET desp_req[idx].codigo1 = busca_req.codigo4
END WHILE
LET total_g_e = total_g using "###,###,###.##"
DISPLAY " " AT 21,1
DISPLAY BY NAME total_g_e
CALL set_count (idx-1)
DISPLAY ARRAY desp_req TO requi.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
ELSE
CLEAR FORM
GOTO volver
END IF
END FUNCTION