{MAIN DEFER INTERRUPT CONNECT TO "smarmotech" USER 'jsoto' USING "lmmjvsd2014" CALL saldo_cliente(16,392) END MAIN } FUNCTION saldo_cliente(xtipo_cliente,xsec_cliente) DEFINE selec1 STRING, xtipo_cliente,xsec_cliente INT, corte DATE, valor_avance,total_saldo DEC(12,2), dias,de31a45 SMALLINT DEFINE doccli RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), aplica_a INTEGER, pendiente DECIMAL(12,2), fecha_factura DATE, sec_vend SMALLINT, cliente CHAR(7) END RECORD LET corte = TODAY LET selec1 = "SELECT a.tipo_cliente,a.sec_cliente,c.nombre,a.aplica_a, ", " SUM(a.valor+a.monto_desc) ", "FROM cctb00001 a, vetb00004 c ", "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 ", " a.tipo_cliente = ? AND a.sec_cliente = ? ", " GROUP BY a.tipo_cliente,a.sec_cliente,c.nombre,a.aplica_a HAVING SUM(a.valor + a.monto_desc) <> 0 " PREPARE comando FROM selec1 DECLARE ft_pendiente CURSOR FOR comando OPEN ft_pendiente USING corte ,xtipo_cliente,xsec_cliente LET total_saldo = 0 FOREACH ft_pendiente INTO doccli.* SELECT SUM(a.valor+a.monto_desc) INTO valor_avance FROM cctb00001 a WHERE a.tipo_cliente=doccli.tipo_cliente AND a.sec_cliente = doccli.sec_cliente AND a.fecha_orig <= corte AND a.status_t is null and a.tipo_doc in('AV') AND a.num_doc = a.aplica_a 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 LET dias = corte - doccli.fecha_factura IF dias > 0 AND dias < 31 THEN LET de31a45 = de31a45 + doccli.pendiente LET total_saldo = total_saldo + doccli.pendiente END IF END FOREACH RETURN total_saldo END FUNCTION