﻿unit Uzahlung;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Mask, Buttons, ExtCtrls, DB, DBTables,uvars,
  upsuch,ufsuch,udiverse,Gauges,uberecht, Menus,ukalend,bde32,
  ComCtrls,lzexpand, ImgList, ToolWin, JvExControls, JvComponent,
  JvArrowButton,jclstrings;

type
  TZahlung = class(TForm)
    lfaktura: TListBox;
    Label1: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    nrfaktura: TEdit;
    Label3: TLabel;
    Datum: TMaskEdit;
    Label4: TLabel;
    Betrag: TMaskEdit;
    Label5: TLabel;
    lkonto: TComboBox;
    Label6: TLabel;
    vorauszahlung: TCheckBox;
    Panel1: TPanel;
    lzahlungen: TListBox;
    Zahlungen: TLabel;
    btnstorno: TButton;
    BitBtn4: TBitBtn;
    tb_zahlung: TTable;
    tb_privat: TTable;
    TB_firma: TTable;
    tb_faktura: TTable;
    tb_debitor: TTable;
    tb_konto: TTable;
    panelzahlung: TPanel;
    tb_besrt: TTable;
    tb_besri: TTable;
    panelverarbeitung: TPanel;
    Label2: TLabel;
    tb_zjournal: TTable;
    tb_anrede: TTable;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Verlassen1: TMenuItem;
    Disketteeinlesen1: TMenuItem;
    status: TPanel;
    datumbtn: TBitBtn;
    q_faktura: TQuery;
    q_zahlung: TQuery;
    tb_tmpkonto: TTable;
    tb_faktura1: TTable;
    Gauge1: TProgressBar;
    tb_formular: TTable;
    tb_formfeld: TTable;
    tb_anzahlungen: TTable;
    tb_behandlung: TTable;
    tb_rgtyp: TTable;
    tb_privat1: TTable;
    tb_ansatz: TTable;
    tb_abrechnungstyp: TTable;
    RGNR: TButton;
    Deb: TLabel;
    Pat: TLabel;
    OpenDialog1: TOpenDialog;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    ImageList1: TImageList;
    Panel3: TPanel;
    N1: TMenuItem;
    PopupMenu1: TPopupMenu;
    Rechnungstornieren1: TMenuItem;
    PopupMenu2: TPopupMenu;
    N2: TMenuItem;
    ZL1: TMenuItem;
    JvArrowButton1: TJvArrowButton;
    PopupMenu3: TPopupMenu;
    Vorlagebearbeiten1: TMenuItem;
    PopupMenu4: TPopupMenu;
    Quittungsvorlagebearbeiten1: TMenuItem;
    Quittungdrucken1: TMenuItem;
    Quitungsvorlagebearbeiten1: TMenuItem;
    N3: TMenuItem;
    procedure btnexitClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure printbtnClick(Sender: TObject);
    procedure lzahlungenClick(Sender: TObject);
    procedure btnstornoClick(Sender: TObject);
    procedure lfakturaClick(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure Verlassen1Click(Sender: TObject);
    procedure Disketteeinlesen1Click(Sender: TObject);
    procedure DatumEnter(Sender: TObject);
    procedure BetragEnter(Sender: TObject);
    procedure lkontoEnter(Sender: TObject);
    procedure vorauszahlungEnter(Sender: TObject);
    procedure lzahlungenEnter(Sender: TObject);
    procedure lfakturaEnter(Sender: TObject);
    procedure btnhelpClick(Sender: TObject);
    procedure Hilfe1Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure tb_zahlungAfterPost(DataSet: TDataset);
    procedure tb_fakturaAfterPost(DataSet: TDataset);
    procedure tb_debitorAfterPost(DataSet: TDataset);
    procedure tb_anzahlungenAfterPost(DataSet: TDataSet);
    procedure RGNRClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
    procedure ToolButton8Click(Sender: TObject);
    procedure ToolButton10Click(Sender: TObject);
    procedure Rechnungstornieren1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure ZL1Click(Sender: TObject);
    procedure JvArrowButton1Click(Sender: TObject);
    procedure Vorlagebearbeiten1Click(Sender: TObject);
    procedure Quittungdrucken1Click(Sender: TObject);
    procedure Quitungsvorlagebearbeiten1Click(Sender: TObject);
    procedure lzahlungenDblClick(Sender: TObject);
  private
    su,su1,su2,su3:double;
    xdebitor:integer;
    nlanguage:integer;
    fname:string;
    pfad:string;
    nreccount,papierschacht:integer;
    filename:array[0..64] of char;
    typ:string;
    slangtext:array[0..60] of char;
    Tagesdatum,tageszeit:string;
    wt,wt1,sprinter,sport:array[0..64] of char;
    stopaction:boolean;
    rc:integer;
    fakturanummer:integer;
    erstellungsdatum:double;
    procedure copyfile(source,dest:string);
    procedure set_caption;
    procedure set_caption_Privat;
    procedure set_caption_Firma;
    procedure offene_rechnungen;
    procedure erledigte_zahlungen;
    function verbucht:boolean;
    procedure insert_into_zjournal;
    procedure anzahlung_verbuchen(nrfaktura,nrkonto:integer);
    function neue_behandlung(patient:integer):integer;
    procedure meldung_doppelzahlung(nrfaktura:integer);
    { Private-Deklarationen }
  public
    nrdebitor:longint;
    procedure refresh;
    { Public-Deklarationen }
  end;

var
  Zahlung: TZahlung;
  design:boolean;

implementation

uses uzahlzuw, Uvz, UReporting, ureports, umenuhandler;

{$R *.DFM}

procedure TZahlung.btnexitClick(Sender: TObject);
begin
   close;
end;

procedure TZahlung.FormDestroy(Sender: TObject);
begin
   tb_zjournal.close;
   tb_zahlung.close;
   tb_privat.close;
   tb_firma.close;
   tb_faktura.close;
   tb_debitor.close;
   tb_konto.close;
   tb_anrede.close;
   tb_anzahlungen.close;
   tb_behandlung.close;
   tb_privat1.close;
end;

procedure TZahlung.FormCreate(Sender: TObject);
begin
   screen.cursor:=crhourglass;
   loginsert(0,'Zahlungsverarbeitung gestartet');
   tb_anrede.open;
   tb_zjournal.open;
   tb_zahlung.open;
   tb_privat.open;
   tb_firma.open;
   tb_faktura.open;
   tb_debitor.open;
   tb_konto.open;
   lkonto.clear;
   tb_anzahlungen.open;
   tb_behandlung.open;
   tb_privat1.open;
   screen.cursor:=crdefault;
end;

procedure tzahlung.refresh;
begin
   screen.cursor:=crhourglass;
   lkonto.clear;
   with tb_konto do begin
      first;
      while not eof do begin
         lkonto.items.add(fieldbyname('konto').asstring+
                          keyblank+
                          fieldbyname('nrkonto').asstring);
         next;
      end;
      lkonto.itemindex:=0;
   end;
   datum.text:=datetostr(now);
   if nrdebitor <> 0 then begin
      set_caption;
      offene_rechnungen;
      erledigte_zahlungen;
   end;
   screen.cursor:=crdefault;
end;

procedure tzahlung.set_caption;
begin
   with tb_privat do begin
      indexname:='';
      setkey;
      fieldbyname('nrprivat').asinteger:=nrdebitor;
      if gotokey then begin
         s:='   '+tb_privat.fieldbyname('nrprivat').asstring+' - '+
                        scut(tb_privat.fieldbyname('vorname').asstring)+' '+
                        scut(tb_privat.fieldbyname('name').asstring)+', '+
                        scut(tb_privat.fieldbyname('ort').asstring);

      end else begin
         with tb_firma do begin
            indexname:='';
            setkey;
            fieldbyname('nrfirma').asinteger:=nrdebitor;
            gotokey;
            s:='    '+fieldbyname('nrfirma').asstring+' '+
               fieldbyname('name1').asstring+', '+
               fieldbyname('ort').asstring;
         end;
      end;
   end;
   panel3.caption:=s;
   zahlung.caption:=gettext(1006)+s;
end;
procedure tzahlung.set_caption_Privat;
begin
   with tb_privat do begin
      indexname:='';
      setkey;
      fieldbyname('nrprivat').asinteger:=nrdebitor;
      if gotokey then begin
         s:='   '+tb_privat.fieldbyname('nrprivat').asstring+' - '+
                        scut(tb_privat.fieldbyname('vorname').asstring)+' '+
                        scut(tb_privat.fieldbyname('name').asstring)+', '+
                        scut(tb_privat.fieldbyname('ort').asstring);

      end;
   end;
   panel3.caption:=s;
   zahlung.caption:=gettext(1006)+s;
end;
procedure tzahlung.set_caption_Firma;
begin
   with tb_firma do begin
      indexname:='';
      setkey;
      fieldbyname('nrfirma').asinteger:=nrdebitor;
      gotokey;
      s:='    '+fieldbyname('nrfirma').asstring+' - '+
         fieldbyname('name1').asstring+', '+
         fieldbyname('ort').asstring;
   end;
   panel3.caption:=s;
   zahlung.caption:=gettext(1006)+s;
end;


procedure TZahlung.BitBtn1Click(Sender: TObject);
begin
   deb.caption:='';
   pat.caption:='';
   psuche.showmodal;
   if searchkey <> 0 then begin
      nrdebitor:=searchkey;
      set_caption_Privat;
      offene_rechnungen;
      erledigte_zahlungen;
   end;
end;

procedure TZahlung.BitBtn2Click(Sender: TObject);
begin
   deb.caption:='';
   pat.caption:='';
   fsuche.showmodal;
   if searchkey <> 0 then begin
      nrdebitor:=searchkey;
      set_caption_Firma;
      offene_rechnungen;
      erledigte_zahlungen;
   end;
end;
procedure TZahlung.printbtnClick(Sender: TObject);
begin
   Kalender.datum:=strtodate(datum.text);
   kalender.showmodal;
   datum.text:=datetostr(kalender.datum);
end;

procedure tzahlung.offene_rechnungen;
var t,bereitsbezahlt:real;
    s,s1:string;
begin
   with tb_faktura do begin
      indexname:='idxdebitor';
      setkey;
      fieldbyname('nrdebitor').asinteger:=nrdebitor;
      gotokey;
      lfaktura.clear;
      while (not eof) and (fieldbyname('nrdebitor').asinteger=nrdebitor) do begin
         t:=0;
         if fieldbyname('status').asinteger=0 then begin
            bereitsbezahlt:=0;
            with tb_zahlung do begin
               indexname:='idx_faktura';
               setkey;
               fieldbyname('nrfaktura').asinteger:=tb_faktura.fieldbyname('nrfaktura').asinteger;
               gotokey;
               while (not eof) and (fieldbyname('nrfaktura').asinteger=tb_faktura.fieldbyname('nrfaktura').asinteger) do begin
                  if fieldbyname('status').asinteger=0 then begin
                     bereitsbezahlt:=bereitsbezahlt+fieldbyname('betrag').asfloat;
                  end;
                  next;
               end;
            end;
            t:=fieldbyname('total').asfloat;
            if fieldbyname('mahndatum3').asstring<>'' then t:=t+fieldbyname('mahngebuehr3').asfloat else
               if fieldbyname('mahndatum2').asstring<>'' then t:=t+fieldbyname('mahngebuehr2').asfloat else
                  if fieldbyname('mahndatum1').asstring<>'' then t:=t+fieldbyname('mahngebuehr1').asfloat;
            t:=t-bereitsbezahlt;
            str(t:8:2,s);
            str(bereitsbezahlt:8:2,s1);
            if t>0.04 then begin
               lfaktura.items.add(fieldbyname('nrfaktura').asstring+' '+fieldbyname('datum').asstring+' '+s+' '+s1);
            end;
         end;
         next;
      end;
   end;
end;

procedure tzahlung.erledigte_zahlungen;
var s1:string;
begin
   with tb_zahlung do begin
      indexname:='idx_debitor';
      setkey;
      fieldbyname('nrdebitor').asinteger:=nrdebitor;
      gotokey;
      lzahlungen.clear;
      while (not eof) and (fieldbyname('nrdebitor').asinteger=nrdebitor) do begin
         str(fieldbyname('betrag').asfloat:8:2,s);
         if fieldbyname('status').asinteger=0 then s:=s+'';
         if fieldbyname('status').asinteger=9 then s:=s+'/storno';
         if fieldbyname('status').asinteger=1 then s:=s+'/VZ';
         with tb_konto do begin
            setkey;
            fieldbyname('nrkonto').asinteger:=tb_zahlung.fieldbyname('nrkonto').asinteger;
            gotokey;
            s1:=fieldbyname('konto').asstring;
            while length(s1)<8 do begin
               s1:=s1+' ';
            end;
            if length(s1)>0 then s1:=strleft(s1,8);
            if tb_zahlung.fieldbyname('nrfaktura').asstring <> '0' then s1:=s1+'/RG:' + tb_zahlung.fieldbyname('nrfaktura').asstring;
         end;
         lzahlungen.items.insert(0,fieldbyname('valuta').asstring+' '+s+'/'+s1+keyblank+
                              fieldbyname('nrzahlung').asstring);
         next;
      end;
   end;
   btnstorno.enabled:=false;
end;



procedure TZahlung.lzahlungenClick(Sender: TObject);
begin
   if pos('storno',lzahlungen.items[lzahlungen.itemindex])=0 then btnstorno.enabled:=true;
end;

procedure TZahlung.btnstornoClick(Sender: TObject);
begin
   if berechtigungen.berechtigt(78) = false then exit;
   if meldungyesno(125)=id_yes then begin
      with tb_zahlung do begin
         indexname:='';
         setkey;
         fieldbyname('nrzahlung').asinteger:=key_from_string(lzahlungen.items[lzahlungen.itemindex]);
         if gotokey then begin
            if fieldbyname('nrbehandlung').asinteger > 0 then begin
               meldung(127);
               exit;
            end;
            edit;
            fieldbyname('status').asinteger:=9;
            insert_into_zjournal;
            post;
            if fieldbyname('vorauszahlung').asboolean=false then begin
               with tb_debitor do begin
                  indexname:='idx_faktura';
                  setkey;
                  fieldbyname('nrfaktura').asinteger:=tb_zahlung.fieldbyname('nrfaktura').asinteger;
                  if gotokey then begin
                     edit;
                     fieldbyname('betrag').asfloat:=fieldbyname('betrag').asfloat+tb_zahlung.fieldbyname('betrag').asfloat;
                     post;
                  end;
               end;
               if tb_debitor.fieldbyname('betrag').asfloat > 0 then begin
                  with tb_faktura do begin
                     indexname:='';
                     setkey;
                     fieldbyname('nrfaktura').asinteger:=tb_zahlung.fieldbyname('nrfaktura').asinteger;
                     if gotokey then begin
                        edit;
                        fieldbyname('status').asinteger:=0;
                        fieldbyname('statusdatum').asfloat:=now;
                        post;
                     end;
                  end;
               end;
            end;
            erledigte_zahlungen;
            offene_rechnungen;
         end;
      end;
   end;
end;

procedure TZahlung.lfakturaClick(Sender: TObject);
var s,s1:string;
begin
   vorauszahlung.checked:=false;
   s:=lfaktura.items[lfaktura.itemindex];
   nrfaktura.text:=copy(s,1,10);
   s:=(copy(s,23,8));
   i:=pos('.',s);
   if i > 0 then begin
      s:=copy(s,1,i-1)+'.'+copy(s,i+1,length(s));
   end;
   betrag.text:=s;
   datum.text:=datetostr(now);
   vorauszahlung.checked:=false;
   pat.caption:='';
   deb.caption:='';
   with tb_faktura do begin
      indexname:='';
      setkey;
      fieldbyname('nrfaktura').asstring:=nrfaktura.Text;
      gotokey;
   end;
   with tb_privat do begin
      indexname:='';
      setkey;
      fieldbyname('nrprivat').asinteger:=tb_faktura.fieldbyname('nrpatient').asinteger;
      gotokey;
      pat.caption:='Patient:'+fieldbyname('nrprivat').asstring+' / '+fieldbyname('vorname').asstring+' '+fieldbyname('name').asstring+', '+fieldbyname('ort').asstring;
      pat.refresh;
   end;
   if tb_faktura.fieldbyname('nrdebitor').asinteger<>tb_faktura.fieldbyname('nrpatient').asinteger then begin
      with tb_privat do begin
         setkey;
         fieldbyname('nrprivat').asinteger:=tb_faktura.fieldbyname('nrdebitor').asinteger;
         if gotokey then begin
            deb.caption:='Debitor:'+fieldbyname('nrprivat').asstring+' / '+fieldbyname('vorname').asstring+' '+fieldbyname('name').asstring+', '+fieldbyname('ort').asstring;
            deb.refresh;
         end else begin
            with tb_firma do begin
               setkey;
               fieldbyname('nrfirma').asinteger:=tb_faktura.fieldbyname('nrdebitor').asinteger;
               if gotokey then begin
                  deb.caption:='Debitor:'+fieldbyname('nrfirma').asstring+' / '+fieldbyname('name1').asstring+' '+fieldbyname('ort').asstring;
                  deb.refresh;
               end;
            end;
         end;
      end;
   end;
end;

procedure TZahlung.BitBtn4Click(Sender: TObject);
var b,b1:double;
    x:string;
    i1:integer;
begin
   if not berechtigungen.berechtigt(78) then exit;
   if vorauszahlung.checked then begin
      with tb_zahlung do begin
         indexname:='';
         last;
         i:=fieldbyname('nrzahlung').asinteger+1;
         insert;
         fieldbyname('nrzahlung').asinteger:=i;
         fieldbyname('mandant').asinteger:=mandant;
         fieldbyname('valuta').asstring:=datum.text;
         fieldbyname('nrfaktura').asinteger:=0;
         fieldbyname('betrag').asfloat:=strtofloat(betrag.text);
         fieldbyname('nrdebitor').asinteger:=nrdebitor;
         fieldbyname('nrkonto').asinteger:=key_from_string(lkonto.items[lkonto.itemindex]);
         fieldbyname('vorauszahlung').asboolean:=vorauszahlung.checked=true;
         fieldbyname('status').asinteger:=1;
         fieldbyname('statusdatum').asfloat:=now;
         post;
         insert_into_zjournal;

         zahlzuw.nrpatient:=fieldbyname('nrdebitor').asinteger;
         zahlzuw.betrag:=fieldbyname('betrag').asfloat;
         zahlzuw.nrzahlung:=fieldbyname('nrzahlung').asinteger;
         zahlzuw.showmodal;
      end;
      erledigte_zahlungen;
      exit;
   end;
   with tb_zahlung do begin
      s:=copy(lfaktura.items[lfaktura.itemindex],23,8);
      i:=pos('.',s);
      if i > 0 then begin
         s:=copy(s,1,i-1)+'.'+copy(s,i+1,length(s));
      end;
      b:=strtofloat(s);
      b1:=strtofloat(betrag.text);
      if b1>b then begin
         meldung(126);
         exit;
      end;
      indexname:='';
      last;
      i:=fieldbyname('nrzahlung').asinteger+1;
      insert;
      fieldbyname('nrzahlung').asinteger:=i;
      fieldbyname('mandant').asinteger:=mandant;
      fieldbyname('valuta').asstring:=datum.text;
      fieldbyname('nrfaktura').asinteger:=strtoint(nrfaktura.text);
      fieldbyname('betrag').asfloat:=strtofloat(betrag.text);
      fieldbyname('nrdebitor').asinteger:=nrdebitor;
      fieldbyname('nrkonto').asinteger:=key_from_string(lkonto.items[lkonto.itemindex]);
      fieldbyname('vorauszahlung').asboolean:=vorauszahlung.checked=true;
      fieldbyname('status').asinteger:=0;
      fieldbyname('statusdatum').asfloat:=now;
      post;
      insert_into_zjournal;
      if not fieldbyname('vorauszahlung').asboolean then begin
         with tb_debitor do begin
            indexname:='idx_faktura';
            setkey;
            fieldbyname('nrfaktura').asinteger:=tb_zahlung.fieldbyname('nrfaktura').asinteger;
            if gotokey then begin
               edit;
               fieldbyname('betrag').asfloat:=fieldbyname('betrag').asfloat-tb_zahlung.fieldbyname('betrag').asfloat;
               post;
               x:=floattostr(fieldbyname('betrag').asfloat);
               val(x,b,i1);
               if fieldbyname('betrag').asfloat=0 then begin
                  with tb_faktura do begin
                     indexname:='';
                     setkey;
                     fieldbyname('nrfaktura').asinteger:=tb_debitor.fieldbyname('nrfaktura').asinteger;
                     if gotokey then begin
                        edit;
                        fieldbyname('status').asinteger:=0;
                        fieldbyname('statusdatum').asfloat:=now;
                        post;
                     end;
                  end;
               end;
            end;
         end;
      end;
      nrfaktura.text:='';
      datum.text:=datetostr(now);
      betrag.text:='0.00';
      offene_rechnungen;
      erledigte_zahlungen;
   end;
end;


function tzahlung.verbucht:boolean;
var nrfaktura:longint;
    nrkonto:longint;
    storno:boolean;
    nofaktura,nodebitor,fakturastorniert:boolean;
    zahlungsstorno:boolean;
    s:string;
begin
   zahlungsstorno:=false;
   nofaktura:=false;
   nodebitor:=false;
   fakturastorniert:=false;
   storno:=false;
   nrkonto:=diverse.get_konto;
   verbucht:=true;
   nrfaktura:=strtoint(copy(tb_besri.fieldbyname('referenz').asstring,7,10));
   s:=inttostr(nrfaktura);
   if copy(s,5,1)='9' then begin
      anzahlung_verbuchen(nrfaktura,nrkonto);
      verbucht:=true;
      exit;
   end;
   with tb_faktura do begin
      indexname:='';
      setkey;
      fieldbyname('nrfaktura').asinteger:=nrfaktura;
      if not gotokey then begin
         meldung(204);
         verbucht:=false;
         storno:=true;
         nofaktura:=true;
      end;
      if fieldbyname('status').asinteger=9 then begin
         meldung(205);
         verbucht:=false;
         storno:=true;
         fakturastorniert:=false;
      end;
   end;
   //Neu Meldung bei Doppelzahlung
   with tb_zahlung do begin
      indexname:='idx_faktura';
      setkey;
      fieldbyname('nrfaktura').asinteger:=nrfaktura;
      if gotokey then begin
         meldung_doppelzahlung(nrfaktura);
      end;
   end;
   // Ende Meldung

   with tb_debitor do begin
      indexname:='idx_faktura';
      setkey;
      fieldbyname('nrfaktura').asinteger:=nrfaktura;
      if not gotokey then begin
         meldung(206);
         verbucht:=false;
         nodebitor:=true;
         storno:=true;
      end;
      if fieldbyname('status').asinteger=9 then storno:=true;
      edit;
      strpcopy(wt,'');
      if copy(tb_besri.fieldbyname('transaktion').asstring,3,1)='5' then begin
         zahlungsstorno:=true;
         fieldbyname('betrag').asfloat:=fieldbyname('betrag').asfloat+
                                     tb_besri.fieldbyname('betrag').asfloat;
         strpcopy(wt,'J');
      end else begin
         fieldbyname('betrag').asfloat:=fieldbyname('betrag').asfloat-
                                     tb_besri.fieldbyname('betrag').asfloat;
      end;
      if not storno then begin
         post;
         str(fieldbyname('betrag').asfloat:8:2,wt);
{        ll.lldefinefieldext('Differenz',wt,ll_text,'');}
      end;
      if not storno then begin
         with tb_faktura do begin
            setkey;
            fieldbyname('nrfaktura').asinteger:=nrfaktura;
            gotokey;
            edit;
            if tb_debitor.fieldbyname('betrag').asfloat=0 then begin
               tb_faktura.fieldbyname('status').asinteger:=0;
               tb_faktura.fieldbyname('statusdatum').asfloat:=now;
            end else begin
               tb_faktura.fieldbyname('status').asinteger:=0;
               tb_faktura.fieldbyname('statusdatum').asfloat:=now;
            end;
            post;
         end;
      end;
      if not storno then begin
         with tb_zahlung do begin
            indexname:='';
            last;
            i:=fieldbyname('nrzahlung').asinteger+1;
            insert;
            fieldbyname('nrzahlung').asinteger:=i;
            fieldbyname('nrfaktura').asinteger:=nrfaktura;
            fieldbyname('betrag').asfloat:=tb_besri.fieldbyname('betrag').asfloat;
            fieldbyname('vorauszahlung').asboolean:=false;
            fieldbyname('nrkonto').asinteger:=nrkonto;
            fieldbyname('mandant').asinteger:=mandant;
            fieldbyname('nrdebitor').asinteger:=tb_faktura.fieldbyname('nrdebitor').asinteger;
            fieldbyname('valuta').asfloat:=tb_besri.fieldbyname('datumgutschrift').asfloat;
           { fieldbyname('nrbehandlung').asinteger:=tb_faktura.fieldbyname('nrbehandlung').asinteger;}
            fieldbyname('status').asinteger:=0;
            fieldbyname('statusdatum').asfloat:=now;
            if zahlungsstorno then begin
               fieldbyname('betrag').asfloat:=fieldbyname('betrag').asfloat*-1;
            end;
            post;
            insert_into_zjournal;
         end;
      end;
   end;
   if not storno then verbucht:=true else verbucht:=false;
   strpcopy(wt,'');
   strpcopy(wt,copy(tb_besri.fieldbyname('referenz').asstring,7,10));
{  ll.lldefinefieldext('Fakturanummer',wt,ll_text,'');
   str(tb_besri.fieldbyname('betrag').asfloat:8:2,wt);
   ll.lldefinefieldext('Betrag',wt,ll_text,'');
   str(tb_besri.fieldbyname('taxen_ptt').asfloat:8:2,wt);
   ll.lldefinefieldext('PTT_Taxen',wt,ll_text,'');
   if storno then strpcopy(wt,'N') else strpcopy(wt,'J');
   ll.lldefinefieldext('Verarbeitet',wt,ll_text,'');
   strpcopy(wt,tb_besri.fieldbyname('transaktion').asstring);
   ll.lldefinefieldext('Transaktion',wt,ll_text,'');
   if nodebitor then strpcopy(wt,'') else strpcopy(wt,tb_faktura.fieldbyname('nrdebitor').asstring);
   ll.lldefinefieldext('Debitorennummer',wt,ll_text,'');
   strpcopy(wt,tb_besri.fieldbyname('datumgutschrift').asstring);
   ll.lldefinefieldext('Valuta',wt,ll_text,'');
   with tb_privat do begin
      setkey;
      fieldbyname('nrprivat').asinteger:=tb_faktura.fieldbyname('nrdebitor').asinteger;
      if gotokey then begin
         strpcopy(wt,scut1(fieldbyname('vorname').asstring)+'. '+
                     fieldbyname('name').asstring+', '+
                     fieldbyname('ort').asstring);
      end else begin
         with tb_firma do begin
            setkey;
            fieldbyname('nrfirma').asinteger:=tb_faktura.fieldbyname('nrdebitor').asinteger;
            if gotokey then begin
               strpcopy(wt,fieldbyname('name1').asstring+', '+
                           fieldbyname('ort').asstring);
            end else begin
               strpcopy(wt,diverse.gettext(210));
            end;
         end;
      end;
   end;
   if nodebitor then begin
      strpcopy(wt,'');
      strpcopy(wt,'Ref-Nr:' + tb_besri.fieldbyname('Referenz').asstring);
   end;
   ll.lldefinefieldext('Debitor',wt,ll_text,'');
   strpcopy(wt,'');
   if tb_faktura.fieldbyname('nrdebitor').asinteger<>tb_faktura.fieldbyname('nrpatient').asinteger then begin
      with tb_privat do begin
         setkey;
         fieldbyname('nrprivat').asinteger:=tb_faktura.fieldbyname('nrpatient').asinteger;
         if gotokey then begin
            strpcopy(wt,scut1(fieldbyname('vorname').asstring)+'. '+
                        fieldbyname('name').asstring+', '+
                        fieldbyname('ort').asstring);
         end else begin
            with tb_firma do begin
               setkey;
               fieldbyname('nrfirma').asinteger:=tb_faktura.fieldbyname('nrpatient').asinteger;
               if gotokey then begin
                  strpcopy(wt,fieldbyname('name1').asstring+', '+
                              fieldbyname('ort').asstring);
               end else begin
                  strpcopy(wt,diverse.gettext(210));
               end;
            end;
         end;
      end;
   end;
   if nofaktura then strpcopy(wt,diverse.gettext(207));
   if nodebitor then strpcopy(wt,diverse.gettext(208));
   if fakturastorniert then strpcopy(wt,diverse.gettext(209));
   ll.lldefinefieldext('Patient',wt,ll_text,'');
   str(su:4:2,wt);
   ll.lldefinefieldext('Summe',wt,ll_text or ll_table_footerfield,'');
   str(su1:8:2,wt);
   ll.lldefinefieldext('Summe1',wt,ll_text or ll_table_footerfield,'');
   str(su2:8:2,wt);
   ll.lldefinefieldext('Summe2',wt,ll_text or ll_table_footerfield,'');
   str(su3:8:2,wt);
   ll.lldefinefieldext('Summe3',wt,ll_text or ll_table_footerfield,'');

   rc:=ll.llprintfields();
   if rc <> 0 then begin
      rc:=0;
      ll.llprint();
      ll.llprintfields();
   end;}
end;

Procedure tzahlung.meldung_doppelzahlung(nrfaktura:integer);
var s:string;
begin
   s:='Eine Zahlung wirD verbucht, wobei bereits eine Zahlung für die Rechnung vorhanden ist.'+chr(13)+chr(13);
   diverse.getadresse(tb_faktura.fieldbyname('nrdebitor').asinteger,tb_faktura.fieldbyname('nrdebitor').asinteger);
   s:=s+chr(13)+chr(13)+'Fakturanummer: ' + tb_faktura.fieldbyname('nrfaktura').asstring+chr(13)+chr(13);
   s:=s+'Debitor:'+chr(13);
   s:=s+diverse.adresszeile1+chr(13);
   s:=s+diverse.adresszeile2+chr(13);
   s:=s+diverse.adresszeile3+chr(13);
   s:=s+diverse.adresszeile4+chr(13);
   s:=s+diverse.adresszeile5+chr(13);
   s:=s+diverse.adresszeile6+chr(13);
   showmessage(s);
end;

procedure tzahlung.anzahlung_verbuchen(nrfaktura,nrkonto:integer);
var patient,i,behandlung:integer;
begin
   with tb_anzahlungen do begin
      setkey;
      fieldbyname('nranzahlung').asinteger:=nrfaktura;
      if not gotokey then begin
         showmessage('Keine Anzahlung für Rechnungsnummer '+inttostr(nrfaktura)+'. Keine Verbuchung dieser Rechnung!');
         exit;
      end;
      edit;
      fieldbyname('einbezahlt').asfloat:=tb_besri.fieldbyname('betrag').asfloat;
      post;
      with tb_behandlung do begin
         indexname:='';
         setkey;
         fieldbyname('nrbehandlung').asinteger:=tb_anzahlungen.fieldbyname('nrbehandlung').asinteger;
         gotokey;
         patient:=fieldbyname('nrpatient').asinteger;
         if (fieldbyname('nrgarant').asinteger <> fieldbyname('nrpatient').asinteger) and (fieldbyname('nrgarant').asinteger > 0)
            then xdebitor:=fieldbyname('nrgarant').asinteger else xdebitor:=fieldbyname('nrpatient').asinteger;
         indexname:='idx_patient';
         setkey;
         fieldbyname('nrpatient').asinteger:=patient;
         fieldbyname('status').asinteger:=0;
         gotonearest;
         behandlung:=0;
         while (not eof) and (fieldbyname('nrpatient').asinteger=patient) do begin
            if fieldbyname('status').asinteger=1 then begin
               if behandlung=0 then behandlung:=fieldbyname('nrbehandlung').asinteger;
            end;
            next;
         end;
      end;
      if behandlung=0 then behandlung:=neue_behandlung(patient);
      with tb_zahlung do begin
         indexname:='';
         last;
         i:=fieldbyname('nrzahlung').asinteger+1;
         insert;
         fieldbyname('nrzahlung').asinteger:=i;
{         fieldbyname('nrfaktura').asinteger:=nrfaktura;}
         fieldbyname('betrag').asfloat:=tb_besri.fieldbyname('betrag').asfloat;
         fieldbyname('vorauszahlung').asboolean:=true;
         fieldbyname('nrkonto').asinteger:=nrkonto;
         fieldbyname('mandant').asinteger:=mandant;
         fieldbyname('nrdebitor').asinteger:=xdebitor;
         fieldbyname('valuta').asfloat:=tb_besri.fieldbyname('datumgutschrift').asfloat;
         fieldbyname('nrbehandlung').asinteger:=behandlung;
         fieldbyname('status').asinteger:=1;
         fieldbyname('statusdatum').asfloat:=now;
         post;
         str(fieldbyname('betrag').asfloat:8:2,wt);
{        ll.lldefinefieldext('Differenz',wt,ll_text,'');
         strpcopy(wt,'');
         strpcopy(wt,copy(tb_besri.fieldbyname('referenz').asstring,7,10));
         ll.lldefinefieldext('Fakturanummer',wt,ll_text,'');
         str(tb_besri.fieldbyname('betrag').asfloat:8:2,wt);
         ll.lldefinefieldext('Betrag',wt,ll_text,'');
         str(tb_besri.fieldbyname('taxen_ptt').asfloat:8:2,wt);
         ll.lldefinefieldext('PTT_Taxen',wt,ll_text,'');
         strpcopy(wt,'J');
         ll.lldefinefieldext('Verarbeitet',wt,ll_text,'');
         strpcopy(wt,tb_besri.fieldbyname('transaktion').asstring);
         ll.lldefinefieldext('Transaktion',wt,ll_text,'');
         strpcopy(wt,inttostr(xdebitor)+' *** ');
         ll.lldefinefieldext('Debitorennummer',wt,ll_text,'');
         strpcopy(wt,tb_besri.fieldbyname('datumgutschrift').asstring);
         ll.lldefinefieldext('Valuta',wt,ll_text,'');}
         with tb_privat1 do begin
            setkey;
            fieldbyname('nrprivat').asinteger:=xdebitor;
            if gotokey then begin
               strpcopy(wt,scut1(fieldbyname('vorname').asstring)+'. '+
                     fieldbyname('name').asstring+', '+
                     fieldbyname('ort').asstring);
            end else begin
               with tb_firma do begin
                  setkey;
                  fieldbyname('nrfirma').asinteger:=xdebitor;
                  if gotokey then begin
                     strpcopy(wt,fieldbyname('name1').asstring+', '+
                              fieldbyname('ort').asstring);
                  end else begin
                     strpcopy(wt,diverse.gettext(210));
                  end;
               end;
            end;
         end;
{        ll.lldefinefieldext('Debitor',wt,ll_text,'');}
         strpcopy(wt,'');
         if xdebitor <> patient then begin
             with tb_privat1 do begin
               setkey;
               fieldbyname('nrprivat').asinteger:=patient;
               if gotokey then begin
                  strpcopy(wt,scut1(fieldbyname('vorname').asstring)+'. '+
                         fieldbyname('name').asstring+', '+
                        fieldbyname('ort').asstring);
               end;
            end;
         end;
{        ll.lldefinefieldext('Patient',wt,ll_text,'');
         str(su:4:2,wt);
         ll.lldefinefieldext('Summe',wt,ll_text or ll_table_footerfield,'');
         str(su1:8:2,wt);
         ll.lldefinefieldext('Summe1',wt,ll_text or ll_table_footerfield,'');
         str(su2:8:2,wt);
         ll.lldefinefieldext('Summe2',wt,ll_text or ll_table_footerfield,'');
         str(su3:8:2,wt);
         ll.lldefinefieldext('Summe3',wt,ll_text or ll_table_footerfield,'');
         rc:=ll.llprintfields();
         if rc <> 0 then begin
            rc:=0;
            ll.llprint();
            ll.llprintfields();
         end;                   }
      end;
   end;
end;

function tzahlung.neue_behandlung(patient:integer):integer;
var x:integer;
begin
   tb_rgtyp.open;
   tb_ansatz.open;
   tb_abrechnungstyp.open;
   tb_behandlung.indexname:='';
   tb_behandlung.last;
   x:=tb_behandlung.fieldbyname('nrbehandlung').asinteger+1;
   tb_rgtyp.setkey;
   tb_rgtyp.fieldbyname('nrrgtyp').asinteger:=tb_privat.fieldbyname('nrrgtyp').asinteger;
   tb_abrechnungstyp.setkey;
   tb_abrechnungstyp.fieldbyname('nrabrechnungstyp').asinteger:=tb_rgtyp.fieldbyname('nrabrechnungstyp').asinteger;
   tb_ansatz.setkey;
   tb_ansatz.fieldbyname('nransatz').asinteger:=tb_abrechnungstyp.fieldbyname('nransatz').asinteger;
   tb_ansatz.gotokey;
   with tb_privat1 do begin
      indexname:='';
      setkey;
      fieldbyname('nrprivat').asinteger:=patient;
      gotokey;
   end;
   with tb_behandlung do begin
      indexname:='';
      last;
      x:=fieldbyname('nrbehandlung').asinteger+1;
      insert;
      fieldbyname('andrucken_taxpunkte').asboolean:=tb_rgtyp.fieldbyname('andrucken_taxpunkte').asboolean;
      fieldbyname('nrbehandlung').asinteger:=x;
      fieldbyname('behandlungsbeginn').asstring:=datetostr(now);
      fieldbyname('mandant').asinteger:=mandant;
      fieldbyname('nrpatient').asinteger:=tb_privat1.fieldbyname('nrprivat').asinteger;
      fieldbyname('nrbehandler').asinteger:=behandlernummer;
      fieldbyname('rabatt').asfloat:=tb_privat1.fieldbyname('rabatt').asfloat;
      fieldbyname('nrabrechnungstyp').asinteger:=tb_rgtyp.fieldbyname('nrabrechnungstyp').asinteger;
      fieldbyname('nransatz').asinteger:=tb_abrechnungstyp.fieldbyname('nransatz').asinteger;
      fieldbyname('nrtaxpunkt').asinteger:=tb_abrechnungstyp.fieldbyname('nrtaxpunkt').asinteger;
      fieldbyname('taxpunktwert').asfloat:=tb_ansatz.fieldbyname('taxpunktwert').asfloat;
      fieldbyname('nrestyp').asinteger:=tb_privat1.fieldbyname('estyp').asinteger;
      fieldbyname('nrrgtyp').asinteger:=tb_privat1.fieldbyname('nrrgtyp').asinteger;
      fieldbyname('nrgarant').asinteger:=-1;
      if xdebitor<>patient then fieldbyname('nrgarant').asinteger:=xdebitor;
      fieldbyname('nransprechpartner').asinteger:=-1;
      fieldbyname('status').asinteger:=1;
      fieldbyname('statusdatum').asfloat:=int(now);
      post;
   end;
   neue_behandlung:=tb_behandlung.fieldbyname('nrbehandlung').asinteger;
   tb_rgtyp.close;
   tb_ansatz.close;
   tb_abrechnungstyp.close;
end;

procedure tzahlung.insert_into_zjournal;
begin
   with tb_zjournal do begin
      indexname:='';
      last;
      i:=fieldbyname('nreintrag').asinteger+1;
      insert;
      fieldbyname('nreintrag').asinteger:=i;
      fieldbyname('mandant').asinteger:=mandant;
      fieldbyname('datum').asfloat:=tb_zahlung.fieldbyname('valuta').asfloat;
      fieldbyname('nrdebitor').asinteger:=tb_zahlung.fieldbyname('nrdebitor').asinteger;
      fieldbyname('nrfaktura').asinteger:=tb_zahlung.fieldbyname('nrfaktura').asinteger;
      fieldbyname('betrag').asfloat:=tb_zahlung.fieldbyname('betrag').asfloat;
      fieldbyname('storno').asstring:='';
      fieldbyname('vz').asstring:='';
      if tb_zahlung.fieldbyname('status').asinteger=9 then fieldbyname('storno').asstring:='J';
      if tb_zahlung.fieldbyname('vorauszahlung').asboolean then fieldbyname('vz').asstring:='J';
      with tb_konto do begin
         indexname:='';
         setkey;
         fieldbyname('nrkonto').asinteger:=tb_zahlung.fieldbyname('nrkonto').asinteger;
         if gotokey then begin
            tb_zjournal.fieldbyname('konto').asstring:=fieldbyname('konto').asstring;
         end else begin
            tb_zjournal.fieldbyname('konto').asstring:='';
         end;
      end;
      with tb_privat do begin
         indexname:='';
         setkey;
         fieldbyname('nrprivat').asinteger:=tb_zahlung.fieldbyname('nrdebitor').asinteger;
         if gotokey then begin
            s:=scut1(fieldbyname('vorname').asstring)+'. '+fieldbyname('name').asstring+', '+fieldbyname('ort').asstring;
            with tb_anrede do begin
               setkey;
               fieldbyname('nranrede').asinteger:=tb_privat.fieldbyname('nranrede').asinteger;
               if gotokey then begin
                  s:=fieldbyname('anrede_d').asstring+' '+s;
               end;
            end;
         end else begin
            with tb_firma do begin
               setkey;
               fieldbyname('nrfirma').asinteger:=tb_zahlung.fieldbyname('nrdebitor').asinteger;
               if gotokey then begin
                  s:=fieldbyname('name1').asstring+', '+fieldbyname('ort').asstring;
               end else begin
                  s:='???';
               end;
            end;
         end;
      end;
      fieldbyname('debitor').asstring:=s;
      post;
   end;
end;



procedure TZahlung.Verlassen1Click(Sender: TObject);
begin
   close;
end;

procedure TZahlung.Disketteeinlesen1Click(Sender: TObject);
begin
ToolButton7Click(Sender);
end;

procedure TZahlung.DatumEnter(Sender: TObject);
begin
   status.caption:=getstatustext(300);
end;

procedure TZahlung.BetragEnter(Sender: TObject);
begin
   status.caption:=getstatustext(301);
end;

procedure TZahlung.lkontoEnter(Sender: TObject);
begin
   status.caption:=getstatustext(302);
end;

procedure TZahlung.vorauszahlungEnter(Sender: TObject);
begin
   status.caption:=getstatustext(303);
end;

procedure TZahlung.lzahlungenEnter(Sender: TObject);
begin
   status.caption:=getstatustext(304);
end;

procedure TZahlung.lfakturaEnter(Sender: TObject);
begin
   status.caption:=getstatustext(305);
end;

procedure TZahlung.btnhelpClick(Sender: TObject);
begin
   application.helpcontext(164);

end;

procedure TZahlung.Hilfe1Click(Sender: TObject);
begin
   application.helpcontext(164);
end;

procedure TZahlung.BitBtn5Click(Sender: TObject);
var saldo:double;
    wt:array[0..70] of char;
    xx:integer;
begin
   screen.cursor:=crhourglass;
   saldo:=0;
   tb_faktura1.open;
   with q_faktura do begin
      close;
      sql.clear;
      sql.add('SELECT Nrfaktura, Nrdebitor, Datum, Total, Status, Statusdatum');
      sql.add('FROM ":dpm:FAKTURA.DB"');
      sql.add('WHERE');
      sql.add('(Nrdebitor = '+inttostr(nrdebitor)+')');
      sql.add('ORDER BY Datum,statusdatum,status');
      open;
   end;
   with q_zahlung do begin
      close;
      sql.clear;
      sql.add('SELECT Nrzahlung, Nrdebitor, Betrag, Valuta, Status, Statusdatum, nrbehandlung,vorauszahlung');
      sql.add('FROM ":dpm:ZAHLUNG.DB"');
      sql.add('WHERE');
      sql.add('(Nrdebitor = '+inttostr(nrdebitor)+')');
      sql.add('ORDER BY valuta, statusdatum, status');
      open;
   end;
   with tb_tmpkonto do begin
      open;
      first;
      while not eof do begin
         delete;
      end;
   end;
   with q_faktura do begin
      first;
      xx:=1;
      while not eof do begin
         tb_tmpkonto.insert;
         if fieldbyname('status').asinteger=9 then begin
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('statusdatum').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo+fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
            tb_tmpkonto.post;
            tb_tmpkonto.insert;
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('statusdatum').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('soll').asfloat:=0;
            tb_tmpkonto.fieldbyname('text').asstring:='Storno Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo-fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
         end else begin
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('statusdatum').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo+fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
         end;
         tb_tmpkonto.post;
         next;
      end;
   end;
   with q_zahlung do begin
      first;
      while not eof do begin
         if (fieldbyname('vorauszahlung').asboolean) and (fieldbyname('nrbehandlung').asstring <>'') and
            (fieldbyname('status').asinteger <>9) then begin
            with tb_faktura1 do begin
               indexname:='idxbehandlung';
               setkey;
               fieldbyname('nrbehandlung').asinteger:=q_zahlung.fieldbyname('nrbehandlung').asinteger;
               fieldbyname('status').asinteger:=0;
               if gotokey then begin
                  tb_tmpkonto.insert;
                  tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('datum').asfloat;
                  tb_tmpkonto.fieldbyname('soll').asfloat:=q_zahlung.fieldbyname('betrag').asfloat;
                  tb_tmpkonto.fieldbyname('haben').asfloat:=0;
                  tb_tmpkonto.fieldbyname('text').asstring:='VZ Abzug bei Rechnung Nr: '+
                     tb_faktura1.fieldbyname('nrfaktura').asstring;
                  saldo:=saldo+q_zahlung.fieldbyname('betrag').asfloat;
                  tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
                  tb_tmpkonto.post;
               end;
            end;
         end;
         tb_tmpkonto.insert;
         if fieldbyname('status').asinteger<>9 then begin
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('valuta').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('soll').asfloat:=0;
            tb_tmpkonto.fieldbyname('text').asstring:='Ihre Zahlung';
            saldo:=saldo-fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
         end else begin
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('valuta').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('soll').asfloat:=0;
            tb_tmpkonto.fieldbyname('text').asstring:='Ihre Zahlung';
            saldo:=saldo+fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
            tb_tmpkonto.post;
            tb_tmpkonto.insert;
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('statusdatum').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='Storno Zahlung';
            saldo:=saldo+fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
         end;
         tb_tmpkonto.insert;
         next;
      end;
   end;
   s:=diverse.getformulartext(1001,'D',mandant);
   strpcopy(wt,s);
{  ll.lldefinevariableext('Absender_Z1',wt,ll_text,'');
   s:=diverse.getformulartext(1002,'D',mandant);
   strpcopy(wt,s);
   ll.lldefinevariableext('Absender_Z2',wt,ll_text,'');
   s:=diverse.getformulartext(1003,'D',mandant);
   strpcopy(wt,s);
   ll.lldefinevariableext('Absender_Z3',wt,ll_text,'');
   s:=diverse.getformulartext(1004,'D',mandant);
   strpcopy(wt,s);
   ll.lldefinevariableext('Absender_Z4',wt,ll_text,'');
   diverse.getadresse(nrdebitor,0);
   strpcopy(wt,diverse.adresszeile1);
   ll.lldefinevariableext('Debitor_Z1',wt,ll_text,'');
   strpcopy(wt,diverse.adresszeile2);
   ll.lldefinevariableext('Debitor_Z2',wt,ll_text,'');
   strpcopy(wt,diverse.adresszeile3);
   ll.lldefinevariableext('Debitor_Z3',wt,ll_text,'');
   strpcopy(wt,diverse.adresszeile4);
   ll.lldefinevariableext('Debitor_Z4',wt,ll_text,'');
   strpcopy(wt,diverse.adresszeile5);
   ll.lldefinevariableext('Debitor_Z5',wt,ll_text,'');
   strpcopy(wt,diverse.adresszeile6);
   ll.lldefinevariableext('Debitor_Z6',wt,ll_text,'');
   ll.llprint();
   saldo:=0;
   with tb_tmpkonto do begin
      indexname:='idx_datum';
      first;
      repeat
         strpcopy(wt,fieldbyname('datum').asstring);
         ll.lldefinefieldext('Datum',wt,ll_text,'');
         strpcopy(wt,fieldbyname('text').asstring);
         ll.lldefinefieldext('Text',wt,ll_text,'');
         str(fieldbyname('soll').asfloat:8:2,wt);
         ll.lldefinefieldext('Belastung',wt,ll_text,'');
         str(fieldbyname('haben').asfloat:8:2,wt);
         ll.lldefinefieldext('Gutschrift',wt,ll_text,'');
         saldo:=saldo+fieldbyname('soll').asfloat-fieldbyname('haben').asfloat;
         str(saldo:8:2,wt);
         ll.lldefinefieldext('Saldo',wt,ll_text,'');
         rc:=ll.llprintfields();
         if rc=ll_wrn_repeat_data then begin
            ll.llprint();
            rc:=0;
            ll.llprintfields();
         end;
         next;
      until (eof);
      str(saldo:8:2,wt);
      ll.lldefinefieldext('Saldo1',wt,ll_text,'');
      end_print(true);
   end;
   screen.cursor:=crdefault;
   tb_tmpkonto.close;
   q_faktura.close;
   q_zahlung.close;
   tb_faktura1.close;                                  }
end;

procedure TZahlung.tb_zahlungAfterPost(DataSet: TDataset);
begin
   flushdbbuffer(dataset as ttable);
end;

procedure TZahlung.tb_fakturaAfterPost(DataSet: TDataset);
begin
   flushdbbuffer(dataset as ttable);
end;

procedure TZahlung.tb_debitorAfterPost(DataSet: TDataset);
begin
   flushdbbuffer(dataset as ttable);
end;
procedure tzahlung.copyfile(source,dest:string);
var x1,x2:integer;
    tof1,tof2:tofstruct;
begin
   strpcopy(wt,source);
   strpcopy(wt1,dest);
   x1:=lzopenfile(wt,tof1,of_read);
   x2:=lzopenfile(wt1,tof2,of_create);
   lzcopy(x1,x2);
   lzclose(x1);
   lzclose(x2);
end;

procedure TZahlung.tb_anzahlungenAfterPost(DataSet: TDataSet);
begin
   flushdbbuffer(dataset as ttable);
end;

procedure TZahlung.RGNRClick(Sender: TObject);
var s:string;
    i:longint;
    e:integer;
begin
   deb.caption:='';
   pat.caption:='';
   s:=inputbox('Rechnungsnummer','Rechnungsnummer eingeben','');
   val(s,i,e);
   if e <> 0 then begin
      showmessage('Ungültige Rechnungsnummer eingegeben');
      exit;
   end;
   with tb_faktura do begin
      indexname:='';
      setkey;
      fieldbyname('nrfaktura').asinteger:=i;
      if not gotokey then begin
         showmessage('Rechnung mit der Nummer: '+s+' ist nicht vorhanden');
         exit;
      end;
      nrdebitor:=fieldbyname('nrdebitor').asinteger;
      set_caption;
      offene_rechnungen;
      erledigte_zahlungen;
      for i:=0 to lzahlungen.items.count-1 do begin
          if pos('RG:'+s,lzahlungen.items[i])>0 then lzahlungen.itemindex:=i;
      end;
   end;
end;

procedure TZahlung.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   action:=caFree;

end;

procedure TZahlung.ToolButton1Click(Sender: TObject);
begin
   close;
end;

procedure TZahlung.ToolButton3Click(Sender: TObject);
begin
   bitbtn1click(sender);
end;

procedure TZahlung.ToolButton5Click(Sender: TObject);
begin
RGNRClick(Sender);
end;

procedure TZahlung.ToolButton4Click(Sender: TObject);
begin
bitbtn2click(sender);
end;

procedure TZahlung.ToolButton7Click(Sender: TObject);
var fname:string;
    lw:string;
    f:system.text;
    s1:string;
    i,ii:integer;
    jetzt:double;
    az:integer;
    xx:double;
    tr:treports;
begin
   if not berechtigungen.berechtigt(78) then exit;
   if not berechtigungen.berechtigt(25) then exit;
   su:=0;
   su1:=0;
   su2:=0;
   su3:=0;
{[   lw:=diverse.get_diskettenlaufwerk;
'   s:=diverse.gettext(203)+lw;
'   if messagedlg(s,mtconfirmation,[mbok,mbabort],0)<>id_ok then begin
'      exit;
'   end;
'   fname:=diverse.get_besrfilename;}
   lw:=diverse.diskettenlaufwerk;
   if lw='Diskfile' then begin
      if opendialog1.execute then fname:=opendialog1.FileName else exit;
   end else begin
      s:='Bitte die Diskette mit den Bankzahlungen in '+lw+' einlegen.';
      if messagedlg(s,mtconfirmation,[mbok,mbabort],0)<>id_ok then begin
            exit;
      end;
      fname:=diverse.get_besrfilename;
      if not fileexists(lw+fname) then begin
         showmessage('Datei mit Bankzahlungen nicht gefunden! Funktion wird abgebrochen!');
         exit;
      end;
      fname:=lw+'\'+fname;
   end;
   if not fileexists(fname) then begin
      meldung(200);
      exit;
   end;
   tb_besrt.open;
   tb_besri.open;
   system.assign(f,fname);
   system.reset(f);
   gauge1.min:=0;
   gauge1.position:=0;
   repeat
      system.readln(f,s);
      if (copy(s,1,3)='999') or (copy(s,1,3)='995')then begin
         with tb_besrt do begin
            setkey;
            s1:=copy(s,64,2);
            val(s1,ii,i);
            if ii < 80 then s1:='20'+s1 else s1:='19'+s1;
            s1:=copy(s,68,2)+'.'+copy(s,66,2)+'.'+s1;
            xx:=strtodate(s1);
            xx:=int(xx);
            fieldbyname('erstellungsdatum').asfloat:=xx;
            erstellungsdatum:=xx;
            if gotokey then begin
               meldung(3000);
               close;
               exit;
            end;
            insert;
            fieldbyname('transaktion').asstring:=copy(s,1,3);
            fieldbyname('datum').asfloat:=erstellungsdatum;
            fieldbyname('svbnummer').asstring:=copy(s,4,9);
            fieldbyname('sortierung').asstring:=copy(s,13,27);
            s1:=copy(s,40,10)+'.'+copy(s,50,2);
            fieldbyname('betrag').asfloat:=strtofloat(s1);
            s1:=copy(s,52,12)+'.0';
            fieldbyname('anzahltransaktionen').asfloat:=strtofloat(s1);
            s1:=copy(s,64,2);
            val(s1,ii,i);
            if ii < 80 then s1:='20'+s1 else s1:='19'+s1;
            s1:=copy(s,68,2)+'.'+copy(s,66,2)+'.'+s1;
            xx:=strtodate(s1);
            xx:=int(xx);
            fieldbyname('erstellungsdatum').asfloat:=xx;
            s1:=copy(s,70,7)+'.'+copy(s,77,2);
            fieldbyname('Taxen_PTT').asfloat:=strtofloat(s1);
            s1:=copy(s,79,7)+'.'+copy(s,86,2);
            fieldbyname('Taxen_Manuell').asfloat:=strtofloat(s1);
            su3:=fieldbyname('taxen_manuell').asfloat;
            fieldbyname('reserve').asstring:=copy(s,88,13);
            post;
         end;
      end;
   until system.eof(f);
   system.close(f);
   az:=0;
   system.assign(f,fname);
   system.reset(f);
   jetzt:=now;
   gauge1.max:=tb_besrt.fieldbyname('anzahltransaktionen').asinteger;
   panelverarbeitung.visible:=true;
   refresh;
   repeat
      system.readln(f,s);
      if length(s) > 0 then begin
      if (copy(s,1,3)<>'999') and (copy(s,1,3)<>'995') then
      with tb_besri do begin
         insert;
         fieldbyname('datum').asfloat:=erstellungsdatum;
         fieldbyname('transaktion').asstring:=copy(s,1,3);
         fieldbyname('svbnr').asstring:=copy(s,4,9);
         fieldbyname('referenz').asstring:=copy(s,13,27);
         s1:=copy(s,40,8)+'.'+copy(s,48,2);
         fieldbyname('betrag').asfloat:=strtofloat(s1);
         fieldbyname('aufgabereferenz').asstring:=copy(s,50,9);
         if length(s) > 60 then begin
            s1:=copy(s,60,2);
            val(s1,ii,i);
            if ii < 80 then s1:='20'+s1 else s1:='19'+s1;
            s1:=copy(s,64,2)+'.'+copy(s,62,2)+'.'+s1;
            xx:=strtodate(s1);
            xx:=int(xx);
            fieldbyname('datumaufgabe').asfloat:=xx;
            s1:=copy(s,66,2);
            val(s1,ii,i);
            if ii < 80 then s1:='20'+s1 else s1:='19'+s1;
            s1:=copy(s,70,2)+'.'+copy(s,68,2)+'.'+s1;
            xx:=strtodate(s1);
            fieldbyname('datumverarbeitung').asfloat:=xx;
            s1:=copy(s,72,2);
            val(s1,ii,i);
            if ii < 80 then s1:='20'+s1 else s1:='19'+s1;
            s1:=copy(s,76,2)+'.'+copy(s,74,2)+'.'+s1;
            xx:=strtodate(s1);
            fieldbyname('datumgutschrift').asfloat:=xx;
            fieldbyname('recherche').asstring:=copy(s,78,9);
            fieldbyname('rejectcode').asstring:=copy(s,87,1);
            fieldbyname('reserve').asstring:=copy(s,88,9);
            s1:=copy(s,97,2)+'.'+copy(s,99,2);
            fieldbyname('taxen_ptt').asfloat:=strtofloat(s1);
            fieldbyname('verbucht').asboolean:=false;
            su:=su+1;
            su1:=su1+fieldbyname('betrag').asfloat;
            su2:=su2+fieldbyname('taxen_ptt').asfloat;
         end else begin
            s1:=copy(s,60,2);
            val(s1,ii,i);
            fieldbyname('datumaufgabe').asfloat:=0;
            fieldbyname('datumverarbeitung').asfloat:=0;
            fieldbyname('datumgutschrift').asfloat:=int(now);
            fieldbyname('recherche').asstring:='';
            fieldbyname('rejectcode').asstring:='';
            fieldbyname('reserve').asstring:='';
            s1:=copy(s,97,2)+'.'+copy(s,99,2);
            fieldbyname('taxen_ptt').asfloat:=0;
            fieldbyname('verbucht').asboolean:=false;
            su:=su+1;
            su1:=su1+fieldbyname('betrag').asfloat;
            su2:=su2+fieldbyname('taxen_ptt').asfloat;
         end;

         if verbucht then begin;
            fieldbyname('verbucht').asboolean:=true;
            post;
         end else begin
            fieldbyname('verbucht').asboolean:=false;
            post;
         end;
      end;
      end;
      gauge1.position:=gauge1.position+1;
   until eof(f);
   system.close(f);
   tb_besrt.close;
   tb_besri.close;
   panelverarbeitung.visible:=false;
   refresh;
   tr:=treports.create(application);
   tr.jdatum:=datetostr(erstellungsdatum);
   tr.sel_esrjournal(false);
   tr.Destroy;
end;

procedure TZahlung.ToolButton8Click(Sender: TObject);
var saldo:double;
    wt:array[0..70] of char;
    xx:integer;
begin
   screen.cursor:=crhourglass;
   saldo:=0;
   tb_faktura1.open;
   with q_faktura do begin
      close;
      sql.clear;
      sql.add('SELECT Nrfaktura, Nrdebitor, Datum, Total, Status, Statusdatum, mahndatum1, mahngebuehr1, mahndatum2, mahngebuehr2, mahndatum3, mahngebuehr3');
      sql.add('FROM ":dpm:FAKTURA.DB"');
      sql.add('WHERE');
      sql.add('(Nrdebitor = '+inttostr(nrdebitor)+')');
      sql.add('ORDER BY Datum desc,statusdatum,status');
      open;
   end;
   with q_zahlung do begin
      close;
      sql.clear;
      sql.add('SELECT Nrzahlung, nrfaktura, Nrdebitor, Betrag, Valuta, Status, Statusdatum, nrbehandlung,vorauszahlung');
      sql.add('FROM ":dpm:ZAHLUNG.DB"');
      sql.add('WHERE');
      sql.add('(Nrdebitor = '+inttostr(nrdebitor)+')');
      sql.add('ORDER BY valuta, statusdatum, status');
      open;
   end;
   with tb_tmpkonto do begin
      open;
      first;
      while not eof do begin
         delete;
      end;
   end;
   with q_faktura do begin
      first;
      xx:=1;
      while not eof do begin
         tb_tmpkonto.insert;
         if fieldbyname('status').asinteger=9 then begin
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('datum').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo+fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
            tb_tmpkonto.post;
            tb_tmpkonto.insert;
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('datum').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('soll').asfloat:=0;
            tb_tmpkonto.fieldbyname('text').asstring:='Storno Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo-fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
         end else begin
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('datum').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo+fieldbyname('total').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
         end;
         tb_tmpkonto.post;
         // Mahnungen bei Kontoauszug berücksichtigen
         if q_faktura.fieldbyname('Mahndatum1').asstring<>'' then begin
            tb_tmpkonto.insert;
            tb_tmpkonto.fieldbyname('datum').asfloat:=q_faktura.fieldbyname('mahndatum1').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=q_faktura.fieldbyname('mahngebuehr1').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='1. Mahnung Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo+q_faktura.fieldbyname('mahngebuehr1').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
            tb_tmpkonto.post;
         end;
         // Mahnungen bei Kontoauszug berücksichtigen
         if q_faktura.fieldbyname('Mahndatum2').asstring<>'' then begin
            tb_tmpkonto.insert;
            tb_tmpkonto.fieldbyname('datum').asfloat:=q_faktura.fieldbyname('mahndatum2').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=q_faktura.fieldbyname('mahngebuehr2').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='2. Mahnung Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo+q_faktura.fieldbyname('mahngebuehr2').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
            tb_tmpkonto.post;
         end;
         if q_faktura.fieldbyname('Mahndatum3').asstring<>'' then begin
            tb_tmpkonto.insert;
            tb_tmpkonto.fieldbyname('datum').asfloat:=q_faktura.fieldbyname('mahndatum3').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=q_faktura.fieldbyname('mahngebuehr3').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='3. Mahnung Rechnung Nr:'+fieldbyname('nrfaktura').asstring;
            saldo:=saldo+q_faktura.fieldbyname('mahngebuehr3').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
            tb_tmpkonto.post;
         end;
         next;
      end;
   end;
      with q_zahlung do begin
      first;
      while not eof do begin
         if (fieldbyname('vorauszahlung').asboolean) and (fieldbyname('nrbehandlung').asstring <>'') and
            (fieldbyname('status').asinteger <>9) then begin
            with tb_faktura1 do begin
               indexname:='idxbehandlung';
               setkey;
               fieldbyname('nrbehandlung').asinteger:=q_zahlung.fieldbyname('nrbehandlung').asinteger;
               fieldbyname('status').asinteger:=0;
               if gotokey then begin
                  tb_tmpkonto.insert;
                  tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('datum').asfloat;
                  tb_tmpkonto.fieldbyname('soll').asfloat:=q_zahlung.fieldbyname('betrag').asfloat;
                  tb_tmpkonto.fieldbyname('haben').asfloat:=0;
                  tb_tmpkonto.fieldbyname('text').asstring:='VZ Abzug bei Rechnung Nr: '+
                  tb_faktura1.fieldbyname('nrfaktura').asstring;
                  saldo:=saldo+q_zahlung.fieldbyname('betrag').asfloat;
                  tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
                  tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
                  inc(xx);
                 tb_tmpkonto.post;
               end;
            end;
         end;
         tb_tmpkonto.insert;
         if fieldbyname('status').asinteger<>9 then begin
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('valuta').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('soll').asfloat:=0;
            tb_tmpkonto.fieldbyname('text').asstring:='Ihre Zahlung zu Rechnung-Nr ' + fieldbyname('nrfaktura').asstring ;
            saldo:=saldo-fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
         end else begin
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('valuta').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('soll').asfloat:=0;
            tb_tmpkonto.fieldbyname('text').asstring:='Ihre Zahlung zu Rechnung-Nr ' + fieldbyname('nrfaktura').asstring ;
            saldo:=saldo+fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
            tb_tmpkonto.post;
            tb_tmpkonto.insert;
            tb_tmpkonto.fieldbyname('datum').asfloat:=fieldbyname('statusdatum').asfloat;
            tb_tmpkonto.fieldbyname('haben').asfloat:=0;
            tb_tmpkonto.fieldbyname('soll').asfloat:=fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('text').asstring:='Storno Zahlung';
            saldo:=saldo+fieldbyname('betrag').asfloat;
            tb_tmpkonto.fieldbyname('saldo').asfloat:=saldo;
            tb_tmpkonto.fieldbyname('nreintrag').asinteger:=xx;
            inc(xx);
         end;
         tb_tmpkonto.post;
         next;
      end;
   end;

   screen.cursor:=crdefault;
   tb_tmpkonto.close;
   q_faktura.close;
   q_zahlung.close;
   tb_faktura1.close;
   reporting.kontoauszug(nrdebitor,design);
end;

procedure TZahlung.ToolButton10Click(Sender: TObject);
begin
diverse.showhelp_topic('Zahlungen');
end;

procedure TZahlung.Rechnungstornieren1Click(Sender: TObject);
var s:string;
begin
    if not berechtigungen.berechtigt(78) then exit;
    if MessageDlg('Die markierte Rechnung wirklich stornieren ' + char(13) + chr(13) + '(Achtung: zugehörende Behandlungen werden nicht berücksichtigt!)',
       mtConfirmation, [mbYes, mbNo], 0) = mryes then begin

   s:=lfaktura.items[lfaktura.itemindex];
   s:=copy(s,1,10);
   tb_faktura.indexname:='';
   tb_faktura.setkey;
   tb_faktura.fieldbyname('nrfaktura').asstring:=s;
   if tb_faktura.GotoKey then begin
      tb_faktura.edit;
      tb_faktura.FieldByName('Status').asinteger:=9;
      tb_faktura.fieldbyname('statusdatum').asfloat:=now;
      tb_faktura.post;
   end;
   tb_debitor.indexname:='idx_faktura';
   tb_debitor.setkey;
   tb_debitor.fieldbyname('nrfaktura').asstring:=s;
   if tb_debitor.gotokey then begin
      tb_debitor.edit;
      tb_debitor.fieldbyname('statusdatum').asfloat:=now;
      tb_debitor.fieldbyname('status').asinteger:=9;
      tb_debitor.post;
   end;
   offene_rechnungen;
   erledigte_zahlungen;
end;

end;

procedure TZahlung.N2Click(Sender: TObject);
begin
   with tb_zahlung do begin
      indexname:='';
      setkey;
      fieldbyname('nrzahlung').asinteger:=key_from_string(lzahlungen.items[lzahlungen.itemindex]);
      if gotokey then begin
         if fieldbyname('status').asinteger=9 then begin
            edit;
            fieldbyname('status').asinteger:=0;
            post;
         end;
      end;
   end;
end;

procedure TZahlung.ZL1Click(Sender: TObject);
begin
   if not berechtigungen.berechtigt(78) then exit;
   with tb_zahlung do begin
      indexname:='';
      setkey;
      fieldbyname('nrzahlung').asinteger:=key_from_string(lzahlungen.items[lzahlungen.itemindex]);
      if gotokey then begin
         if fieldbyname('status').asinteger=9 then begin
            delete;
          end;
      end;
   end;
end;

procedure TZahlung.JvArrowButton1Click(Sender: TObject);
begin
   design:=false;
   ToolButton8Click(sender);
end;

procedure TZahlung.Vorlagebearbeiten1Click(Sender: TObject);
begin
design:=true;
ToolButton8Click(sender);
end;

procedure TZahlung.Quittungdrucken1Click(Sender: TObject);
begin
   reporting.vzquittung(nrdebitor,key_from_string(lzahlungen.items[lzahlungen.itemindex]),false);
end;

procedure TZahlung.Quitungsvorlagebearbeiten1Click(Sender: TObject);
begin
   reporting.vzquittung(nrdebitor,key_from_string(lzahlungen.items[lzahlungen.itemindex]),true);
end;

procedure TZahlung.lzahlungenDblClick(Sender: TObject);
var nrbehandlung:string;
begin
      with tb_zahlung do begin
         indexname:='';
         setkey;
         fieldbyname('nrzahlung').asinteger:=key_from_string(lzahlungen.items[lzahlungen.itemindex]);
         if gotokey then begin
            with tb_faktura do begin
               tb_faktura.indexname:='';
               tb_faktura.setkey;
               tb_faktura.fieldbyname('nrfaktura').asstring:=tb_zahlung.fieldbyname('nrfaktura').asstring;
               if tb_faktura.gotokey then begin
                  nrbehandlung:=tb_faktura.fieldbyname('nrbehandlung').asstring;
                  if not berechtigungen.berechtigt(5) then exit;
                  tb_behandlung.indexname:='';
                  tb_behandlung.SetKey;
                  tb_behandlung.FieldByName('nrbehandlung').asstring:=nrbehandlung;
                  if tb_behandlung.gotokey then begin
                     menuhandler.showbehandlung_rg(tb_behandlung.fieldbyname('nrpatient').asinteger,false,tb_behandlung.fieldbyname('nrbehandlung').asinteger)
                  end;
               end;
            end;
         end;
      end;

end;

end.