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.