Stücklisten-Schnellerstellung
Allgemeine Erklärung
Für die sinnvolle Verwendung des Moduls 'Fertigung (PPS)' können Artikel mit Fertigungs-Stücklisten versehen werden. Der folgende Code stellt dafür eine sehr schnelle und einfache Möglichkeit zur Verfügung. Die Registerkarte 'Stückliste-Fertigung' wird dazu um eine DoubleBox für die Menge und eine TextBox für die Artikelnummer ergänzt. Es wird dann schnell hintereinander die Menge sowie eine Artikelnummer eingegeben und mit Enter wird die Stücklisten-Position angelegt. Danach springt der Cursor wieder in die Menge für den nächsten Artikel. Mit 'Tabulator' oder 'Enter' kann von der Menge in die Artikelnummer-Eingabe gewechselt werden. Eine Eingabe ist nur im Änderungs-Modus möglich.
VB.NET SDK-Programmcode
#Region " TriggerFormFramework_NachLoad-Ereignis "
Private Sub TriggerFormFramework_NachLoad(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.NachLoad
'>>> A R T I K E L
If TypeOf sender Is ArtikelFRM Then
Dim artFRM As ArtikelFRM
artFRM = CType(sender, ArtikelFRM)
'>>> Artikelfenster anpassen
ArtikelfensterAnpassen(artFRM)
End If
End Sub
#End Region
#Region " Private Sub: ArtikelfensterAnpassen ( Artikel-Fenster um Steuerelemente ergänzen etc. ) "
Private Sub ArtikelfensterAnpassen(ArtFRM As ArtikelFRM)
'>>> DoubleBox Menge
Dim doubleBoxMenge As New EwaDoubleBox
doubleBoxMenge.Name = "A_DoubleBoxMenge"
doubleBoxMenge.Width = 60
doubleBoxMenge.Left = ArtFRM.Ewa1zuNStücklistenFertigung.Button1.Left + 160
doubleBoxMenge.Top = ArtFRM.Ewa1zuNStücklistenFertigung.Button1.Top + 2
ArtFRM.Ewa1zuNStücklistenFertigung.Button1.Parent.Controls.Add(doubleBoxMenge)
doubleBoxMenge.BringToFront()
doubleBoxMenge.EwaNachkommastellen = 3
doubleBoxMenge.EwaReadOnly = True
AddHandler doubleBoxMenge.PreviewKeyDown, AddressOf FocusAufArtikelnummer
'>>> TextBox Artikelnummer
Dim textboxArtikelnummer As New EwaTextBox
textboxArtikelnummer.Name = "A_TextBoxArtikelnummer"
textboxArtikelnummer.Width = 160
textboxArtikelnummer.Left = doubleBoxMenge.Left + doubleBoxMenge.Width + 6
textboxArtikelnummer.Top = doubleBoxMenge.Top
ArtFRM.Ewa1zuNStücklistenFertigung.Button1.Parent.Controls.Add(textboxArtikelnummer)
doubleBoxMenge.BringToFront()
textboxArtikelnummer.Tag = doubleBoxMenge
textboxArtikelnummer.EwaReadOnly = True
AddHandler textboxArtikelnummer.PreviewKeyDown, AddressOf StücklistenPosErgänzen
doubleBoxMenge.Tag = textboxArtikelnummer
'>>> Ereignis, damit beim Verlassen und Betreten des Änderungsmodus auch ReadOnly für die Steuerelemente ohne Datenbindung gesetzt wird
AddHandler ArtFRM.TextBoxArtikelNummer.EwaReadOnlyChanged, AddressOf MengeUndArtikelNrEinstellen
End Sub
#End Region
#Region " Private Sub: MengeUndArtikelNrEinstellen ( Readonly setzen an Menge und Artikelnummer ) "
Private Sub MengeUndArtikelNrEinstellen(sender As Object, e As System.EventArgs)
Dim artFRM As ArtikelFRM
Dim textBoxArtikelnummerEwa As EwaTextBox
textBoxArtikelnummerEwa = CType(sender, EwaTextBox)
artFRM = CType(textBoxArtikelnummerEwa.FindForm, ArtikelFRM)
Dim doubleBoxMenge As EwaDoubleBox
doubleBoxMenge = CType(artFRM.Ewa1zuNStücklistenFertigung.Button1.Parent.Controls("A_DoubleBoxMenge"), EwaDoubleBox)
Dim textboxArtikelnummer As EwaTextBox
textboxArtikelnummer = CType(artFRM.Ewa1zuNStücklistenFertigung.Button1.Parent.Controls("A_TextBoxArtikelnummer"), EwaTextBox)
If textBoxArtikelnummerEwa.EwaReadOnly Then
doubleBoxMenge.EwaReadOnly = True
textboxArtikelnummer.EwaReadOnly = True
Else
doubleBoxMenge.EwaReadOnly = False
textboxArtikelnummer.EwaReadOnly = False
End If
End Sub
#End Region
#Region " Private Sub: FocusAufArtikelnummer ( Fokus in Artikelnummer setzen ) "
Private Sub FocusAufArtikelnummer(sender As Object, e As System.Windows.Forms.PreviewKeyDownEventArgs)
'>>> Bei ENTER
If e.KeyCode = Keys.Enter Then
Dim doubleBoxMenge As EwaDoubleBox
doubleBoxMenge = CType(sender, EwaDoubleBox)
Dim textboxArtikelnummer As EwaTextBox
textboxArtikelnummer = CType(doubleBoxMenge.Tag, EwaTextBox)
textboxArtikelnummer.Focus()
End If
End Sub
#End Region
#Region " Private Sub: StücklistenPosErgänzen ( Stücklisten-Position an Artikel ergänzen ) "
Private Sub StücklistenPosErgänzen(sender As Object, e As System.Windows.Forms.PreviewKeyDownEventArgs)
Dim menge As Double
Dim artikelPosNummer As String
Dim artikelGUID, artikelPosGUID As Guid
Dim tmpReihenfolge As Integer
'>>> Bei ENTER
If e.KeyCode = Keys.Enter Then
Dim textboxArtikelnummer As EwaTextBox
textboxArtikelnummer = CType(sender, EwaTextBox)
Dim artFRM As ArtikelFRM
artFRM = CType(textboxArtikelnummer.FindForm, ArtikelFRM)
Dim doubleBoxMenge As EwaDoubleBox
doubleBoxMenge = CType(textboxArtikelnummer.Tag, EwaDoubleBox)
artikelGUID = artFRM.AktuelleGUID
If artikelGUID = Guid.Empty Then
'>>> E X I T
Exit Sub
End If
If doubleBoxMenge.Text.Trim = "" OrElse C.ToDoubleX(doubleBoxMenge.Text) = 0 Then
'>>> E X I T
Exit Sub
End If
menge = C.ToDoubleX(doubleBoxMenge.Text)
artikelPosNummer = textboxArtikelnummer.Text
If artikelPosNummer.Trim = "" Then
'>>> E X I T
Exit Sub
End If
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
artikelPosGUID = C.ToGuidX(tmpDBZ.HoleFeld(TBL.Artikel.GUID, TBL.Artikel.TBL, TBL.Artikel.ArtikelNummerVC, artikelPosNummer))
If artikelPosGUID = Guid.Empty Then
FktF.Meldung("Artikel '" & artikelPosNummer & "' nicht gefunden.", artFRM)
'>>> E X I T
Exit Sub
End If
Dim tmpsql As String
'>>> Max-Wert der Reihenfolge holen:
tmpsql = "SELECT TOP 1 " & TBL.Stücklisten.ReihenfolgeINT & " FROM " & TBL.Stücklisten.TBL & _
" WHERE (" & TBL.Stücklisten.ArtikelGUID & " = '" & artikelGUID.ToString & "')" & _
" ORDER BY " & TBL.Stücklisten.ReihenfolgeINT & " DESC "
tmpReihenfolge = C.ToIntegerX(tmpDBZ.HoleErsteZeileErsteSpalte(tmpsql)) + 1
'>>> INSERT:
tmpDBZ.LöscheFelder()
tmpDBZ.AddFelder(TBL.Stücklisten.ArtikelGUID, artikelGUID, EwaSQL.UniqueIdentifier)
tmpDBZ.AddFelder(TBL.Stücklisten.ArtikelPositionGUID, artikelPosGUID, EwaSQL.UniqueIdentifier)
tmpDBZ.AddFelder(TBL.Stücklisten.MengeDBL, menge, EwaSQL.Float)
tmpDBZ.AddFelder(TBL.Stücklisten.MengenFaktorDBL, 1, EwaSQL.Float)
tmpDBZ.AddFelder(TBL.Stücklisten.ReihenfolgeINT, tmpReihenfolge, EwaSQL.Integer)
tmpDBZ.AddFelder(TBL.Stücklisten.PositionsKennungVC, tmpReihenfolge.ToString & "0", EwaSQL.NVarChar)
tmpDBZ.InsertDatensatz(TBL.Stücklisten.TBL)
artFRM.Ewa1zuNStücklistenFertigung.AktualisiereDataGrid()
textboxArtikelnummer.Text = ""
doubleBoxMenge.Text = ""
doubleBoxMenge.Focus()
End If
End Sub
#End Region