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

305 lines
9.1 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : NOPRRP033
OBJETIVO : CALCULA LA BONIFICACION PROYECTADA A DICIEMBRE
PROGRAMADOR : Juan Soto
FECHA REALIZACION : Agosto 8, 1996.
-------------------------------------------------------------------------------
}
GLOBALS "noprgb000.4gl"
## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
DEFINE salir CHAR(1),
fecha_b CHAR(12),
pro_d1 decimal(8,2),
pro_d2 DECIMAL(10,2),
k_mes DECIMAL(8,2),
j_mes,dias,p_mes SMALLINT,
fecha_b2 DATE,
fecha_emp, fecha_a DECIMAL(10,3),
sueldo_b DECIMAL(14,2),
p_tipo_emp CHAR(1)
FUNCTION noprrp033()
# WHENEVER ERROR CONTINUE
DEFINE cooper RECORD
num_emp LIKE notb00008.num_emp,
departamento LIKE adtb00003.departamento,
nivel_emp LIKE adtb00003.nivel_emp,
cod_puesto LIKE adtb00003.cod_puesto,
nom1_emp LIKE adtb00003.nom1_emp,
apell1_emp LIKE adtb00003.apell1_emp,
sueldo LIKE adtb00003.sueldo_ac,
fecha_entrada LIKE adtb00003.fech_efec,
sueldo_b DECIMAL(12,2),
boni_prop DECIMAL(12,2),
bonifica DECIMAL(12,2)
END RECORD
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM nofmrp033 FROM "nofmrp033"
DISPLAY FORM nofmrp033
CALL pantalla()
DISPLAY "noprrp033" AT 4,3
DISPLAY "Proyecciones / Bonificacion" AT 6,28
## INDICA EL TIPO DE PAPEL NECESARIO PARA EL REPORTE. 1 - PAPEL 9 1/2 X 11
## 2 - PAPEL 14 7/8 X 11
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
## AQUI SE INDICA EL CRITERIO DE BUSQUEDA DEL REPORTE
INPUT BY NAME p_tipo_emp
AFTER INPUT
IF p_tipo_emp is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD p_tipo_emp
END IF
EXIT INPUT
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
CONSTRUCT BY NAME criterio ON b.departamento
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE
LET SELEC =
"SELECT UNIQUE b.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ",
" b.nom1_emp,b.apell1_emp,b.sueldo_ac,b.fech_efec ",
" FROM adtb00003 b ",
" WHERE nomina = ? AND ",
" (b.status_t is null or b.status_t = 'I') and ",
criterio clipped,
" ORDER BY 1"
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
## SE PREPARA LA INFORMACION SELECCIONADA
PREPARE comando FROM selec
DECLARE accion CURSOR FOR comando
OPEN accion USING p_tipo_emp
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT pro_bonifica TO "C:\\archivo"
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
WHILE status != notfound
FETCH accion INTO cooper.*
IF status = notfound THEN
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET cooper.sueldo_b = cooper.sueldo
# CALCULO DE LA BONIFICACION DE EMPLEADOS
LET fecha_b = "31/12/", YEAR(today) USING "####"
LET fecha_b2 = fecha_b CLIPPED
LET sueldo_b = cooper.sueldo / 23.83
LET fecha_emp = fecha_b2 - cooper.fecha_entrada
LET fecha_a = fecha_emp / 365
IF fecha_a >= 1 or
fecha_a <= 3 THEN
LET cooper.bonifica = sueldo_b * 45
END IF
IF fecha_a > 3 THEN
LET cooper.bonifica = sueldo_b * 60
END IF
# Proporcion de Bonificacion para los Empleados que no tienen un anos en la
# Empresa se hace la siguiente division .... (45 / 12) va a ser igual a
# 3.75 de dias por mes...... # 23.83 es igual a promedio de dia laborable
# del mes
IF fecha_a < 1 THEN
LET p_mes = MONTH(cooper.fecha_entrada)
SELECT a.dias_prod INTO dias
FROM mestable a
WHERE mes = p_mes
LET k_mes = ((dias - DAY(cooper.fecha_entrada)) / dias)
LET j_mes = 12 - MONTH(cooper.fecha_entrada)
LET k_mes = k_mes + j_mes
LET pro_d1 = 3.75 * k_mes
LET pro_d2 = pro_d1 * sueldo_b
LET cooper.bonifica = pro_d2
END IF
OUTPUT TO REPORT pro_bonifica(cooper.*)
END WHILE
FINISH REPORT pro_bonifica
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT pro_bonifica(x)
DEFINE x RECORD
num_emp LIKE notb00008.num_emp,
departamento LIKE adtb00003.departamento,
nivel_emp LIKE adtb00003.nivel_emp,
cod_puesto LIKE adtb00003.cod_puesto,
nom1_emp LIKE adtb00003.nom1_emp,
apell1_emp LIKE adtb00003.apell1_emp,
sueldo LIKE adtb00003.sueldo_ac,
fecha_entrada LIKE adtb00003.fech_efec,
sueldo_b DECIMAL(12,2),
boni_prop DECIMAL(12,2),
bonifica DECIMAL(12,2)
END RECORD
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE doble_on CHAR(2)
DEFINE doble_off CHAR(2)
DEFINE negrillas_on CHAR(2)
DEFINE negrillas_off CHAR(2)
DEFINE comp_on CHAR(2)
DEFINE comp_off CHAR(2)
DEFINE doce CHAR(2)
DEFINE normal CHAR(2)
DEFINE hora CHAR(5)
DEFINE valor1,total,total1,balance DECIMAL(10,2)
DEFINE l smallint
DEFINE varia CHAR(30)
DEFINE descr CHAR(15)
DEFINE nombre_d CHAR(30)
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
ORDER BY x.departamento
FORMAT
PAGE HEADER
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET hora = time
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN doce
PRINT COLUMN 1, negrillas_on
PRINT COLUMN 1, "noprrp033",
COLUMN 22, p_companias.nombre CLIPPED,
COLUMN 87, "Pag. ",pageno using "###"
PRINT COLUMN 24, "Proyeccion Bonificacion Para El Ano Actual",
COLUMN 87, today using "dd/mm/yy"
PRINT COLUMN L, varia,
COLUMN 90, hora
## SE SELECCIONA EL TIPO DE NOMINA A IMPRIMIR
IF p_tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF p_tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
PRINT COLUMN 1, negrillas_on,
COLUMN 2, descr,
COLUMN 15, negrillas_off
PRINT COLUMN 2, "----------------------------------------------------",
"------------------------------------------"
PRINT COLUMN 55, "Fecha De",
COLUMN 82, "Bonificacion"
PRINT COLUMN 2, "Ficha No.",
COLUMN 28, "Nombre",
COLUMN 55, "Entrada",
COLUMN 68, "Sueldo",
COLUMN 82, "Al ",fecha_b
PRINT COLUMN 2, "----------------------------------------------------",
"------------------------------------------"
BEFORE GROUP OF x.departamento
IF x.departamento is not null THEN
select nom_dpto INTO nombre_d
FROM adtb00001
where departamento = x.departamento
IF status = NOTFOUND THEN
LET status = 0
LET nombre_d = " NO TIENE DEPARTAMENTO "
END IF
PRINT COLUMN 1, negrillas_on
PRINT COLUMN 2, "DEPTO.: ", x.departamento USING "&&&&"," ",
nombre_d CLIPPED
PRINT COLUMN 1, negrillas_off
END IF
ON EVERY ROW
PRINT COLUMN 2, x.num_emp using "&&&&",
COLUMN 23, x.nom1_emp clipped," ",x.apell1_emp clipped,
COLUMN 55, x.fecha_entrada using "dd/mm/yy",
COLUMN 66, x.sueldo using "##,###.##",
COLUMN 86, x.bonifica using "###,###.##"
AFTER GROUP OF x.departamento
SKIP 1 LINE
ON LAST ROW
PRINT COLUMN 2, "----------------------------------------------------",
"------------------------------------------"
PRINT COLUMN 1, negrillas_on
PRINT COLUMN 1, "TOTAL BONIFICACION =====>",
COLUMN 81, SUM(x.bonifica) USING "###,###,###.##"
PRINT COLUMN 15, negrillas_off,normal
END REPORT