Files
MBS/PROYECTO/nodir/noprcs006.4gl
T

359 lines
11 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : NOPRCS006
OBJETIVO : Consulta los movimientos de los empleados, por empleado,
y todos los empleados
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Septiembre 01, 1993
-------------------------------------------------------------------------------
}
GLOBALS "noprgb000.4gl"
DEFINE balance_inicial DECIMAL(15,2)
DEFINE arr_nuevo DYNAMIC ARRAY OF RECORD
num_nomi LIKE notb00008.num_nomi,
fecha LIKE notb00008.fecha,
cantidad LIKE notb00008.cantidad,
valor LIKE notb00008.valor,
balance DECIMAL(15,2)
END RECORD
DEFINE ingresos RECORD
cod_mov LIKE notb00008.cod_mov,
tipo_emp LIKE notb00008.tipo_emp,
num_emp LIKE notb00008.num_emp,
departamento LIKE notb00008.departamento,
nivel_emp LIKE notb00008.nivel_emp,
cod_puesto LIKE notb00008.cod_puesto,
nom1_emp LIKE adtb00003.nom1_emp,
apell1_emp LIKE adtb00003.apell1_emp,
descrip_mov LIKE notb00002.descrip_mov
END RECORD
DEFINE idx_n SMALLINT
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
# LET usuarios = 'jsoto'
# LET clave = 'lmmjvsd2009'
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL noprcs006()
END MAIN
FUNCTION noprcs006()
#WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM nofmcs006 FROM "nofmcs006"
DISPLAY FORM nofmcs006
# CALL PANTALLA()
DISPLAY "<Esc> Continua Consulta" AT 2,3
DISPLAY "<CTRL-C> Cancela Operacion" AT 2,50
DISPLAY "noprcs006" AT 4,3
DISPLAY "Balances Por empleados y Movimientos" AT 6,22
LABEL vuelve:
CLEAR FORM
CONSTRUCT criterio ON b.num_emp,b.tipo_emp,b.cod_mov
FROM num_emp,tipo_emp,cod_mov
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
LET SELEC = "SELECT UNIQUE b.cod_mov,b.tipo_emp,b.num_emp,b.departamento, ",
"b.nivel_emp,b.cod_puesto,a.nom1_emp,a.apell1_emp,",
"c.descrip_mov ",
" FROM adtb00003 a,notb00008 b,notb00002 c ",
" WHERE ",
"a.num_emp = b.num_emp and ",
"a.nomina = b.tipo_emp and ",
"b.cod_mov = c.cod_mov and ",
criterio clipped," AND b.status_t IS NULL ",
" ORDER BY 1,2,3,4 "
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 21,2
ATTRIBUTE (YELLOW)
PREPARE busca FROM selec
DECLARE accion SCROLL CURSOR FOR busca
OPEN accion
DISPLAY " " AT 21,2
LET idx = 1
FETCH FIRST accion INTO ingresos.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
GOTO vuelve
END IF
IF ingresos.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF ingresos.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
LET descrip1 = ingresos.nom1_emp clipped," ",ingresos.apell1_emp clipped
DISPLAY BY NAME ingresos.cod_mov,ingresos.tipo_emp,descr,ingresos.num_emp,
ingresos.departamento,ingresos.nivel_emp,
ingresos.cod_puesto,descrip1,ingresos.descrip_mov
MENU "OPCION"
COMMAND "Siguiente"
"Presenta en pantalla el registro Siguiente encontrado"
LET idx = 1
FETCH NEXT accion INTO ingresos.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
IF ingresos.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF ingresos.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
LET descrip1 = ingresos.nom1_emp clipped," ",ingresos.apell1_emp clipped
DISPLAY BY NAME ingresos.cod_mov,ingresos.tipo_emp,descr,
ingresos.num_emp,ingresos.departamento,ingresos.nivel_emp,
ingresos.cod_puesto,descrip1,ingresos.descrip_mov
COMMAND "Anterior"
"Presenta en pantalla el registro Anterior encontrado"
LET idx = 1
FETCH PREVIOUS accion INTO ingresos.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
IF ingresos.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF ingresos.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
LET descrip1 = ingresos.nom1_emp clipped," ",ingresos.apell1_emp clipped
DISPLAY BY NAME ingresos.cod_mov,ingresos.tipo_emp,descr,
ingresos.num_emp,ingresos.departamento,ingresos.nivel_emp,
ingresos.cod_puesto,descrip1,ingresos.descrip_mov
COMMAND "Primero"
"Presenta en pantalla el Primer registro encontrado"
LET idx = 1
FETCH FIRST accion INTO ingresos.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
IF ingresos.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF ingresos.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
LET descrip1 = ingresos.nom1_emp clipped," ",ingresos.apell1_emp clipped
DISPLAY BY NAME ingresos.cod_mov,ingresos.tipo_emp,descr,
ingresos.num_emp,ingresos.departamento,ingresos.nivel_emp,
ingresos.cod_puesto,descrip1,ingresos.descrip_mov
COMMAND "Ultimo"
"Presenta en pantalla el Ultimo registro encontrado"
LET idx = 1
FETCH LAST accion INTO ingresos.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
IF ingresos.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF ingresos.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
LET descrip1 = ingresos.nom1_emp clipped," ",ingresos.apell1_emp clipped
DISPLAY BY NAME ingresos.cod_mov,ingresos.tipo_emp,descr,
ingresos.num_emp,ingresos.departamento,ingresos.nivel_emp,
ingresos.cod_puesto,descrip1,ingresos.descrip_mov
COMMAND "Ver"
"Para ver los ingresos de este empleado"
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 21,2 ATTRIBUTE (BOLD)
DISPLAY " " AT 21,2
CALL balancear()
COMMAND "Retornar"
EXIT MENU
END MENU
GOTO vuelve
END FUNCTION
FUNCTION balancear()
LET balance_inicial = 0
#SELECT SUM(a.valor) INTO balance_inicial FROM notb00008 a
#WHERE a.num_emp = ingresos.num_emp and
# a.cod_mov = ingresos.cod_mov AND
# # a.fecha <='12/31/2016' and
# a.status_t IS NULL
DECLARE accion1 CURSOR FOR
SELECT a.num_nomi,a.fecha,a.cantidad,a.valor,'1'
FROM notb00008 a
WHERE a.num_emp = ingresos.num_emp and
a.cod_mov = ingresos.cod_mov AND
# a.fecha > '12/31/2016' and
a.status_t is null
{UNION
SELECT a.num_nomi,a.fecha,a.cantidad,a.valor,rowid
FROM notb00016 a
WHERE a.num_emp = ingresos.num_emp and
a.cod_mov = ingresos.cod_mov and
a.status_t is null}
#APURATE
ORDER BY a.fecha
CALL arr_nuevo.clear()
LET idx_n = 1
FOREACH accion1 INTO arr_nuevo[idx_n].*
IF idx_n = 1 THEN
LET balance_inicial = arr_nuevo[1].valor
END IF
IF idx_n > 1 THEN
LET balance_inicial = arr_nuevo[idx_n].valor +
balance_inicial
END IF
LET arr_nuevo[idx_n].balance = balance_inicial
LET idx_n = idx_n + 1
END FOREACH
DISPLAY " " AT 21,2
IF idx_n = 1 THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
# CALL set_count (idx_n - 1)
DISPLAY BY NAME ingresos.cod_mov,ingresos.tipo_emp,descr,
ingresos.num_emp,ingresos.departamento,ingresos.nivel_emp,
ingresos.cod_puesto,descrip1,ingresos.descrip_mov
DISPLAY ARRAY arr_nuevo TO consart.*
ON ACTION imprimir ATTRIBUTE(TEXT="Imprimir",IMAGE="printer2")
CALL impresion()
AFTER DISPLAY
## Verifica si el usuario cancelo la operacion
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
EXIT DISPLAY
END IF
EXIT DISPLAY
END DISPLAY
END FUNCTION
FUNCTION impresion()
CALL seleccionarsalida() RETURNING r_output
LET r_filename = 'noprcs006.4rp'
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
# LET r_output='SVG'
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT data TO XML HANDLER HANDLER
FOR idx = 1 TO arr_nuevo.getLength()
OUTPUT TO REPORT data(ingresos.*,arr_nuevo[idx].*)
END FOR
FINISH REPORT data
END IF
END FUNCTION
REPORT data(x,y)
DEFINE x RECORD
cod_mov LIKE notb00008.cod_mov,
tipo_emp LIKE notb00008.tipo_emp,
num_emp LIKE notb00008.num_emp,
departamento LIKE notb00008.departamento,
nivel_emp LIKE notb00008.nivel_emp,
cod_puesto LIKE notb00008.cod_puesto,
nom1_emp LIKE adtb00003.nom1_emp,
apell1_emp LIKE adtb00003.apell1_emp,
descrip_mov LIKE notb00002.descrip_mov
END RECORD
DEFINE y RECORD
num_nomi LIKE notb00008.num_nomi,
fecha LIKE notb00008.fecha,
cantidad LIKE notb00008.cantidad,
valor LIKE notb00008.valor,
balance DECIMAL(15,2)
END RECORD,
strhora,strfecha STRING
ORDER BY y.fecha
FORMAT
ON EVERY ROW
LET strhora = TODAY
LET strfecha = y.fecha USING "yyyy-mm-dd"
PRINTX x.num_emp,x.nom1_emp, x.apell1_emp,x.cod_mov,x.descrip_mov, y.*,p_companias.nombre,strhora,
strfecha
END REPORT