Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Rechnungsnr.- Vergabe im Client-Server-System (https://www.delphipraxis.net/11202-rechnungsnr-vergabe-im-client-server-system.html)

mschaefer 1. Nov 2003 20:20


Rechnungsnr.- Vergabe im Client-Server-System
 
Moin, Moin,

Folgendes knackige Problemchen zur besten Samstagsfernsehzeit verhagelt mir diese:

Arbeite an der Vergabe von Rechnugnsnummern in einem System mit Interbase-Datenbank
und meheren Clients. Die letzte Rechnungsnummer liegt in einem Integerfeld einer Datei.
'LastBillNo' : Int
'LastBillDate' : Date

Bevor eine Rechnung gedruckt wird schreibt der Client das aktuelle Datum in dad Feld
'LastBillDate, dann hole ich die durch einen Trigger erzeugte Nummer 'LastBillNo' ab.
Das ist noch nicht ganz bfehlerfrei.... :?: :?: :!: :?: :?:


Das größte Problem ist, wenn die Rechnung nicht korrekt gedruckt wird (Druckrstreik, Netwerkknoten,..)
dann ist die Nummer erhöht und die Rechnungsnummer fehlt.

Einfach erniedrigen darf ich nicht, den ein anderer Client könnte gerade ebenfalls sich eine neue Rechnungsnummer geholt haben (dann hätten zwei Rechnungen die gleiche :wall: )

Also habe ich überlegt jetzt ein Memofeld dazuzulegen wo Rechnungsnummern von den Clients zurückgegeben werden können, wenn der Druckvorgang schiefging

'FreeBillNos' VarChar(1024)

Jetzt bräcuhte ich auf dem Server eine StoredProcedure, die erst hier nachschaut ob es noch eine
zurückgegebene Nummer gibt, die Verwendet werden kann und zunächst diese zurückgibt, bevor eine
Neue höhere Rechnungsnummer generiert wird.


Hat mit sowas jemand hier Erfahrung / Ideen / Hinweise

Grüße // Martin

Leuselator 1. Nov 2003 21:20

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
Hi - vielleicht nicht direkt eine Lösung Deines Problems, aber ein anderer Denkansatz:
Schaff Dir eine Tabelle "Rechnungen". Dort erzeugst Du immer dann einmalig einen neuen Datensatz, wenn eine neue Rechnung erstellt wird. Jedem Datensatz gibst Du ein Feld "Printed" vom typ Boolean mit. Den Ausdruck der Rechnung entkoppelst Du von der Entsprechung in der Datenbank. Geht der Ausdruck schief, kannst Du sie einfach nochmals aus der Datenbank auslesen und ausdrucken. Hat der Ausdruck geklappt, setzt Du das Feld "Printed" auf "True". Will danach ein Anwender diese Rechnung nochmals drucken, kennzeichnest Du diesen Ausdruck einfach mit "Kopie" - Glücklich ist der Anwender :-)
Grüße

mschaefer 2. Nov 2003 12:20

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
Moin, Moin

Leuselator, ja man mehr, das Du Dich schon etwas intensiver mit dem Thema befaßt
hast. Das mal von der anderen Seite anzugehen ist sicherlich möglich, aber die Sache
bleibt knifflig.

Deine Lösung ist gut, wenn zu allen Aufträgen eine Rechnung erstellt wird.
Unter den gegebenen Informationen hast Du zielsicheren eine Lösung gefunden !
Danke schonmal! :P



Mein Problem ist leider noch etwas erweitert: Man kann Quittungen und Rechnungen drucken.
Je nachdem ob bei Warenausgabe bar gezahlt wird. Quittungen haben keine Rechnungsnummer,
sondern eine seperate Quittungsnummer.

Hintergrund
-> Also letzlich steht dahinter, das Quittungen nicht ins Mahnwesen übernommen werden.
-> Das macht hier ein Steuerberatunsbüro. Da die an jeder Buchung verdienen, versucht man
-> so die Buchungsanzahl geringer zu halten indem die Quittungen nicht einzueln Verbucht werden,
-> sondern über die Kasse als Tageseinnahme als eine Buchung mit eingehen.

