Spezielle automatische Artikelnummern-Vergabe

Allgemeine Erklärung

In diesem Beispiel unterscheidet der easyWinArt-Anwender in seinen Geschäftsprozessen im Wesentlichen zwei verschiedene Grundarten von Artikeln: Güter und Dienstleistungen. Um die Handhabung praktisch zu gestalten, wurden entsprechend zwei Verweis-Menüfunktionen angelegt, so dass sich jeweils mit einem Klick die gewünschten Artikel öffnen lassen. Als Unterscheidungsmerkmal dient das Häckchen 'Lagerfähig' in der Registerkarte 'Dispositions-Kennzeichen'.

In der weiteren Konsequenz sollen die beiden Artikelarten in verschiedenen Nummernkreisen geführt werden. Bei Anlage eines neuen Artikels bzw. bei Kopie eines vorhandenen Artikels soll entsprechend der Einstellung des Häckchens 'Lagerfähig' eine Artikelnummer von 1 bis 999 (Dienstleistungen) bzw. von 1000 bis 99999999 (Güter) vergeben werden. Es werden die vorhandenen Artikelnummern (innerhalb der angegebenen Werte) durchlaufen und die nächste freie Nummer ausgesucht, gibt es eine Lücke, so wird diese Nummer ausgewählt. Die neue Artikrelnummer wird dann in das Textfeld 'Artikelnummer' eingefügt. Wird auf das Häckchen 'Lagerfähig' geklickt, so wird die Prozedur erneut durchgeführt und eine Nummer aus dem jeweils anderen Nummernkreis verwendet.

VB.NET SDK-Programmcode:

  

#Region " TriggerFormFramework_NachLoad-Ereignis " 

        Private Sub TriggerFormFramework_NachLoad(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.NachLoad 

             '>>> Bei Menüfunktion  A R T I K E L 

             If TypeOf sender Is ArtikelFRM Then 

                 Dim ArtFRM As ArtikelFRM 

                 ArtFRM = CType(sender, ArtikelFRM

                 '>>> Wenn der Anwender das Lagerfähig-Hückchen anklickt, soll die Artikelnummer angepasst werden 

                 AddHandler ArtFRM.CheckBoxLagerfähigJN.EwaControlChanged, AddressOf SetzeNächsteFreieAritkelnummer 

             End If 

                 End Sub 

#End Region 

 

#Region " TriggerFormFramework_NachNeu-Ereignis " 

        Private Sub TriggerFormFramework_NachNeu(ByVal sender As Object, ByVal e As FormFrameworkNeuEventArgs) Handles Me.NachNeu 

             '>>> Bei Menüfunktion  A R T I K E L 

             If TypeOf sender Is ArtikelFRM Then 

                 '>>> Beim Anlegen eines neuen Artikels soll die Artikelnummer angepasst werden 

                 SetzeNächsteFreieAritkelnummer(sender, e) 

             End If 

                 End Sub 

#End Region 

 

#Region " TriggerFormFramework_NachKopieren-Ereignis " 

        Private Sub TriggerFormFramework_NachKopieren(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.NachKopieren 

             '>>> Bei Menüfunktion  A R T I K E L 

             If TypeOf sender Is ArtikelFRM Then 

                 '>>> Beim Anlegen eines neuen Artikels durch Kopie eines vorhandenen soll die Artikelnummer angepasst werden 

                 SetzeNächsteFreieAritkelnummer(sender, e) 

             End If

        End Sub 

#End Region 

 

#Region " Private Sub: SetzeNächsteFreieAritkelnummer (Entsprechend vorgegebener Regeln Artikelnummer vorgeben) " 

        Private Sub SetzeNächsteFreieAritkelnummer(ByVal sender As Object, ByVal e As EventArgs

             '>>> Bei Menüfunktion  A R T I K E L 

             Dim ArtFrm As ArtikelFRM 

             ArtFrm = CType(CType(sender, Control).FindForm, ArtikelFRM

             '>>> Nur nach Neu und nach Kopieren soll die Artikelnummern-Vergabe ablaufen 

             If ArtFrm.SpeicherungsTyp = SpeichernTyp.Neu Or ArtFrm.SpeicherungsTyp = SpeichernTyp.Kopieren Then 

                 Dim minArtikelNr, maxArtikelNr, zähler, artikelnummer, neueArtikelnummer As Integer 

                 Dim tmpRow As DataRow 

                 If ArtFrm.CheckBoxLagerfähigJN.Checked Then 

                     '>>> Güter-Artikel 

                     minArtikelNr = 1000 

                     maxArtikelNr = 99999999 

                 Else 

                     '>>> Dienstleistungs-Artikel 

                     minArtikelNr = 1 

                     maxArtikelNr = 999 

                 End If 

                 '>>> Aktuelle Artikelnummern holen (nur Artikelnummern bestehend aus ganzen Zahlen) 

                 Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                 Dim tmpSQL As String = "SELECT CAST(" & TBL.Artikel.ArtikelNummerVC & " AS INTEGER) AS " & TBL.Artikel.ArtikelNummerVC & _ 

                                        " FROM " & TBL.Artikel.TBL & _ 

                                        " WHERE NOT " & TBL.Artikel.ArtikelNummerVC & " LIKE '%[^0-9]%' " & _ 

                                        " ORDER BY " & TBL.Artikel.ArtikelNummerVC 

                 tmpDBZ.LöscheParameter()

                 Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.Artikel.TBL) 

                 If tmpTable.Rows.Count <> 0 Then 

                     '>>> Zähler initialisieren 

                     zähler = minArtikelNr 

                     '>>> Alle aus der Datenbank geholten Artikelnummern durchlaufen 

                     For Each tmpRow In tmpTable.Rows 

                         artikelnummer = C.ToIntegerX(tmpRow(TBL.Artikel.ArtikelNummerVC)) 

                         '>>> Artikelnummer nur auswerten, wenn sie in den Nummernkreis passt 

                         If artikelnummer >= minArtikelNr AndAlso artikelnummer <= maxArtikelNr Then 

                             If zähler <> artikelnummer Then 

                                 Exit For 

                             Else 

                                 zähler += 1 

                             End If 

                         End If 

                     Next 

                 End If 

                 '>>> Falls alle möglichen Nummern breits vergeben, einfach max nehmen, Hinweis kommt dann beim Versuch zu Speichern sowieso 

                 If zähler >= maxArtikelNr Then 

                     neueArtikelnummer = maxArtikelNr 

                 Else 

                     neueArtikelnummer = zähler 

                 End If 

                 '>>> neue Artikelnummer in Artikelnummer-Feld setzen 

                 ArtFrm.BasisFkt.SetzeControl(ArtFrm.TextBoxArtikelNummer, neueArtikelnummer) 

             End If 

        End Sub 

#End Region

Beratung erwünscht?

Gerne können Sie mich oder einen mein­er freund­lichen Kollegen telefonisch er­reichen:  +49 2161 277 680

Alter­na­tiv schrei­ben Sie uns an  info@it-easy.de oder nutz­en Sie das nach­folgende Kontakt­formular.

Ihr Ralf Jasper
Kundenservice

Mitarbeiterfoto von Herrn Ralf Jasper


Rückruf-Service

Für eine möglichst unkomplizierte Kontaktaufnahme füllen Sie bitte das unten stehende Formular aus und klicken auf „Rückruf anfordern“.