Name('Úhrady závazků')      ; pod tímto názvem bude sestava v menu
FileName('Zav1.WNS')              ; pod tímto názvem bude sestava uložena na disku
Designed('Zavman#1')                ; sestava bude dostupná z okna Adrman
Author('Milan Slíva','EMail: sliva@fi.cz','http://www.infinion.cz')  ;informace o autorovi
Descr('Vypíše úhrady u závazků')  ;popis sestavy, tento text bude v bublince

WnsType(1)
NewWNS('Zav1.WNS');

DeclareRec('Zavazek');
DeclareActiveIndex(Zavazek,'KeyZavazek')
DeclareRec('Pokladna');
DeclareRec('KeyPokladna9');
DeclareRec('Banka');
DeclareRec('KeyBanka9');
DeclareRec('OstatniUhrady');
DeclareRec('KeyOstatniUhrady9');

SetDescr(0,0,TA_Right|descr_PageNum,'Strana: ');
SetDescr(1,0,TA_Center,'Úhrady závazků');
SetDescr(2,0,TA_Left|descr_Date,'Datum: ');
SetDescr(3,1,TA_Left|Descr_UserDescr);

SetColumn(0,TA_RIGHT,5);                pořadové číslo
SetColumn(1,TA_LEFT,10);                doklad
SetColumn(2,TA_RIGHT,10);               datum
SetColumn(3,TA_RIGHT,10);               IČ
SetColumn(4,TA_LEFT,35);                firma
SetColumn(5,TA_RIGHT,12);               částka
SetColumn(6,TA_CENTER,4);               uhrazeno
SetColumn(7,TA_LEFT,10);                doklad zaplacení
SetColumn(8,TA_LEFT,10);                agenda
SetColumn(9,TA_LEFT,22);                bankovní účet
SetColumn(10,TA_RIGHT,10);              datum zaplacení
SetColumn(11,TA_RIGHT,12);              částka zaplacení

SetHead('PČ\tdoklad\tz data\tIČ\tnázev dodavatele\tčástka\tuhr.\tdoklad\tkde\tbankovní účet\tkdy\tkolik');

Veta:LongInt
VetaT:LongInt
Hotovo:LongInt
PC:LongInt
Celkem:Double;
Uhrazeno:Double;
OK:Boolean
AktLine:LongInt
Agenda:String[10];
Uhrada:String[3];
Ucet:String[49];

InitStatus(UsedKeys(KeyPokladna9)+UsedKeys(KeyBanka9)+UsedKeys(KeyOstatniUhrady9),'Třídím data ...')

Record TempData
  Datum:LongInt
  Cislo:LongInt
  Doklad:String[10];
  Castka:Real;
  Agenda:Byte;
  ProtiUcet:String[44];
end;

Record TempKey
  Length:Byte;
  Cislo:LongInt;
  Datum:Word;
end;

MakeTempFile(TempData,TempKey,False,False);

KeyPokladna9.Length=1
KeyPokladna9.SAgd=3

OK=SearchKey(KeyPokladna9,Veta);

While((OK) and (KeyPokladna9.SAgd=3))
  begin
    ReadRec(Pokladna,Veta)

    ClearRec(TempData);
    TempData.Agenda=agd_Pokladna
    TempData.Datum=Pokladna.Datum
    TempData.Cislo=Pokladna.SCislo
    TempData.Doklad=Pokladna.Doklad
    TempData.Castka=Pokladna.Castka

    if(not Pokladna.Vydaj)
      TempData.Castka=-TempData.Castka

    TempKey.Length=6
    TempKey.Cislo=SwapL(Pokladna.SCislo)
    TempKey.Datum=Swap(Pokladna.Datum)

    AddKey(TempKey,AddRec(TempData))

    Inc(Hotovo)
    SetStatus(Hotovo)
    OK=NextKey(KeyPokladna9,Veta)
  end;

KeyBanka9.Length=1
KeyBanka9.SAgd=3

OK=SearchKey(KeyBanka9,Veta);

