Bitte um Hilfe und Tips bezüglich Storno-Rechnung
Hallo an Alle,
wie löst ihr das, wenn eine Rechnung storniert werden soll (zB Falsche RG-Adresse)?
Habt ihr da zB ein Auswahlfeld (RG, StornoRG) oder setzt ihr die RG dann ins Minus oder Beides?
Ich bin da gerade etwas überfordert, wie ich das am Besten lösen soll.
Ich werde die RG neu ausdrucken, an den Rechnungsempfängerbrief anheften und eine neue RG erstellen mit neuer RG-Nummer.
Könnte es auch eine elegantere Lösung geben?
Vielen Dank schon mal für jegliche Tips und Anregungen.
Gruß, Kruna
26 Antworten
-
Hallo Kruna, formal korrekt wäre wohl, eine Storno-Rechnung mit Minus-Betrag und dann eine neue Rechnung zu erstellen, beide mit jeweils eigener Rechnungsnummer. Dann stimmt das Kundenkonto und der Vorgang ist für das Finanzamt auch in ein paar Jahren noch nachvollziehbar.
-
HAllo Copytexter,
vielen Dank für Deine Antwort. Und schon kommt die nächste Frage, wie erstelle ich eine StornoRg mit Minusbetrag?
Die RG (es ist eine Teilrechnung) wurde aus einem Auftrag erstellt, bei den Du mir schon mal geholfen hast. Da hattest Du eine kleine DB 'Auftrag_zu_Rechnung' erstellt (Die war echt toll, hat mir ganz viel geholfen!!). Die Befehlsschaltfläche 'Rechnung erstellen' enthält folgendes Script:
let myAF := this;
let newRE := (create Rechnungen);
newRE.(
'Zu Auftrag' := myAF;
'Zu Kunde' := myAF.'Zu Kunde';
Kundennummer := myAF.'Zu Kunde'.Kundennummer;
Name := myAF.'Zu Kunde'.Name;
Ort := myAF.'Zu Kunde'.Ort;
Rechnungsdatum := today();
for i in myAF.AF_Positionen do
let newRE_Pos := (create RE_Positionen);
newRE_Pos.(
Rechnungen := newRE;
Bezeichnung := i.Bezeichnung;
Betrag := i.Betrag
)
end
);
openRecord(newRE)Ich habe das Script soweit angepasst und alles funktioniert prima!
Wie könnte ich denn da nun die StornoRg mit einbinden bzw. in Minus setzen?
Vielen Dank und Gruß Kruna
-
Ja, ich erinnere mich ... Da wurde per Skript aus einem Auftrag eine Rechnung erstellt. In diesem Fall haben wir die Rechnung schon und wollen sie im Grunde "nur" zwei mal duplizieren: Erstens für die Storno-Rechnung und zweitens für die neue, korrekte Rechnung. Denn inhaltlich ändert sich ansonsten ja nichts.
In der einfachsten Form könnte man das einfach mit dem Ninox-Button "Datensatz duplizieren" in der Menüleiste machen, dann manuell die neue Rechnungsnummer eingeben und die Positionen manuell ins Minus setzen. Damit hätte man die Stornorechnung. Und für die neue, korrekte Rechnung könnte man den Duplizier-Vorgang wiederholen (ohne das Minus).
Man muss auf der Rechnung allerdings auch vermerken, dass es sich um eine Storno-Rechnung handelt und auf welche ursprüngliche Rechnungsnummer sie sich bezieht. Ersteres habe ich bei mir mit einem Auswahlfeld für den Titel gelöst: "Rechnung" (Standard), "Korrekturrechnung", "Stornorechnung" (und weitere, aber die tun hier nichts zur Sache). Im Drucklayout wird automatisch das Entsprechende eingetragen. Weiterer Vorteil der Lösung mit dem Auswahlfeld: Man könnte anhand des Titels bei Bedarf noch weitere Aktionen auslösen (z. B.: if text(Titel) = "Stornorechnung" then ...).
Für den Bezug gibt es bei mir ein gleichnamiges Textfeld, in dem normalerweise sowas steht wie "Ihr Auftrag vom ...", "Unsere Lieferung vom ..." oder ähnliches. Statt dessen könnte dort bei einem Storno halt stehen "Storno zu Rechnung XYZ vom ...".
Es hängen also schon noch ein paar Details dran. Damit das hier nicht zu kompliziert wird, habe ich die vorhandene DB "Auftrag_zu_Rechnung" einfach mal aktualisiert und in der Tabelle 'Rechnungen' die o. g. Felder hinzugefügt, das Druckformular angepasst (Minimal-Infos) und zwei Schaltflächen erstellt. Eine zum Stornieren und eine zum Duplizieren der aktuellen Rechnung. Die zum Stornieren macht folgendes:
1.) Der aktuelle Rechnungsdatensatz wird dupliziert.
2.) Rechnungsnummer wird generiert und eingesetzt.
3.) Rechnungsdatum wird auf den heutigen Tag gesetzt.
4.) Titel wird auf "Stornorechnung" gesetzt.
5.) Bezug wird auf die "alte" Rechnung gesetzt.
6.) Beträge der Positionen werden ins Minus gesetzt.
7.) Der neue Datensatz wird geöffnet.Die Punkte 1 bis 3 und 7 finden sich auch in der Schaltfläche zum Duplizieren.
Die DB war jetzt eine relativ effektive Form, eine Möglichkeit der technischen Realisierung zu demonstrieren. Umsetzung und Anpassung müsstest du ggf. halt selbst vornehmen. Hier der neue Download-Link:
https://www.dropbox.com/s/q5984e7xkaktzym/Auftrag_zu_Rechnung.ninox?dl=0
-
Guten Morgen Copytexter,
mir fehlen einfach die Worte!!! Nicht nur das Du die Lösung immer parat hast, sondern auch noch viel Input dazu schreibst. Das ist für mich, als Anfänger sehr hilfreich, Ninox besser zu verstehen. Ich kann zwar immer noch kein Script schreiben, aber jedesmal denke ich mir 'Ja klar, wie denn auch sonst!'
Tausendmal unendlich Danke!!! Ihr seid hier echt alle Klasse und immens hilfsbereit!
Nach ein paar Anpassungen und nachdem ich ein wenig 'herumprobiert' habe, funktioniert alles perfekt!
Es ist mir zwar ein wenig unangenehm , noch einmal nachzufragen, aber der Vollständigkeit halber frage ich doch nochmal. Wie würde denn das Script lauten, wenn es sich nur um eine Korrekturrechnung handelt?
Entschuldige, dass ich da nochmal nachfrage.
Gruß
Kruna
-
Ich bin auch kein Experte in Sachen Buchhaltung, deshalb ohne Gewähr: Korrekturrechnungen braucht man nicht unbedingt. Sie sind im Grunde das, was früher als "Gutschrift" bezeichnet wurde, weil dieser Begriff seit 2013 steuerrechtlich anders definiert wird. Wenn bspw. auf der Rechnung 20 Stück eines Artikels berechnet, aber nur 15 geliefert wurden, dann kann man dem Kunden für die 5 zuviel berechneten eine Korrekturrrechnung mit Minus-Werten erstellen. Das setzt allerdings voraus, dass die Ursprungsrechnung ansonsten formal korrekt und vollständig war. Und auch bei einer Korrekturrechnung muss eindeutig vermerkt sein, welche Rechnung mit dieser korrigiert wird. Man hat am Ende also zwei Dokumente für denselben Vorgang: Die usprüngliche, falsche Rechnung und die Korrekturrechnung.
Eine fertige Korrekturrechnung lässt sich auf Knopfdruck also nicht erstellen, weil ja nicht klar, WAS korrigiert werden soll. Man muss also immer noch "Hand anlegen" und die betreffenden Bestandteile manuell ändern. Also bei obigem Beispiel die Menge der Position auf -5 setzen und alle anderen Positionen löschen.
Man kann die erste Rechnung aber auch komplett stornieren und eine neue Rechnung ausstellen. Das geht immer. In deinem Beispiel mit der falschen Adresse wäre das m. E. sogar erforderlich, weil die erste Rechnung ja nicht korrekt war und evtl. vom Finanzamt nicht anerkannt würde. Dann hat man am Ende drei Dokumente: Die usprüngliche, falsche Rechnung, die Stornorechnung und die neue, korrekte Rechnung. Das ist wohl die sauberste und transparenteste Lösung.
Wichtig ist: Jede Rechnung, auch Korrektur- und Stornorechnung, benötigt eine neue, eindeutige Rechnungsnummer. Und solange eine Rechnung noch nicht versendet und gebucht wurde, kann man sie natürlich auch direkt ändern.
Aber wie gesagt: Alle Angaben ohne Gewähr. Hier geht es weniger um technische als um sachliche bzw. rechtliche Fragen. Im Zweifelsfall also lieber selbst noch mal recherchieren oder einen Steuerberater befragen.
-
Ach so, wenn du dir trotzdem eine Schaltfläche für Korrekturrechnung erstellen, die Rechnung damit duplizieren und alle Positionen ins Minus setzen willst, dann kannst du im Grunde den Code der "Storno"-Schaltfläche nehmen und geringfügig anpassen:
let Antwort := dialog("Rechnungskorrektur", "Wollen Sie eine Korrekturrechnung zu dieser Rechnung erstellen?", ["Ja, mach hinne", "Nää, lieber nicht"]);
if substr(Antwort, 0, 1) = "J" then
let oldRe := this;
let myDatum := today();
let y := year(myDatum);
let c := cnt(select Rechnungen where year(myDatum) = y) + 1;
let newRe := duplicate(this);
newRe.(Rechnungsnummer := "RE-" + format(y, "00") + "/" + format(c, "0000"));
newRe.(Rechnungsdatum := today());
newRe.(Rechnungstitel := "Korrekturrechnung");
newRe.(Bezug := "zu Rechnung " + oldRe.Rechnungsnummer + " vom " + oldRe.Rechnungsdatum);
for i in newRe.RE_Positionen do
i.(Betrag := i.Betrag * -1)
end;
openRecord(newRe)
end
-
Hallo Copytexter,
das hat auch wunderbar geklappt!! Viiiiielen Dank nochmals!
Wahrscheinlich werde ich die Korrektur eh nicht brauchen, aber wenn, dann kann ich doch darauf zugreifen.
Und wie Du auch schreibst, es sind vielmehr sachliche Fragen, die mir dann eher ein Steuerberater beantworten kann. Trotzdem vielen Dank.
-
HAllo Copytexter,
entschuldige mich bitte, aber ich habe eine Frage zu deiner Beispieldatenbank. Es hat alles super funktioniert und tut es auch weiterhin.
Nun ist aber folgendes eingetreten:
Es gibt keinen Auftrag, sondern gleich eine Rechnung an Kunde XY.
Wie man nun oben rechts sehen kann, sind noch -876,00€ offen. Wie bekomme ich das auf 0,00€? Ich habe einiges mit if then versucht, aber es hat leider nicht geklappt.
Vielen Dank im Voraus!
Gruß Kruna
-
Hallo Kruna, die Ausgangssituation damals war ja, dass jeder Rechnung ein Auftrag zugrunde liegt. Mit dem Berechnungfeld "Offen" sollte ermittelt werden, ob es noch nicht berechnete Aufträge gibt. Die Formel war entsprechend simpel:
'Sum Aufträge' - 'Sum Rechnungen'
Wenn man nun auch Rechnungen ohne vorherigen Auftrag erstellt, dann funktioniert das natürlich nicht mehr. Das Ergebnis einfach auf Minus abzufragen und ggf. auf 0 zu setzen, wäre auch keine Lösung, weil der Sinn des Feldes nicht mehr sicher erfüllt würde (z. B. wenn tatsächlich ein Auftrag offen ist und eine Rechnung ohne Auftrag für diesen Kunden erstellt wurde).
Aber in den Aufträgen gibt es ja auch das Feld 'Offen'. Das ist für diesen Zweck im Grunde ja sowieso viel besser geeignet. Also am besten in der Ansicht "Aufträge" auch die Spalte "Offen" einblenden und die Formel im Kundenformular ändern:
sum('Aufträge'.Offen)
Vielleicht sollte man bei der Gelegenheit auch die Felder neu anordnen und/oder neu benennen, damit klar ist, dass sich der Betrag im Feld "Offen" auf die Auträge bezieht und nicht auf die Rechnungen. Das aber nur nebenbei.
Content aside
- vor 1 JahrZuletzt aktiv
- 26Antworten
- 1699Ansichten
-
3
Folge bereits