Files

329 lines
10 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CCPRRP001
OBJETIVO : Clientes sin Ventas en un Rango de dias
PROGRAMADOR : Lic. Abner Montalvo
FECHA REALIZACION : Marzo 26, 1993
-------------------------------------------------------------------------------
}
GLOBALS "ccprgb000.4gl"
DEFINE fecha_corte DATE
DEFINE idx_1, idx_2,idx_b,idx_f SMALLINT
DEFINE dia_minimo, dia_maximo INTEGER
DEFINE selec10 CHAR(500)
DEFINE valor_de DECIMAL(12,2)
DEFINE valor_fact RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
fecha_factura DATE
END RECORD
DEFINE vendcli RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
sec_vend SMALLINT,
factura INTEGER,
fecha DATE,
valor DECIMAL(12,2),
balance DECIMAL(12,2)
END RECORD
DEFINE vendc RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
factura INTEGER,
fecha DATE,
valor DECIMAL(12,2)
END RECORD
DEFINE balance_cliente DECIMAL(10,2)
DEFINE balancli RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
balance DECIMAL(10,2)
END RECORD
DEFINE reg_vend RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
sec_vend SMALLINT,
nombre CHAR(30),
apellido CHAR(30)
END RECORD
FUNCTION ccprrp001()
DEFINE salir2,salir,salir1 CHAR(1)
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ccfmrp001 FROM "ccfmrp001"
DISPLAY FORM ccfmrp001
CALL pantalla()
DISPLAY "ccprrp001" AT 4,3
DISPLAY "Clientes sin Ventas" AT 6,30
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
INPUT BY NAME dia_minimo,dia_maximo,fecha_corte
AFTER FIELD dia_minimo
IF dia_minimo is null OR
dia_minimo = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD dia_minimo
END IF
AFTER FIELD dia_maximo
IF dia_maximo is null OR
dia_maximo = 0 THEN
LET dia_maximo = 365
END IF
IF dia_maximo < dia_minimo THEN
LET numero_msg = 124
CALL msg(numero_msg)
NEXT FIELD dia_maximo
END IF
BEFORE FIELD fecha_corte
LET fecha_corte = today
AFTER FIELD fecha_corte
IF fecha_corte is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_corte
END IF
END INPUT
CONSTRUCT BY NAME criterio ON d.sec_cliente
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET selec10 =
"SELECT d.tipo_cliente,d.sec_cliente,a.nombre,MAX(d.fecha_orig) ",
"FROM cctb00001 d,vetb00004 a ",
"WHERE d.fecha_orig <= ? AND d.tipo_cliente = a.tipo_cliente AND ",
criterio CLIPPED," AND d.status_t IS NULL AND d.sec_cliente= a.sec_cliente ",
" AND d.tipo_doc[1] = 'F' AND a.status_t is null AND ",
criterio clipped, " GROUP BY 1,2,3"
DISPLAY "<< Buscando Factura del Cliente... Espere Por Favor. >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE comando FROM selec10
DECLARE busca CURSOR FOR comando
OPEN busca USING fecha_corte
START REPORT ventas TO "C:\\archivo"
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
LET idx_b = 1
LET salir1 = "N"
WHILE salir1 = "N"
FETCH busca INTO valor_fact.*
IF STATUS = NOTFOUND THEN
LET salir1 = "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 vendcli.tipo_cliente = valor_fact.tipo_cliente
LET vendcli.sec_cliente = valor_fact.sec_cliente
LET vendcli.nombre = valor_fact.nombre
LET vendcli.fecha = valor_fact.fecha_factura
LET vendcli.balance = 0
LET vendcli.valor = 0
IF (fecha_corte - vendcli.fecha) >= dia_minimo AND
(fecha_corte - vendcli.fecha) <= dia_maximo THEN
SELECT MAX(c.num_doc) INTO vendcli.factura FROM cctb00001 c
WHERE c.fecha_orig=vendcli.fecha AND c.tipo_cliente=vendcli.tipo_cliente AND
c.sec_cliente=vendcli.sec_cliente AND c.status_t IS NULL AND
c.tipo_doc[1] = "F"
SELECT c.neto INTO vendcli.valor
FROM vetb00002 c
WHERE c.factura = vendcli.factura
SELECT a.sec_vend INTO vendcli.sec_vend
FROM vetb00028 a
WHERE tipo_cliente = vendcli.tipo_cliente AND
sec_cliente = vendcli.sec_cliente
LET balancli.balance = 0
SELECT sum(a.valor+a.monto_desc) INTO balancli.balance
FROM cctb00001 a
WHERE a.fecha_orig<=fecha_corte AND a.tipo_cliente=vendcli.tipo_cliente AND
a.sec_cliente= vendcli.sec_cliente and a.status_t IS NULL AND
a.tipo_doc NOT IN ("PC","AV")
IF balancli.balance = 0 is null THEN
LET balancli.balance = 0
END IF
LET valor_de = 0
SELECT sum(a.valor+a.monto_desc) INTO valor_de
FROM cctb00001 a
WHERE a.fecha_orig<=fecha_corte AND a.tipo_cliente=vendcli.tipo_cliente AND
a.sec_cliente= vendcli.sec_cliente and a.status_t IS NULL AND
a.tipo_doc = "AV" and a.num_doc = a.aplica_a
IF valor_de is null THEN
LET valor_de = 0
END IF
LET vendcli.balance = balancli.balance - valor_de
OUTPUT TO REPORT ventas(vendcli.*,fecha_corte)
END IF
END WHILE
FINISH REPORT ventas
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
REPORT ventas(x,fecha5)
DEFINE x RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
sec_vend SMALLINT,
factura INTEGER,
fecha DATE,
valor DECIMAL(12,2),
balance DECIMAL(12,2)
END RECORD
DEFINE nombre1,apellido CHAR(30)
DEFINE dias_c INTEGER
DEFINE fecha5 DATE
DEFINE balance, monto_factura DECIMAL(10,2)
DEFINE descrip_zone CHAR(30)
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 fecha_factura DATE
DEFINE total_monto_zona,total_gral_monto_zona,monto DECIMAL(12,2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
ORDER BY x.sec_vend,x.sec_cliente
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
IF total_gral_monto_zona is null THEN
LET total_gral_monto_zona = 0
END IF
LET lj = (96 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT COLUMN 1, doce ,negrillas_on
PRINT COLUMN 1, "ccprrp001",
COLUMN lj, p_companias.nombre,
COLUMN 89, "Pag. ",pageno using "###"
PRINT COLUMN 32, "Sistema de Cuentas por Cobrar",
COLUMN 89, today using "dd/mm/yyyy"
IF dia_maximo != 3650 THEN
PRINT COLUMN 30, "Clientes sin Ventas ",
"de ",dia_minimo using "<<<",
" a ",dia_maximo using "<<<",
" dias",
COLUMN 92, hora
ELSE
PRINT COLUMN 29, "Clientes sin Ventas a mas de ",
dia_minimo using "<<"," dias",
COLUMN 92, hora
END IF
PRINT COLUMN 41, "Al ", fecha5 using "dd/mm/yyyy"
SKIP 1 LINES
PRINT COLUMN 1, "--------------------------------------------------",
"----------------------------------------------"
PRINT COLUMN 44, "|------ULTIMA VENTA------|"
PRINT COLUMN 6, "Cliente",
COLUMN 44, "Factura",
COLUMN 54, "Fecha",
COLUMN 65, "Valor",
COLUMN 74, "No.dias",
COLUMN 86, "Balance"
PRINT COLUMN 1, "--------------------------------------------------",
"----------------------------------------------"
# , negrillas_off
BEFORE GROUP OF x.sec_vend
SKIP 1 LINE
SELECT nom1_emp,apell1_emp INTO nombre1,apellido
FROM adtb00003 WHERE status_t IS NULL AND num_emp = x.sec_vend
LET descrip5 = NULL
LET descrip5 = nombre1 CLIPPED," ",apellido CLIPPED
IF descrip5 IS NULL THEN
LET descrip5 = "Vendedor no Existe. Verifique."
END IF
PRINT COLUMN 1," Vendedor : ",x.sec_vend using "&&&&"," ", descrip5
clipped
ON EVERY ROW
PRINT COLUMN 4, x.tipo_cliente using "&&","-",
COLUMN 7, x.sec_cliente using "&&&&",
COLUMN 12, x.nombre,
COLUMN 44, x.factura using "######",
COLUMN 52, x.fecha using "dd/mm/yyyy",
COLUMN 61, x.valor using "$,$$$,$$$.$$",
COLUMN 73, fecha5 - x.fecha using "###,###",
COLUMN 82, x.balance using "---,---,---.##"
AFTER GROUP OF x.sec_vend
SKIP TO TOP OF PAGE
END REPORT