0

Erstellung einer "Schnellfaktur"

Hallo Forum,

ich habe auf der Webinarvorlage 16_Rechnungen_incl_Extras basierend einmal ein Problem dargestellt, für das ich keine Lösung kenne.

Es geht dabei um das Erstellen von Rechnungen nicht über die Einblendung der kompletten Artikelmaske, sondern um eine Art Schnellfaktur basierend nur auf der Anzahl und der Artikelnummer. Hintergrund ist, dass viele klassische Rechnungserfasser mit dem grafischen Ansatz nicht zurechtkommen, dass sich immer erst eine komplette Maske eingeblendet, aus der über ein Suchfeld der Artikel ausgewählt werden muss.

Klassische Rechnungserfasser haben die Artikelnummern weitestgehend dem Kopf, und müssen nur ganz selten nachschlagen. Dafür bietet Ninox aber keine Lösung Out of the Box, weil man das Feld der Rechnungspositionen nicht direkt editieren kann.

Ich habe deshalb in dieser Vorlage einmal eine Maske angelegt, wie es aussehen könnte: Im Feld Anzahl wird die Anzahl eingetragen, im Feld Artikelnummer die Artikelnummer, und mit Enter werden diese beiden Werte mit der Artikel Datenbank abgeglichen, sodass der Artikel und die Anzahl ausgewählt werden, und unten in der Tabelle mit den Bestellpositionen landen.

Es wäre also quasi ein automatisierte Hinzufügen wie über den Plus-Button, dieser soll auch erhalten bleiben, für den Fall, dass der Verfasser die Artikelnummer nicht weiß. Es sollte also beides möglich sein.

Hat jemand eine Idee, wie der Code aussehen müsste, für mich ist das leider noch viel zu hoch. Wäre das vielleicht etwas für das Webinar, haben auch andere User diese Fragestellung?

Gruß, Oliver 

PastedGraphic-4

16 Antworten

