{ ------------------------------------------------------------------------------- PROGRAMA : CPPRCS001 OBJETIVO : Estado De Cuentas PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Junio 16, 1993 ------------------------------------------------------------------------------- } GLOBALS "cpprgb000.4gl" DEFINE fecha DATE DEFINE valor4,valor2,balance4,balance3,p_valor,p_monto DECIMAL(12,2) DEFINE mov CHAR(1) DEFINE direccion CHAR(30) DEFINE provincia CHAR(3) DEFINE tipo CHAR(1) DEFINE idx_1, idx_2, idx_3 SMALLINT DEFINE salir, salir1, salir3, tipo_venta CHAR(1) DEFINE selec5, selec6 CHAR(1500) DEFINE cuenta1 RECORD fecha_inicial DATE, fecha_final DATE, cod_sp LIKE cptb00001.cod_sp, cod_sp_sec LIKE cptb00001.cod_sp_sec, nom_sp LIKE cotb00001.nom_sp, direccion CHAR(30), ciu_sp CHAR(30), prima DECIMAL(5,2), balance DECIMAL(12,2) END RECORD DEFINE cuenta2 ARRAY[1000] OF RECORD num_doc LIKE cptb00001.num_doc, tipo_doc LIKE cptb00001.tipo_doc, fecha_orig LIKE cptb00001.fecha_orig, aplica_a CHAR(13), debito DECIMAL(12,2), credito DECIMAL(12,2), balance1 DECIMAL(12,2) END RECORD DEFINE busca_d RECORD num_doc LIKE cptb00001.num_doc, tipo_doc LIKE cptb00001.tipo_doc, fecha_orig LIKE cptb00001.fecha_orig, aplica_a LIKE cptb00001.aplica_a, valor DECIMAL(12,2) END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL cpprcs001() END MAIN FUNCTION cpprcs001() # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM cpfmcs001 FROM "cpfmcs001" DISPLAY FORM cpfmcs001 #CALL pantalla() #DISPLAY "cpprcs001" AT 4,3 #DISPLAY "Estado de Cuenta" AT 6,31 LABEL volvera: INPUT BY NAME cuenta1.* WITHOUT DEFAULTS AFTER FIELD fecha_inicial IF cuenta1.fecha_inicial is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_inicial END IF BEFORE FIELD fecha_final LET cuenta1.fecha_final = today AFTER FIELD fecha_final IF cuenta1.fecha_final is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_final END IF IF cuenta1.fecha_final < cuenta1.fecha_inicial THEN LET numero_msg = 86 CALL msg(numero_msg) NEXT FIELD fecha_final END IF AFTER FIELD cod_sp IF cuenta1.cod_sp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF AFTER FIELD cod_sp_sec IF cuenta1.cod_sp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp_sec END IF SELECT MIN(a.fecha_orig) INTO fecha FROM cptb00001 a WHERE a.cod_sp = cuenta1.cod_sp AND a.cod_sp_sec = cuenta1.cod_sp_sec AND a.status_t IS NULL IF cuenta1.fecha_inicial < fecha THEN LET cuenta1.fecha_inicial = fecha DISPLAY BY NAME cuenta1.fecha_inicial END IF SELECT a.nom_sp,a.dir_sp,a.ciu_sp INTO cuenta1.nom_sp,cuenta1.direccion,cuenta1.ciu_sp FROM cotb00001 a WHERE a.cod_sp = cuenta1.cod_sp AND a.cod_sp_sec = cuenta1.cod_sp_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF DISPLAY BY NAME cuenta1.nom_sp,cuenta1.direccion,cuenta1.ciu_sp BEFORE FIELD prima DISPLAY "Buscando Balance Inicial... Espere" AT 23,1 ATTRIBUTE (BOLD) SELECT sum(a.valor) INTO valor4 FROM cptb00001 a WHERE a.status_t is null and a.fecha_proc < cuenta1.fecha_inicial and a.cod_sp = cuenta1.cod_sp and a.cod_sp_sec = cuenta1.cod_sp_sec AND a.tipo_doc = "CP" AND a.aplica_a IS NULL SELECT sum(a.valor) INTO valor2 FROM cptb00001 a WHERE a.status_t is null and a.fecha_proc < cuenta1.fecha_inicial and a.cod_sp = cuenta1.cod_sp and a.cod_sp_sec = cuenta1.cod_sp_sec AND a.tipo_doc != "CP" LET cuenta1.balance = valor2 - (valor4 * -1) IF cuenta1.balance IS NULL THEN LET cuenta1.balance = 0 END IF IF STATUS = NOTFOUND THEN LET cuenta1.balance = 0 END IF AFTER FIELD prima IF cuenta1.prima is not null THEN LET cuenta1.balance = cuenta1.balance * cuenta1.prima END IF DISPLAY " " AT 23,1 ATTRIBUTE (BOLD) LET fecha = cuenta1.fecha_inicial DISPLAY BY NAME cuenta1.balance AFTER INPUT IF cuenta1.cod_sp = 23 THEN LET cuenta1.prima = null EXIT INPUT DISPLAY BY NAME cuenta1.prima END IF EXIT INPUT END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF DECLARE buscar CURSOR FOR SELECT a.num_doc,a.tipo_doc,a.fecha_orig,a.aplica_a,a.valor FROM cptb00001 a WHERE a.status_t IS NULL AND a.cod_sp = cuenta1.cod_sp AND a.cod_sp_sec = cuenta1.cod_sp_sec AND a.fecha_orig BETWEEN cuenta1.fecha_inicial AND cuenta1.fecha_final ORDER BY 4,3,1 DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 24,14 ATTRIBUTE (REVERSE,BOLD) DISPLAY " " AT 24,14 LET idx_1 = 0 FOREACH buscar INTO busca_d.* IF STATUS = NOTFOUND THEN EXIT FOREACH END IF IF busca_d.tipo_doc = "CP" AND busca_d.aplica_a IS NOT NULL THEN LET busca_d.valor = 0 END IF IF cuenta1.prima is not null AND cuenta1.prima > 0 THEN LET busca_d.valor = busca_d.valor * cuenta1.prima END IF IF cuenta1.balance IS NULL THEN LET cuenta1.balance = 0 END IF IF busca_d.valor IS NULL THEN LET busca_d.valor = 0 END IF IF busca_d.valor IS NOT NULL THEN LET idx_1 = idx_1 + 1 LET cuenta2[idx_1].num_doc = busca_d.num_doc LET cuenta2[idx_1].tipo_doc = busca_d.tipo_doc LET cuenta2[idx_1].fecha_orig = busca_d.fecha_orig using "dd/mm/yy" IF busca_d.valor > 0 THEN LET cuenta2[idx_1].credito = busca_d.valor USING "###,###,###.##" LET cuenta2[idx_1].debito = 0 ELSE LET cuenta2[idx_1].debito = busca_d.valor USING "###,###,###.##" LET cuenta2[idx_1].credito = 0 END IF LET cuenta1.balance = cuenta1.balance + busca_d.valor LET cuenta2[idx_1].balance1 = cuenta1.balance IF busca_d.aplica_a IS NOT NULL THEN LET cuenta2[idx_1].aplica_a = "FT-",busca_d.aplica_a clipped END IF #LET idx_1 = idx_1 + 1 END IF END FOREACH CALL SET_COUNT(idx_1) DISPLAY ARRAY cuenta2 TO cuenta.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF CLEAR FORM GOTO volvera END FUNCTION