Parece que no fui claro con la inquietud. Voy a presentar el codigo para realizar nuevemente la consulta.
Código Delphi
[-]
unit PlanillarSGP01;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, StdCtrls;
type
Registro01 = record
c01 : string[2];
c02 : string[5];
c03 : string[200];
c04 : string[2];
c05 : string[16];
c06 : string[1];
c07 : string[1];
c08 : string[10];
c09 : string[10];
c10 : string[1];
c11 : string[10];
c12 : string[40];
c13 : string[6];
c14 : string[7];
c15 : string[7];
c16 : string[10];
c17 : string[10];
c18 : string[5];
c19 : string[12];
c20 : string[1];
c21 : string[2];
end;
Registro02 = record
d01 : string[2];
d02 : string[5];
d03 : string[2];
d04 : string[16];
d05 : string[2];
d06 : string[2];
d07 : string[1];
d08 : string[1];
d09 : string[2];
d10 : string[3];
d11 : string[20];
d12 : string[30];
d13 : string[20];
d14 : string[30];
d15 : string[1];
d16 : string[1];
d17 : string[1];
d18 : string[1];
d19 : string[1];
d20 : string[1];
d21 : string[1];
d22 : string[1];
d23 : string[1];
d24 : string[1];
d25 : string[1];
d26 : string[1];
d27 : string[1];
d28 : string[1];
d29 : string[1];
d30 : string[2];
d31 : string[6];
d32 : string[6];
d33 : string[6];
d34 : string[6];
d35 : string[6];
d36 : string[2];
d37 : string[2];
d38 : string[2];
d39 : string[2];
d40 : string[9];
d41 : string[1];
d42 : string[9];
d43 : string[9];
d44 : string[9];
d45 : string[9];
d46 : string[7];
d47 : string[9];
d48 : string[9];
d49 : string[9];
d50 : string[9];
d51 : string[9];
d52 : string[9];
d53 : string[9];
d54 : string[7];
d55 : string[9];
d56 : string[9];
d57 : string[15];
d58 : string[9];
d59 : string[15];
d60 : string[9];
d61 : string[9];
d62 : string[9];
d63 : string[9];
d64 : string[7];
d65 : string[9];
d66 : string[7];
d67 : string[9];
d68 : string[7];
d69 : string[9];
d70 : string[7];
d71 : string[9];
d72 : string[7];
d73 : string[9];
end;
TForm1 = class(TForm)
Button1: TButton;
E1: TEdit;
Tabla1: TTable;
Tabla2: TTable;
Tabla3: TTable;
procedure RegistroTipo01;
procedure RegistroTipo02;
procedure LlenaTipo01;
procedure LlenaTipo02;
procedure ValorAporte;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1 : TForm1;
R01 : file of Registro01;
R02 : file of Registro02;
Dato01 : Registro01;
Dato02 : Registro02;
c01, c02, c03, c04, c05, c06, c07, c08, c09, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21 : string;
d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19, d20 : string;
d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d40 : string;
d41, d42, d43, d44, d45, d46, d47, d48, d49, d50, d51, d52, d53, d54, d55, d56, d57, d58, d59, d60 : string;
d61, d62, d63, d64, d65, d66, d67, d68, d69, d70, d71, d72, d73, ced, aux1, aux2, temp : string;
cont, basliq, num1, num2, num3 : integer;
porc, par1, par2, par3 : real;
encontrado : boolean;
implementation
{$R *.dfm}
procedure TForm1.RegistroTipo01;
begin
with Dato01 do
begin
c01 := '01';
c02 := '00001';
c03 := 'ENTIDAD';
c04 := 'NI';
c05 := '892280021';
c06 := '1';
c07 := ' ';
c08 := ' ';
c09 := ' ';
c10 := 'U';
c11 := ' ';
c12 := ' ';
c13 := ' ';
c14 := '2006-09';
c15 := '2006-09';
c16 := ' ';
c17 := ' ';
c18 := ' ';
c19 := ' ';
c20 := '1';
c21 := ' ';
end;
end;
procedure TForm1.LlenaTipo01;
begin
assignfile(R01,'PlanillaSGP01.txt');
rewrite(R01);
RegistroTipo01;
seek(R01, FileSize(R01));
Write(R01,Dato01);
Closefile(R01);
end;
procedure TForm1.RegistroTipo02;
var
n1, n2, n3 : integer;
nom1, nom2, ape1, ape2 : string;
begin
with Dato02 do
begin
d01 := '02';
if cont < 10 then aux1 := concat('0000',inttostr(cont));
if (cont >= 10) and (cont < 100) then aux1 := concat('000',inttostr(cont));
if (cont >= 100) and (cont < 1000) then aux1 := concat('00',inttostr(cont));
if (cont >= 1000) and (cont < 10000) then aux1 := concat('0',inttostr(cont));
if (cont >= 10000) then aux1 := inttostr(cont);
d02 := aux1;
Tabla1.First;
encontrado := false;
while (Not Tabla1.Eof) and (encontrado = false) do
begin
if Tabla1.FieldByName('cedula').AsString = Tabla2.FieldByName('Cedula').AsString then
begin
if Tabla1.FieldByName('Tipo').AsString = '1' then d03 := 'CC';
if Tabla1.FieldByName('Tipo').AsString = '2' then d03 := 'CE';
encontrado := true;
end
else Tabla1.Next;
end;
d04 := Tabla2.FieldByName('Cedula').AsString;
d05 := '1';
d06 := ' ';
d07 := ' ';
d08 := ' ';
d09 := '70';
d10 := Tabla2.FieldByName('Mun_Colegi').AsString;
Tabla3.First;
encontrado := false;
while (Not Tabla3.Eof) and (encontrado = false) do
begin
if Tabla3.FieldByName('cedula').AsString = Tabla2.FieldByName('Cedula').AsString then
begin
nom1 := Tabla3.FieldByName('Primer_Ape').AsString;
nom2 := Tabla3.FieldByName('Segundo_Ap').AsString;
ape1 := Tabla3.FieldByName('Primer_Nom').AsString;
ape2 := Tabla3.FieldByName('Segundo_No').AsString;
aux2 := Tabla3.FieldByName('Base').AsString;
encontrado := true;
end;
Tabla3.Next;
end;
d11 := nom1;
d12 := nom2;
d13 := ape1;
d14 := ape2;
num1 := strtoint(aux2);
num2 := num1 DIV 1000;
num3 := num1 MOD 1000;
if num3 >= 500 then num2 := num2 + 1;
basliq := num2 * 1000;
d15 := ' ';
d16 := ' ';
d17 := ' ';
d18 := ' ';
d19 := ' ';
d20 := ' ';
d21 := ' ';
d22 := ' ';
d23 := ' ';
d24 := ' ';
d25 := ' ';
d26 := ' ';
d27 := ' ';
d28 := ' ';
d29 := ' ';
d30 := ' ';
d31 := ' ';
d32 := ' ';
d33 := ' ';
d34 := ' ';
d35 := ' ';
d36 := '30';
d37 := '30';
d38 := '30';
d39 := '30';
d40 := aux2;
d41 := ' ';
d42 := inttostr(basliq);
d43 := inttostr(basliq);
d44 := inttostr(basliq);
d45 := inttostr(basliq);
d46 := '0.15500';
porc := 0.15500;
ValorAporte;
n1 := num2 * 100;
d47 := inttostr(n1);
porc := 0.00500;
ValorAporte;
n2 := num2 * 100;
d48 := inttostr(n2);
porc := 0.00500;
ValorAporte;
n3 := num2 * 100;
d49 := inttostr(n3);
d50 := inttostr(n1 + n2 + n3);
d51 := ' ';
d52 := ' ';
d53 := ' ';
d54 := '0.12000';
porc := 0.12000;
ValorAporte;
d55 := inttostr(num2 * 100);
d56 := ' ';
d57 := ' ';
d58 := ' ';
d59 := ' ';
d60 := ' ';
d61 := '0.0052200';
d62 := ' ';
porc := 0.0052200;
ValorAporte;
d63 := inttostr(num2 * 100);
d64 := '0.04000';
porc := 0.04000;
ValorAporte;
d65 := inttostr(num2 * 100);
d66 := '0.00500';
porc := 0.00500;
ValorAporte;
d67 := inttostr(num2 * 100);
d68 := '0.03000';
porc := 0.03000;
ValorAporte;
d69 := inttostr(num2 * 100);
d70 := '0.00500';
porc := 0.00500;
ValorAporte;
d71 := inttostr(num2 * 100);
d72 := '0.01000';
porc := 0.01000;
ValorAporte;
d73 := inttostr(num2 * 100);
end;
end;
procedure TForm1.LlenaTipo02;
begin
Tabla1.Open;
Tabla2.Open;
Tabla3.Open;
Tabla2.First;
assignfile(R02,'PlanillaSGP01.txt');
cont := 1;
while (Not Tabla2.Eof) do
begin
if (Tabla2.FieldByName('Cargo').AsString < '9900') and
(Tabla2.FieldByName('Est_Labora').AsString = '01') then
begin
reset(R02);
RegistroTipo02;
seek(R02, cont);
Write(R02,Dato02);
cont := cont + 1;
end;
Tabla2.Next;
end;
Closefile(R02);
end;
procedure TForm1.ValorAporte;
begin
par1 := porc * basliq;
temp := floattostrf(par1,fffixed,10,0);
num1 := strtoint(temp);
num2 := num1 DIV 100;
num3 := num1 MOD 100;
if num3 >= 50 then num2 := num2 + 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LlenaTipo01;
LlenaTipo02;
end;
end.
Lo que intento hacer es generar el archivo plano para una Planilla de Pago por Internet. Debe traer un Registro Tipo 1 que se genera en LlenaTipo1 y un Tipo 2 que tiene tantos como funcionarios tenga la entidad. Cabe anotar que la planilla es para aportes Fiscales y parafiscales.
Hasta ahi no hay problema. Sin embargo, cuando reviso el Archivo resultante, que se llama PlanillaSGP01.txt, veo en el resultado cuadros que separan los diferentes campos del Registro.
Esos son los cuadritos a los cuales me refiero.
Además, al revisar dicho archivo, veo que los nombres se mezclan, por ejemplo, el Primer nombre es ANDRES y el Segundo es ROBERTO y el resultado que veo es ANDRESERTO. Lo mismo pasa con los apellidos.
Y por ultimo, lo ideal es que cada registro inicie línea pero no se como darle el salte. Intente con WRITELN y me dio el error
Writeln(R02,Dato02); Illegal type en Write/Writeln statement.
Muchas gracias por la colaboración.