Teil-Pushen / Pushen eines Beleges, z.B. Auftrag nach Lieferung
Allgemeine Erklärung
In der Beleg-Verwaltung von easyWinArt stehen verschiedene Buttons zur Verfügung, mit denen ein Beleg zur nächsten Belegstufe 'gepusht' werden kann, das bedeutet z.B., dass zu einem Auftag die entsprechende Lieferung erstellt wird. Zusätzlich gibt es auch die Möglichkeit, dass nur ein Teil der Positionen gepusht wird, so dass z.B. eine Teil-Lieferung erzeugt wird, oder es kann über Sammel-Pushen ein Sammel-Beleg entstehen, in den Positionen aus mehreren vorhergehenden Belegen zusammenfließen. Mit Hilfe der folgenden Beschreibungen ist es möglich, diese Vorgänge im SDK programmiergesteuert abzubilden.
Teil-Lieferung erzeugen
Zum Erzeugen eines Teil-Beleges aus einem bestehenden Beleg kann der nachfolgende Code verwendet werden.
Im ersten Beispiel wird auf einen Doppelklick auf die 'Belegidentifizierer-Textbox' hin eine Teil-Lieferung aller offenen Positions-Mengen aller Positionen des Beleges, deren Preis größer oder gleich 100 ist, erstellt.
Das zweite Beispiel macht das gleiche wie das erste, aber für alle offenen Aufträge der aktuellen Suchliste. Dabei ist die Transaktion eine Funktion höher verwendet worden, damit entweder alle oder keiner der (Teil-)Lieferungen erstellt wird.
Diese Aktionen können als äquivalent betrachtet werden zum Button Teil-Beleg erzeugen an einem Beleg oder zum Kopieren eines Beleges, z.B. von Auftrag nach Lieferung, mit anschließender Verwendung des Verknüpfen-Buttons (Büroklammer mit dem Plus), über den Positionen der vorhergehenden Belegstufe in den Beleg hineingeholt und verknüpft werden können.
VB.NET: (Teil-)Lieferung - Beispiel 1
#Region " TriggerFormFramework_NachLoad-Ereignis "
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)
'>>> Ereignis bei Doppelklick auf die TextBox 'BelegIdentifizierer' hinzufügen
AddHandler vorFRM.TextBoxBelegIdentifizierer.DoubleClick, AddressOf TeillieferungErzeugen
End If
End Sub
#End Region
#Region " Private Sub: TeillieferungErzeugen () "
Private Sub TeillieferungErzeugen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim vorFRM As VorgangFRM
Dim row As DataRow
Dim auftragsGUID As Guid
Dim positionenDIC As New Dictionary(Of Guid, Double)
vorFRM = CType(CType(sender, EwaTextBox).FindForm, VorgangFRM)
auftragsGUID = vorFRM.AktuelleGUID
'>>> Alle Positions-GUIDs, und Positions-Mengen des aktuellen Beleges holen
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
Dim tmpSQL As String = "SELECT " & TBL.VorgangsPosition.GUID & _
", " & TBL.VorgangsPosition.MengeOffenDBL & _
" FROM " & TBL.VorgangsPosition.TBL & _
" WHERE " & TBL.VorgangsPosition.BelegGUID & " = '" & auftragsGUID.ToString & "'" & _
" AND " & TBL.VorgangsPosition.MengeOffenDBL & " > 0 " & _
" AND " & TBL.VorgangsPosition.PreisDBL & " >= 100"
Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.VorgangsPosition.TBL)
'>>> Alle Werte in ein Dictionary speichern
For Each row In tmpTable.Rows
positionenDIC.Add(C.ToGuidX(row(TBL.VorgangsPosition.GUID)), C.ToDoubleX(row(TBL.VorgangsPosition.MengeOffenDBL)))
Next
'>>> Teillieferungen erstellen
TeillieferungErzeugenDetail(auftragsGUID, BT.VkLieferung, positionenDIC)
End Sub
#End Region
#Region " Private Sub: TeillieferungErzeugenDetail () "
Private Sub TeillieferungErzeugenDetail(ByVal AuftragsGUID As Guid, ByVal ZielBelegTyp As String, ByVal positionenDIC As Dictionary(Of Guid, Double))
Dim tmpVorgang As Vorgang = Nothing
Dim neueBelegGUID As Guid
'>>> B e g i n n - T r a n s a k t i o n :
Using transactionOBJ As TransactionScope = Fkt.SetzeTransactionScope
'>>> Neuen Beleg instanzieren:
tmpVorgang = New Vorgang(AuftragsGUID)
neueBelegGUID = Guid.NewGuid
tmpVorgang.BildeBelegKopie(neueBelegGUID, New Guid(ZielBelegTyp))
FktF.PositionenKopierenUndVerknüpfungenSpeichern(neueBelegGUID, ZielBelegTyp, positionenDIC)
'>>> C O M M I T :
If transactionOBJ IsNot Nothing Then transactionOBJ.Complete()
'>>> E n d e - T r a n s a k t i o n :
End Using
End Sub
#End Region
VB.NET: (Teil-)Lieferung - Beispiel 2
#Region " TriggerFormFramework_NachLoad-Ereignis "
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)
'>>> Ereignis bei Doppelklick auf die TextBox 'BelegIdentifizierer' hinzufügen
AddHandler vorFRM.TextBoxBelegIdentifizierer.DoubleClick, AddressOf TeillieferungErzeugen
End If
End Sub
#End Region
#Region " Private Sub: TeillieferungErzeugen () "
Private Sub TeillieferungErzeugen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim vorFRM As VorgangFRM
Dim vorRow, posRow As DataRow
Dim auftragsGUID As Guid
Dim positionenDIC As New Dictionary(Of Guid, Double)
vorFRM = CType(CType(sender, EwaTextBox).FindForm, VorgangFRM)
Dim suchlisteTBL As DataTable = vorFRM.BB.DataTableStandard
'>>> In einer Transaktion ausführen, damit alle (Teil-)Lieferungen erstellt werden oder gar keine
'>>> B e g i n n - T r a n s a k t i o n :
Using transactionOBJ As TransactionScope = Fkt.SetzeTransactionScope
'>>> Alle Zeilen der Suchliste durchlaufen und Teil-Lieferungen für alle offenen Aufträge erstellen
For Each vorRow In suchlisteTBL.Rows
If Not C.ToBooleanX(vorRow(TBL.Vorgang.TBL & "_" & TBL.Vorgang.ErledigtBIT)) _
AndAlso C.ToStringX(vorRow(TBL.BelegTypen.TBL & "_" & TBL.BelegTypen.KennungVC)) = BTK.VkAuftrag Then
positionenDIC.Clear()
auftragsGUID = C.ToGuidX(vorRow(TBL.Vorgang.TBL & "_" & TBL.Vorgang.GUID))
'>>> Alle Positions-GUIDs, und Positions-Mengen des Auftrags holen
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
Dim tmpSQL As String = "SELECT " & TBL.VorgangsPosition.GUID & _
", " & TBL.VorgangsPosition.MengeOffenDBL & _
" FROM " & TBL.VorgangsPosition.TBL & _
" WHERE " & TBL.VorgangsPosition.BelegGUID & " = '" & auftragsGUID.ToString & "'" & _
" AND " & TBL.VorgangsPosition.MengeOffenDBL & " > 0 " & _
" AND " & TBL.VorgangsPosition.PreisDBL & " >= 100"
Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.VorgangsPosition.TBL)
'>>> Alle Werte in ein Dictionary speichern
For Each posRow In tmpTable.Rows
positionenDIC.Add(C.ToGuidX(posRow(TBL.VorgangsPosition.GUID)), C.ToDoubleX(posRow(TBL.VorgangsPosition.MengeOffenDBL)))
Next
If positionenDIC.Count > 0 Then
'>>> Teillieferungen erstellen
TeillieferungErzeugenDetail(auftragsGUID, BT.VkLieferung, positionenDIC)
End If
End If
Next
'>>> C O M M I T :
If transactionOBJ IsNot Nothing Then transactionOBJ.Complete()
'>>> E n d e - T r a n s a k t i o n :
End Using
End Sub
#End Region
#Region " Private Sub: TeillieferungErzeugenDetail () "
Private Sub TeillieferungErzeugenDetail(ByVal AuftragsGUID As Guid, ByVal ZielBelegTyp As String, ByVal positionenDIC As Dictionary(Of Guid, Double))
Dim tmpVorgang As Vorgang = Nothing
Dim neueBelegGUID As Guid
'>>> Neuen Beleg instanzieren:
tmpVorgang = New Vorgang(AuftragsGUID)
neueBelegGUID = Guid.NewGuid
tmpVorgang.BildeBelegKopie(neueBelegGUID, New Guid(ZielBelegTyp))
FktF.PositionenKopierenUndVerknüpfungenSpeichern(neueBelegGUID, ZielBelegTyp, positionenDIC)
End Sub
#End Region
Lieferung erzeugen durch Gesamt-Pushen
Mit dem folgenden Code wird aus einem Auftrag eine Lieferung oder Teil-Lieferung per Programmcode erstellt, die normalerweise entstehen würde, wenn man den Auftrag pusht, d.h. es wird eine Lieferung für alle noch offenen Positionsmengen erstellt.
Im Beispiel wird ein Button platziert und auf einen Klick hin werden alle noch offenen oder teil-offenen Aufträge der Suchliste zu Lieferungen gepusht. Anschließend wird ein neues Fenster geöffnet, in dem die Lieferungen angezeigt werden.
VB.NET: Lieferung durch Gesamt-Pushen - Beispiel
#Region " TriggerFormFramework_StartForm-Ereignis "
Private Sub TriggerFormFramework_StartForm(ByVal sender As Object, ByVal e As FormFrameworkStartFormEventArgs) Handles Me.StartForm
'>>> Bei Menüfunktion V o r g a n g
If TypeOf sender Is VorgangFRM Then
Dim vorFRM As VorgangFRM
vorFRM = CType(sender, VorgangFRM)
SqlSetzen(vorFRM)
'>>> Button erzeugen und in GroupBox 'Adressen' platzieren
Dim buttonLieferungenErstellen As New EwaButton
vorFRM.GroupBoxAdresse.Controls.Add(buttonLieferungenErstellen)
buttonLieferungenErstellen.Text = "Lieferungen erstellen"
buttonLieferungenErstellen.Width = 120
buttonLieferungenErstellen.BringToFront()
buttonLieferungenErstellen.EwaReadOnlyAktiv = True
AddHandler buttonLieferungenErstellen.Click, AddressOf LieferungenErstellenStart
End If
End Sub
#End Region
#Region " Private Sub: SqlSetzen () "
Private Sub SqlSetzen(ByRef VorFRM As VorgangFRM)
'>>> Damit trotz Suchen oder Suchen+ die Datensätze auf die per Stapelverarbeitung generierten Belege (z.B. Rechnungen) beschränkt bleiben
If TypeOf VorFRM.ParameterObjekt Is String Then
Dim whereErgänzung As String
whereErgänzung = VorFRM.ParameterObjekt.ToString
VorFRM.MenueFunktionenWerteSTR.SqlWhere = Fkt.AddOnWhereKlausel(VorFRM.MenueFunktionenWerteSTR.SqlWhere, whereErgänzung)
VorFRM.MenueFunktionenWerteSTR.SqlStartWhere = Fkt.AddOnWhereKlausel(VorFRM.MenueFunktionenWerteSTR.SqlStartWhere, whereErgänzung)
End If
End Sub
#End Region
#Region " Private Sub: LieferungenErstellenStart () "
Private Sub LieferungenErstellenStart(ByVal sender As Object, ByVal e As System.EventArgs)
Dim vorFRM As VorgangFRM
vorFRM = CType(CType(sender, EwaButton).FindForm, VorgangFRM)
Dim lieferungenErstellenOBJ As New LieferungenErstellen
lieferungenErstellenOBJ.AlleLieferungenErstellen(vorFRM)
End Sub
#End Region
#Region " Public Class LieferungenErstellen "
Public Class LieferungenErstellen
Private WithEvents VorgangOBJ As Vorgang
#Region " Private Sub: AlleLieferungenErstellen () "
Friend Sub AlleLieferungenErstellen(ByRef VorFRM As VorgangFRM, Optional ByVal LagerortGUID As String = "", Optional ByVal MagazinGUID As String = "")
Dim vorgangGUID As String
Dim suchlisteTBL As DataTable
Dim row As DataRow
Dim erzeugteLieferungen As New List(Of Guid)
'>>> Prüfung, ob gelbes Lämpchen an
If VorFRM.AktuelleDtRowGeändertJN Then
FktF.Meldung("Sie arbeiten derzeit noch an einem Beleg, daher geht es nicht weiter.", VorFRM)
'>>> EXIT
Exit Sub
End If
'>>> Suchliste aktualisieren, damit ggf. nicht mehr gesamt-offene Belege erkannt werden
Dim tmpTyp As New AktualisierungsTyp
tmpTyp.MeldungUnterdrücken = True
CType(New FcAktualisieren(VorFRM), IEwaFunktion).Run(tmpTyp)
'>>> Suchliste holen
suchlisteTBL = VorFRM.BB.DataTableStandard
'>>> Prüfung: Nur gesamt-offene Verkaufs-Lieferungen dürfen in der Suchliste sein
For Each row In suchlisteTBL.Rows
If C.ToStringX(row(TBL.BelegStati.TBL & "_" & TBL.BelegStati.KennungVC)) <> BStK.V_AUF_GOF_GesamtOffen AndAlso _
C.ToStringX(row(TBL.BelegStati.TBL & "_" & TBL.BelegStati.KennungVC)) <> BStK.V_AUF_TOF_TeilOffen Then
FktF.Meldung("Fehler: Die Suchliste darf nur gesamt-offene Aufträge enthalten.", VorFRM)
'>>> EXIT
Exit Sub
End If
Next
'>>> Lieferungen erzeugen in einer Transaktion
'>>> B e g i n n - T r a n s a k t i o n :
Using transactionOBJ As TransactionScope = Fkt.SetzeTransactionScope
For Each row In suchlisteTBL.Rows
vorgangGUID = C.ToStringX(row(TBL.Vorgang.TBL & "_" & TBL.Vorgang.GUID))
'>>> Prüfen, ob der Auftrag mindestens eine offene Position enthält
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
Dim beliebigeOffeneMenge As Double
beliebigeOffeneMenge = C.ToDoubleX(tmpDBZ.HoleErsteZeileErsteSpalte("SELECT " & TBL.VorgangsPosition.MengeOffenDBL & _
" FROM " & TBL.VorgangsPosition.TBL & _
" WHERE " & TBL.VorgangsPosition.BelegGUID & " = '" & vorgangGUID & "'" & _
" AND " & TBL.VorgangsPosition.MengeOffenDBL & " > 0"))
If beliebigeOffeneMenge <> GK.NullDouble AndAlso beliebigeOffeneMenge > 0 Then
VorgangOBJ = New Vorgang(C.ToGuidX(vorgangGUID))
Dim neuerBelegGUID As Guid = VorgangOBJ.BildeVerknüpftenRestBeleg(BtKennung.VkAuftragLieferung, True, LagerortGUID, MagazinGUID)
erzeugteLieferungen.Add(neuerBelegGUID)
End If
Next
'>>> C O M M I T :
If transactionOBJ IsNot Nothing Then transactionOBJ.Complete()
'>>> E n d e - T r a n s a k t i o n :
End Using
'>>> Belege in einem neuen Fenster anzeigen
AnzeigenDerBelege(erzeugteLieferungen)
End Sub
#End Region
#Region " VorgangOBJ_EwaAuswahlLagerOrtMagazin-Ereignis (Lagerort, Magazin und eventuell Chargen-Auswahl) "
Private Sub VorgangOBJ_EwaAuswahlLagerOrtMagazin(ByVal sender As Object, ByVal e As LagerAuswahlEventArgs) _
Handles VorgangOBJ.EwaAuswahlLagerOrtMagazin
'>>> A C H T U N G : Das Ereignis wird in 'VorgangOBJ.BildeVerknüpftenRestBeleg' ausgelöst!
'>>> Eigentliche Lagerort, Magazin und eventuell Chargen-Auswahl:
Dim objAuswahlLager As New AuswahlLager(e)
objAuswahlLager.LagerortMagazinChargenAuswahl()
'>>> Busy zurücksetzen:
FktF.SetzeBusy(False)
End Sub
#End Region
#Region " Private Sub AnzeigenDerBelege() "
Private Sub AnzeigenDerBelege(ByVal belege As List(Of Guid))
'>>> Deklarationen:
Dim tmpErgänzungsName As String
Dim tmpWhere As String
Dim tmpSQL As String
Dim inString As String = ""
'>>> IN-Liste bilden mit den GUIDs der generierten Belege
For Each eintrag In belege
inString = inString & "'" & C.ToStringX(eintrag) & "',"
Next
inString = inString.Trim(CChar(","))
'>>> WHERE ermitteln:
tmpWhere = "(" & TBL.Vorgang.TBL & "." & TBL.Vorgang.GUID & " IN (" & inString & "))"
'>>> SQL-Befehl ermitteln:
tmpSQL = FktF.BildeSqlKomplettBefehl("VOR", , tmpWhere, TBL.Vorgang.TBL & "." & TBL.Vorgang.BelegNummerINT & " DESC")
'>>> Neues Fenster mit den Belegen öffnen:
tmpErgänzungsName = "Generierte Lieferungen"
Menue.FRM.CallTheFunction("VOR", tmpSQL, tmpErgänzungsName, tmpWhere, False)
End Sub
#End Region
End Class
#End Region
Rechnung erzeugen durch Gesamt-Pushen
Mit dem folgenden Code wird aus einer Lieferung eine Rechnung oder Teil-Rechnung per Programmcode erstellt, die normalerweise entstehen würde, wenn man die Lieferung pusht, d.h. es wird eine Rechnung für alle noch offenen Positionsmengen erstellt.
Im Beispiel wird ein Button platziert und auf einen Klick hin werden alle noch offenen oder teil-offenen Lieferungen der Suchliste zu Rechnungen gepusht.
VB.NET: Rechnung durch Gesamt-Pushen - Beispiel
#Region " TriggerFormFramework_StartForm-Ereignis "
Private Sub TriggerFormFramework_StartForm(ByVal sender As Object, ByVal e As FormFrameworkStartFormEventArgs) Handles Me.StartForm
'>>> Bei Menüfunktion V o r g a n g
If TypeOf sender Is VorgangFRM Then
Dim vorFRM As VorgangFRM
vorFRM = CType(sender, VorgangFRM)
'>>> Button erzeugen und in GroupBox 'Adressen' platzieren
Dim buttonRechnungenErstellen As New EwaButton
vorFRM.GroupBoxAdresse.Controls.Add(buttonRechnungenErstellen)
buttonRechnungenErstellen.Text = "Rechnungen erstellen"
buttonRechnungenErstellen.Width = 140
buttonRechnungenErstellen.BringToFront()
buttonRechnungenErstellen.EwaReadOnlyAktiv = True
AddHandler buttonRechnungenErstellen.Click, AddressOf AlleRechnungenErzeugen
End If
End Sub
#End Region
#Region " Private Sub: AlleRechnungenErzeugen () "
Private Sub AlleRechnungenErzeugen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim vorFRM As VorgangFRM
Dim row As DataRow
Dim VorgangOBJ As Vorgang
Dim vorgangGUID As String
Dim erzeugteRechnungen As New List(Of Guid)
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
vorFRM = CType(CType(sender, EwaButton).FindForm, VorgangFRM)
Dim suchlisteTBL As DataTable = vorFRM.BB.DataTableStandard
'>>> Prüfung, ob gelbes Lämpchen an
If vorFRM.AktuelleDtRowGeändertJN Then
FktF.Meldung("Sie arbeiten derzeit noch an einem Beleg, daher geht es nicht weiter.", vorFRM)
'>>> EXIT
Exit Sub
End If
'>>> Aktualisieren, damit ggf. nicht mehr gesamt-offene Belege erkannt werden
CType(New FcAktualisieren(vorFRM), IEwaFunktion).Run()
'>>> Prüfung: Nur gesamt-offene Verkaufs-Lieferungen dürfen in der Suchliste sein
For Each row In suchlisteTBL.Rows
If C.ToStringX(row(TBL.BelegStati.TBL & "_" & TBL.BelegStati.KennungVC)) <> "V-LIE-GOF" Then
FktF.Meldung("Fehler: Die Suchliste darf nur gesamt-offene Verkaufs-Lieferungen enthalten.", vorFRM)
'>>> EXIT
Exit Sub
End If
Next
'>>> Rechnungen erzeugen
'>>> B e g i n n - T r a n s a k t i o n :
Using transactionOBJ As TransactionScope = Fkt.SetzeTransactionScope
For Each row In suchlisteTBL.Rows
vorgangGUID = C.ToStringX(row(TBL.Vorgang.TBL & "_" & TBL.Vorgang.GUID))
'>>> Prüfen, ob der Auftrag mindestens eine offene Position enthält
Dim beliebigeOffeneMenge As Double
beliebigeOffeneMenge = C.ToDoubleX(tmpDBZ.HoleErsteZeileErsteSpalte("SELECT " & TBL.VorgangsPosition.MengeOffenDBL & _
" FROM " & TBL.VorgangsPosition.TBL & _
" WHERE " & TBL.VorgangsPosition.BelegGUID & " = '" & vorgangGUID & "'" & _
" AND " & TBL.VorgangsPosition.MengeOffenDBL & " > 0"))
If beliebigeOffeneMenge <> GK.NullDouble AndAlso beliebigeOffeneMenge > 0 Then
VorgangOBJ = New Vorgang(C.ToGuidX(vorgangGUID))
Dim neuerBelegGUID As Guid = VorgangOBJ.BildeVerknüpftenRestBeleg(BtKennung.VkLieferungRechnung)
erzeugteRechnungen.Add(neuerBelegGUID)
End If
Next
'>>> C O M M I T :
If transactionOBJ IsNot Nothing Then transactionOBJ.Complete()
'>>> E n d e - T r a n s a k t i o n :
End Using
'>>> Belege in einem neuen Fenster anzeigen
'AnzeigenDerBelege(erzeugteRechnungen)
End Sub
#End Region
Vorab-Rechnungen erzeugen aus Aufträgen
Mit dem folgenden Code werden aus Aufträgen die dazugehörigen Vorab-Rechnungen erzeugt.
Im Beispiel wird ein Button platziert und auf einen Klick hin werden für alle noch offenen Aufträge der Suchliste die Vorab-Rechnungen erzeugt.
VB.NET: Vorab-Rechnungen erzeugen - Beispiel
#Region " TriggerFormFramework_StartForm-Ereignis "
Private Sub TriggerFormFramework_StartForm(ByVal sender As Object, ByVal e As FormFrameworkStartFormEventArgs) Handles Me.StartForm
'>>> Bei Menüfunktion V o r g a n g
If TypeOf sender Is VorgangFRM Then
Dim vorFRM As VorgangFRM
vorFRM = CType(sender, VorgangFRM)
'>>> Button erzeugen und in GroupBox 'Adressen' platzieren
Dim buttonVorabRechnungenErstellen As New EwaButton
vorFRM.GroupBoxAdresse.Controls.Add(buttonVorabRechnungenErstellen)
buttonVorabRechnungenErstellen.Text = "Vorab-Rechnungen erstellen"
buttonVorabRechnungenErstellen.Width = 160
buttonVorabRechnungenErstellen.BringToFront()
buttonVorabRechnungenErstellen.EwaReadOnlyAktiv = True
AddHandler buttonVorabRechnungenErstellen.Click, AddressOf AlleVorabRechnungenErzeugen
End If
End Sub
#End Region
#Region " Private Sub: AlleRechnungenErzeugen () "
Private Sub AlleVorabRechnungenErzeugen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim vorFRM As VorgangFRM
Dim row As DataRow
Dim VorgangOBJ As Vorgang
Dim vorgangGUID As String
Dim erzeugteVorabRechnungen As New List(Of Guid)
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
vorFRM = CType(CType(sender, EwaButton).FindForm, VorgangFRM)
Dim suchlisteTBL As DataTable = vorFRM.BB.DataTableStandard
'>>> Prüfung, ob gelbes Lämpchen an
If vorFRM.AktuelleDtRowGeändertJN Then
FktF.Meldung("Sie arbeiten derzeit noch an einem Beleg, daher geht es nicht weiter.", vorFRM)
'>>> E X I T
Exit Sub
End If
'>>> Aktualisieren, damit ggf. nicht mehr gesamt-offene Aufträge erkannt werden
Dim tmpTyp As New AktualisierungsTyp
tmpTyp.MeldungUnterdrücken = True
CType(New FcAktualisieren(vorFRM), IEwaFunktion).Run(tmpTyp)
'>>> Prüfung: Nur gesamt-offene Verkaufs-Aufträge dürfen in der Suchliste sein
For Each row In suchlisteTBL.Rows
If C.ToStringX(row(TBL.BelegStati.TBL & "_" & TBL.BelegStati.KennungVC)) <> BStK.V_AUF_GOF_GesamtOffen Then
FktF.Meldung("Fehler: Die Suchliste darf nur gesamt-offene Verkaufs-Aufträge enthalten.", vorFRM)
'>>> EXIT
Exit Sub
End If
Next
'>>> Vorab-Rechnungen erzeugen
'>>> B e g i n n - T r a n s a k t i o n :
Using transactionOBJ As TransactionScope = Fkt.SetzeTransactionScope
For Each row In suchlisteTBL.Rows
vorgangGUID = C.ToStringX(row(TBL.Vorgang.TBL & "_" & TBL.Vorgang.GUID))
'>>> Prüfen, ob nicht schon eine Vorab-Rechnung erstellt wurde
If C.ToGuidX(tmpDBZ.HoleFeld(TBL.Vorgang.VorabFakturaReferenzGUID, TBL.Vorgang.TBL, TBL.Vorgang.GUID, vorgangGUID)) = Guid.Empty Then
VorgangOBJ = FktF.ErstelleVorabRechnungOderVerbindlichkeit(New Guid(vorgangGUID), New Guid(GK.WährungEUR))
erzeugteVorabRechnungen.Add(VorgangOBJ.GUID)
End If
Next
'>>> C O M M I T :
If transactionOBJ IsNot Nothing Then transactionOBJ.Complete()
'>>> E n d e - T r a n s a k t i o n :
End Using
'>>> Belege in einem neuen Fenster anzeigen
'AnzeigenDerBelege(erzeugteRechnungen)
End Sub
#End Region