Beleg-Adresse über Projekt
Allgemeine Erklärung
In der Mandanten-Konfiguration von easyWinArt steht in der Registerkarte 'Belege' der Konfigurations-Schalter 'Beleg-Adresse über Kommission einstellen' zur Verfügung. Ist dieser aktiviert, so wird beim Anlegen eines neuen Vorgangs-Beleges nicht die Suche nach einer Adresse, sondern die Suche nach einer Kommission geöffnet (die bereits vorhanden oder kurz vorher angelegt sein sollte). Wird dann eine Kommission ausgewählt, so wird als Beleg-Adresse die Adresse der Kommission eingestellt.
An dieser Stelle soll nun gezeigt werden, wie man diese Logik mit Hilfe des SDK für Projekte umsetzen kann. Jedem Vorgangs-Beleg kann in der Registerkarte 'Projekt-Daten' ein Projekt zugeordnet werden. Dieses muss zunächst in der Menüfunktion 'Kostenrechnung -> Projekt-System --> Projekte' angelegt werden. Öffnet man dort aus der Registerkarte 'Alle Belege des aktuellen Projektes' über den unteren Button die Menüfunktion der Vorgangs-Belege und legt darin einen neuen Beleg an, so wird diesem automatisch das Projekt zugewiesen, das zum Zeitpunkt des Klicks auf den gerade genannten Button ausgewählt war. Jetzt soll durch untenstehenden Code dem Beleg auch gleich die Adresse des Projektes zugewiesen werden.
Wird hingegen die Menüfunktion 'Vorgangs-Belege' herkömmlich geöffnet, so soll bei Neuanlage eines Beleges statt der Suche nach einer Adresse die Suche nach einem Projekt erscheinen. Wird dann ein Projekt ausgewählt, so soll entsprechend auch gleich die Adresse dieses Projektes als Beleg-Adresse eingestellt werden.
Um dies zu realisieren, muss zunächst in der Mandanten-Konfiguration in der Registerkarte 'Belege' die 'Automatische Adress-Suche bei neuem Beleg' deaktiviert werden. Jetzt kann mit Hilfe des Triggers 'NachNeu' zunächst überprüft werden, ob bereits ein Projekt eingestellt ist, z.B. weil die Vorgangs-Belege wie oben beschrieben aus den Projekten heraus geöffnet worden sind. Ist dies der Fall, so kann die Adressnummer der Adresse des Projektes in das entsprechende Feld gesetzt werden, dadurch wird die Adresse in den Beleg gezogen. Sollte noch kein Projekt eingestellt sein, so soll die Suche nach Projekten geöffnet werden, dazu wird einfach der Klick auf das blaue Label 'Projekt' simuliert. Damit nach Auswahl des Projektes auch die Adresse eingestellt wird, wird über 'AddHandler' dem Ereignis 'EwaControlChanged' der Integerbox, welche die Projektnummer enthält, eine entsprechende Prozedur zugewiesen. Dies bedeutet, sobald die Projektnummer durch easyWinArt in das entsprechende Feld gesetzt wird, wird die Adressnummer des Projektes wie eben beschrieben geholt und somit die Beleg-Adresse gesetzt.
VB.NET SDK-Programmcode
#Region " Private Function: TriggerFormFramework_NachLoad () "
Private Sub TriggerFormFramework_NachLoad(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.NachLoad
'>>> Bei MenüFunktion V O R G A N G
If TypeOf sender Is VorgangFRM Then
Dim vorFRM As VorgangFRM
vorFRM = CType(sender, VorgangFRM)
'>>> Bei Änderung der Projektnummer ggf. Projektadresse als Beleg-Adresse
AddHandler vorFRM.IntegerBoxProjektNummer_ProjekteProjekt.EwaControlChanged, AddressOf Me.AdresseEinstellen
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
'>>> MenüFunktion V O R G A N G
If TypeOf sender Is VorgangFRM Then
Dim vorFRM As VorgangFRM
vorFRM = CType(sender, VorgangFRM)
'>>> Beleg-Adresse über Projekt bestimmen bzw. Suche nach Projekt öffnen
VorgangAdresseÜberProjektHolen(vorFRM)
End If
End Sub
#End Region
#Region " Private Sub: VorgangAdresseÜberProjektHolen () "
Private Sub VorgangAdresseÜberProjektHolen(ByVal VorFRM As VorgangFRM)
Try
'>>> Adresse setzen, falls Projekt bereits eingestellt ist, ansonsten Projekt-Such-Fenster öffnen
If VorFRM.IntegerBoxProjektNummer_ProjekteProjekt.Text <> "0" Then
AdresseSetzen(VorFRM)
Else
VorFRM.LabelProjektNummer_ProjekteProjekt.OnClickAuslösen()
End If
Catch ex As Exception
Throw New EwaException(ex)
End Try
End Sub
#End Region
#Region " Private Sub: AdresseEinstellen () "
Private Sub AdresseEinstellen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim vorFRM As VorgangFRM
vorFRM = DirectCast(DirectCast(sender, Control).FindForm, VorgangFRM)
'>>> nur, wenn noch keine Beleg-Adresse eingestellt ist
If vorFRM.IntegerBoxAdressNummer_AdressenVorgang.Text = "0" Then
AdresseSetzen(vorFRM)
End If
End Sub
#End Region
#Region " Private Sub: AdresseSetzen () "
Private Sub AdresseSetzen(ByVal VorFRM As VorgangFRM)
Dim projektGUID, adressGUID As String
Dim adressnummer As Integer
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
projektGUID = C.ToStringX(VorFRM.IntegerBoxProjektNummer_ProjekteProjekt.EwaFremdSchlüsselGuid)
adressGUID = C.ToStringX(tmpDBZ.HoleFeld(TBL.Projekte.AdresseGUID, TBL.Projekte.TBL, TBL.Projekte.GUID, projektGUID))
adressnummer = C.ToIntegerX(tmpDBZ.HoleFeld(TBL.Adressen.AdressNummerINT, TBL.Adressen.TBL, TBL.Adressen.GUID, adressGUID))
'>>> Adressnummer in die Integerbox 'AdressNummer' setzen, als hätte der User sie hineingeschrieben
VorFRM.BasisFkt.SetzeControl(VorFRM.IntegerBoxAdressNummer_AdressenVorgang, adressnummer)
End Sub
#End Region