{ ------------------------------------------------------------------------------- PROGRAMA : EDPRRP035 OBJETIVO : Listar las Entrada de Diario Nomina Semanal PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Julio 28, 1993 ------------------------------------------------------------------------------- } DATABASE rayovac GLOBALS DEFINE rango_in,rango_fin CHAR(4) ###### Variables para busqueda de rango de fecha DEFINE detalle CHAR(30) DEFINE mes SMALLINT DEFINE ano CHAR(4) DEFINE tasa DECIMAL(5,2) DEFINE p_fecha,fecha1, fecha2 DATE DEFINE nominas CHAR(1) DEFINE entra CHAR(14) DEFINE entra1 CHAR(5) DEFINE tipo_papel SMALLINT DEFINE mano_obra,sueldo_ind,monto_banco,interes DECIMAL(12,2) DEFINE afecta CHAR(1) ###### Variables para almacenar los datos selecionados DEFINE busca_monto,busca_obra,busca_sueldo,busca_inf,busca_int, busca_emp,selec5, selec6,criterio CHAR(500) ###### Variables que la almacenan la informacion enviada al reporte DEFINE diario1 RECORD cta_aux CHAR(8), descripcion CHAR(30), num_emp SMALLINT, valor DECIMAL(10,2) END RECORD ###### Variables que la almacenan la informacion enviada al reporte DEFINE diario2 RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, factura INTEGER, valor DECIMAL(12,2), sub_total DECIMAL(10,2) END RECORD END GLOBALS MAIN DEFER INTERRUPT CALL edprrp035() END MAIN FUNCTION edprrp035() # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 ##### Abriendo y desplegando el formulario de captura de datos OPEN FORM edfmrp035 FROM "edfmrp035" DISPLAY FORM edfmrp035 CALL pantalla() DISPLAY "edprrp035" AT 4,3 DISPLAY "Entrada de Diario Nomina Semanales" AT 6,22 LET tipo_papel = 3 CALL msgrp000(tipo_papel) # Validacion de dos variables para el manejo de los rangos anuales de las # nominas LET rango_in = year(today) LET rango_in = rango_in[3,4] LET rango_in = rango_in clipped,"00" LET rango_fin = year(today) LET rango_fin = rango_fin[3,4] LET rango_fin = rango_fin clipped,"60" ###### Aceptando los valores para el rango de fecha INPUT BY NAME entra,fecha1,fecha2,detalle,afecta AFTER FIELD entra SELECT unique ref FROM cgtb00004 WHERE ref = entra IF STATUS != NOTFOUND THEN ERROR "(12) REGISTRO EXISTE" #NEXT FIELD entra END IF LET entra1 = entra BEFORE FIELD fecha1 SELECT MAX(fecha) INTO p_fecha FROM cgtb00004 WHERE ref[1,5] = entra1 LET fecha1 = p_fecha + 1 DISPLAY BY NAME fecha1 AFTER FIELD fecha1 IF fecha1 IS NULL THEN ERROR "(16) CAMPO EN BLANCO" #NEXT FIELD fecha1 END IF IF fecha1 <= p_fecha THEN ERROR "(179) EXISTE ENTRADA DE DIARIO CON ESA FECHA" # NEXT FIELD fecha1 END IF AFTER FIELD fecha2 IF fecha2 is null THEN ERROR "(16) CAMPO EN BLANCO" #NEXT FIELD fecha2 END IF IF fecha1 > fecha2 THEN ERROR "(149) FECHA NO PUEDE SER MAYOR QUE LA ANTERIOR" #NEXT FIELD fecha1 END IF ###### Selecionando en rango de fecha de la tabla de periodo para el fecha2 SELECT UNIQUE ref FROM cgtb00004 where ref = entra IF STATUS != NOTFOUND THEN ERROR "(12) REGISTRO EXISTE" #NEXT FIELD fecha2 END IF AFTER INPUT EXIT INPUT END INPUT ##### Creando la facilidad para cancelar proceso con DELETE O SUPR IF int_flag THEN ERROR "(2) OPERACION CANCELADA" LET int_flag = false RETURN END IF CONSTRUCT BY NAME criterio ON a.num_nomi IF int_flag THEN ERROR "(2) OPERACION CANCELADA" LET int_flag = false RETURN END IF DISPLAY "Buscando Datos Basicos2... Espere Por Favor" AT 19,14 LET busca_monto = "SELECT SUM(a.valor) FROM notb00008 a ", "WHERE a.fecha BETWEEN ? AND ? AND a.tipo_emp = 'S' AND ", " a.status_t IS NULL AND ", "a.cod_mov NOT IN (100,101,102) AND ",criterio clipped PREPARE comando FROM busca_monto DECLARE busca1 CURSOR FOR comando OPEN busca1 USING fecha1,fecha2 FETCH busca1 INTO monto_banco LET busca_obra = "SELECT SUM(a.valor) FROM notb00008 a ", "WHERE a.tipo_emp = 'S' AND a.status_t IS NULL AND ", " a.departamento <> 6500 AND ", " a.fecha BETWEEN ? AND ? AND a.clase_mov IN('I','E') ", " AND ",criterio clipped PREPARE comando1 FROM busca_obra DECLARE busca2 CURSOR FOR comando1 OPEN busca2 USING fecha1,fecha2 FETCH busca2 INTO mano_obra DISPLAY "Buscando Datos Basicos3... Espere Por Favor" AT 19,14 LET busca_sueldo = "SELECT SUM(a.valor) FROM notb00008 a ", "WHERE a.tipo_emp = 'S' AND a.status_t IS NULL AND ", "a.departamento = 6500 AND a.fecha BETWEEN ? AND ? AND ", "a.clase_mov IN('I','E') AND ",criterio clipped PREPARE comando3 FROM busca_sueldo DECLARE busca3 CURSOR FOR comando3 OPEN busca3 USING fecha1,fecha2 FETCH busca3 INTO sueldo_ind # Busca la informacion requerida LET busca_inf = "SELECT c.cta_aux,b.descripcion,a.num_emp,SUM(a.valor*-1) ", "FROM notb00002 c,cgtb00001 b,notb00008 a ", "WHERE c.cod_mov = a.cod_mov AND c.cta_aux = b.cuenta_no AND ", "c.status_t IS NULL AND a.fecha BETWEEN ? AND ? AND ", "a.tipo_emp = 'S' AND a.clase_mov IN ('D','S','R') AND ", criterio clipped, " GROUP BY 1,2,3 ORDER BY 1 " DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE comando4 FROM busca_inf DECLARE buscar CURSOR FOR comando4 OPEN buscar USING fecha1,fecha2 ##### Envia la Informacion al printer de contabilidad START REPORT entrada35 TO PIPE "lp -dcentral" DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) ##### Loop para enviar informacion al reporte WHILE STATUS != NOTFOUND FETCH buscar INTO diario1.* IF status = NOTFOUND THEN EXIT WHILE END IF IF int_flag THEN ERROR "(2) OPERACION CANCELADA" LET int_flag = FALSE RETURN END IF LET interes = 0 IF diario1.cta_aux = "2125-01" THEN LET busca_int = "SELECT SUM(a.valor * -1) FROM notb00008 a ", "WHERE a.num_nomi IS NOT NULL ", "AND a.fecha BETWEEN ? AND ? AND a.cod_mov = 110 AND ", "a.tipo_emp = 'S' AND a.num_emp = ? and ",criterio clipped PREPARE comando5 FROM busca_int DECLARE busca6 CURSOR FOR comando5 OPEN busca6 USING fecha1,fecha2,diario1.num_emp FETCH busca6 INTO interes IF interes IS NULL THEN LET interes = 0 END IF LET diario1.valor = diario1.valor + interes END IF OUTPUT TO REPORT entrada35(diario1.*,fecha1,fecha2,detalle,entra, mano_obra,sueldo_ind,monto_banco,afecta) END WHILE FINISH REPORT entrada35 CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION #### Funcion para dar salida ordenada a la informacion requerida de #### una entrada de diario de nominas local REPORT entrada35(x,fecha1,fecha2,detalle1,entrada,mano_obra,sueldo_ind, monto_banco,afecta) DEFINE x RECORD cta_aux CHAR(8), descripcion CHAR(30), num_emp SMALLINT, valor DECIMAL(10,2) END RECORD DEFINE cta_1128 RECORD num_emp SMALLINT, nom1_emp CHAR(20), apell1_emp CHAR(20), valor DECIMAL(12,2) END RECORD ## Acumula los valores de las diferentes cuentas para entrada diario de nomina DEFINE detalle1 CHAR(30) DEFINE nombre CHAR(42) DEFINE mano_obra,sueldo_ind,monto_banco DECIMAL(12,2) DEFINE valor_cta,total1,total2,total3,total4,total5,total6 DECIMAL(12,2) DEFINE total7,total8 DECIMAL(12,2) ## Acumula los totales DEBITO Y CREDITO DEFINE tasa1 DECIMAL(5,2) ## Almacena la tasa de la tasa de cambio DEFINE fecha1,fecha2 DATE #Almacena fechas del rango de busqueda DEFINE afecta,nomina CHAR(1) DEFINE doble_on CHAR(3) DEFINE doble_off CHAR(3) DEFINE negrillas_on CHAR(6) DEFINE negrillas_off CHAR(6) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(3) DEFINE doce CHAR(3) DEFINE normal CHAR(3) DEFINE normall CHAR(3) DEFINE comprimido CHAR(3) DEFINE hora CHAR(5) DEFINE dpto INTEGER DEFINE nomina1 CHAR(24) DEFINE entrada CHAR(14) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 FORMAT PAGE HEADER LET doble_on = ASCII 001 LET doble_off = ASCII 002 LET negrillas_on = ASCII 027, ASCII 098 LET negrillas_off = ASCII 027, ASCII 099 LET comp_on = ASCII 31 LET comp_off = ASCII 029 LET comprimido = ASCII 031 LET doce = ASCII 030 LET normal = ASCII 27, ASCII 80 LET normall = ASCII 029 LET hora = time ##### Selecionado la descripcion del fecha2 PRINT COLUMN 1, comp_off,"edprrp035", COLUMN 23, "R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN 75, "Pag. ",pageno using "###" PRINT COLUMN 35, "Sistema de Contabilidad", COLUMN 75, today using "dd/mm/yy" PRINT COLUMN 29, "Entrada de Diario Nomina Semanales", COLUMN 78, hora PRINT COLUMN 44, fecha2 USING "dd/mm/yy" # , negrillas_off SKIP 1 LINE IF pageno = 1 THEN PRINT COLUMN 01,"Entrada de Diario No.", doble_on,entrada,doble_off PRINT COLUMN 1,"Observaciones: _____________________________________" PRINT COLUMN 1," _____________________________________" PRINT COLUMN 1, "--------------------------------------------------", "----------------------------------------", negrillas_on PRINT COLUMN 2, "Cuenta ", COLUMN 11, "Dpto", COLUMN 18, "Concepto", COLUMN 56, "Debe", COLUMN 71, "Haber",negrillas_off PRINT COLUMN 1, "--------------------------------------------------", "----------------------------------------" LET total1 = 0 LET total2 = 0 PRINT COLUMN 2, "1145", COLUMN 18, "INV. PROCESO- VALOR MOD ACTUAL", COLUMN 50, mano_obra using "###,###,##&.&&" IF afecta = "S" THEN INSERT INTO cgtb00004 VALUES(fecha2,1,entrada,"1145",null,null,null,null,null, detalle1,null,mano_obra,0,null,user,current,null,null) END IF ELSE PRINT COLUMN 01," " PRINT COLUMN 1," " PRINT COLUMN 1," " PRINT COLUMN 1, "--------------------------------------------------", "----------------------------------------", negrillas_on PRINT COLUMN 2, "Empleado", COLUMN 60, "Monto A Cobrar" PRINT COLUMN 1, "--------------------------------------------------", "----------------------------------------" PRINT COLUMN 2, " " END IF SKIP 1 LINE BEFORE GROUP OF x.cta_aux LET total2 = 0 ON EVERY ROW IF total1 IS NULL THEN LET total1 = 0 END IF LET total1 = total1 + x.valor LET total2 = total2 + x.valor IF afecta = "S" THEN IF x.cta_aux = "1128" THEN INSERT INTO cgtb00004 VALUES(fecha2,1,entrada,x.cta_aux,null,null,01, x.num_emp,null,detalle1,null,0,x.valor,null,user,current,null,null) END IF END IF AFTER GROUP OF x.cta_aux PRINT COLUMN 2, x.cta_aux, COLUMN 18, x.descripcion, COLUMN 65, total2 using "###,###,##&.&&" IF afecta = "S" THEN IF x.cta_aux != "1128" THEN INSERT INTO cgtb00004 VALUES(fecha2,1,entrada,x.cta_aux,null,null,null, null,null,detalle1,null,0,total2,null,user,current,null,null) END IF END IF ON LAST ROW ###### Acumulando totales por columna IF mano_obra is null THEN LET mano_obra = 0 END IF IF sueldo_ind is null THEN LET sueldo_ind = 0 END IF LET total7 = mano_obra + sueldo_ind LET total3 = monto_banco LET total8 = total3 + total1 ####### Imprimiendo total nominas netas ##### Imprimendo monto descuento para RAY.O.VAC PRINT COLUMN 2, "1104", COLUMN 18, "BANCOMERCIO RD$ - NOMINA", COLUMN 65, total3 using "###,###,##&.&&" IF afecta = "S" THEN INSERT INTO cgtb00004 VALUES(fecha2,1,entrada,"1104",null,null,null,null, null,detalle1,null,0,total3,null,user,current,null,null) END IF ###### Imprime total DEBITO y total CREDITO SKIP 1 LINE PRINT COLUMN 1,negrillas_on PRINT COLUMN 50,"--------------", COLUMN 65,"--------------" PRINT COLUMN 35,"Totales-->", COLUMN 50,total7 USING "###,###,##&.&&", COLUMN 65,total8 USING "###,###,##&.&&" SKIP 2 LINE PRINT COLUMN 1, detalle1 PRINT COLUMN 1,comp_off,negrillas_off SKIP 3 LINE SKIP TO TOP OF PAGE LET busca_emp = "SELECT a.num_emp,b.nom1_emp,b.apell1_emp,SUM(a.valor) ", "FROM notb00008 a,adtb00003 b,notb00002 c ", "WHERE a.num_emp = b.num_emp AND a.fecha BETWEEN ? AND ? ", "AND c.cta_aux = '1128' AND a.tipo_emp = 'S' AND ", "a.cod_mov = c.cod_mov and ",criterio clipped, " GROUP by 1,2,3 ORDER BY 1 " PREPARE comando9 FROM busca_emp DECLARE busqueda CURSOR FOR comando9 OPEN busqueda USING fecha1,fecha2 PRINT COLUMN 1,negrillas_off LET valor_cta = 0 FOREACH busqueda INTO cta_1128.* LET nombre = cta_1128.nom1_emp CLIPPED," ",cta_1128.apell1_emp CLIPPED PRINT COLUMN 1, cta_1128.num_emp," ",nombre CLIPPED, COLUMN 60, cta_1128.valor USING "###,###.##" LET valor_cta = valor_cta + cta_1128.valor END FOREACH PRINT COLUMN 60, "----------" PRINT COLUMN 60, valor_cta USING "###,###.##" END REPORT { Esta funcion se utiliza para desplegar mensajes de los reportes de los sistemas de Ray-O-Vac Dominicana. Realizada por Lic. Abner Montalvo y Johnny Soto Agosto 21, 1992 } FUNCTION msgrp000(tipo_papel) DEFINE tipo_papel SMALLINT, longitud CHAR(11), linea_papel CHAR(50) CASE WHEN tipo_papel = 1 LET longitud = " 9 1/2 x 11" WHEN tipo_papel = 2 LET longitud = "14 7/8 x 11" END CASE LET linea_papel = "Coloque papel ",longitud," en la impresora." DISPLAY linea_papel AT 15,14 DISPLAY "Asegurese de que la impresora este encendida." AT 16,14 DISPLAY " Ejecuta impresion Cancela impresion" AT 18,14 RUN "type C:\\archivo > %USPRINT%" END FUNCTION FUNCTION pantalla() DEFINE fecha CHAR(8), hora char(5) LET fecha = today USING "dd/mm/yy" LET hora = time DISPLAY "R A Y . O . V A C D O M I N I C A N A, S. A." AT 4,17 ATTRIBUTE (REVERSE,YELLOW) DISPLAY fecha AT 4,70 ATTRIBUTE (YELLOW) DISPLAY "Sistema de Contabilidad General" AT 5,24 DISPLAY hora AT 6,73 ATTRIBUTE(YELLOW) CALL fgl_drawbox(5,79,3,1) CALL fgl_drawbox(1,79,22,1) RUN "type C:\\archivo > %USPRINT%" END FUNCTION