Pascal/Turbo Pascal - Procedure con Archivos - AYUDA!!!!

 
Vista:

Procedure con Archivos - AYUDA!!!!

Publicado por Facundo  (2 intervenciones) el 24/06/2009 03:46:40
Tengo un problema con el siguiente programa, como veran esta duplicado el procedure ActListPagos en el cuerpo del programa, si lo corro asi funciona correctamente, ahora si uso el procedure ActListPagos me da un error en write(ArcCliente,Rcliente) como qeu no puede leer el archivo. La verdad que no puedo encontrar el error, ojala me puedan ayudar alguien.
Los white que van mostrando los datos son echos por mi para control. Pero no hacen al programa.
El objetivo es actualizar el archivo de clientes, y listar las instRecau pero el erro es antes

Program TP1;

Uses crt,DOS;

Type TD_Cliente = Longint;
TD_ApeNom = String[25];
TD_Domicilio = String[35];
TD_Fecha = Longint;
TD_Importe = Real;
TD_InsRecau = String[8];
TD_Atraso = Byte;
TD_Posicion = Longint;
TD_Aux = Longint;
TD_Anio = Integer;
TD_Dia = Byte;
TD_Mes = Byte;

TR_Cliente = Record
NCliente : TD_Cliente;
ApeNom : TD_ApeNom;
Domicilio : TD_Domicilio;
Fvenc : TD_Fecha;
FPago : TD_Fecha;
ImpTotAdeu : TD_Importe;
End;

TR_Pagos = Record
Ncliente : TD_Cliente;
FPago : TD_Fecha;
CodInsRec : TD_InsRecau;
ImpPago : TD_Importe;
End;

TR_Deuda = Record
NCliente : TD_Cliente;
FVenc : TD_Fecha;
ImpAdeu : TD_Importe;
Atraso : TD_Dia;
end;

TArc_Cliente = File of TR_cliente;
TArc_Pagos = File of TR_Pagos;
TArc_Deuda = File of TR_Deuda;

TArr_Calendario = Array[1..12] of TD_Mes;

Procedure BusquedaPagos(var ArcCliente : TArc_Cliente ; Cliente : TD_Cliente; var Pos : TD_Posicion
;var RCliente : TR_Cliente);

Var Primero,Ultimo,Medio : TD_Aux;

Begin
Primero := 0;
Ultimo := Filesize(ArcCliente);
Medio := (Primero + Ultimo) div 2;

Reset(ArcCliente);

Seek(ArcCliente,Medio);

Read(ArcCliente,Rcliente);

While (RCliente.Ncliente <> Cliente) and (Primero < Ultimo) do
Begin

If Cliente < RCliente.Ncliente then
Ultimo := Medio - 1
else
primero := Medio + 1;

Medio := (Primero + Ultimo) div 2;
Seek(ArcCliente,Medio);
Read(ArcCliente,Rcliente);
end;

If Cliente = RCliente.Ncliente then
Medio := Pos
else
Pos := -1;

End;

Procedure ActuListPagos(var ArcPagos : TArc_Pagos; var RPagos : TR_Pagos; var ArcCliente : TArc_Cliente
; var RCliente : TR_Cliente);

Var Pos: TD_Posicion;
InsAux : TD_InsRecau;
Sum : TD_Importe;

Begin

reset(ArcPagos);
reset(ArcCliente);

Sum := 0;
InsAux := '0';

While Not Eof(ArcPagos) do
Begin

Read(ArcPagos,Rpagos);

Writeln(RPagos.Ncliente,' - ',RPagos.Fpago,' - ',RPagos.codInsRec,' - ',RPagos.ImpPago,' - ');

BusquedaPagos(ArcCliente, Rpagos.Ncliente, Pos, Rcliente);

If Pos < 0 then
Writeln('No Existe el Cliente en el Archivo de Clientes')
else
seek(ArcCliente,Pos);

RCliente.Fpago := RPagos.Fpago;
RCliente.ImpTotAdeu := RCliente.ImpTotAdeu - RPagos.ImpPago;

write(ArcCliente,Rcliente); <<----- ACA DA EL ERROR!!!

Writeln(Rcliente.Ncliente,' - ',Rcliente.ImpTotAdeu,' - ',Rcliente.Fpago);

readln;

If RPagos.CodInsRec <> InsAux Then
Begin
if InsAux = '0' then
Begin
Sum := Rpagos.ImpPago;
InsAux := Rpagos.CodInsRec;
end
else
Begin
Writeln(InsAux,Sum);
Sum := Rpagos.ImpPago;
InsAux := Rpagos.CodInsRec;
end;
end
else
Sum := Sum + RPagos.ImpPago;
end;

Close(ArcPagos);

End;

Var RCliente : TR_Cliente;
Rpagos : TR_Pagos;
Rdeuda : TR_Deuda;

ArcCliente : TArc_Cliente;
ArcPagos : TArc_Pagos;
ArcDeuda : TArc_Deuda;

Dia : TD_Dia;
Mes : TD_Mes;
Anio : TD_Anio;

Fecha : TD_Fecha;

pos: td_posicion;
InsAux : TD_insrecau;
Sum : TD_importe;

Begin

Assign(ArcCliente,'c:Maetar.dat');
Assign(ArcPagos,'c:Pagostan.dat');

reset(ArcPagos);
reset(ArcCliente);

Sum := 0;
InsAux := '0';

While Not Eof(ArcPagos) do
Begin

Read(ArcPagos,Rpagos);

Writeln(RPagos.Ncliente,' - ',RPagos.Fpago,' - ',RPagos.codInsRec,' - ',RPagos.ImpPago,' - ');

BusquedaPagos(ArcCliente, Rpagos.Ncliente, Pos, Rcliente);

If Pos < 0 then
Writeln('No Existe el Cliente en el Archivo de Clientes')
else
seek(ArcCliente,Pos);

RCliente.Fpago := RPagos.Fpago;
RCliente.ImpTotAdeu := RCliente.ImpTotAdeu - RPagos.ImpPago;

write(ArcCliente,Rcliente);

Writeln(Rcliente.Ncliente,' - ',Rcliente.ImpTotAdeu,' - ',Rcliente.Fpago);

readln;

If RPagos.CodInsRec <> InsAux Then
Begin
if InsAux = '0' then
Begin
Sum := Rpagos.ImpPago;
InsAux := Rpagos.CodInsRec;
end
else
Begin
Writeln(InsAux,Sum);
Sum := Rpagos.ImpPago;
InsAux := Rpagos.CodInsRec;
end;
end
else
Sum := Sum + RPagos.ImpPago;
end;

Close(ArcPagos);

End.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Procedure con Archivos - AYUDA!!!!

Publicado por juan (44 intervenciones) el 27/06/2009 14:20:34
intentastes cerrar el archivo y volverlo abrir ??? a veces pascal en achivos se vuelve loco :P . y otra cosa para q usastes la libreria DOS ?? saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar