Zahlungsauswahl
Diese Seite beschäftigt sich mit der Auswahl und Generierung von Zahlungen aus Rechnungen. Da ich mit Beginn dieser Seite noch nicht genau weiss, wie das alles funktioniert, bitte ich, diese Angaben mit Vorsicht zu benutzen. Ergänzungen sind daher herzlich willkommen!
Ziel ist es, einen Arbeitsablauf zu finden, der auch bei hohem Volumen an Rechnungen eine effektive Bearbeitung z.B. der Zahlung von Eingangsrechnungen per Überweisung sowie des Einzugs von Ausgangsrechnungen per Lastschrift ermöglicht.
Vorbereitung: Die Rechnung
Ausgangspunkt ist eine Rechnung. Diese Rechnung enthält einige Angaben, die den Zahlungsverkehr betreffen:
- Angaben zur Fälligkeit:
- Belegart
- Zahlungsbedingung (vorgegeben ist "immediate", aber hier sind auch Einstellungen mit verschiedenen Fristen möglich)
- Zahlungsplan gültig (Ja/Nein-Feld)
- Zahlungsplan (eigene Registerkarte)
- strittig - strittige Rechnungen sollten von der Zahlung ausgenommen werden können
- bezahlt
- Zuordnung - ist bereits eine Zahlung ausgeführt und zugeordnet?
- Angaben zum Zahlungsweg:
- Belegart - Rechnung oder Gutschrift, Eingangs- oder Ausgangsrechnung
- Zahlungsweise - ""Auf Kredit", "Bargeld", "Kreditkarte", "Lastschrift", "Scheck", "vermischte Zahlung Kasse"
Vorbereitung: Einrichtung von Stammdaten
Zahlungen gehen grundsätzlich immer über ein Bankkonto. Seit der [Außerdienststellung des Kassenbuchs] wird die Kasse im Grunde genau wie ein Bankkonto verwaltet. Es bietet sich also an, eine besondere Bank mit dem Namen "Kasse" anzulegen und dort ein Konto einzurichten, das dann als Kassenbuch dient.
Bei jedem Konto können nun Belege erstellt werden. Hier ist es wichtig, das man für die Belegtypen, die dieses Konto verarbeiten kann, in der Registerkarte "Beleg Bankkonto" auch ein Eintrag vorgenommen wird. Später bei der Auswahl der Zahlungen werden dann nur die angezeigt, die für das angegebene Konto angelegt sind. So sollte ein Girokonto Belegeinträge für Überweisungen und Schecks enthalten (und bei Abschluß einer entsprechenden SEPA-Vereinbarung auch für Lastschriften). Ein Kreditkarten-Verrechnungskonto wird aber nur einen Belegtyp für Kreditkarten-Zahlungen enthalten, ein Kassenbuch nur für Bargeld-Zahlungen. Ein Druckformat muss hier übrigens nicht extra angegeben werden, wenn man keine Belege drucken möchte (also z.B. Quittungen oder Überweisungsformulare auf Papier).
Die Kontenart ("Bargeld", "Girokonto", "Karte", "Sparkonto") scheint hingegen unerheblich zu sein. (TODO: Vielleicht sollte man das nochmal näher untersuchen, wofür das gut ist.)
Vorbereitung: Benutzeranmeldung
Da im Verlauf des Prozesses der Zahlungsauswahl automatisch neue Zahlung-Datensätze angelegt werden, muss das Programm wissen, für welche Organisation diese Datensätze erzeugt werden. Hierzu ist es erforderlich, das der Benutzer beim Login auch eine Organisation angibt (und nicht "*", wie z.B. für den Admin auch möglich ist).
direkte Zahlung bei Rechnungserstellung
Stellt man die Zahlungsweise der Rechnung auf "Bargeld", so wird direkt beim Abschluss der Rechnung eine Zahlung erzeugt, diese zugeordnet und die Rechnung damit als bezahlt gekennzeichnet. (TODO: bisher weiss ich nicht nicht, wie das verwendete Bankkonto ausgewählt wird. Das müsste man mal im Sourcecode des "Document Complete" nachsehen.)
Grundsätzlicher Ablauf bei Zahlungslisten
Zahlungsliste erstellen
Zuerst müssen offene Rechnungen (und Gutschriften, aber die nenne ich hier nicht jedes mal mit), die wir bezahlen wollen, in eine Zahlungsliste überführt werden. Dazu gibt es zwei Methoden:
- Die "automatische" über den Button "Erstellen aus..." in Fenster "Wahl der Zahlungsart" (englisch "Payment Selection"; das nenne ich bald um, z.B. in "Zahlungsauswahl"). Dieser Prozeß erfasst ausschließlich AP Belege (also Eingangsrechnungen und -gutschriften) aber keine Kundenbelege.
- Die "manuelle" über den Menüpunkt "Auswahl Zahlung (manuell)". Dieses Fenster erlaubt es mit Abstrichen auch, Kundenzahlungen in die Liste aufzunehmen.
Die Zahlungsliste kann - auch nach dem automatischen erfassen - noch verändert werden, indem man z.B. einzelne Rechnungen wieder löscht.
Zahlungen vorbereiten (zusammenfassen)
Nach die offenen Rechnungen in der Zahlungsauswahl aufgeführt sind, werden hieraus nun durch einen Button Zahlungen vorbereitet. Diese "Vorbereitung" besteht darin, das mehrere Rechnungen jeweils pro Geschäftspartner zusammengefasst werden und in eine Zeile geschrieben werden. Der zugehörige "Zahlung"-Datensatz wird noch nicht erzeugt.
Programmlauf Zahlungsauswahl manuell
Zahlungen können vorgenommen werden mit dem Programm "Auswahl Zahlungen (manuell)". Auf den ersten Blick sieht dieses so aus, als ob es alle unsere Wünsche erfüllt. Allerdings ist es dabei etwas wählerisch.
Zahlung erstellen
Als nächstes benutzt man das Fenster "Zahlung drucken/exportieren", um die vorbereiteten Zahlungen wirklich zu erzeugen und auszuführen. Bei dieser Ausführung werden entweder entsprechende Formulare (Schecks, Überweisungen, etc) gedruckt oder die Daten als CSV exportiert, so das ein Bankingprogramm damit weiterarbeiten kann. (TODO: Diesen Teil habe ich noch nicht ausführlich getestet, aber so einfach wie es hier geschrieben ist scheint das nicht zu sein)
sonstige Informationen, insbesondere zum Fenster "Auswahl Zahlung (manuell)"
TODO: Das ganze Thema ist von mir noch nicht abschließend bearbeitet, deshalb sammle ich hier noch lose Enden:
- Die Belegart kann nur auf die beiden AP Belegtypen gestellt werden
- AR Dokumente erscheinen nur bei "Lastschrift"
- AP Dokumente erscheinen bei allen anderen Zahlungsarten
- Bei AP Rechnungen kann man Überweisung, aber keine Lastschrift auswählen - unabhängig von der Belegart Rechnung/Gutschrift
- Bei AR Rechnungen kann man Lastschrift, aber keine Überweisung auswählen
- Gibt man eine neue Zahlung ein, kann man bei der Zahlungsart "Überweisung" eine Kontonummer und BLZ eingeben, bei "Lastschrift" nichts. Was sagt das über die Bedeutung dieser Begriffe aus?
- Was ist ein Zahlungssatz?
Programmlauf Zahlungsauswahl
Im Fenster "Zahlungsauswahl" (auch "Wahl der Zahlungsart") gibt es noch einen Knopf für ein Auswahlprogramm. Dieses beachtet allerdings ausschließlich Ausgangsrechnungen (keine Kundenbelege).
TODO
Informationssplitter
Da ich bisher noch die zugrundeliegenden Sourcen studiere, soll dieser Abschnitt dazu dienen, kurze Informationshäppchen festzuhalten, die später in den Artikeltext eingebaut werden können:
- Im Fenster Zahlungsauswahl im dritten Tab stehen Datensätze aus der Tabelle C_PaymentCheck. Diese fassen die Summe mehrerer Rechnungen in einem Datensatz zusammen und werden dann benutzt, um Zahlungsbelege zu erzeugen. Diese Datensätze werden an verschiedenen Stellen des Programms als "Scheck" bezeichnet (und das Wort "check" gerne auch mit "prüfen" übersetzt...). Es scheint mir aber, das der Begriff "Zahlungsverkehrsbeleg" die Sache besser trifft. Ein solcher Datensatz dient nämlich auch dazu, Überweisungen darzustellen. Ob das jetzt auch für Lastschriften gilt, muss sich noch zeigen. (Scheinbar nicht, aber wenn ich damit fertig bin, bestimmt auch...)
- die Methode MPaySelectionCheck.confirmPrint() speichert ggf. einen neuen Zahlungssatz und legt Zahlungen für Schecks/Zahlungsverkehrsbelege an, wenn noch keine Zahlungen existieren.
- Das Formular-Fenster "Zahlungsauswahl (manuell)" erlaubt die Auswahl einer Zahlungsauswahl. Das erscheinende Suchfeld zeigt immer alle Zahlungsauswahlen an und nicht nur die sinnvollen. Kann man das als Bug betrachten? Hier könnte man im zugehörigen Suchbutton eine Referenz anstatt der direkten Tabelle angeben.
- Ich konnte keinen Zeiger auf die PaymentSelection oder auf Schecks finden. Lediglich die Schecknummer wird in der Zahlung notiert (als Text).
- Schließe ich daraus, das JJ das so gemeint hat, das man Zahlungsauswahlen löscht, wenn sie erledigt sind? Oder habe ich eine Magie übersehen, die ältere und/oder erledigte Belege doch nicht mehr anzeigt?
- So wird aus einem Scheck/Zahlungsverkehrsbeleg eine Zahlung generiert: Im Fenster "Zahlung drucken/exportieren", indem man auf einen der Knöpfe für drucken, exportieren oder elektronischer Datenaustausch drückt. Diese Methoden machen im einzelnen folgendes:
- drucken:
- Schecks/Zahlungsverkehrsbelege werden aus den Rechnungen der Zahlungsauswahl erzeugt (auch anhand der angegebenen Zahlungsregel, d.h. z.B. nur die für Überweisung vorgesehenen)
- Die eigentlichen Schecks (keine Überweisungen) werden gedruckt.
- Ist etwas gedruckt worden, wird gefragt, ob der Druck in Ordnung war.
- wenn ja wird MPaySelectionCheck.confirmPrint() ausgeführt.
- nach einem Abfragefenster können noch Zahlungsbestätigungen gedruckt werden.
- exportieren:
- Schecks/Zahlungsverkehrsbelege werden aus den Rechnungen der Zahlungsauswahl erzeugt (auch anhand der angegebenen Zahlungsregel, d.h. z.B. nur die für Überweisung vorgesehenen)
- Der Benutzer wird nach einem Dateinamen gefragt
- der eigentliche Exporter wird aufgerufen. Dieser schreibt normalerweise die Datei.
- Ein Info-Dialog zeigt die geschriebenen Zeilen an
- Ein Frage-Dialog fragt nach, ob die Ausgabe erfolgreich war
- Wenn ja, wird MPaySelectionCheck.confirmPrint() ausgeführt.
- EFT/EZV
- Schecks/Zahlungsverkehrsbelege werden aus den Rechnungen der Zahlungsauswahl erzeugt (auch anhand der angegebenen Zahlungsregel, d.h. z.B. nur die für Überweisung vorgesehenen)
- fertig!?! -> Was soll das denn???
- drucken:
- und MPaySelectionCheck.confirmPrint() funktioniert so:
- es werden alle angegebenen Schecks durchgegangen
- Ist der Scheck bereits einer Zahlung zugeordnet (was bedeutet das?), wird nur die Scheckummer in der Zahlung notiert
- Ist der Scheck noch keiner Zahlung zugeordnet, wird eine neue erzeugt. Die kommt dann in den angegebenen PaymentBatch (der dann ggf. überhaupt erst angelegt wird)
- Die Zahlung wird im Scheck verlinkt (sie selber bekommt aber keinen Link, sondern nur eine Schecknummer)
- Die Dokumentnummer (beim Bankkonto-Beleg vorgegeben) wird hochgezählt
- Der Scheck wird als gedruckt und ausgeführt markiert
- und MPaySelectionCheck.confirmPrint() funktioniert so:
- zu bemerken ist dabei, das schon vorhandene Zahlungen nicht im PaymentBatch verzeichnet werden. (Ist das für wiederholte Ausführungen oder wird da was separiert, was woanders schon erzeugt wurde?)
- Was zum Teufel ist mit Lastschriften?
- Meine Vermutung ist, das der EZV schlicht und ergreifend nicht implementiert ist.
Bleibt zu überlegen, wie die Geschäftsvorfälle hinter dieser Logik aussehen.
- Legt man im Fenster "Bank" bei seinem Konto einen Belegtyp für Überweisung und einen für Lastschrift an, so kann man in der Zahlungsauswahl beides auswählen und damit Lieferanten- und Kundenrechnungen selektieren.
- Das man in der Rechnung als Zahlungsweise bei Kunden keine "Überweisung" und bei Lieferanten keine "Lastschrift" angeben kann, ist in MPaymentLookup.getDate(...) (Zeile 206 ff) geregelt. Das bedeutet dann wohl, das eine Gutschrift an einen Kunden für iDempiere auch eine Art der Lastschrift (sozusagen eine negative Lastschrift) ist. Ist das jetzt eher ein logischer oder eher ein Übersetzungsfehler?