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

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“.