null
    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    PS: Ich habe die Datenbank hier hochgeladen, weil ich nicht weiss, wie man sonst hier eine Datei ablegen kann:

    https://we.tl/zSyNJ7wt2q

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Oliver,

    Bei ANZAL und bei ARTIKELNUMMER folgende Code als Trigger nach Änderung:

    ---

    let myR := Nr;
    let myANZ := ANZAHL;
    let myART := ARTIKELNUMMER;
    let myCNT := cnt((select Artikel)['Article No' = myART]);
    if ANZAHL and ARTIKELNUMMER and myCNT != 0 then
    let newPOS := (create Rechnungsposition);
    newPOS.(Rechnung := myR);
    newPOS.(Artikel := first((select Artikel)['Article No' = myART]));
    newPOS.(Menge := myANZ);
    newPOS.(Beschreibung := newPOS.Artikel.Beschreibung);
    newPOS.('Preis pro Einheit' := newPOS.Artikel.'Netto-Preis');
    newPOS.('Artikel No' := newPOS.Artikel.'Article No');
    newPOS.('MwSt-Satz' := if newPOS.Artikel.'MwSt-Satz' then
    number(item(split(text(newPOS.Artikel.'MwSt-Satz'), " "), 0))
    else
    19
    end)
    end

    ---

     

    Leo

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Noch besser ist es mit der Befehlsschaltfläche:

    ---

    let myR := Nr;
    let myANZ := ANZAHL;
    let myART := ARTIKELNUMMER;
    let myCNT := cnt((select Artikel)['Article No' = myART]);
    if myCNT = 0 then
    alert("Artikelnummer " + myART + " existiert nicht")
    else
    if ANZAHL and ARTIKELNUMMER then
    if cnt(Rechnungsartikel[Artikel.'Article No' = myART]) != 0 then
    alert("Dieser Artikel ist bereits in der Rechnung vorhanden")
    else
    let newPOS := (create Rechnungsposition);
    newPOS.(Rechnung := myR);
    newPOS.(Artikel := first((select Artikel)['Article No' = myART]));
    newPOS.(Menge := myANZ);
    newPOS.(Beschreibung := newPOS.Artikel.Beschreibung);
    newPOS.('Preis pro Einheit' := newPOS.Artikel.'Netto-Preis');
    newPOS.('Artikel No' := newPOS.Artikel.'Article No');
    newPOS.('MwSt-Satz' := if newPOS.Artikel.'MwSt-Satz' then
    number(item(split(text(newPOS.Artikel.'MwSt-Satz'), " "), 0))
    else
    19
    end)
    end
    end
    end

    ---

    So kann man mit popup Fenster den Benutzer informieren, wenn ein Artikel nicht existiert oder wenn  ein Artikel bereits in der Rechnung vorhanden ist. mit dem späterem Update könnte man sogar den Benutzer entscheiden lassen, ob die Mengen der vorhandenen Artikel einfach addiert werden oder der Vorgan abgebrochen werden sollte.

     

    Leo

    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, 

    tausend Dank, es funktioniert, mit Schaltfläche und auch der Fehlermeldung, wenn ein Artikel nicht existiert. Ich bin geplättet :) 

    Viele Grüße, Oliver

    • tschijoh
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Oliver,

    bei mir gibt es ein kleines Problem. Wenn ich einen MwSt-Satz von 16,15 % eingebe, funktioniert es nicht. Was mach ich falsch? Kann mir da jemand helfen. Mit 7 und 19 % funktioniert es top.

    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Tschijoh, 

    wo genau hast du den MwSt-Satz von 16,15 % eingegeben? Und was ist das eigentlich für ein MwSt-Satz von 16,15 %, wo braucht man den?

    Generell ist diese Schablone nicht dafür gedacht, den MWSt-Satz aufwendig zu verwalten, dazu müsste man sie erweitern. Mir ging es hier nur um das Faktur-Problem. In der jetzigen Form musst du die MWSt. sowohl in der Tabelle Artikel ändern als auch in der obigen Formel von Leo.

    Wenn man mehr als die beiden deutschen Standardsätze von 7 und 19% hat, ist es vermutlich besser, eine Untertabelle anzulegen und die MWSt-Sätze dort separat zu verwalten. 

    Gruß, Oliver

    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, wenn es für dich in Ordnung ist, würde ich die Datenbank bei nächster Gelegenheit mit einer kleinen Dokumentation versehen und unter Hinweis auf deinen Code ins Webinar-Team hochladen. Vielleicht haben noch andere User einen Nutzen davon. Ok für dich? Gruß, Oliver 

    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, wenn es für dich in Ordnung ist, würde ich die Datenbank bei nächster Gelegenheit mit einer kleinen Dokumentation versehen und unter Hinweis auf deinen Code ins Webinar-Team hochladen. Vielleicht haben noch andere User einen Nutzen davon. Ok für dich? Gruß, Oliver 

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Oliver,

    klar je mehr Leute davon profitieren desto besser. Du kannst auch am Mittwoch die Formel zeigen. Ich kann diesmal leider am Webinar nicht teilnehmen.

     

    Leo

    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Leo, ein Seminar ohne dich - was soll das bloß werden :)

    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Ist hochgeladen als 96_Schnellfaktur_Rechnungszeile_direkt_aus_Artikelnummer_erstellen

    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    könntest du bitte nochmal eine Hilfe geben, ich komme an einer Stelle nicht weiter, siehe die Datenbank 96_Schnellfaktur_Rechnungszeile_direkt_aus_Artikelnummer_erstellen im Webinar-Team.

    Ich wollte die Faktur um den RABATT erweitern und habe in den Rechnungspositionen deshalb das Feld RABATT angelegt. Dieses Feld soll aus der Rechnungsmaske befüllt werden mit der Regel:

     

    1) Wenn ein KUNDENRABATT eingesetzt ist, nimm den Kundenrabatt. Der Kundenrabatt ist ein globaler Rabatt, der immer gilt, der Kundenrabatt ist im Kundenstamm hinterlegt.

     

    2) Wenn ein ARTIKELRABATT eingesetzt ist, nimm jedoch den Artikelrabatt, denn der Artikelrabatt überschreibt den Kundenrabatt. Der Artikelrabatt kann vom Kundenrabatt abweichen, manchmal ist er kleiner, manchmal größer, das hängt vom Artikel ab und ob beispielsweise gerade eine Sonderaktion läuft. Der Artikelrabatt ist aber nicht im Artikelstamm hinterlegt, sondern wird in der Fakturzeile eingetragen, so wie die Stückzahl und die Artikelnummer, siehe den Screenshot.

     

    3) Ich wollte das lösen mit der Variable myRAB als Variable des Rabatts:

    if ARTIKELRABATT != 0 then
    let myRAB := ARTIKELRABATT;
    else
    let myRAB := KUNDENRABATT;

    und später dann:

    newPOS.(RABATT := myRAB);

    Allein, es hat kein Resultat ergeben und ich habe den Code wieder gelöscht. Zur eigentlichen Berechnung kam ich noch nicht ...

     

    4) Und ich will noch eine weitere Zeile mit aufnehmen, das ARTIKEL-BZ (Artikel-Bestellzeichen). Das soll auch mit in der Zeile übergeben werden, ohne dass es mit in eine Berechnung aufgenommen wird. Hintergrund ist, dass ganz oft Bestellungen kommen, wo der Buchhändler mit angibt, welches Buch von welchem Kunden oder welcher Abteilung bestellt wurde, das sogenannte BESTELLZEICHEN. Damit der Buchhändler die Lieferung zuordnen kann, braucht er also in der jeweiligen Zeile dieses Bestellzeichen.

     

    Die Rechnungen im Verlagswesen sind speziell :)

     

    Viele Grüße, Oliver

     

    PastedGraphic-5

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Oliver,

    habe es soweit umgesetzt. Dabei habe ich noch ein Paar "Spielereien" eingefügt. Wenn der Kunde nicht ausgewählt ist, erscheint eine Fehlermeldung. Wenn der Artikel übertragen wurde, erscheint eine Bestätigungsmeldung und die Eingabefelder werden geleert.

    Leo

    • OliverS
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

     

    vielen Dank, da habe ich wieder was gelernt :)

     

    let myRAB := if ARTIKELRABATT then ARTIKELRABATT else Kunde.KUNDENRTABATT end;

     

    statt

     

    if ARTIKELRABATT != 0 then
    let myRAB := ARTIKELRABATT;
    else
    let myRAB := KUNDENRABATT;

     

    Danke auch für die "Spielereien". Jetzt werde ich es weiter testen und Schritt für Schritt erweitern.

     

    Gruß, Oliver

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Oliver,

    habe noch zusätzlich einen Button zum Einblenden/Ausblenden Schnellfaktur hinzugefügt.

    • Verleger
    • OLIVER
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    hab ich gesehen, finde ich gut.

    Als nächstes passe ich die MWST und die Preisberechnung an. Bücher sind alle incl. 7% MWST, und der Ausgangspunkt ist der feste Ladenpreis.

    Gruß Oliver 

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 16Antworten
  • 5304Ansichten