While((OK) and (KeyBanka9.SAgd=3))
  begin
    ReadRec(Banka,Veta)

    ClearRec(TempData);
    TempData.Agenda=agd_Banka
    TempData.Datum=Banka.Datum
    TempData.Cislo=Banka.SCislo
    TempData.Doklad=Banka.Doklad
    TempData.Castka=Banka.Castka
    TempData.ProtiUcet=Banka.ProtiUcet

    if(not Banka.Vydaj)
      TempData.Castka=-TempData.Castka

    TempKey.Length=6
    TempKey.Cislo=SwapL(Banka.SCislo)
    TempKey.Datum=Swap(Banka.Datum)

    AddKey(TempKey,AddRec(TempData))

    Inc(Hotovo)
    SetStatus(Hotovo)
    OK=NextKey(KeyBanka9,Veta)
  end;

KeyOstatniUhrady9.Length=1
KeyOstatniUhrady9.SAgd=3

OK=SearchKey(KeyOstatniUhrady9,Veta);

While((OK) and (KeyOstatniUhrady9.SAgd=3))
  begin
    ReadRec(OstatniUhrady,Veta)

    ClearRec(TempData);
    TempData.Agenda=agd_OstatniUhrady
    TempData.Datum=OstatniUhrady.Datum
    TempData.Cislo=OstatniUhrady.SCislo
    TempData.Doklad=OstatniUhrady.Doklad
    TempData.Castka=OstatniUhrady.Castka

    if(not OstatniUhrady.Vydaj)
      TempData.Castka=-TempData.Castka

    TempKey.Length=6
    TempKey.Cislo=SwapL(OstatniUhrady.SCislo)
    TempKey.Datum=Swap(OstatniUhrady.Datum)

    AddKey(TempKey,AddRec(TempData))

    Inc(Hotovo)
    SetStatus(Hotovo)
    OK=NextKey(KeyOstatniUhrady9,Veta)
  end;

Hotovo=0
InitStatus(UsedKeys(KeyZavazek),'Vytvářím sestavu ...')

ClearKey(KeyZavazek);

While(NextKey(KeyZavazek,Veta))
  begin
    ReadRec(Zavazek,Veta);
    if((Zavazek.Uhrazena)or(Zavazek.CountZapl<>0))
      begin
        if(InFilter(Zavazek))
          begin
            Celkem=Celkem+Zavazek.Castka
            Ucet=Zavazek.Ucet
            if(Zavazek.Banka<>0)
              Ucet=Ucet+'/'+NulL(Str(Zavazek.Banka),4)
            Inc(PC);
            if(Zavazek.Uhrazena)
              Uhrada='ANO'
            else
              Uhrada='NE'
            AddText(Str(PC),Zavazek.Doklad,StrDate(Zavazek.Datum),Str(Zavazek.ICO),Zavazek.Firma,StrFinanc(Zavazek.Castka,2),Uhrada,);
            if(Zavazek.CountZapl=0)
              begin
                AddLine(Zavazek.DoklZapl,,,StrDate(Zavazek.Datum_dzp),StrFinanc(Zavazek.Castka,2));
                Uhrazeno=Uhrazeno+Zavazek.Castka
              end else
              begin
                AktLine=0;
                TempKey.Length=4
                TempKey.Cislo=SwapL(Zavazek.Cislo);
                OK=SearchKey(TempKey,VetaT)
                While((OK)and(TempKey.Cislo=SwapL(Zavazek.Cislo)))
                  begin
                    ReadRec(TempData,VetaT);
                    Inc(AktLine)
                    if(AktLine>1)
                      AddText(,,,,,,,,)
                    if(TempData.Agenda=agd_Pokladna)
                      Agenda='pokladna'
                    else
                    if(TempData.Agenda=agd_Banka)
                      begin
                        Agenda='banka'
                        if(Length(TempData.ProtiUcet)=0)
                          TempData.ProtiUcet=Ucet
                      end else
                    if(TempData.Agenda=agd_OstatniUhrady)
                      Agenda='ostatní'
                    else
                      Agenda=''
                    AddLine(TempData.Doklad,Agenda,TempData.ProtiUcet,StrDate(TempData.Datum),StrFinanc(TempData.Castka,2))
                    Uhrazeno=Uhrazeno+TempData.Castka
                    OK=NextKey(TempKey,VetaT)
                  end;
              end;
          end
      end;
    Inc(Hotovo);
    SetStatus(Hotovo);
  end;

  AddComment()
  AddLine(,,,,'Celkem',StrFinanc(Celkem,2),,,,StrFinanc(Uhrazeno,2));

END