Fiksus Algorytm Importu Dowodu - Misoft

Fiksus Algorytm Importu Dowodu

Z Wikipedii, wolnej encyklopedii.

var
 lx,znacznik,wynik: string;
 pref,opis,kod,data: string;
 wn,ma,dKw,dOpis,dKod: string;
 fx,ile,dek: integer; 
 b: boolean;
 P,kw: real;
procedure ReadLine;
var
 i,n,l: real;
 eof: boolean;
 sx: string;
begin
 wynik:=;
 sx:='<'+znacznik+'>';
 i:=pos(sx,lx);
 while ( i = 0 ) do
  begin 
   eof:=fb_EofTxt(fx);
   if ( not eof ) then
    begin
    lx:=fs_ReadTxt(fx,1);
    i:=pos(sx,lx);
    end
    else
    i:=-1;  
  end;
 if ( i > 0 ) then
  begin
   l:=length(lx);
   n:=length(sx);
   n:=n+i;
   l:=l-n+1;
   lx:=copy(lx,n,l);
   i:=pos('<',lx);  
   if ( i > 0) then
    begin
     ile:=ile+1;
     i:=i-1; 
     if ( i > 0 ) then
       wynik:=copy(lx,1,i);
    end;
  end;
end;
procedure Kwota;
var
 b: boolean;
 i,l:integer;
 sx,sy: string;
begin
 kw:=fr_FromStr(dKw);
 if ( kw = 0 ) then
  begin
  i:=pos('.',dKw);
  if ( i > 0) then
   begin
    l:=length(dKw);
    l:=l-i;
    i:=i-1; 
    sx:=copy(dKw,1,i);
    i:=i+2; 
    sy:=copy(dKw,i,l);
    dKw:=sx+sy;    
   end;
   dKw:=fs_Repl(dKw,',','.');
   kw:=fr_FromStr(dKw);
  end;
end;
procedure DaneDow;
var
 b: boolean;
begin
 ile:=0;
 znacznik:='pref'; Call ReadLine; pref:=wynik;
 znacznik:='data'; Call ReadLine; data:=wynik;
 znacznik:='opis'; Call ReadLine; opis:=wynik;
 znacznik:='kod';  Call ReadLine; kod:=wynik;
 b:=fb_Print('DOW->'+pref);
 b:=fb_Print('|'+data);
 b:=fb_Print('|'+opis);
 b:=fb_PrintLn('|'+kod);
end;
procedure DaneDek;
var
 b: boolean;
begin
 ile:=0;
 znacznik:='wn';    Call ReadLine; wn:=wynik;
 znacznik:='ma';    Call ReadLine; ma:=wynik;
 znacznik:='kwota'; Call ReadLine; dKw:=wynik;
 znacznik:='opis';  Call ReadLine; dOpis:=wynik;
 znacznik:='kod';   Call ReadLine; dKod:=wynik;
 if ( ile > 0 ) then
  begin
   Call Kwota;
   b:=fb_Print('  Dek->'+wn);
   b:=fb_Print('|'+ma);
   b:=fb_Print('|'+dKw);
   b:=fb_Print('|'+dOpis);
   b:=fb_PrintLn('|'+dKod);
  end;
end;
begin
 fx:=fi_OpenTxt('Test-Imp.txt');
 Call DaneDow;
 if ( ile = 4 ) then
  begin
   P:=fr_NewDow(pref,data,opis,kod);  { <- inicjuje dowód }
   dek:=0;
   Call DaneDek;
   while ( ile = 5 ) do
    begin
     b:=fb_NewDek(P, wn, ma, kw, dOpis, dKod);  { <- dekret dowodu P }
     if ( b ) then dek:=dek+1;
     Call DaneDek;
    end;
   if ( dek > 0 ) then 
    begin
      b:=fb_AddDow(P,'PI','Z');   { <- zapisuje dowód w dzienniku roboczym PI i zatwierdza }
      b:=fb_Print('-------> dopisano');
    end
    else
    begin
      b:=fb_FreeDow(P);         { <- dowodu nie będzie }
      b:=fb_Print('=========ANULOWANO=========');
    end;
  end;
 b:=fb_Close(fx);
end.

Powyższy algorytm wywołać z poziomu definicji raportu.
plik z treścią algorytmu Imp.prg<- pobierz tu


Przykładowy plik tekstowy danych do importu


<dow>
 <pref>BA</pref>
 <data>11/01/2004</data>
 <opis>Test Importu</opis>
 <kod>T1</kod>
 <dek>
  <wn>1-1</wn>
  <ma>100</ma>
  <kwota>11,11</kwota>
  <opis>Test Importu poz1</opis>
  <kod>T1-1</kod>
 </dek>
 <dek>
  <wn>1-2</wn>
  <ma>100</ma>
  <kwota>222,22</kwota>
  <opis>Test Importu poz2</opis>
  <kod>T1-2</kod>
 </dek>
 <dek>
  <wn>1-3</wn>
  <ma>100</ma>
  <kwota>3.333,33</kwota>
  <opis>Test Importu poz3</opis>
  <kod>T1-3</kod>
 </dek>
</dow>
Personal tools