-> Solange die Rechnung nicht erfolgreich gedruckt ist, besteht immernoch die Möglichkeit,
-> das ein Kunde vorort auftaucht und bar bezahlt. Wenn die Rechnung gedruckt ist geht die
-> gleich in die Post und Barzahlung ist nicht möglich.

Das ist also der Grund warum die Rechnungsnummer erst beim Rechnungsausdruck vergeben werden
soll. Und so komme ich wieder zu dem Problem, das hier gerade im Netz, teils Funk, auchmal
was auf der Strecke bleiben kann. Deshalb frage ich eine Bestätigung ab, ob der Ausdruck
erfolgt ist... :dance:




Die Rechnungsnummernvergabe muß vom Server aus gesteuert werden,
da geht wohl kein Weg dran vorbei.. :pale:

Grüße // Martin

-

Hansa 2. Nov 2003 16:34

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
Ich verstehe das ganze nicht so recht. Was soll da ein Memo, eine Datei oder sonst was zu suchen haben ? Warum legst Du nicht einfach zwei tables an, eine für Rechnungsnummer eine für Quittungsnummer. Mit dem Trigger erhöhst Du einfach die Nummer und fertig. Falls der Drucker streikt, so gibst Du die entsprechende Nr. ein und druckst neu. Wo liegt das Problem ?

mschaefer 2. Nov 2003 18:47

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
N´abend
Tja klar für´n Einplazsystem würde ich das auch so machen. Da hängen nacher aber vier bis zehn Rechner dran. Welche Nummer soll nun an Rechner 1 von Kandidat x eingegeben werden, wenn gerade wieder zwei andere an sowas gedruckt haben. Wenn nachher Rechnungsnummern fehlen taugt das auch nichts. Glaube das Finanzbeamte da wenig begeistert wären.

Nichts für ungut Hansa, weiß das Du bestens Warenwirtschaftserprobt bist. Ja da ich mich mit Stored Procedures doch nicht sicher fühle, werde ich es jetzt über eine UDF probieren. Das kann ich etwas (Paradoxerweise). So fängt die Woche doch gleich mit ´ner ausgewachsenen Knobelaufgabe an... :?

Viele Grüße // Martin

_

Sharky 2. Nov 2003 18:55

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
Hai,

mal eine Anmerkung am Rande:

Ich meine das es so ist das eine Rechnung die in einem WWS als gedruckt gebucht wurde nicht noch einmal als Original erstellt werden darf.

Genaugenommen darf es eh nur EIN Original geben. Alle anderen Ausdrucke müssen als Kopie gekennzeichnet werden.

Ich bin mir aber nicht mehr ganz sicher. In unserem WWS haben wir das so gemacht. Aber ich frage mal unseren Buchhalter.

mschaefer 2. Nov 2003 19:24

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
Hai ahm Moin Sharky,
ist so exakt wie Du schreibst! Wenn eine Rechnung einmal als gedruckt angegeben wurde
können schon jetzt nur noch Rechnungskopien gedruckt werden.



Mein Ding ist halt, das ich die Rechnungsnummer hole um zu drucken. Nehmen wir mal an,
da hat das Büromeerschweinschen gerade am lokalen Druckerkabel genagt. Rechnungsnummer ist angefordert,druck geht schief. Dann können nun die anderen weiterarbeiten mit ihren eigenen
Druckern. Sie bekommen aufgrund des Datenbanktriggers die nächsten Rechnungsnummern.

Wenn jetzt unser aufgeweckter Anwender den Rechner so stehen läßt und nicht abschlatet ist
das kein Problem irgendwann kann er dann weitermachen. Gibt er entnerft auf, schaltet das Ding ab
dann fehlt plötzlich seine angeforderete ReNr.

Ok ok, aber irgendwie passieren die Katastrophen doch immer dann
wenn man ein Problem mal zurückgestellt hat.



Viele Grüße vom Ufer des Mittellandkanals // Martin

_

natter24 7. Nov 2003 11:23

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
Hallo,
wie wäre denn folgende Lösung.

Ausgehend davon, dass das defekte Kabel, die leere Patrone etc. ausgetauscht werden, wird anschließend an diesem Client die Rechnung erneut ausgedruckt (davon ist ja wohl auszugehen). Warum also die Rechnungsnummer auf dem Server als noch nicht vergeben markieren. Daher mein Vorschlag:

