Files
MBS/PROYECTO/vedir/veprrp037.4gl
T

407 lines
15 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : VEPRRP037
OBJETIVO : Estado de Ganancias y Perdidas por Cliente y Pila
PROGRAMADOR : Abner Montalvo
FECHA REALIZACION : Junio 2, 1997
-------------------------------------------------------------------------------
}
GLOBALS "veprgb000.4gl"
DEFINE secuencia,cia,mes_ini,mes_fin,ano_ini,ano_fin SMALLINT
DEFINE salir,salir2 CHAR(1)
DEFINE tipo CHAR(2)
DEFINE sec CHAR(4)
DEFINE fecha, fecha_corte_mes DATE
DEFINE valor_inicial DECIMAL(12,2)
FUNCTION veprrp037()
DEFINE clientes RECORD
tipo_cliente SMALLINT,
sec_cliente INTEGER,
cantidad INTEGER,
valor DECIMAL(12,2),
cliente CHAR(10)
END RECORD
DEFINE factura RECORD
tipo_cliente SMALLINT,
sec_cliente INTEGER,
nombre CHAR(30),
nomenclatura CHAR(10),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
cantidad INTEGER,
precio DECIMAL(12,2),
porc_desc DECIMAL(8,2),
descripcion CHAR(30),
cia SMALLINT,
mes_factura SMALLINT,
costo_lq DECIMAL(12,4),
cliente CHAR(10)
END RECORD
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM vefmrp037 FROM "vefmrp037"
DISPLAY FORM vefmrp037
CALL pantalla()
DISPLAY "veprrp037" AT 4,3
DISPLAY "Resumen Estado de Ganancias y Perdidas por Cliente y Pila" AT 6,11
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
LET secuencia = 0
INPUT BY NAME ano_ini,mes_ini,mes_fin,valor_inicial
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET numero_msg = FALSE
RETURN
END IF
# Busca Los Movimientos de las Facturas con su factura
# CONSTRUCT criterio ON a.tipo_cliente,a.sec_cliente
# FROM tipo_cliente1,sec_cliente1
# IF int_flag THEN
# LET numero_msg = 2
# CALL msg(numero_msg)
# LET numero_msg = FALSE
# RETURN
# END IF
LET selec3 =
"SELECT a.tipo_cliente,a.sec_cliente, ",
" SUM(c.cantidad),SUM(c.cantidad * c.precio) ",
"FROM vetb00002 a, vetb00003 c ",
"WHERE a.factura = c.factura AND ",
" a.cod_cia = c.cod_cia AND ",
" a.ventas = '1' AND ",
" a.status_t IS NULL AND ",
" a.fecha_factura IS NOT NULL AND ",
" MONTH(a.fecha_factura) BETWEEN ? AND ? AND ",
" YEAR(a.fecha_factura) = ? AND ",
" a.tipo_cliente IS NOT NULL AND ",
" a.sec_cliente IS NOT NULL ",
# criterio CLIPPED,
" GROUP BY 1,2 ",
" HAVING SUM(c.cantidad * c.precio) >= ? ",
" ORDER BY 4 DESC "
LET selec =
"SELECT a.tipo_cliente,a.sec_cliente,b.nombre,' ', ",
" c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,SUM(c.cantidad), ",
" c.precio,a.porc_desc,d.descrip_esp,c.cod_cia, ",
" MONTH(a.fecha_factura) ",
"FROM iptb00002 d, vetb00002 a, vetb00003 c, OUTER vetb00004 b ",
"WHERE a.sec_cliente = b.sec_cliente AND ",
" a.factura = c.factura AND ",
" a.cod_cia = c.cod_cia AND ",
" a.ventas = '1' AND ",
" a.status_t IS NULL AND ",
" a.fecha_factura IS NOT NULL AND ",
" MONTH(a.fecha_factura) BETWEEN ? AND ? AND ",
" YEAR(a.fecha_factura) = ? AND ",
" a.sec_cliente IS NOT NULL AND ",
" b.sec_cliente IS NOT NULL AND ",
" a.tipo_cliente = b.tipo_cliente 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 ",
# criterio CLIPPED,
" GROUP BY 1,2,3,4,5,6,7,8,10,11,12,13,14 ",
" ORDER BY 13,1,2 "
# " ORDER BY 1,2,13,5,6,7,8 "
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE busca_clientes FROM selec3
DECLARE clientes_curs CURSOR FOR busca_clientes
OPEN clientes_curs USING mes_ini,mes_fin,ano_ini,valor_inicial
PREPARE busca_movi FROM selec
DECLARE movi_curs SCROLL CURSOR FOR busca_movi
OPEN movi_curs USING mes_ini,mes_fin,ano_ini
START REPORT reporte_37 TO "C:\\archivo"
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
LET salir = "N"
LET salir2 = "N"
WHILE salir != "S"
FETCH clientes_curs INTO clientes.*
IF STATUS = NOTFOUND THEN
LET salir = "S"
LET salir2 = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET tipo = clientes.tipo_cliente USING "&&"
LET sec = clientes.sec_cliente USING "&&&&"
LET clientes.cliente = tipo,sec
LET idx = 1
LET salir2 = "N"
WHILE salir2 != "S"
FETCH ABSOLUTE idx movi_curs INTO factura.*
IF STATUS = NOTFOUND THEN
LET salir2 = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET tipo = factura.tipo_cliente USING "&&"
LET sec = factura.sec_cliente USING "&&&&"
LET factura.cliente = tipo,sec
IF clientes.cliente = factura.cliente THEN
SELECT fecha_corte INTO fecha_corte_mes
FROM prdtable
WHERE ano = ano_ini AND
mes = factura.mes_factura
IF factura.cia = 01 THEN
SELECT MAX(fecha_lq) INTO fecha FROM cttb00036
WHERE fecha_lq <= fecha_corte_mes and
cod_n = factura.cod_n AND
cod_grupo = factura.cod_grupo AND
cod_tipo = factura.cod_tipo AND
cod_sec = factura.cod_sec AND
status_t IS NULL
ELSE
SELECT MAX(fecha_lq) INTO fecha FROM cttb00013
WHERE fecha_lq <= fecha_corte_mes and
cod_n = factura.cod_n AND
cod_grupo = factura.cod_grupo AND
cod_tipo = factura.cod_tipo AND
cod_sec = factura.cod_sec AND
status_t IS NULL
END IF
IF factura.cia = 01 THEN
SELECT AVG(costo_lq) INTO factura.costo_lq FROM cttb00036
WHERE cod_n = factura.cod_n AND
cod_grupo = factura.cod_grupo AND
cod_tipo = factura.cod_tipo AND
cod_sec = factura.cod_sec AND
fecha_lq = fecha AND
status_t IS NULL
ELSE
SELECT AVG(costo_lq) INTO factura.costo_lq FROM cttb00013
WHERE cod_n = factura.cod_n AND
cod_grupo = factura.cod_grupo AND
cod_tipo = factura.cod_tipo AND
cod_sec = factura.cod_sec AND
fecha_lq = fecha AND
status_t IS NULL
END IF
OUTPUT TO REPORT reporte_37(factura.*)
END IF
LET idx = idx + 1
END WHILE
END WHILE
FINISH REPORT reporte_37
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
REPORT reporte_37(x)
DEFINE x RECORD
tipo_cliente SMALLINT,
sec_cliente INTEGER,
nombre CHAR(30),
nomenclatura CHAR(10),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
cantidad INTEGER,
precio DECIMAL(12,2),
porc_desc DECIMAL(8,2),
descripcion CHAR(30),
cia SMALLINT,
mes_factura SMALLINT,
costo_lq DECIMAL(12,4),
cliente CHAR(10)
END RECORD
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)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
# ORDER BY x.cliente, x.valor_bruto, x.cia
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 18
LET lj = (180 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT comp_on,negrillas_on
PRINT COLUMN 1, "veprrp037",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 173, "Pag. ",pageno using "###"
PRINT COLUMN 83, " Sistema de Ventas ",
COLUMN 173, today using "dd/mm/yy"
PRINT COLUMN 77, "Resumen Estado de Ganancias y Perdidas por Cliente y Pila",
COLUMN 173, time
SKIP 1 LINES
PRINT COLUMN 1, "Ventas Brutas desde RD$",
valor_inicial USING "<<<,<<<,<##.##",
COLUMN 87, "RANKING DEL MES : ",
mes_ini using "&&",
"/",ano_ini using "&&&&",
" AL ",
mes_fin using "&&",
"/",ano_ini using "&&&&"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"--------------------------------------------------",
"--------------------------------------"
PRINT COLUMN 1, " ",
COLUMN 56, " ",
COLUMN 71, " ",
COLUMN 88, " Monto",
COLUMN 100, " ",
COLUMN 117, " Monto",
COLUMN 134, " Monto",
COLUMN 151, " ",
COLUMN 165, " Monto ",
COLUMN 182, "Gananc."
PRINT COLUMN 1, "Tipo de Producto",
COLUMN 56, "Cantidad",
COLUMN 71, " ",
COLUMN 88, " Bruto",
COLUMN 100, " ",
COLUMN 117, " Desc.",
COLUMN 134, " Neto",
COLUMN 151, " ",
COLUMN 165, " Costo ",
COLUMN 182, "Perdida"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"--------------------------------------------------",
"--------------------------------------"
PRINT negrillas_off
BEFORE GROUP OF x.cliente
LET secuencia = secuencia + 1
PRINT COLUMN 1, negrillas_on, secuencia using "<<<<"," ",
x.tipo_cliente USING "&&","-",
x.sec_cliente USING "&&&&"," ",x.nombre CLIPPED,
negrillas_off
SKIP 1 LINE
AFTER GROUP OF x.cia
IF x.cia = 1 THEN
PRINT COLUMN 1, " ",x.cia USING "&&"," Productos Locales";
ELSE
PRINT COLUMN 1, " ",x.cia USING "&&"," Productos de Compra y Venta";
END IF
PRINT COLUMN 50, GROUP SUM(x.cantidad) USING "###,###,###.##",
COLUMN 81, GROUP SUM(x.cantidad * x.precio) USING "###,###,###.##",
COLUMN 110, GROUP SUM(x.cantidad * x.precio * x.porc_desc / 100)
USING "###,###,###.##",
COLUMN 126, GROUP SUM((x.cantidad * x.precio) -
(x.cantidad * x.precio * x.porc_desc / 100))
USING "###,###,###.##",
COLUMN 159, GROUP SUM(x.cantidad * x.costo_lq) USING "###,###,###.##",
COLUMN 175, GROUP SUM(((x.cantidad * x.precio) -
(x.cantidad * x.precio * x.porc_desc / 100)) -
(x.cantidad * x.costo_lq)) USING "(((,(((,(((.##)"
AFTER GROUP OF x.cliente
SKIP 1 LINE
PRINT COLUMN 1, negrillas_on,
COLUMN 6, "SUB-TOTAL ",x.tipo_cliente using "&&","-",
x.sec_cliente using "&&&&"," ",
x.nombre CLIPPED,
COLUMN 52, GROUP SUM(x.cantidad) USING "###,###,###.##",
COLUMN 83, GROUP SUM(x.cantidad * x.precio) USING "###,###,###.##",
COLUMN 112, GROUP SUM(x.cantidad * x.precio * x.porc_desc / 100)
USING "###,###,###.##",
COLUMN 128, GROUP SUM((x.cantidad * x.precio) -
(x.cantidad * x.precio * x.porc_desc / 100))
USING "###,###,###.##",
COLUMN 161, GROUP SUM(x.cantidad * x.costo_lq) USING "###,###,###.##",
COLUMN 177, GROUP SUM(((x.cantidad * x.precio) -
(x.cantidad * x.precio * x.porc_desc / 100)) -
(x.cantidad * x.costo_lq))
USING "(((,(((,(((.##)",
negrillas_off
SKIP 1 LINE
ON LAST ROW
SKIP 1 LINE
PRINT COLUMN 1, negrillas_on,
"TOTAL GENERAL",
COLUMN 52, SUM(x.cantidad) USING "###,###,###.##",
COLUMN 83, SUM(x.cantidad * x.precio) USING "###,###,###.##",
COLUMN 112, SUM(x.cantidad * x.precio * x.porc_desc / 100)
USING "###,###,###.##",
COLUMN 128, SUM((x.cantidad * x.precio) -
(x.cantidad * x.precio * x.porc_desc / 100))
USING "###,###,###.##",
COLUMN 161, SUM(x.cantidad * x.costo_lq) USING "###,###,###.##",
COLUMN 177, SUM(((x.cantidad * x.precio) -
(x.cantidad * x.precio * x.porc_desc / 100)) -
(x.cantidad * x.costo_lq))
USING "(((,(((,(((.##)",
negrillas_off
PRINT normal
END REPORT