{ ------------------------------------------------------------------------------- PROGRAMA : CCPRRP004 OBJETIVO : Cuentas por Cobrar a mas de x dias X Vendedor PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Abril 6, 1993 ------------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE nom_ven, ape_ven CHAR(15) DEFINE t_p CHAR(2) DEFINE imp,salir17,salir,tipo_venta CHAR(1) DEFINE fecha_corte DATE DEFINE ck_dev,dia1 INTEGER DEFINE num_ven,cliente_ant,idx_1, idx_2 SMALLINT DEFINE selec1 CHAR(1000) DEFINE cheque_dv CHAR(11) 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), 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 total DECIMAL(10,2), total1 DECIMAL(10,2), total2 DECIMAL(10,2), total3 DECIMAL(10,2), total4 DECIMAL(10,2), total5 DECIMAL(10,2) END RECORD FUNCTION ccprrp004() 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 ccfmrp016 FROM "ccfmrp016" # DISPLAY FORM ccfmrp004 DISPLAY FORM ccfmrp016 CALL pantalla() DISPLAY "ccprrp016" 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,dia1 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 AFTER FIELD dia1 IF dia1 is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD dia1 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 IF tipo_venta = "2" THEN LET selec3 = "SELECT a.tipo_cliente,a.sec_cliente,b.nombre,a.aplica_a, ", " SUM(a.valor+a.monto_desc) ", "FROM cctb00001 a,vetb00004 b ", "WHERE a.fecha_orig <= ? AND ",criterio CLIPPED, " AND a.sec_cliente = b.sec_cliente AND ", " a.sec_cliente >= 9000 AND a.tipo_doc != 'PC' AND a.num_doc IS NOT NULL ", " AND a.status_t IS NULL ", "GROUP BY 1,2,3,4 HAVING SUM(a.valor + a.monto_desc) <> 0 " ELSE LET selec3 = "SELECT a.tipo_cliente,a.sec_cliente,b.nombre, ", " a.aplica_a,SUM(a.valor + a.monto_desc) ", "FROM cctb00001 a,vetb00004 b,vetb00028 c ", "WHERE a.fecha_orig <= ? AND ",criterio CLIPPED, " AND a.sec_cliente = b.sec_cliente AND a.sec_cliente = c.sec_cliente AND ", " a.sec_cliente < 9000 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 HAVING SUM(a.valor + a.monto_desc) <> 0 " END IF DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca_pendiente FROM selec3 DECLARE ft_pendiente CURSOR FOR busca_pendiente OPEN ft_pendiente USING fecha_corte START REPORT reporte04 TO "rpcc04" DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) 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 #DISPLAY " " AT 14,5 SELECT UNIQUE a.tipo_doc,a.fecha_ven INTO doccli16.tipo_doc,doccli16.fecha_factura FROM cctb00001 a WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND a.num_doc = doccli16.aplica_a AND a.tipo_doc not in ("PG","NC","PC") and a.sec_cliente = doccli16.sec_cliente 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 IF doccli16.pendiente <> 0 THEN OUTPUT TO REPORT reporte04(doccli16.*,tipo_venta,fecha_corte,dia1, valor_gral) END IF END WHILE FINISH REPORT reporte04 DISPLAY BY NAME tot_gen2.* PROMPT "Desea Imprimir Reporte [S/N].....?" FOR CHAR opt LET opt = UPSHIFT(opt) IF opt = "S" THEN RUN"cat rpcc04|lp $DBPRINT" END IF CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION ###### Funcion que genera el reporte REPORT reporte04(x,venta,corte,dia2,valor_gral1) DEFINE x RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), aplica_a INTEGER, pendiente DECIMAL(12,2), fecha_factura DATE, tipo_doc CHAR(2) END RECORD DEFINE venta CHAR(1), corte DATE, dia2 INTEGER, dif INTEGER DEFINE valor_gral1 DECIMAL(12,2) DEFINE nom1,apell1 CHAR(25) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(6) DEFINE negrillas_off CHAR(6) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(2) DEFINE comprimido CHAR(3) DEFINE doce CHAR(2) DEFINE normal CHAR(2) DEFINE normall CHAR(3) DEFINE hora CHAR(5) DEFINE fecha_factura DATE #DEFINE de1a30, de31a60, de46a60, masde60, total_saldo DECIMAL(12,2) DEFINE tco,t30, t60, t90, tm90, tsaldo DECIMAL(12,2) DEFINE ttco,tt30, tt60, tt90, ttm90, ttsaldo DECIMAL(12,2) DEFINE tttco,ttt30, ttt60, ttt90, tttm90, tttsaldo DECIMAL(12,2) DEFINE dias INTEGER OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 ORDER BY x.sec_cliente,x.fecha_factura FORMAT PAGE HEADER LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET negrillas_on = ASCII 27, ASCII 98 LET negrillas_off = ASCII 27, ASCII 99 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET comprimido = ASCII 15 LET doce = ASCII 27, ASCII 77 LET normall = ASCII 030 LET normal = ASCII 27, ASCII 80 LET hora = time LET lj = (140 - LENGTH(p_companias.nombre CLIPPED))/2 # PRINT COLUMN 1, doce ,negrillas_on PRINT COLUMN 1, comprimido PRINT COLUMN 1, "ccprrp004", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 133, "Pag. ",pageno using "###" PRINT COLUMN 56, "Sistema de Cuentas por Cobrar", COLUMN 131, today using "dd/mm/yyyy" PRINT COLUMN 30, "Partidas Pendientes de Cobro Por Vendedor al " , corte using "dd/mm/yy"," Mayor o Igual A ",dia2 USING "&&", " Dias", COLUMN 136, hora ### Dependiendo del tipo de venta imprimira el simbolo de la moneda de pago IF tipo_venta = "1" THEN PRINT COLUMN 64, "Valores en RD$" ELSE PRINT COLUMN 64, "Valores en US$" END IF SKIP 1 LINES PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "-------------------------------------------" PRINT COLUMN 60, "Fecha" PRINT COLUMN 2, "C l i e n t e", COLUMN 52, "Factura", COLUMN 60, "Factura", COLUMN 73, "Corriente", COLUMN 89, "De 1 a 30", COLUMN 105, "De 31 a 60", COLUMN 121, "De 61 a 90", COLUMN 136, "Mas de 90", COLUMN 145, "Total" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "-------------------------------------------" # , negrillas_off PRINT PRINT COLUMN 1, num_ven USING "&&&&", " ",descrip2 PRINT BEFORE GROUP OF x.sec_cliente LET existe = "N" LET descrip1 = NULL LET tco = 0 LET t30 = 0 LET t60 = 0 LET t90 = 0 LET tm90 = 0 LET tsaldo = 0 LET idx = 0 ON EVERY ROW IF tt30 IS NULL THEN LET tt30 = 0 END IF IF tt60 IS NULL THEN LET tt60 = 0 END IF IF tt90 IS NULL THEN LET tt90 = 0 END IF IF ttm90 IS NULL THEN LET ttm90 = 0 END IF IF ttsaldo IS NULL THEN LET ttsaldo = 0 END IF IF ttt30 IS NULL THEN LET ttt30 = 0 END IF IF ttt60 IS NULL THEN LET ttt60 = 0 END IF IF ttt90 IS NULL THEN LET ttt90 = 0 END IF IF tttm90 IS NULL THEN LET tttm90 = 0 END IF IF tttsaldo IS NULL THEN LET tttsaldo = 0 END IF 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 IF dias < 0 THEN LET dias = dias * -1 END IF LET dif = dias - dia2 IF dif < 0 THEN LEt x.pendiente = 0 END IF #### Imprime y acumula los valores correspondientes a pago realizados en #### menos de 31 dias. IF dias >= dia2 THEN LET idx = idx + 1 IF idx = 1 THEN LET existe = "S" PRINT COLUMN 1, x.tipo_cliente using "&&", "-", x.sec_cliente using "&&&&", " ", x.nombre clipped ; END IF PRINT COLUMN 40, cheque_dv CLIPPED, COLUMN 51, x.tipo_doc,"-",x.aplica_a using "######", COLUMN 61, x.fecha_factura using "dd/mm/yy"; IF dias < 30 AND x.pendiente <> 0 THEN LET tco = tco + x.pendiente PRINT COLUMN 70, x.pendiente using "((,(((,(((.&&)", COLUMN 127, x.pendiente using "((,(((,(((.&&)" END IF IF dias >= 30 AND x.pendiente <> 0 THEN LET t30 = t30 + x.pendiente PRINT COLUMN 85, x.pendiente using "((,(((,(((.&&)", COLUMN 127, x.pendiente using "((,(((,(((.&&)" 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 <= 60 AND x.pendiente <> 0 THEN LET t60 = t60 + x.pendiente PRINT COLUMN 100, x.pendiente using "((,(((,(((.&&)", COLUMN 127, x.pendiente using "((,(((,(((.&&)" END IF #### Imprime y acumula los valores correspondientes a pago realizados en #### mas de 46 y menos de 60 dias. IF dias > 60 AND dias < 90 AND x.pendiente <> 0 THEN LET t90 = t90 + x.pendiente PRINT COLUMN 115, x.pendiente using "((,(((,(((.&&)", COLUMN 127, x.pendiente using "((,(((,(((.&&)" END IF #### Imprime y acumula los valores correspondientes a pago realizados en #### mas de 60 dias. IF dias >= 61 AND x.pendiente <> 0 THEN LET tm90 = tm90 + x.pendiente PRINT COLUMN 125, x.pendiente using "((,(((,(((.&&)", COLUMN 130, x.pendiente using "((,(((,(((.&&)" END IF END IF IF x.pendiente != 0 THEN LET existe = "S" END IF AFTER GROUP OF x.sec_cliente ######## IMPRIME totales acumulado por cliente. LET tsaldo = 0 LET tsaldo = t30 + t60 +t90 + tm90 IF existe IS NOT NULL AND existe = "S" THEN #IF t30 <> 0 OR t60 <> 0 OR t90 <> 0 OR tm90 <> 0 THEN SKIP 1 LINE PRINT COLUMN 41, "Total Cliente :", COLUMN 69, tco USING "(((,(((,(((.&&)", COLUMN 84, t30 using "(((,(((,(((.&&)", COLUMN 99, t60 using "(((,(((,(((.&&)", COLUMN 114, t90 using "(((,(((,(((.&&)", COLUMN 129, tm90 using "(((,(((,(((.&&)", COLUMN 139, tsaldo using "(((,(((,(((.&&)" PRINT COLUMN 69, "===============", COLUMN 84, "===============", COLUMN 99, "===============", COLUMN 114, "===============", COLUMN 129, "===============", COLUMN 139, "===============" SKIP 1 LINE IF ttco IS NULL THEN LET ttco = 0 END IF IF tt30 IS NULL THEN LET tt30 = 0 END IF IF tt60 IS NULL THEN LET tt60 = 0 END IF IF tt90 IS NULL THEN LET tt90 = 0 END IF IF ttm90 IS NULL THEN LET ttm90 = 0 END IF IF ttsaldo IS NULL THEN LET ttsaldo = 0 END IF LET ttco = ttco + tco LET tt30 = tt30 + t30 LET tt60 = tt60 + t60 LET tt90 = tt90 + t90 LET ttm90 = ttm90 + tm90 LET ttsaldo = ttsaldo + tsaldo LET t30 = 0 LET t60 = 0 LET t90 = 0 LET tm90 = 0 LET tsaldo = 0 #END IF END IF ON LAST ROW ######## IMPRIME totales acumulado en general. PRINT COLUMN 1, negrillas_on PRINT COLUMN 18, "Total General -->", COLUMN 69, tco USING "(((,(((,(((.&&)", COLUMN 84, tt30 using "(((,(((,(((.&&)", COLUMN 99, tt60 using "(((,(((,(((.&&)", COLUMN 114, tt90 using "(((,(((,(((.&&)", COLUMN 129, ttm90 using "(((,(((,(((.&&)", COLUMN 139, ttsaldo using "(((,(((,(((.&&)" LET tot_gen2.total = ttco LET tot_gen2.total1 = tt30 LET tot_gen2.total2 = tt60 LET tot_gen2.total3 = tt90 LET tot_gen2.total4 = ttm90 LET tot_gen2.total5 = ttsaldo PRINT COLUMN 69, "===============", COLUMN 84, "===============", COLUMN 99, "===============", COLUMN 114, "===============", COLUMN 129, "===============", COLUMN 139, "===============",negrillas_off LET ttco = 0 LET tt30 = 0 LET tt60 = 0 LET tt90 = 0 LET ttm90 = 0 LET ttsaldo = 0 LET tco = 0 LET t30 = 0 LET t60 = 0 LET t90 = 0 LET tm90 = 0 LET tsaldo = 0 PRINT normall END REPORT