Dein Client bekommt die Rechnungsnummer vom Server und legt sie zunächst in einer Datenbank auf den Client ab. Wird der Druck exakt ausgeführt, wird diese Nummer wieder gelöscht, andernfalls kann beim nächsten Rechnungsdruck diese Nummer verwendet werden. Also :coder: mal.

Leuselator 7. Nov 2003 22:24

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
habe mir das ganze gerade nochmal durchgelesen und finde, daß mein Vorschlag nach wie vor Dein Problem löst.
Ich würde jeder Firma was husten, wenn sie mir nicht auf Anforderung eine Rechnung druckt, ganz egal ob ich bar, per Lastschrift/Überweisung/Kreditkarte oder in Naturalien zahle. Geschäftsvorgang ist Geschäftsvorgang und eine Rechnung ist die Dokumentation dessen. Wenn ich mich nun entschließe, bar zu zahlen, dann möchte ich zusätzlich eine Quittung über die ordnungsgemäße Begleichung der Rechnung haben! Diese Quittung kann von mir aus Bestandteil der Rechnung sein (Vermerk: Betrag bar erhalten am: Datum - Stempel - Wilhelm).

Aus diesen Überlegungen heraus, gehört 'ne Rechnung erzeugt, wenn ein Geschäft getätigt wird. Aus dem Leben scheidet eine solche Rechnung buchhalterisch wahlweise durch Bezahlung (Habenbuchung) oder Rückabwicklung (Stornobuchung).

Zu der von Dir angesprochenen Problematik der Gebühren: Man kann auch eine Rechnung mit dem Quittungsvermerk über die Kasse Buchen. dann gibt man nur die anderweitig zu zahlenden Rechnungen in das Mahnwesen.

Also 3 Varianten als Orga-Anweisung für Deinen Kunden:
Code:
1. Rechnung normal:
   Ausdruck Rechnung und Rechnung'
   Rechnung    -> Ablage für Postausgang
   Rechnung'   -> Ablage für Mahnwesen Steuerbüro

2. Rechnung mit Quittungsvermerk:
   Ausdruck Rechnung und Rechnung'
   Geld        <- Kunde
   Rechnung    -> Kunde
   Rechnung'   -> Ablage für Barverkauf (wo vorher die Quittungen lagen)

3. Rechnung normal - Kunde kommt unverhofft bar zahlen
   Ausdruck Rechnung und Rechnung'
   Rechnung    -> Ablage für Postausgang
   Rechnung'   -> Ablage für Mahnwesen Steuerbüro
   Geld        <- Kunde
   Rechnung    <- Ablage für Postausgang
   Rechnung    -> Kunde
   Ausdruck Quittung und Quittung' zur Rechnung
   Quittung    -> Kunde
   Rechnung'   <- Ablage für Mahnwesen Steuerbüro
   Rechnung' und Quittung' zusammentackern (Bundle machen)
   Bundle      -> Ablage für Barverkauf (wo vorher die Quittungen lagen)

mschaefer 12. Nov 2003 19:04

Re: Rechnungsnr.- Vergabe im Client-Server-System
 
Moin, moin,
Sorry hatte ein paar tage Aussendienst und deshalb melde ich mich erst jetzt wieder:

natter24,

Du ich habe darüber nachgedacht und wenn ich es anders nicht zum Laufen kriege gibt es so eine
Lösung...


Leuselator,

erst mal Danke, Du hast Dich doch da reingehängt (super) Eigentlich hast Du damit wohl auch recht.
Auf alle Fälle ist das ein gangbarer Weg. Bei Vollkaufleuten wird das wohl auch so gemacht. Gerade im GmbH-Bereich geht da auch kein Weg dran vorbei !
Jetzt gibt´s aber immer wieder so kleine Ausnahmen. Zum Beispiel Artzpraxen. Hier wird üblicherweise nur eine Einnahmen-Überschußbuchaltung gefordert. Hierfür ist nun jetzt. Na gut ich werde mich die nächsten Tage auch damit wieder beschäftigen müssen und melde mich dann nochmal

Viele Grüße // Martin


:balloon:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz