{ ------------------------------------------------------------------------------- PROGRAMA : CCPRRP040 OBJETIVO : CREAR ARCHIVO DE LOS CLIENTES CON SUS SALDOS PARA SER UTILIZADO EN EL CENTRO DE INFORMACION CREDITICA. PROGRAMADOR : Juan F. Soto FECHA REALIZACION : Junio 23, 1997. ------------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE t_p CHAR(2) DEFINE imp,salir17,salir,tipo_venta CHAR(1) DEFINE fecha_corte DATE DEFINE cod_emp_sec,ck_dev INTEGER DEFINE cliente_ant,idx_1, idx_2 SMALLINT DEFINE selec1 CHAR(1000) DEFINE cheque_dv CHAR(11), pcalle,pcasa,pbarrio,purbanizacion,psecuencia CHAR(20), nom_zona,nom_prov CHAR(20) DEFINE de RECORD aplica_a INTEGER, pendiente DECIMAL(12,2), fecha_factura DATE END RECORD DEFINE devolucion RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), sec_vend SMALLINT, aplica_a INTEGER, pendiente DECIMAL(12,2), fecha_factura DATE, tipo_doc CHAR(2) END RECORD DEFINE doccli16 RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), aplica_a INTEGER, pendiente DECIMAL(12,2), num_rnc LIKE vetb00004.num_rnc, zona_postal LIKE vetb00004.zona_postal, cod_zona LIKE vetb00004.cod_zona, cod_provincia LIKE vetb00004.cod_provincia, limite_credito LIKE vetb00004.limite_credito, fax LIKE vetb00004.fax, telefono LIKE vetb00004.telefono, direccion CHAR(80), fecha_factura DATE, tipo_doc CHAR(2) END RECORD DEFINE doccli16_1 RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, aplica_a INTEGER, fecha_factura DATE, sec_vend SMALLINT, pendiente DECIMAL(12,2), nombre CHAR(30) END RECORD DEFINE dat_c RECORD sec_cliente SMALLINT, nombre CHAR(30) END RECORD DEFINE tot_gen2 RECORD total1 DECIMAL(10,2), total2 DECIMAL(10,2), total3 DECIMAL(10,2), total4 DECIMAL(10,2), total5 DECIMAL(10,2) END RECORD FUNCTION ccprrp040() DEFINE valor_gral DECIMAL(12,2) DEFINE salir16_1,salir16 CHAR(1) # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ccfmrp040 FROM "ccfmrp040" DISPLAY FORM ccfmrp040 CALL pantalla() DISPLAY "ccprrp040" AT 4,3 DISPLAY "Partidas Pendientes de Cobro Por Vendedor" AT 6,18 LET tipo_papel = 1 CALL msgrp000(tipo_papel) ###### Captura de los valores que intervendran en la condicion de busqueda. INPUT BY NAME tipo_venta,fecha_corte AFTER FIELD tipo_venta IF tipo_venta is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_venta END IF IF tipo_venta = "1" OR tipo_venta = "2" THEN DISPLAY BY NAME tipo_venta ELSE LET numero_msg = 7 CALL msg(numero_msg) NEXT FIELD tipo_venta 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 ##### Creando la facilidad para poder cancelar el proceso mediante la tecla ##### DELETE o SUPR. IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF ##### Crea criterio de busqueda ##### Variables que intervienen en la condicion de busqueda, teniendo estas ##### la ventaja de que se pueden dejar en blanco en caso de que desee todos ##### los registro con ese campo. CONSTRUCT criterio ON a.tipo_cliente,a.sec_cliente FROM tipo_cliente,sec_cliente IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF # Busca pendiente de las facturas cuyas fechas de vencimiento son menores # a la fecha de corte LET selec3 = "SELECT a.tipo_cliente,a.sec_cliente,b.nombre, ", " a.aplica_a,SUM(a.valor + a.monto_desc),b.num_rnc,b.zona_postal, ", " b.cod_zona,b.cod_provincia,b.limite_credito,b.fax,b.telefono ", "FROM cctb00001 a,vetb00004 b,vetb00028 c ", "WHERE (a.fecha_orig <= ? AND a.tipo_cliente = 12 AND ",criterio CLIPPED, " AND a.sec_cliente = b.sec_cliente AND a.sec_cliente = c.sec_cliente AND ", " a.sec_cliente < 9000 AND a.status_t is null AND ", " a.tipo_doc != 'PC') AND ", " a.num_doc IS NOT NULL ", " AND a.status_t IS NULL AND c.status_t IS NULL ", "GROUP BY 1,2,3,4,6,7,8,9,10,11,12 " DISPLAY " " AT 19,14 DISPLAY "<< Informacion Generandose... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) PREPARE busca_pendiente FROM selec3 DECLARE ft_pendiente CURSOR FOR busca_pendiente OPEN ft_pendiente USING fecha_corte # Creacion Tabla Temporal CREATE TABLE informa1 ( fecha DATE, nombre CHAR(10), codigo CHAR(7), rnc CHAR(10), zona_p CHAR(10), direc CHAR(80), barrio CHAR(20), ciudad CHAR(20), telefono CHAR(8), limite DECIMAL(12,2), t1a30 DECIMAL(12,2), t45a60 DECIMAL(12,2), t90 DECIMAL(12,2), t120 DECIMAL(12,2), t149 DECIMAL(12,2), t180 DECIMAL(12,2) ) LET salir16 = "N" WHILE salir16 != "S" FETCH ft_pendiente INTO doccli16.* IF status = NOTFOUND THEN LET salir16 = "S" EXIT WHILE END IF IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF SELECT UNIQUE a.tipo_doc,a.fecha_orig INTO doccli16.tipo_doc,doccli16.fecha_factura FROM cctb00001 a WHERE a.tipo_cliente = a.tipo_cliente AND a.sec_cliente = doccli16.sec_cliente AND a.num_doc = doccli16.aplica_a AND a.num_doc = a.aplica_a AND a.tipo_doc not in ("PG","NC","PC") AND a.aplica_a = a.aplica_a IF doccli16.tipo_doc = "AV" THEN SELECT SUM(a.valor+a.monto_desc)*-1 INTO doccli16.pendiente FROM cctb00001 a WHERE (a.fecha_orig <= fecha_corte AND a.tipo_cliente = doccli16.tipo_cliente AND a.sec_cliente = doccli16.sec_cliente AND a.status_t IS NULL AND a.tipo_doc = "AV") AND a.num_doc = doccli16.aplica_a END IF # Busca La Direccion Del Clinte LET doccli16.direccion = NULL LET pcalle = NULL LET pcasa = NULL LET pbarrio= NULL LET purbanizacion= NULL SELECT a.calle,a.casa_num,a.barrio,a.urbanizacion,a.secuencia_visita INTO pcalle,pcasa,pbarrio,purbanizacion,psecuencia FROM vetb00005 a WHERE a.tipo_cliente = doccli16.tipo_cliente AND a.sec_cliente = doccli16.sec_cliente LET doccli16.direccion = pcalle CLIPPED," ",pcasa CLIPPED," ",pbarrio # Busca La Ciudad SELECT a.descrip INTO nom_zona FROM vetb00008 a WHERE a.cod_zona = doccli16.cod_zona SELECT a.nombre_provincia INTO nom_prov FROM vetb00020 a WHERE a.cod_provincia = doccli16.cod_provincia OUTPUT TO REPORT reporte40(doccli16.*,tipo_venta,fecha_corte, valor_gral) END WHILE FINISH REPORT reporte40 UNLOAD TO "clinte.inf" SELECT *FROM informa DISPLAY BY NAME tot_gen2.* CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION ###### Funcion que genera el reporte REPORT reporte40(x,venta,corte,valor_gral1) DEFINE x RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), aplica_a INTEGER, pendiente DECIMAL(12,2), num_rnc LIKE vetb00004.num_rnc, zona_postal LIKE vetb00004.zona_postal, cod_zona LIKE vetb00004.cod_zona, cod_provincia LIKE vetb00004.cod_provincia, limite_credito LIKE vetb00004.limite_credito, fax LIKE vetb00004.fax, telefono LIKE vetb00004.telefono, direccion CHAR(80), fecha_factura DATE, tipo_doc CHAR(2) END RECORD DEFINE venta CHAR(1), corte DATE, dif INTEGER DEFINE valor_gral1 DECIMAL(12,2) DEFINE nom1,apell1 CHAR(25) DEFINE fecha_factura DATE DEFINE de1a30, de31a45, de46a60, masde60, total_saldo DECIMAL(12,2) DEFINE t30, t45, t60, tsaldo , t90, t120, t149, t180 DECIMAL(12,2) DEFINE ttt30, ttt45, ttt60, tttm60, tttsaldo DECIMAL(12,2), codigo CHAR(7), dias INTEGER OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 0 FORMAT BEFORE GROUP OF x.sec_cliente LET t30 = 0 LET t60 = 0 LET t90 = 0 LET t120 = 0 LET t149 = 0 LET t180 = 0 LET existe = "N" LET descrip1 = NULL ON EVERY ROW LET ck_dev = null SELECT MAX(a.valor_cheque) INTO ck_dev FROM cctb00001 a WHERE a.sec_cliente = x.sec_cliente AND a.aplica_a = x.aplica_a AND a.tipo_doc = "ND" IF ck_dev IS NOT NULL OR ck_dev <> 0 THEN LET cheque_dv = "CD-",ck_dev USING "<<<<<<" ELSE LET cheque_dv = NULL END IF IF x.fecha_factura IS NULL THEN LET x.fecha_factura = 0 END IF #### Calcula la diferencia de dias de pago a determinada factura para acu- #### mularlo en la variable correspondiente por tipo de dia. LET dias = corte - x.fecha_factura #### Imprime y acumula los valores correspondientes a pago realizados en #### menos de 31 dias. IF dias >= 0 AND dias < 31 AND x.pendiente <> 0 THEN LET t30 = t30 + x.pendiente END IF #### Imprime y acumula los valores correspondientes a pago realizados en #### mas de 30 y menos de 45 dias. IF dias >= 31 AND dias < 61 AND x.pendiente <> 0 THEN LET t60 = t60 + x.pendiente END IF #### Imprime y acumula los valores correspondientes a pago realizados en #### mas de 60 menor a 90 dias. IF dias >= 61 AND dias < 90 AND x.pendiente <> 0 THEN LET t90 = t90 + x.pendiente END IF #### Imprime y acumula los valores correspondientes a pago realizados en #### mas de 90 menor a 120 dias. IF dias >= 90 AND dias < 120 AND x.pendiente <> 0 THEN LET t120 = t120 + x.pendiente END IF #### Imprime y acumula los valores correspondientes a pago realizados en #### mas de 120 menor a 150 dias. IF dias >= 120 AND dias < 150 AND x.pendiente <> 0 THEN LET t149 = t149 + x.pendiente END IF #### Imprime y acumula los valores correspondientes a pago realizados en #### mas de 150 menor a 180 dias. IF dias >= 150 AND dias < 180 AND x.pendiente <> 0 THEN LET t180 = t180 + x.pendiente END IF IF x.pendiente != 0 THEN LET existe = "S" END IF AFTER GROUP OF x.sec_cliente ######## IMPRIME totales acumulado por cliente. IF existe IS NOT NULL AND existe = "S" THEN LET codigo = x.tipo_cliente USING "##","-",x.sec_cliente USING "&&&&" INSERT INTO informa1 VALUES(corte,x.nombre,codigo,x.num_rnc, x.zona_postal,x.direccion, pbarrio,nom_prov,x.telefono, x.limite_credito,t30,t60,t90, t120,t149,t180) LET t30 = 0 LET t60 = 0 LET t90 = 0 LET t120 = 0 LET t149 = 0 LET t180 = 0 END IF END REPORT