Entwicklertagebuch JTL-Toolbox – Programmieren mit Visual Basic Teil 6

Bei der Debitorennummer handelt es sich um einen Wert aus der Buchhaltung. Es gibt auch keine Vorschrift, nach welchen Kriterien diese an Kunden vergeben werden. Aus der Praxis heraus, würde ich zum Beispiel für die Kunden eine Debitorennummer vergeben, die als Zahlungsart “Auf Rechnung” hinterlegt haben und dementsprechend auch meinen Export schon im Vorfeld filtern. Eine Vergabe der Debitorennummern nach Alphabet ist für den Online-Handel aus meiner Sicht völliger Unfug. Ich habe keine Glaskugel und kann doch nicht im Vorfeld bestimmen, wie viele Kunden ich mit dem Anfangsbuchstaben A haben werde.

2016-11-23-17_39_12-jtl-toolbox-form3

Bevor ich mich darüber hermache, meine Kundenliste nach gewissen Parametern zu Filtern und dann die Debitorennummernvergabe auf die gefilterte Liste anwende, mache ich das fürs Erste mit allen Datensätzen. Bei der Vergabe der Debitorenummern gehe ich davon aus, das ich nicht weiß, welche Nummern im Nummernkreis schon vergeben sind und ob diese auch wirklich der Reihe nach ohne Lücken vergeben wurden. Ich sollte also alle Datensätze meines Exports überprüfen und sofern keine Nummer vergeben wurde, die kleinste freie Nummer vergeben. Natürlich könnte ich auch die Liste vorher auf die Datensätze ohne Debitorennummer filtern. Dazu komme ich aber später noch.

Schauen wir uns nochmal den Prozess für die Debitorennummernvergabe an:

prozessdebitorvergabe

Zunächst Filtern wir unsere Liste, ob überhaupt Datensätze ohne Debitorennummer vorhanden sind. Ist die Anzahl der Datensätze größer Null können wir jetzt den Datensätzen ohne Debitorennummern eine freie Debitorennummer vergeben. Dazu durchlaufen wir in einer Schleife unseren Nummernkreis und fragen ab, ob die Nummer noch frei ist. Wenn ja können wir die erste freie Nummer (was auch gleichzeitig die kleinste ist) dem Datensatz zuweisen. Gleichzeitig erhöhen wir die Nummer um 1 und setzten den Startwert für die Überprüfung der freien Debitorennummern auf diesen Wert. Somit müssen wir beim nächsten Datensatz nicht wieder alle Datensätze von vorne durchforsten. Jetzt müssen wir nur noch die Datensatz zurück in unser Listenfeld schreiben und den Wert der ProgressBar um 1 erhöhen.

Sind alle Datensätze ohne Debitorennummer abgearbeitet, können die geänderten Datensätze wieder in die Wawi mit der JTL-Wawi-Ameise importiert werden. Also fangen wir mit dem Coden an

Oberfläche

Form3 fügen wir über die die Toolbox einen neuen Button hinzu und ändern die Texteigenschaft auf Debitorennr. vergeben.

2016-11-23-19_20_31-jtl-toolbox-microsoft-visual-studio

Quellcode

Im Quellcode müssen größere Änderungen vorgenommen werden. Zum einen brauchen wir eine globale Variable für die Kundenliste (Dim kundenliste As IEnumarable(Of Kunde)). Damit müssen wir auch den Quellcode unter Button1_Click anpassen und dort die Variable query durch Kundenliste ersetzten. Anschließend können wir das Ereignis Button2_Click mit Leben befüllen. Danach legen wir im Ereignis Form3_Load mit Button2.Enabled = False fest, der Button beim Start des Fensters nicht aktiviert ist (damit der Dummy keinen Unfug machen kann.) Am Ende von Button1_Click fügen wir dann noch die Zeile Button2.Enabled=True ein. Damit stellen wir sicher, dass der Anwender erst wenn der letzte Datensatz eingelesen ist, die Routine zur Vergabe der Debitorennummern starten kann. Und gleich in der ersten Zeile der Routine (Button2_Click) deaktivieren wir auch den Button wieder.

Über die LINQ Abfrage

filtern wir uns alle Datensätze ohne Debitorennummer heraus. Anschließend fragen wir mit If List.Count > 0 Then ab, ob wir überhaupt Datensätze mit leerer Debitorennummer haben. Wenn nein, macht es später auch keinen Sinn den Button für den Import zu aktivieren. Damit wären wir hier am Ende der Veranstaltung.

Gibt es Datensätze mit leerer Debitorennummer können wir diese mit einer For Each item in list Schleife abarbeiten. In der Schleife ermitteln wir die erste freie Debitorennummer. Dafür könnte ich mir jetzt eine zweite Tabelle schnitzen, die alle möglichen Debitorennummern generiert und diese mit der Kundenliste verknüpfen, um dann daraus eine Liste mit allen freien Debitorennummern zu generieren. Ich mache es mir hier etwas einfacher. Ich kenne die kleinste mögliche Debitorennummer und die größte und frage in einer Schleife einfach ab, ob die Debitorennummer schon vergeben ist. Wenn Nein (query.Count = 0 ) dann kann ich diese Debitorennummer (i) verwenden und muss nur noch den Startpunkt um 1 erhöhen. Beim nächsten Durchlauf der Schleife fängt er dann an dieser Stelle an zu suchen.

Der komplette Quellcode für Form3 sieht dann so aus:

Jetzt habe wir eine gefilterte Liste mit Kundendatensätzen, denen wir eine freie Debitorennummer vergeben haben. Diese Liste sollte in der Praxis natürlich viel kürzer sein, als die gesamte Kundenliste. Diese Liste können wir jetzt im nächsten Schritt wieder als CSV-Datei speichern und in die Wawi mit der Ameise importieren. Es gibt also noch einiges für Morgen zu tun. So müssen die Nummernkreise über die Einstellungen verwaltbar sein und noch ein paar zusätzliche Informationen für den Anwender ermittelt und angezeigt werden. Anschließend müssen wir noch ein bisschen testen und etwaige Fehler abfangen oder vielleicht sogar nochmals am Code herum schrauben. Ab Aber bis jetzt scheint alles rund zu laufen und zum Abschluss des Tages können wir nochmals mutig die F5-Taste drücken.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.