{ ------------------------------------------------------------------------------- PROGRAMA : ccprrp027 OBJETIVO : Saldos por Antiguedad Por Vendedor PROGRAMADOR : ING. JUAN F. SOTO FECHA REALIZACION : Junio 22, 2002 ------------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE tipo_venta,pflag CHAR(1) DEFINE fecha_corte DATE DEFINE idx_1, idx_2 SMALLINT DEFINE selec1 CHAR(1000), valor_c DECIMAL(12,2) DEFINE doccli RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), aplica_a INTEGER, pendiente DECIMAL(12,2), fecha_factura DATE, sec_vend LIKE vetb00028.sec_vend, cliente CHAR(7) 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 DEFINE valor_total DECIMAL(12,2) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL ccprrp027() END MAIN FUNCTION ccprrp027() # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ccfmrp003 FROM "ccfmrp027" DISPLAY FORM ccfmrp003 # CALL pantalla() DISPLAY "ccprrp027" AT 4,3 DISPLAY "Saldos por Antiguedad" AT 6,29 LET tipo_papel = 1 CALL msgrp000(tipo_papel) LET pflag = "N" INPUT BY NAME tipo_venta,fecha_corte ON KEY (F2) LET pflag = "S" 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 INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF 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 IF fecha_corte is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_corte END IF DISPLAY "Buscando Balance general ... Espere por favor" AT 19,14 SELECT SUM(a.valor+a.monto_desc) INTO valor_total FROM cctb00001 a WHERE a.status_t IS NULL AND a.fecha_orig <= fecha_corte AND a.tipo_doc != "PC" EXIT INPUT END INPUT CONSTRUCT BY NAME criterio ON a.tipo_cliente,a.sec_cliente,d.sec_vend ON KEY (F2) LET pflag = "S" AFTER CONSTRUCT EXIT CONSTRUCT END CONSTRUCT 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 LABEL atras: LET cero = fgl_winquestion("Atencion","Desea Clientes con saldo en cero?", "cancel","yes|no","question",0) LET cero = UPSHIFT(cero) DISPLAY " " AT 19,14 CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT reporte27 TO archivo LET selec1 = "SELECT a.tipo_cliente,a.sec_cliente,c.nombre,a.num_doc,a.valor+a.monto_desc, ", " CONVERT(CHAR(10),a.fecha_ven,103),d.sec_vend ", "FROM cctb00001 a, vetb00004 c,vetb00028 d ", "WHERE a.tipo_cliente=c.tipo_cliente AND a.sec_cliente = c.sec_cliente AND ", " a.fecha_orig <= ? AND a.status_t is null and a.tipo_doc in('AV') and ", " a.num_doc = a.aplica_a AND ", " c.tipo_cliente = d.tipo_cliente and ", " c.sec_cliente = d.sec_cliente and ",criterio clipped display " PRIMER ",selec1 PREPARE comando1 FROM selec1 DECLARE ft_pendiente1 CURSOR FOR comando1 OPEN ft_pendiente1 USING fecha_corte LET progreso = 20 DISPLAY progreso TO progreso CALL ui.Interface.refresh() FOREACH ft_pendiente1 INTO doccli.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET doccli.cliente = doccli.tipo_cliente using "&&","-", doccli.sec_cliente using "&&&&" LET doccli.pendiente = doccli.pendiente * -1 DISPLAY doccli.aplica_a at 22,3 DISPLAY doccli.sec_cliente at 22,20 OUTPUT TO REPORT reporte27(doccli.*,tipo_venta,fecha_corte,valor_total) LET progreso = progreso + 10 IF progreso > 50 THEN LET progreso = 50 END IF DISPLAY progreso TO progreso CALL ui.Interface.refresh() END FOREACH LET selec3 = "SELECT a.tipo_cliente,a.sec_cliente,c.nombre,a.aplica_a, ", " SUM(a.valor+a.monto_desc),' ',d.sec_vend ", "FROM cctb00001 a, vetb00004 c,vetb00028 d ", "WHERE a.tipo_cliente=c.tipo_cliente AND a.sec_cliente = c.sec_cliente AND ", " a.fecha_orig <= ? AND a.status_t is null ", "and a.tipo_doc not in ('AV','PC') and ", " c.tipo_cliente = d.tipo_cliente and ", " c.sec_cliente = d.sec_cliente and ",criterio clipped, " GROUP BY a.tipo_cliente,a.sec_cliente,c.nombre,a.aplica_a,d.sec_vend HAVING SUM(a.valor + a.monto_desc) <> 0 " DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) display " PRIMER ",selec3 PREPARE comando FROM selec3 DECLARE ft_pendiente CURSOR FOR comando OPEN ft_pendiente USING fecha_corte FOREACH ft_pendiente INTO doccli.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET doccli.cliente = doccli.tipo_cliente using "&&","-", doccli.sec_cliente using "&&&&" LET progreso = progreso + 1 IF progreso > 95 THEN LET progreso = 95 END IF LET doccli.fecha_factura = "01/01/2001" SELECT MAX(a.fecha_ven) INTO doccli.fecha_factura FROM cctb00001 a WHERE a.num_doc = doccli.aplica_a and a.tipo_doc not in ("PG" ,"PC","NC","ND","AV") and a.tipo_cliente = doccli.tipo_cliente and a.sec_cliente = doccli.sec_cliente and a.status_t is null OUTPUT TO REPORT reporte27(doccli.*,tipo_venta,fecha_corte,valor_total) DISPLAY progreso TO progreso CALL ui.Interface.refresh() END FOREACH FINISH REPORT reporte27 LET progreso = 100 DISPLAY progreso to progreso CALL ui.Interface.refresh() DISPLAY BY NAME tot_gen2.* LET opt = fgl_winquestion("Atencion","Desea Imprimir Reporte?", "cancel","yes|no|cancel","question",0) LET opt = UPSHIFT(opt) IF opt = "YES" THEN RUN imprime END IF CLEAR SCREEN END FUNCTION REPORT reporte27(x,venta,corte,valor_gral) DEFINE x RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), aplica_a INTEGER, pendiente DECIMAL(12,2), fecha_factura DATE, sec_vend LIKE vetb00028.sec_vend, cliente CHAR(7) END RECORD, nombre_v CHAR(20) DEFINE valor_gral DECIMAL(12,2) DEFINE venta CHAR(1), corte DATE 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 comprimido CHAR(3) DEFINE normall CHAR(3) DEFINE normal CHAR(2) DEFINE hora CHAR(5) DEFINE fecha_factura DATE DEFINE de1a30, de31a45, de46a60, masde60, mas120,total_saldo DECIMAL(12,2) DEFINE t30, t45, t60, tm60,tm120, tsaldo, ct30, ct45, ct60, ctm60,ctm120, ctsaldo DECIMAL(12,2) DEFINE vt30, vt45, vt60, vtm60,vtm120, vtsaldo DECIMAL(12,2) DEFINE xct30, xct45, xct60, xctm60,xctm120, xctsaldo DECIMAL(12,2) DEFINE dias INTEGER OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 ORDER BY x.sec_vend,x.cliente,x.aplica_a 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 comprimido = ASCII 031 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET normall = ASCII 030 LET hora = time LET lj = (137 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, doce ,negrillas_on PRINT COLUMN 1, comp_on PRINT COLUMN 1, "ccprrp027", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 130, "Pag. ",pageno using "###" PRINT COLUMN 48, " Sistema de Cuentas por Cobrar", COLUMN 128, today using "dd/mm/yyyy" PRINT COLUMN 48, " Saldos por Antiguedad al ", corte using "dd/mm/yy", COLUMN 133, hora IF venta = "1" THEN PRINT COLUMN 61, "Valores en RD$" ELSE PRINT COLUMN 61, "Valores en US$" END IF SKIP 1 LINES PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------------------------" PRINT COLUMN 2, "C l i e n t e", COLUMN 46, "Corriente", COLUMN 66, "De 1 a 30", COLUMN 82, "De 31 a 60", COLUMN 99, "De 61 a 90", COLUMN 113, "Mas De 90", COLUMN 135, "Total" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------------------------" # , negrillas_off BEFORE GROUP OF x.sec_vend LET vt30 = 0 LET vt45 = 0 LET vt60 = 0 LET vtm60 =0 LET vtm120 =0 LET masde60 = 0 LET vtsaldo = 0 LET xct30 = 0 LET xct45 = 0 LET xct60 = 0 LET xctm60 = 0 LET xctm120 = 0 LET xctsaldo = 0 LET nombre_v = NULL SELECT a.nom1_emp INTO nombre_v FROM adtb00003 a WHERE a.num_emp = x.sec_vend PRINT negrillas_on,"VENDEDOR: ",x.sec_vend USING "<<<<<<"," ",nombre_v,negrillas_off SKIP 1 LINE BEFORE GROUP OF x.cliente LET descrip1 = x.nombre LET de1a30 = 0 LET de31a45 = 0 LET de46a60 = 0 LET masde60 = 0 LET mas120 = 0 LET total_saldo = 0 IF descrip1 IS NULL THEN LET descrip1 = "Cliente no Existe. Verifique." END IF #PRINT COLUMN 1, " " ON EVERY ROW display " C ",x.tipo_cliente USING "<<<","-",x.sec_cliente USING "<<<<<<",x.pendiente," 31 a 61doc ",x.aplica_a IF de1a30 IS NULL THEN LET de1a30 = 0 END IF IF de31a45 IS NULL THEN LET de31a45 = 0 END IF IF de46a60 IS NULL THEN LET de46a60 = 0 END IF IF masde60 IS NULL THEN LET masde60 = 0 END IF IF mas120 IS NULL THEN LET mas120 = 0 END IF IF total_saldo IS NULL THEN LET total_saldo = 0 END IF IF x.fecha_factura IS NULL THEN LET x.fecha_factura = 0 END IF LET dias = corte - x.fecha_factura IF dias <= 0 THEN LET de1a30 = de1a30 + x.pendiente LET total_saldo = total_saldo + x.pendiente END IF IF dias > 0 AND dias < 31 THEN LET de31a45 = de31a45 + x.pendiente LET total_saldo = total_saldo + x.pendiente END IF IF dias >=31 AND dias < 61 THEN LET de46a60 = de46a60 + x.pendiente LET total_saldo = total_saldo + x.pendiente END IF IF dias >= 61 AND dias < 91 THEN LET masde60 = masde60 + x.pendiente LET total_saldo = total_saldo + x.pendiente END IF IF dias >= 91 THEN LET mas120 = mas120 + x.pendiente LET total_saldo = total_saldo + x.pendiente display x.pendiente," mas 91doc ",x.aplica_a," total saldo ",total_saldo END IF AFTER GROUP OF x.cliente IF cero = "NO" THEN IF total_saldo != 0 THEN PRINT COLUMN 1, x.tipo_cliente using "&&", "-", x.sec_cliente using "&&&&", " ", descrip1 clipped, COLUMN 40, de1a30 using "(((,(((,(((.##)", COLUMN 61, de31a45 using "(((,(((,(((.##)", COLUMN 77, de46a60 using "(((,(((,(((.##)", COLUMN 93, masde60 using "(((,(((,(((.##)", COLUMN 109, mas120 using "(((,(((,(((.##)", COLUMN 125, total_saldo using "(((,(((,(((.##)" # (total_saldo/valor_gral)*100 USING "(((.##)"," ", # "%" IF de1a30 > 0 THEN LET ct30 = ct30 + de1a30 LET xct30 = xct30+ de1a30 END IF IF de31a45 > 0 THEN LET ct45 = ct45 + de31a45 LET xct45 = xct45 + de31a45 END IF IF de46a60 > 0 THEN LET ct60 = ct60 + de46a60 LET xct60 = xct60 + de46a60 END IF IF masde60 > 0 THEN LET ctm60 = ctm60 + masde60 LET xctm60 = xctm60 + masde60 END IF IF mas120 > 0 THEN LET ctm120 = ctm120 + mas120 LET xctm120 = xctm120 + mas120 END IF IF total_saldo > 0 THEN LET ctsaldo = ctsaldo + total_saldo LET xctsaldo = xctsaldo + total_saldo END IF LET t30 = t30 + de1a30 LET t45 = t45 + de31a45 LET t60 = t60 + de46a60 LET tm60 = tm60 + masde60 LET tm120 = tm120 + mas120 LET tsaldo = tsaldo + total_saldo LET vt30 = vt30 + de1a30 LET vt45 = vt45 + de31a45 LET vt60 = vt60 + de46a60 LET vtm60 =vtm60 + masde60 LET vtm120 =vtm120 + mas120 LET vtsaldo = vtsaldo + total_saldo LET de1a30 = 0 LET de31a45 = 0 LET de46a60 = 0 LET masde60 = 0 LET mas120 = 0 LET total_saldo = 0 END IF ELSE PRINT COLUMN 1, x.tipo_cliente using "&&", "-", x.sec_cliente using "&&&&", " ", descrip1 clipped, COLUMN 40, de1a30 using "(((,(((,(((.##)", COLUMN 61, de31a45 using "(((,(((,(((.##)", COLUMN 77, de46a60 using "(((,(((,(((.##)", COLUMN 93, masde60 using "(((,(((,(((.##)", COLUMN 109, mas120 using "(((,(((,(((.##)", COLUMN 125, total_saldo using "(((,(((,(((.##)" # (total_saldo/valor_gral)*100 USING "(((.##)"," ","%" IF de1a30 > 0 THEN LET ct30 = ct30 + de1a30 LET xct30 = xct30+ de1a30 END IF IF de31a45 > 0 THEN LET ct45 = ct45 + de31a45 LET xct45 = xct45 + de31a45 END IF IF de46a60 > 0 THEN LET ct60 = ct60 + de46a60 LET xct60 = xct60 + de46a60 END IF IF masde60 > 0 THEN LET ctm60 = ctm60 + masde60 LET xctm60 = xctm60 + masde60 END IF IF mas120 > 0 THEN LET ctm120 = ctm120 + mas120 LET xctm120 = xctm120 + mas120 END IF IF total_saldo > 0 THEN LET ctsaldo = ctsaldo + total_saldo LET xctsaldo = xctsaldo + total_saldo END IF LET t30 = t30 + de1a30 LET t45 = t45 + de31a45 LET t60 = t60 + de46a60 LET tm60 = tm60 + masde60 LET tm120 = tm120 + mas120 LET tsaldo = tsaldo + total_saldo LET vt30 = vt30 + de1a30 LET vt45 = vt45 + de31a45 LET vt60 = vt60 + de46a60 LET vtm60 =vtm60 + masde60 LET vtm120 =vtm120 + mas120 LET vtsaldo = vtsaldo + total_saldo LET de1a30 = 0 LET de31a45 = 0 LET de46a60 = 0 LET masde60 = 0 LET mas120 = 0 LET total_saldo = 0 END IF IF tm120 IS NULL THEN LET tm120 = 0 LET ctm120 = 0 END IF IF ctm120 IS NULL THEN LET ctm120 = 0 END IF IF t30 IS NULL THEN LET t30 = 0 LET ct30 = 0 END IF IF ct30 IS NULL THEN LET ct30 = 0 END IF IF t45 IS NULL THEN LET t45 = 0 LET ct45 = 0 END IF IF ct45 IS NULL THEN LET ct45 = 0 END IF IF t60 IS NULL THEN LET t60 = 0 LET ct60 = 0 END IF IF ct60 IS NULL THEN LET ct60 = 0 END IF IF tm60 IS NULL THEN LET tm60 = 0 LET ctm60 = 0 END IF IF ctm60 IS NULL THEN LET ctm60 = 0 END IF IF tsaldo IS NULL THEN LET tsaldo = 0 LET ctsaldo = 0 END IF IF ctsaldo IS NULL THEN LET ctsaldo = 0 END IF AFTER GROUP OF x.sec_vend SKIP 1 LINE PRINT COLUMN 23, "Total Vendedor--> ", COLUMN 40, vt30 using "(((,(((,(((.##)", COLUMN 61, vt45 using "(((,(((,(((.##)", COLUMN 77, vt60 using "(((,(((,(((.##)", COLUMN 93, vtm60 using "(((,(((,(((.##)", COLUMN 109, vtm120 using "(((,(((,(((.##)", COLUMN 125, vtsaldo using "(((,(((,(((.##)" SKIP 1 LINE PRINT COLUMN 23, "Total CXC---> ", COLUMN 41, xct30 using "(((,(((,(((.##)", COLUMN 61, xct45 using "(((,(((,(((.##)", COLUMN 77, xct60 using "(((,(((,(((.##)", COLUMN 93, xctm60 using "(((,(((,(((.##)", COLUMN 109, xctm120 using "(((,(((,(((.##)", COLUMN 125, xctsaldo using "(((,(((,(((.##)" LET xct30 = 0 LET xct45 = 0 LET xct60 = 0 LET xctm60 = 0 LET xctm120 = 0 LET xctsaldo = 0 LET vt30 = 0 LET vt45 = 0 LET vt60 = 0 LET vtm60 =0 LET vtm120 =0 LET vtsaldo = 0 SKIP 1 LINE ON LAST ROW PRINT # COLUMN 1, negrillas_on, COLUMN 23, "Totales -->", COLUMN 41, t30 using "(((,(((,(((.##)", COLUMN 61, t45 using "(((,(((,(((.##)", COLUMN 77, t60 using "(((,(((,(((.##)", COLUMN 93, tm60 using "(((,(((,(((.##)", COLUMN 109, tm120 using "(((,(((,(((.##)", COLUMN 125, tsaldo using "(((,(((,(((.##)" # , negrillas_off SKIP 1 LINE PRINT COLUMN 23, "Total CXC---> ", COLUMN 41, ct30 using "(((,(((,(((.##)", COLUMN 61, ct45 using "(((,(((,(((.##)", COLUMN 77, ct60 using "(((,(((,(((.##)", COLUMN 93, ctm60 using "(((,(((,(((.##)", COLUMN 109, ctm120 using "(((,(((,(((.##)", COLUMN 125, ctsaldo using "(((,(((,(((.##)" LET ct30 = 0 LET ct45 = 0 LET ct60 = 0 LET ctm60 = 0 LET ctm120 = 0 LET tot_gen2.total1 = 0 LET tot_gen2.total2 = 0 LET tot_gen2.total3 = 0 LET tot_gen2.total4 = 0 LET tot_gen2.total5 = 0 LET tot_gen2.total1 = t30 LET tot_gen2.total2 = t45 LET tot_gen2.total3 = t60 LET tot_gen2.total4 = tm60 LET tot_gen2.total5 = tsaldo LET t30 = 0 LET t45 = 0 LET t60 = 0 LET tm60 = 0 LET tsaldo = 0 PRINT comp_off END REPORT