{ ---------------------------------------------------------------------------- PROGRAMA : CGPRRP030 OBJETIVO : PANORAMICO ANALISIS DE BENEFICIOS POR VENDEDOR Y COMPANIA PROGRAMADOR: JUAN F. SOTO FECHA : DICIEMBRE 10, 1996. --------------------------------------------------------------------------- } GLOBALS "cgprgb000.4gl" DEFINE p_ano,p_mes SMALLINT, fecha1,fecha2 DATE DEFINE cost_vta RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad INTEGER END RECORD FUNCTION cgprrp030() DEFINE vendedor RECORD sec_vend SMALLINT, nombre CHAR(20), apellido CHAR(20), cod_cia LIKE vetb00002.cod_cia, bruto DECIMAL(12,2), neto DECIMAL(12,2), costo_venta DECIMAL(12,2), salario DECIMAL(12,2), comision DECIMAL(12,2), descuento DECIMAL(12,2) END RECORD OPTIONS FORM LINE 9, ERROR LINE 24 OPEN FORM cgfmrp030 FROM "cgfmrp030" DISPLAY FORM cgfmrp030 CALL pantalla() DISPLAY "cgprrp030" AT 4,3 DISPLAY "Panoramico Analisis De Beneficos Por Vendedor Y Cia" AT 6,13 LET tipo_papel = 2 CALL msgrp000(tipo_papel) INPUT BY NAME p_ano,p_mes IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CONSTRUCT BY NAME criterio ON a.cod_cia,b.num_emp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET selec= "SELECT UNIQUE b.num_emp , ", " b.nom1_emp,b.apell1_emp,a.cod_cia ", "FROM vetb00002 a,adtb00003 b ", "WHERE a.sec_vend = b.num_emp AND ",criterio clipped, " AND (b.status_t IS NULL OR b.status_t IN ('I')) ", "ORDER BY 1,4 " PREPARE comando FROM selec DECLARE busca CURSOR FOR comando OPEN busca START REPORT ana_cia TO PIPE "lp" DISPLAY "<< Reporte Generandose... Espere Por Favor >>" AT 19,14 WHILE STATUS != NOTFOUND FETCH busca INTO vendedor.* IF STATUS = NOTFOUND THEN EXIT WHILE END IF OUTPUT TO REPORT ana_cia(vendedor.*) END WHILE FINISH REPORT ana_cia RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT ana_cia(x) DEFINE x RECORD sec_vend SMALLINT, nombre CHAR(20), apellido CHAR(20), cod_cia LIKE vetb00002.cod_cia, bruto DECIMAL(12,2), neto DECIMAL(12,2), costo_venta DECIMAL(12,2), salario DECIMAL(12,2), comision DECIMAL(12,2), descuento DECIMAL(12,2) END RECORD, comp_on,doce,normal,negrillas_on,negrillas_off CHAR(3), nombre_mes CHAR(12) DEFINE bruto,descuento,costo_v,salario,comision,total_g,neto,beneficio_b ARRAY [12] OF DECIMAL(12,2), t_bruto,t_descuento,t_costo_v,t_salario,t_comision,t_total_g,t_neto, t_beneficio_b,t_beneficio_n,t_regalia DECIMAL(12,2), porc_v,regalia,bonificacion,tt_bruto,tt_descuento,tt_costo_v, tt_salario,tt_comision,tt_total_g,tt_neto,tt_beneficio_b, t_costo,tt_beneficio_n,tt_regalia DECIMAL(12,2), l SMALLINT OUTPUT LEFT MARGIN 0 FORMAT PAGE HEADER LET negrillas_on = ASCII 027, ASCII 098 LET negrillas_off = ASCII 027, ASCII 099 LET normal = ASCII 029 LET doce = ASCII 30 LET comp_on = ASCII 31 SELECT a.descrip INTO nombre_mes FROM mestable a WHERE a.mes = p_mes PRINT COLUMN 1, comp_on,negrillas_on,"cgprrp030", COLUMN 90, "R A Y .O. V A C D O M I N I C A N A, S. A.", COLUMN 200, "PAGINA: ",PAGENO USING "###" PRINT COLUMN 1, "JFS", COLUMN 90, "ANALISIS BENEFICIO POR VENDEDOR Y COMPANIA", COLUMN 197,TODAY USING "DD/MM/YY" PRINT COLUMN 90, "CORRESPONDIENTE AL PERIODO ENERO - ",nombre_mes clipped, "/",p_ano using "####", COLUMN 197, TIME PRINT "----------------------------------------------------------------------------", "---------------------------------------------------------------------------------------------------------------------------------------------" LET l = 40 FOR idx =1 TO p_mes LET l = l + 14 END FOR PRINT COLUMN l," TOTAL", COLUMN l+14, " TOTAL" LET l = 40 FOR idx =1 TO p_mes SELECT a.descrip INTO nombre_mes FROM mestable a WHERE a.mes = idx PRINT COLUMN l, nombre_mes clipped; LET l = l + 14 END FOR PRINT COLUMN l," ACTUAL", COLUMN l+14, "ANTERIOR" PRINT "----------------------------------------------------------------------------", "---------------------------------------------------------------------------------------------------------------------------------------------",negrillas_off BEFORE GROUP OF x.sec_vend PRINT COLUMN 1,negrillas_on,"VENDEDOR: ","(",x.sec_vend using "<<<<",")", x.nombre clipped," ",x.apellido,negrillas_off SKIP 1 LINE BEFORE GROUP OF x.cod_cia SKIP 1 LINE IF x.cod_cia = "1" THEN PRINT COLUMN 1, "PRODUCTOS LOCALES" ELSE PRINT COLUMN 1, "PRODUCTOS IMPORTADOS" END IF LET t_costo = 0 LET t_bruto = 0 LET t_descuento = 0 LET t_neto = 0 LET t_comision = 0 LET t_salario = 0 LET t_beneficio_b = 0 LET t_beneficio_n = 0 LET t_regalia = 0 LET t_costo_v = 0 LET tt_total_g = 0 LET t_total_g = 0 LET tt_costo_v = 0 FOR idx = 1 TO 12 LET total_g[idx] = 0 LET bruto[idx] = 0 LET neto[idx] = 0 LET comision[idx] = 0 LET costo_v[idx] = 0 LET beneficio_b[idx] = 0 LET salario[idx] = 0 END FOR # BUSCA E IMPRIME LAS VENTAS BRUTAS DISPLAY "BUSCANDO VENTAS BRUTAS" AT 17,19 PRINT COLUMN 9, "Ventas Brutas"; LET l = 40 FOR idx = 1 TO p_mes SELECT SUM(a.sub_total) INTO x.bruto FROM vetb00002 a,prdtable b WHERE (a.factura=a.factura AND a.cod_cia=x.cod_cia AND a.ventas = "1" AND a.sec_vend = x.sec_vend AND a.fecha_factura between b.fecha_inicio AND b.fecha_corte AND a.status_t IS NULL AND a.sec_cliente = a.sec_cliente) AND b.mes = idx AND b.ano = p_ano IF x.bruto IS NULL THEN LET x.bruto = 0 END IF LET bruto[idx] = x.bruto LET t_bruto = t_bruto + bruto[idx] PRINT COLUMN l,x.bruto USING "##,###,###"; LET l = l + 14 END FOR PRINT COLUMN l, t_bruto USING "##,###,###"; DISPLAY " " AT 17,19 DISPLAY "BUSCANDO VENTAS BRUTAS DEL ANO ANTERIOR" AT 17,19 # Busca Ventas Brutas Del Ano Anterior SELECT MIN(fecha_inicio) INTO fecha1 FROM prdtable WHERE ano = p_ano -1 SELECT fecha_corte INTO fecha2 FROM prdtable WHERE ano = p_ano -1 and mes = p_mes SELECT SUM(a.sub_total) INTO tt_bruto FROM vetb00002 a WHERE (a.factura=a.factura AND a.cod_cia=x.cod_cia AND a.ventas = "1" AND a.sec_vend = x.sec_vend AND a.fecha_factura between fecha1 AND fecha2 AND a.status_t IS NULL AND a.sec_cliente = a.sec_cliente) PRINT COLUMN l+14, tt_bruto USING "##,###,###" #----------------------------------------------------------------------- # BUSCA E IMPRIME EL DESCUENTO DISPLAY " " AT 17,19 DISPLAY "BUSCANDO DESCUENTO" AT 17,19 PRINT COLUMN 9, "MENOS:Descuentos S/Ventas"; LET l = 40 FOR idx = 1 TO p_mes SELECT SUM(a.monto_desc) INTO x.descuento FROM vetb00002 a,prdtable b WHERE (a.factura=a.factura AND a.cod_cia=x.cod_cia AND a.ventas = "1" AND a.sec_vend = x.sec_vend AND a.fecha_factura between b.fecha_inicio AND b.fecha_corte AND a.status_t IS NULL AND a.sec_cliente = a.sec_cliente) AND b.mes = idx AND b.ano = p_ano IF x.descuento IS NULL THEN LET x.descuento = 0 END IF LET descuento[idx] = x.descuento LET t_descuento = t_descuento + descuento[idx] PRINT COLUMN l,x.descuento USING "##,###,###"; LET l = l + 14 END FOR PRINT COLUMN l, t_descuento USING "##,###,###"; SELECT SUM(a.monto_desc) INTO tt_descuento FROM vetb00002 a WHERE (a.factura=a.factura AND a.cod_cia=x.cod_cia AND a.ventas = "1" AND a.sec_vend = x.sec_vend AND a.fecha_factura between fecha1 AND fecha2 AND a.status_t IS NULL AND a.sec_cliente = a.sec_cliente) PRINT COLUMN l+14, tt_descuento USING "##,###,###" #--------------------------------------------------------------------------- # BUSCA E IMPRIME LAS VENTAS NETAS SKIP 1 LINE PRINT COLUMN 9, "Ventas Netas"; LET l = 40 FOR idx = 1 TO p_mes LET x.neto = bruto[idx] - descuento[idx] LET neto[idx] = x.neto LET t_neto = t_neto + neto[idx] PRINT COLUMN l,x.neto USING "##,###,###"; LET l = l + 14 END FOR LET tt_neto = tt_bruto - tt_descuento PRINT COLUMN l, t_neto USING "##,###,###", COLUMN l+14, tt_neto USING "##,###,###" #--------------------------------------------------------------------------- # BUSCA EL COSTO DE VENTA DISPLAY "BUSCANDO COSTO DE VENTA" AT 17,19 PRINT COLUMN 9, "MENOS:Costo De Venta"; LET l = 40 FOR idx = 1 TO p_mes LET t_costo = 0 DECLARE busca_cos CURSOR FOR SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec, SUM(b.cantidad) FROM vetb00002 a,vetb00003 b,prdtable c WHERE (a.factura = b.factura AND a.cod_cia = x.cod_cia AND a.ventas = "1" AND a.sec_vend = x.sec_vend AND a.fecha_factura BETWEEN c.fecha_inicio AND c.fecha_corte AND a.status_t IS NULL and a.sec_cliente = a.sec_cliente) and c.mes = idx and c.ano = p_ano GROUP BY 1,2,3,4 ORDER BY 1,2,3,4 FOREACH busca_cos INTO cost_vta.* LET x.costo_venta = 0 IF cost_vta.cod_n = 3 THEN SELECT a.costo_lq INTO x.costo_venta FROM cttb00036 a,prdtable b WHERE (a.fecha_lq BETWEEN b.fecha_inicio AND b.fecha_corte AND a.ventas = "1" AND a.cod_n = cost_vta.cod_n AND a.cod_grupo = cost_vta.cod_grupo AND a.cod_tipo = cost_vta.cod_tipo AND a.cod_sec = cost_vta.cod_sec) AND b.mes = idx AND b.ano = p_ano ELSE SELECT a.labor+a.material+a.gasto_ind INTO x.costo_venta FROM iptb00004 a WHERE a.mes_fin = 12 AND a.ano = 1996 AND a.cod_n = cost_vta.cod_n AND a.cod_grupo = cost_vta.cod_grupo AND a.cod_tipo = cost_vta.cod_tipo AND a.cod_sec = cost_vta.cod_sec END IF IF x.costo_venta IS NULL THEN LET x.costo_venta = 0 END IF { PRINT cost_vta.cod_n using "&"," ",cost_vta.cod_grupo using "&"," ", cost_vta.cod_tipo using "&&"," ",cost_vta.cod_sec using "&&&"," ", cost_vta.cantidad using "##,###,###"," ",x.costo_venta using "###.###" } LET t_costo = t_costo + (cost_vta.cantidad*x.costo_venta) END FOREACH LET costo_v[idx]= t_costo LET t_costo_v = t_costo_v + costo_v[idx] PRINT COLUMN l, t_costo USING "##,###,###"; LET l = l + 14 END FOR PRINT COLUMN l, t_costo_v USING "##,###,###"; DISPLAY " " AT 17,19 DISPLAY "BUSCANDO EL COSTO DE VENTAS DEL ANO ANTERIOR " AT 17,19 # BUSCA EL COSTO DE VENTAS DEL ANO ANTERIOR FOR idx = 1 TO p_mes DECLARE busca_acos CURSOR FOR SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec, SUM(b.cantidad) FROM vetb00002 a,vetb00003 b,prdtable c WHERE (a.factura = b.factura AND a.cod_cia = x.cod_cia AND a.ventas = "1" AND a.sec_vend = x.sec_vend AND a.fecha_factura BETWEEN c.fecha_inicio AND c.fecha_corte AND a.status_t IS NULL and a.sec_cliente = a.sec_cliente) and c.mes = idx and c.ano = p_ano - 1 GROUP BY 1,2,3,4 LET t_costo = 0 FOREACH busca_acos INTO cost_vta.* LET x.costo_venta = 0 IF cost_vta.cod_n = 3 THEN SELECT a.costo_lq INTO x.costo_venta FROM cttb00036 a,prdtable b WHERE (a.fecha_lq BETWEEN b.fecha_inicio AND b.fecha_corte AND a.ventas = "1" AND a.cod_n = cost_vta.cod_n AND a.cod_grupo = cost_vta.cod_grupo AND a.cod_tipo = cost_vta.cod_tipo AND a.cod_sec = cost_vta.cod_sec) AND b.mes = idx AND b.ano = p_ano - 1 ELSE SELECT a.labor+a.material+a.gasto_ind INTO x.costo_venta FROM iptb00004 a WHERE a.mes_fin = 12 AND a.ano = p_ano - 1 AND a.cod_n = cost_vta.cod_n AND a.cod_grupo = cost_vta.cod_grupo AND a.cod_tipo = cost_vta.cod_tipo AND a.cod_sec = cost_vta.cod_sec END IF IF x.costo_venta IS NULL THEN LET x.costo_venta = 0 END IF LET t_costo = t_costo + (cost_vta.cantidad*x.costo_venta) END FOREACH LET tt_costo_v = tt_costo_v + t_costo END FOR PRINT COLUMN l+13, tt_costo_v USING "###,###,###" DISPLAY " " AT 17,19 #---------------------------------------------------------------------- # BENEFICIO BRUTO SKIP 1 LINE PRINT COLUMN 9, "Beneficio Bruto"; LET l = 40 FOR idx = 1 TO p_mes LET beneficio_b[idx] = neto[idx] - costo_v[idx] LET t_beneficio_b = t_beneficio_b + beneficio_b[idx] PRINT COLUMN l, beneficio_b[idx] USING "##,###,###"; LET l = l + 14 END FOR LET tt_beneficio_b = tt_neto - tt_costo_v PRINT COLUMN l, t_beneficio_b USING "##,###,###", COLUMN l+14, tt_beneficio_b USING "##,###,###" #---------------------------------------------------------------------- # IMPRIME EL PORCENTAJE VENTAS NETAS PRINT COLUMN 9, "% S/Ventas Netas"; LET l = 40 FOR idx = 1 TO p_mes LET porc_v = 0 IF neto[idx] != 0 THEN LET porc_v = (beneficio_b[idx]/neto[idx]) * 100 END IF PRINT COLUMN l, porc_v USING "##,###,###"; LET l = l + 14 END FOR PRINT COLUMN l+14, (tt_beneficio_b/tt_neto) * 100 USING "##,###,###" { #---------------------------------------------------------------------- # GASTOS DIRECTOS # BUSQUEDA DEL SALARIO DEL VENDEDOR DISPLAY "BUSCANDO SALARIO NORMAL" AT 17,19 SKIP 1 LINE PRINT COLUMN 5,negrillas_on, "GASTOS DIRECTOS",negrillas_off SKIP 1 LINE PRINT COLUMN 9, "Salario Normal"; LET l = 40 FOR idx = 1 TO p_mes SELECT SUM(a.valor) INTO x.salario FROM notb00008 a ,notb00010 b WHERE b.mes = idx AND b.ano = p_ano AND a.num_emp = x.sec_vend AND a.cod_mov = 1 AND a.num_nomi = b.num_nomi AND b.tipo_emp = "Q" IF x.salario IS NULL THEN LET x.salario = 0 END IF LET total_g[idx] = total_g[idx] + x.salario LET t_total_g = t_total_g + total_g[idx] LET salario[idx] = x.salario LET t_salario = t_salario + x.salario PRINT COLUMN l, x.salario USING "##,###,###"; LET l = l + 14 END FOR # Busca el Salario del Ano Anterior SELECT SUM(a.valor) INTO tt_salario FROM notb00016 a ,notb00010 b WHERE b.mes <= p_mes AND b.ano = p_ano -1 AND (a.num_emp = x.sec_vend AND a.cod_mov = 1 AND a.num_nomi = b.num_nomi) AND b.tipo_emp = "Q" IF tt_salario IS NULL THEN LET tt_salario = 0 END IF LET tt_total_g = tt_total_g + tt_salario PRINT COLUMN l,t_salario USING "##,###,###", COLUMN l+14, tt_salario USING "##,###,###" #----------------------------------------------------------------------- # BUSCA LA COMISION PAGADA EN EL MES PARA EL VENDEDOR DISPLAY "BUSCANDO COMISIONES S/VENTAS" AT 17,19 PRINT COLUMN 9, "Comisiones S/Ventas"; LET l = 40 FOR idx = 1 TO p_mes SELECT SUM(a.valor) INTO x.comision FROM notb00008 a ,notb00010 b WHERE b.mes = idx AND b.ano = p_ano AND a.num_emp = x.sec_vend AND a.cod_mov = 40 AND a.num_nomi = b.num_nomi AND b.tipo_emp = "Q" IF x.comision IS NULL THEN LET x.comision = 0 END IF LET total_g[idx] = total_g[idx] + x.comision LET t_total_g = t_total_g + total_g[idx] LET comision[idx] = x.comision LET t_comision = t_comision + x.comision PRINT COLUMN l, x.comision USING "##,###,###"; LET l = l + 14 END FOR SELECT SUM(a.valor) INTO tt_comision FROM notb00016 a ,notb00010 b WHERE b.mes <= p_mes AND b.ano = p_ano - 1 AND (a.num_emp = x.sec_vend AND a.cod_mov = 40 AND a.num_nomi = b.num_nomi) AND b.tipo_emp = "Q" IF tt_comision IS NULL THEN LET tt_comision = 0 END IF LET tt_total_g = tt_total_g + tt_comision PRINT COLUMN l,t_comision USING "##,###,###", COLUMN l+14, tt_comision USING "##,###,###" #----------------------------------------------------------------------- # REGALIA, BONIFICACION PRINT COLUMN 9, "Regalia, Bonifi."; LET l = 40 FOR idx = 1 TO p_mes LET regalia = (salario[idx] + comision[idx]) / p_mes LET bonificacion = (((salario[idx] + comision[idx]) / 23.83) * 60)/p_mes LET total_g[idx] = total_g[idx] + bonificacion + regalia LET t_total_g = t_total_g + total_g[idx] LET t_regalia = t_regalia + regalia + bonificacion PRINT COLUMN l, regalia+bonificacion USING "##,###,###"; LET l = l + 14 END FOR # BUSCA BONIFICACION DEL ANO SELECT a.valor INTO bonificacion FROM notb00016 a ,notb00010 b WHERE b.ano = p_ano AND (a.num_emp = x.sec_vend AND a.cod_mov = 33 AND a.num_nomi = b.num_nomi) AND b.tipo_emp = "Q" # BUSCA REGALIA DEL ANO ANTERIOR SELECT a.valor INTO tt_regalia FROM notb00016 a ,notb00010 b WHERE b.mes = 12 AND b.ano = p_ano - 1 AND (a.num_emp = x.sec_vend AND a.cod_mov = 32 AND a.num_nomi = b.num_nomi) AND b.tipo_emp = "Q" LET tt_total_g = tt_total_g + tt_regalia + bonificacion PRINT COLUMN l, t_regalia USING "##,###,###", COLUMN l+14, bonificacion + tt_regalia USING "##,###,###" #----------------------------------------------------------------------- # ASIGNACION DE VEHICULOS, DEPRECIACION, MANTENIMIENTO, VIAJES Y DIETAS PRINT COLUMN 9, "Asignacion Vehiculo" PRINT COLUMN 9, "Depreciacion Vehiculo" PRINT COLUMN 9, "Mantenimiento Vehiculo" PRINT COLUMN 9, "Viajes y Dietas" #----------------------------------------------------------------------- SKIP 1 LINE PRINT COLUMN 9, "TOTAL GASTOS" ; LET l = 40 FOR idx = 1 TO p_mes PRINT COLUMN l, total_g[idx] USING "##,###,###"; LET l = l + 14 END FOR PRINT COLUMN l,t_total_g USING "##,###,###", COLUMN l+14, tt_total_g USING "##,###,###" PRINT COLUMN 9,"% S/VENTAS NETAS"; LET l = 40 FOR idx = 1 TO p_mes IF neto[idx] != 0 THEN PRINT COLUMN l, (total_g[idx]/neto[idx]) * 100 USING "##,###,###"; END IF LET l = l + 14 END FOR PRINT COLUMN l, (t_total_g/t_neto) * 100 USING "##,###,###", COLUMN l+14, (tt_total_g/tt_neto) * 100 USING "##,###,###" LET l = 40 PRINT COLUMN 9,"% S/VENTAS BRUTAS"; FOR idx = 1 TO p_mes IF bruto[idx] != 0 THEN PRINT COLUMN l, (total_g[idx]/bruto[idx]) * 100 USING "##,###,###"; END IF LET l = l + 14 END FOR PRINT COLUMN l,(t_total_g/t_bruto) * 100 USING "##,###,###", COLUMN l+14, (tt_total_g/tt_bruto) * 100 USING "##,###,###" PRINT "----------------------------------------------------------------------------", "---------------------------------------------------------------------------------------------------------------------------------------------" PRINT COLUMN 9, "BENEFICIO NETO"; LET l = 40 FOR idx = 1 TO p_mes LET t_beneficio_n = t_beneficio_n + (beneficio_b[idx]-total_g[idx]) PRINT COLUMN l, beneficio_b[idx] - total_g[idx] USING "##,###,###"; LET l = l + 14 END FOR PRINT COLUMN l, t_beneficio_n USING "##,###,###", COLUMN l+14, tt_beneficio_b - tt_total_g USING "##,###,###" PRINT COLUMN 9,"% S/VENTAS NETAS"; LET l = 40 FOR idx = 1 TO p_mes IF beneficio_b[idx]-total_g[idx] != 0 THEN PRINT COLUMN l, ((beneficio_b[idx]-total_g[idx]) / neto[idx]) * 100 USING "##,###,###"; END IF LET l = l + 14 END FOR LET tt_beneficio_n = tt_beneficio_b - tt_total_g PRINT COLUMN l, (t_beneficio_n / t_neto) * 100 USING "##,###,###", COLUMN l+14, (tt_beneficio_n / t_neto) *100 USING "##,###,###" PRINT "----------------------------------------------------------------------------", "---------------------------------------------------------------------------------------------------------------------------------------------" } AFTER GROUP OF x.cod_cia PRINT "----------------------------------------------------------------------------", "---------------------------------------------------------------------------------------------------------------------------------------------" AFTER GROUP OF x.sec_vend SKIP TO TOP OF PAGE END REPORT