Imports System.Data.SqlClient Imports System.Reflection Public Class cTrdInvoice Property Rechnungsdatum As Date Property Rechnungsnummer As Integer Property Speditionsbuch As Object = Nothing Property FilialenNr As Object = Nothing Property AbfertigungsNr As Object = Nothing Property UnterNr As Object = Nothing Property Abfertigungsdatum As Object = Nothing Property BelegartenNr As Object = Nothing Property KundenNrZentrale As Object = Nothing Property RechnungsKundenNr As Object = Nothing Property RechnungsLandKz As Object = Nothing Property RechnungsUstIdKz As Object = Nothing Property RechnungsUstIdNr As Object = Nothing Property Lastschrift As Object = Nothing Property Steuerschlüssel As Object = Nothing Property Steuersatz As Object = Nothing '[Steuersatz %] Property WährungLokal As Object = Nothing Property SteuerpflichtigerBetragLokal As Object = Nothing Property SteuerfreierBetragLokal As Object = Nothing Property SteuerbetragLokal As Object = Nothing Property RechnungsbetragLokal As Object = Nothing Property WährungFremd As Object = Nothing Property SteuerpflichtigerBetragFremd As Object = Nothing Property SteuerfreierBetragFremd As Object = Nothing Property SteuerbetragFremd As Object = Nothing Property RechnungsbetragFremd As Object = Nothing Property TrdinDateiname As Object = Nothing Property Abgleich_op_debitor As Object = Nothing Property Nettozahlungsziel As Object = Nothing Property Firma_ID As Object = Nothing Property UStVAn_ID As Object = Nothing Property hasEntry As Boolean = False Dim SQL As New SQL Sub New() End Sub Sub New(Rechnungsdatum, Rechnungsnummer) Me.Rechnungsnummer = Rechnungsnummer Me.Rechnungsdatum = Rechnungsdatum LOAD() End Sub Sub New(Rechnungsdatum, Rechnungsnummer, Buchungsjahr) Me.Rechnungsnummer = Buchungsjahr.ToString.Substring(2, 2) & Rechnungsnummer Me.Rechnungsdatum = Rechnungsdatum LOAD() End Sub Public Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Rechnungsdatum", Rechnungsdatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Rechnungsnummer", Rechnungsnummer)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Speditionsbuch", Speditionsbuch)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("FilialenNr", FilialenNr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AbfertigungsNr", AbfertigungsNr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UnterNr", UnterNr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Abfertigungsdatum", Abfertigungsdatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("BelegartenNr", BelegartenNr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("KundenNrZentrale", KundenNrZentrale)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RechnungsKundenNr", RechnungsKundenNr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RechnungsLandKz", RechnungsLandKz)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RechnungsUstIdKz", RechnungsUstIdKz)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RechnungsUstIdNr", RechnungsUstIdNr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Lastschrift", Lastschrift)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Steuerschlüssel", Steuerschlüssel)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Steuersatz %", Steuersatz, "Steuersatz")) '[Steuersatz %] list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("WährungLokal", WährungLokal)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerpflichtigerBetragLokal", SteuerpflichtigerBetragLokal)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerfreierBetragLokal", SteuerfreierBetragLokal)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerbetragLokal", SteuerbetragLokal)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RechnungsbetragLokal", RechnungsbetragLokal)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("WährungFremd", WährungFremd)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerpflichtigerBetragFremd", SteuerpflichtigerBetragFremd)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerfreierBetragFremd", SteuerfreierBetragFremd)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerbetragFremd", SteuerbetragFremd)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RechnungsbetragFremd", RechnungsbetragFremd)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("TrdinDateiname", TrdinDateiname)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Abgleich_op_debitor", Abgleich_op_debitor)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Nettozahlungsziel", Nettozahlungsziel)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Firma_ID", Firma_ID)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVAn_ID", UStVAn_ID)) Return list End Function Public Function SAVE() As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblTrdinInvoice WITH(updlock,serializable) WHERE Rechnungsnummer=@Rechnungsnummer and Rechnungsdatum=@Rechnungsdatum) " & " BEGIN " & getUpdateCmd() & " END " & " Else " & " BEGIN " & getInsertCmd() & " END " & " commit tran " Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) End Function Public Sub LOAD() Try Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() Using cmd As New SqlCommand("SELECT * FROM tblTrdinInvoice WHERE Rechnungsnummer=@Rechnungsnummer and Rechnungsdatum=@Rechnungsdatum ", conn) cmd.Parameters.AddWithValue("@Rechnungsnummer", Rechnungsnummer) cmd.Parameters.AddWithValue("@Rechnungsdatum", Rechnungsdatum) Dim dr = cmd.ExecuteReader() If dr.Read Then hasEntry = True For Each li In getParameterList() Dim propInfo As PropertyInfo = Me.GetType.GetProperty(li.Scalarvariable) If dr.Item(li.Text) Is DBNull.Value Then propInfo.SetValue(Me, Nothing) Else propInfo.SetValue(Me, dr.Item(li.Text)) End If Next End If dr.Close() End Using End Using Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try End Sub Public Function getUpdateCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim str As String = "" For Each i In list If Not i.isPrimaryParam Then str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," End If Next str = str.Substring(0, str.Length - 1) 'wg. ',' Return (" UPDATE [tblTrdinInvoice] SET " & str & " WHERE Rechnungsnummer=@Rechnungsnummer and Rechnungsdatum=@Rechnungsdatum ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function Public Function getInsertCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim str As String = "" Dim values As String = "" For Each i In list If Not i.isPrimaryParam Then str &= "[" & i.Text & "]," values &= "@" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," End If Next str = str.Substring(0, str.Length - 1) 'wg. ',' values = values.Substring(0, values.Length - 1) 'wg. ',' Return (" INSERT INTO tblTrdinInvoice (" & str & ") VALUES(" & values & ") ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function Public Function DELETE() As Boolean 'obj As Object, tablename As String, where As String) As Boolean Dim sqlstr = " DELETE FROM [tblTrdinInvoice] WITH(updlock,serializable) WHERE Rechnungsnummer=" & Me.Rechnungsnummer & " and Rechnungsdatum='" & Me.Rechnungsdatum.ToShortDateString & "'" Return SQL.doSQL(sqlstr, "FMZOLL") End Function End Class Public Class cTrdProduct Property Rechnungsdatum As Date Property Rechnungsnummer As Integer Property Leistungsnummer As Integer Property Leistungsbezeichnung As String Property Steuerpflichtig As Boolean Property SteuerpflichtigerBetragLokal As Object = Nothing Property SteuerfreierBetragLokal As Object = Nothing Property SteuerpflichtigerBetragFremd As Object = Nothing Property SteuerfreierBetragFremd As Object = Nothing Property Belegdaten As Object = Nothing Property Sachkonto As Object = Nothing Property Buchungstext As Object = Nothing Dim SQL As New SQL Sub New() End Sub Public Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Rechnungsdatum", Rechnungsdatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Rechnungsnummer", Rechnungsnummer)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Leistungsnummer", Leistungsnummer)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Leistungsbezeichnung", Leistungsbezeichnung)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Steuerpflichtig", Steuerpflichtig)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerpflichtigerBetragLokal", SteuerpflichtigerBetragLokal)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerfreierBetragLokal", SteuerfreierBetragLokal)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerpflichtigerBetragFremd", SteuerpflichtigerBetragFremd)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("SteuerfreierBetragFremd", SteuerfreierBetragFremd)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Belegdaten", Belegdaten)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Sachkonto", Sachkonto)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Buchungstext", Buchungstext)) Return list End Function Public Function SAVE() As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblTrdinProduct WITH(updlock,serializable) WHERE Rechnungsnummer=@Rechnungsnummer and Rechnungsdatum=@Rechnungsdatum and Leistungsnummer=@Leistungsnummer and Leistungsbezeichnung=@Leistungsbezeichnung and Steuerpflichtig=@Steuerpflichtig) " & " BEGIN " & getUpdateCmd() & " END " & " Else " & " BEGIN " & getInsertCmd() & " END " & " commit tran " Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) End Function 'Public Sub LOAD() ' Try ' Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() ' Using cmd As New SqlCommand("SELECT * FROM tblTrdinProduct WHERE Rechnungsnummer=@Rechnungsnummer and Rechnungsdatum=@Rechnungsdatum ", conn) ' cmd.Parameters.AddWithValue("@Rechnungsnummer", Rechnungsnummer) ' cmd.Parameters.AddWithValue("@Rechnungsdatum", Rechnungsdatum) ' Dim dr = cmd.ExecuteReader() ' If dr.Read Then ' For Each l In getParameterList() ' Dim propInfo As PropertyInfo = Me.GetType.GetProperty(l.Scalarvariable) ' If dr.Item(l.Text) Is DBNull.Value Then ' propInfo.SetValue(Me, Nothing) ' Else ' propInfo.SetValue(Me, dr.Item(l.Text)) ' End If ' Next ' End If ' dr.Close() ' End Using ' End Using ' Catch ex As Exception ' MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) ' End Try 'End Sub Public Function getUpdateCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim str As String = "" For Each i In list If Not i.isPrimaryParam Then str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," End If Next str = str.Substring(0, str.Length - 1) 'wg. ',' Return (" UPDATE [tblTrdinProduct] SET " & str & " WHERE Rechnungsnummer=@Rechnungsnummer and Rechnungsdatum=@Rechnungsdatum and Leistungsnummer=@Leistungsnummer and Leistungsbezeichnung=@Leistungsbezeichnung and Steuerpflichtig=@Steuerpflichtig ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function Public Function getInsertCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim str As String = "" Dim values As String = "" For Each i In list If Not i.isPrimaryParam Then str &= "[" & i.Text & "]," values &= "@" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," End If Next str = str.Substring(0, str.Length - 1) 'wg. ',' values = values.Substring(0, values.Length - 1) 'wg. ',' Return (" INSERT INTO tblTrdinProduct (" & str & ") VALUES(" & values & ") ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function End Class Class TrdInvoice_FUNCTIONS Shared SQL As New VERAG_PROG_ALLGEMEIN.SQL Shared Function TrdinSchreiben(Optional Firma As Integer = -1, Optional Buchungsjahr As Integer = -1) As Boolean 'Lädt die Daten aus der Tabelle Rechnungsausgang/RechnungsausgangPositionen in die Tabelle trdInvoice/trdProduct Try Dim LOKALWÄHRUNG = "EUR" Dim lngSatzzähler As Integer Dim WährungsdifferenzSteuerpflichtigerBetrag As Double Dim WährungsdifferenzSteuerfreierBetrag As Integer Dim dt As DataTable = SQL.loadDgvBySql(getSQLString_SELECTForTrdInvoice(Firma, Buchungsjahr), "FMZOLL", 9800) If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then For Each ROW In dt.Rows Dim TRD_INVOICE As VERAG_PROG_ALLGEMEIN.cTrdInvoice If Buchungsjahr > 2000 Then TRD_INVOICE = New VERAG_PROG_ALLGEMEIN.cTrdInvoice(ROW("RK_RechnungsDatum"), ROW("RK_RechnungsNr"), Buchungsjahr) 'nur UNISPED!!!! Else TRD_INVOICE = New VERAG_PROG_ALLGEMEIN.cTrdInvoice(ROW("RK_RechnungsDatum"), ROW("RK_RechnungsNr")) End If If TRD_INVOICE.hasEntry Then ' MsgBox("RG-Nr. bereits vorhanden!") Else Dim RK_Währungscode = ROW("RK_Währungscode") If ROW("RK_Währungscode") Is DBNull.Value Then RK_Währungscode = LOKALWÄHRUNG If RK_Währungscode = LOKALWÄHRUNG Then TRD_INVOICE.SteuerpflichtigerBetragLokal = ROW("RK_SteuerpflichtigerBetrag") TRD_INVOICE.SteuerfreierBetragLokal = ROW("RK_SteuerfreierBetrag") TRD_INVOICE.SteuerbetragLokal = ROW("RK_Steuerbetrag") TRD_INVOICE.RechnungsbetragLokal = ROW("RK_Rechnungsbetrag") TRD_INVOICE.SteuerpflichtigerBetragFremd = 0 TRD_INVOICE.SteuerfreierBetragFremd = 0 TRD_INVOICE.SteuerbetragFremd = 0 TRD_INVOICE.RechnungsbetragFremd = 0 TRD_INVOICE.WährungFremd = Nothing Else TRD_INVOICE.SteuerpflichtigerBetragFremd = ROW("RK_SteuerpflichtigerBetrag") TRD_INVOICE.SteuerfreierBetragFremd = ROW("RK_SteuerfreierBetrag") TRD_INVOICE.SteuerbetragFremd = ROW("RK_Steuerbetrag") TRD_INVOICE.RechnungsbetragFremd = ROW("RK_Rechnungsbetrag") TRD_INVOICE.SteuerpflichtigerBetragLokal = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(ROW("RK_SteuerpflichtigerBetrag"), ROW("RK_Währungscode"), LOKALWÄHRUNG) TRD_INVOICE.SteuerfreierBetragLokal = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(ROW("RK_SteuerfreierBetrag"), ROW("RK_Währungscode"), LOKALWÄHRUNG) TRD_INVOICE.SteuerbetragLokal = CDbl(TRD_INVOICE.SteuerpflichtigerBetragLokal * ROW("RK_SteuersatzProzent") * 100) / 100 TRD_INVOICE.RechnungsbetragLokal = TRD_INVOICE.SteuerpflichtigerBetragLokal + TRD_INVOICE.SteuerfreierBetragLokal + TRD_INVOICE.SteuerbetragLokal ' Basis zur Feststellung von Rundungsdifferenzen schaffen. TRD_INVOICE.SteuerpflichtigerBetragLokal = 0 TRD_INVOICE.SteuerfreierBetragLokal = 0 TRD_INVOICE.SteuerbetragLokal = 0 TRD_INVOICE.RechnungsbetragLokal = 0 WährungsdifferenzSteuerpflichtigerBetrag = TRD_INVOICE.SteuerpflichtigerBetragLokal WährungsdifferenzSteuerfreierBetrag = TRD_INVOICE.SteuerfreierBetragLokal lngSatzzähler = ROW("RK_Satzzähler") TRD_INVOICE.WährungFremd = RK_Währungscode End If TRD_INVOICE.FilialenNr = ROW("RK_FilialenNr") TRD_INVOICE.Speditionsbuch = SQL.DLookup("Speditionsbuch", "Filialen", "FilialenNr=" & ROW("RK_FilialenNr"), "FMZOLL", Nothing) ' ROW("Speditionsbuch") TRD_INVOICE.AbfertigungsNr = ROW("RK_AbfertigungsNr") TRD_INVOICE.UnterNr = ROW("RK_UnterNr") TRD_INVOICE.Abfertigungsdatum = ROW("RK_Abfertigungsdatum") TRD_INVOICE.BelegartenNr = ROW("RK_BelegartenNr") TRD_INVOICE.KundenNrZentrale = ROW("RK_KundenNrZentrale") TRD_INVOICE.RechnungsKundenNr = ROW("RK_RechnungsKundenNr") TRD_INVOICE.RechnungsLandKz = ROW("RK_RechnungsLandKz") TRD_INVOICE.RechnungsUstIdKz = ROW("RK_RechnungsUstIdKz") TRD_INVOICE.RechnungsUstIdNr = ROW("RK_RechnungsUstIdNr") TRD_INVOICE.Lastschrift = ROW("RK_Lastschrift") TRD_INVOICE.Steuerschlüssel = ROW("RK_Steuerschlüssel") TRD_INVOICE.Steuersatz = ROW("RK_SteuersatzProzent") TRD_INVOICE.WährungLokal = LOKALWÄHRUNG TRD_INVOICE.TrdinDateiname = Nothing TRD_INVOICE.Abgleich_op_debitor = 0 TRD_INVOICE.Nettozahlungsziel = ROW("RK_Nettozahlungsziel") TRD_INVOICE.Firma_ID = ROW("RK_Firma_ID") TRD_INVOICE.UStVAn_ID = Nothing If TRD_INVOICE.SAVE Then If TrdinSchreibenProduct(TRD_INVOICE.Rechnungsdatum, ROW("RK_RechnungsNr"), TRD_INVOICE.Rechnungsnummer, RK_Währungscode, ROW("RK_RechnungsLandKz"), ROW("RK_Buchungstext"), TRD_INVOICE.Firma_ID, lngSatzzähler, WährungsdifferenzSteuerpflichtigerBetrag, WährungsdifferenzSteuerfreierBetrag, Buchungsjahr) Then 'UPDATE rechnugnsausgang Dim firmaTmpsql = If(Firma > 0, " AND Firma_ID= '" & Firma & "' ", "") Dim buchungsjahrTmpsql = If(Buchungsjahr > 0, " AND Buchungsjahr= '" & Buchungsjahr & "' ", "") SQL.doSQL("UPDATE [Rechnungsausgang] SET [Trdin] = 1 WHERE convert(date,[RechnungsDatum] ,104) = '" & TRD_INVOICE.Rechnungsdatum.ToShortDateString & "' AND RechnungsNr = " & ROW("RK_RechnungsNr") & firmaTmpsql & buchungsjahrTmpsql, "FMZOLL") End If End If End If Next Return True Else Return False End If ' Buchung im Rechnungskopfsatz eintragen. ' Call SPAktionsabfrageOhneErgebnis("dbo.spTrdinSchreibenUpdateRK", AktuelleVerbindungszeichenfolge(0), rstRK![RK_RechnungsDatum], rstRK![RK_RechnungsNr], 1) Catch ex As Exception MsgBox(ex.StackTrace & "" & ex.Message) Return False End Try End Function Shared Function TrdinSchreibenProduct(RechnungsDatum, RK_RechnungsNr, TRD_RechnungsNr, RK_Währungscode, RK_RechnungsLandKz, RK_Buchungstext, RK_Firma_ID, ByRef lngSatzzähler, ByRef WährungsdifferenzSteuerpflichtigerBetrag, ByRef WährungsdifferenzSteuerfreierBetrag, Buchungsjahr) As Boolean Try Dim LOKALWÄHRUNG = "EUR" Dim dt As DataTable = SQL.loadDgvBySql(getSQLString_SELECTForTrdProduct(RechnungsDatum, RK_RechnungsNr, RK_Firma_ID, Buchungsjahr), "FMZOLL") If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then For Each ROW In dt.Rows Dim TRD_PRODUCT As New VERAG_PROG_ALLGEMEIN.cTrdProduct() TRD_PRODUCT.Rechnungsdatum = RechnungsDatum TRD_PRODUCT.Rechnungsnummer = TRD_RechnungsNr If RK_Währungscode = LOKALWÄHRUNG Then TRD_PRODUCT.SteuerpflichtigerBetragLokal = ROW("RP_SteuerpflichtigerBetrag") TRD_PRODUCT.SteuerfreierBetragLokal = ROW("RP_SteuerfreierBetrag") TRD_PRODUCT.SteuerpflichtigerBetragFremd = 0 TRD_PRODUCT.SteuerfreierBetragFremd = 0 Else TRD_PRODUCT.SteuerpflichtigerBetragFremd = ROW("RP_SteuerpflichtigerBetrag") TRD_PRODUCT.SteuerfreierBetragFremd = ROW("RP_SteuerfreierBetrag") TRD_PRODUCT.SteuerpflichtigerBetragLokal = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(ROW("RP_SteuerpflichtigerBetrag"), RK_Währungscode, LOKALWÄHRUNG) TRD_PRODUCT.SteuerfreierBetragLokal = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(ROW("RP_SteuerfreierBetrag"), RK_Währungscode, LOKALWÄHRUNG) WährungsdifferenzSteuerpflichtigerBetrag -= TRD_PRODUCT.SteuerpflichtigerBetragLokal WährungsdifferenzSteuerfreierBetrag -= TRD_PRODUCT.SteuerfreierBetragLokal lngSatzzähler = lngSatzzähler - ROW("RP_Satzzähler") If lngSatzzähler = 0 Then If WährungsdifferenzSteuerpflichtigerBetrag <> 0 Then TRD_PRODUCT.SteuerpflichtigerBetragLokal += WährungsdifferenzSteuerpflichtigerBetrag End If If WährungsdifferenzSteuerfreierBetrag <> 0 Then TRD_PRODUCT.SteuerfreierBetragLokal += WährungsdifferenzSteuerfreierBetrag End If End If End If TRD_PRODUCT.Leistungsnummer = ROW("RP_LeistungsNr") TRD_PRODUCT.Leistungsbezeichnung = ROW("RP_LeistungsBez") TRD_PRODUCT.Steuerpflichtig = ROW("RP_Steuerpflichtig") TRD_PRODUCT.Belegdaten = ROW("RP_Belegdaten") TRD_PRODUCT.Sachkonto = getSachkonto(RK_Firma_ID, ROW("RP_LeistungsNr"), RK_RechnungsLandKz, ROW("RP_Steuerpflichtig"), ROW("AufschubkontoNr")) TRD_PRODUCT.Buchungstext = RK_Buchungstext TRD_PRODUCT.SAVE() Next Return True Else Return False End If Catch ex As Exception MsgBox(ex.StackTrace & "" & ex.Message) Return False End Try End Function Shared Function getSachkonto(Firma_Id, RP_LeistungsNr, [RK_RechnungsLandKz], RP_Steuerpflichtig, RP_AufschubkontoNr) ' Sachkonto ermitteln. Dim FIRMA = New VERAG_PROG_ALLGEMEIN.cFirmen(Firma_Id) Select Case Firma_Id Case 20 'IMEX --> Andere Sachkonten in Tbl Leistungen! If [RK_RechnungsLandKz] Is Nothing OrElse [RK_RechnungsLandKz] Is DBNull.Value OrElse [RK_RechnungsLandKz].trim = "" _ OrElse [RK_RechnungsLandKz] = "A" _ OrElse [RK_RechnungsLandKz] = "AT" Then If CBool([RP_Steuerpflichtig]) Then getSachkonto = If(SQL.DLookup("[IMEX_SachkontoInlandSteuerpflichtig]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") Else getSachkonto = If(SQL.DLookup("[IMEX_SachkontoInlandSteuerfrei]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") End If Else If SQL.DLookup("[MitgliedslandEU]", "[Währungstabelle]", "[LandKz]='" & [RK_RechnungsLandKz] & "'", "FMZOLL", False) Then If [RP_Steuerpflichtig] Then getSachkonto = If(SQL.DLookup("[IMEX_SachkontoEUSteuerpflichtig]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") Else getSachkonto = If(SQL.DLookup("[IMEX_SachkontoEUSteuerfrei]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") End If Else getSachkonto = If(SQL.DLookup("[IMEX_Sachkonto3Land]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") End If End If If getSachkonto = "" Then getSachkonto = "9999" 'DEFAULT! Case 21, 22, 23, 24 '--> cLeistungenBUKonten! Dim BU_KTO As New VERAG_PROG_ALLGEMEIN.cLeistungenBUKonten(RP_LeistungsNr, Firma_Id) If [RK_RechnungsLandKz] Is Nothing OrElse [RK_RechnungsLandKz] Is DBNull.Value OrElse [RK_RechnungsLandKz].trim = "" OrElse [RK_RechnungsLandKz] = FIRMA.Firma_LandKz.ToString.Replace("AT", "A").Replace("DE", "D") Then If CBool([RP_Steuerpflichtig]) Then getSachkonto = BU_KTO.SachkontoInlandSteuerpflichtig Else getSachkonto = BU_KTO.SachkontoInlandSteuerfrei End If Else If SQL.DLookup("[MitgliedslandEU]", "[Währungstabelle]", "[LandKz]='" & [RK_RechnungsLandKz] & "'", "FMZOLL", False) Then If [RP_Steuerpflichtig] Then getSachkonto = BU_KTO.SachkontoEUSteuerpflichtig Else getSachkonto = BU_KTO.SachkontoEUSteuerfrei End If Else getSachkonto = BU_KTO.Sachkonto3Land End If End If If getSachkonto = "" Then getSachkonto = "9999" 'DEFAULT! Case Else If [RK_RechnungsLandKz] Is Nothing OrElse [RK_RechnungsLandKz] Is DBNull.Value OrElse [RK_RechnungsLandKz].trim = "" _ OrElse [RK_RechnungsLandKz] = "A" _ OrElse [RK_RechnungsLandKz] = "AT" Then If CBool([RP_Steuerpflichtig]) Then getSachkonto = If(SQL.DLookup("[SachkontoInlandSteuerpflichtig]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") Else getSachkonto = If(SQL.DLookup("[SachkontoInlandSteuerfrei]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") End If Else If SQL.DLookup("[MitgliedslandEU]", "[Währungstabelle]", "[LandKz]='" & [RK_RechnungsLandKz] & "'", "FMZOLL", False) Then If [RP_Steuerpflichtig] Then getSachkonto = If(SQL.DLookup("[SachkontoEUSteuerpflichtig]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") Else getSachkonto = If(SQL.DLookup("[SachkontoEUSteuerfrei]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") End If Else getSachkonto = If(SQL.DLookup("[Sachkonto3Land]", "Leistungen", "[LeistungsNr]=" & [RP_LeistungsNr], "FMZOLL"), "") End If End If If getSachkonto = "" Then getSachkonto = "4000" 'DEFAULT! End Select Try If Firma_Id = 20 Then If getSachkonto = "3553" Then 'IMEX EUST If RP_AufschubkontoNr Is DBNull.Value Then RP_AufschubkontoNr = "" If RP_AufschubkontoNr.ToString.Contains("2719") Then getSachkonto = "3550" '--> KTO M-2719 Else getSachkonto = "3553" '--> KTO M-2718 End If End If End If Catch ex As Exception End Try getSachkonto = CInt(getSachkonto) End Function Shared Function getSQLString_SELECTForTrdInvoice(Optional Firma As Integer = -1, Optional Buchungsjahr As Integer = -1) getSQLString_SELECTForTrdInvoice = "SELECT Rechnungsausgang.RechnungsDatum AS RK_RechnungsDatum, Rechnungsausgang.RechnungsNr AS RK_RechnungsNr, min(Rechnungsausgang.Abfertigungsdatum) AS RK_Abfertigungsdatum, min(Rechnungsausgang.FilialenNr) AS RK_FilialenNr, min(Rechnungsausgang.AbfertigungsNr) AS RK_AbfertigungsNr, min(Rechnungsausgang.UnterNr) AS RK_UnterNr, min(Rechnungsausgang.BelegartenNr) AS RK_BelegartenNr, (min(cast([FilialenNr] as varchar(4))) + '/' + min(cast([AbfertigungsNr] as varchar(8))) + '/' + min(cast([UnterNr] as varchar(2)))) AS RK_Buchungstext, min(Rechnungsausgang.KundenNrZentrale) AS RK_KundenNrZentrale, min(Rechnungsausgang.RechnungsKundenNr) AS RK_RechnungsKundenNr, min(Rechnungsausgang.RechnungsLandKz) AS RK_RechnungsLandKz, min(Rechnungsausgang.RechnungsUstIdKz) AS RK_RechnungsUstIdKz, min(Rechnungsausgang.RechnungsUstIdNr) AS RK_RechnungsUstIdNr, min(Rechnungsausgang.Lastschrift+0) AS RK_Lastschrift, min(Rechnungsausgang.Steuerschlüssel) AS RK_Steuerschlüssel, min(Rechnungsausgang.[Steuersatz %]) AS RK_SteuersatzProzent, min(Rechnungsausgang.Währungscode) AS RK_Währungscode, min(Rechnungsausgang.Nettozahlungsziel) AS RK_Nettozahlungsziel, min(Rechnungsausgang.Firma_ID) AS RK_Firma_ID, Sum(RechnungsausgangPositionen.SteuerpflichtigerBetrag) AS RK_SteuerpflichtigerBetrag, Sum(RechnungsausgangPositionen.SteuerfreierBetrag) AS RK_SteuerfreierBetrag , (Sum(RechnungsausgangPositionen.SteuerpflichtigerBetrag)*min(Rechnungsausgang.[Steuersatz %])*100)/100 AS RK_Steuerbetrag, Sum(RechnungsausgangPositionen.SteuerpflichtigerBetrag)+Sum(RechnungsausgangPositionen.SteuerfreierBetrag)+((Sum(RechnungsausgangPositionen.SteuerpflichtigerBetrag)*min(Rechnungsausgang.[Steuersatz %])*100)/100) AS RK_Rechnungsbetrag, Count(1) AS RK_Satzzähler FROM Rechnungsausgang INNER JOIN RechnungsausgangPositionen ON Rechnungsausgang.RK_ID = RechnungsausgangPositionen.RK_ID WHERE (((Rechnungsausgang.RechnungsDatum) Is Not Null) AND ((Rechnungsausgang.RechnungsNr) Is Not Null) AND ((Rechnungsausgang.Trdin)=0)) " & If(Firma > 0, " and Firma_ID=" & Firma, "") & If(Buchungsjahr > 0, " and Buchungsjahr=" & Buchungsjahr, "") & " GROUP BY Rechnungsausgang.RechnungsDatum, Rechnungsausgang.RechnungsNr ORDER BY Rechnungsausgang.RechnungsDatum, Rechnungsausgang.RechnungsNr, min(Rechnungsausgang.Abfertigungsdatum), min(Rechnungsausgang.FilialenNr), min(Rechnungsausgang.AbfertigungsNr), min(Rechnungsausgang.UnterNr);" End Function Shared Function getSQLString_SELECTForTrdProduct(RechnungsDatum As Date, RechnungsNr As Integer, Optional Firma As Integer = -1, Optional Buchungsjahr As Integer = -1) getSQLString_SELECTForTrdProduct = "SELECT Rechnungsausgang.RechnungsDatum AS RP_RechnungsDatum, Rechnungsausgang.RechnungsNr AS RP_RechnungsNr, RechnungsausgangPositionen.LeistungsNr AS RP_LeistungsNr, RechnungsausgangPositionen.LeistungsBez AS RP_LeistungsBez, RechnungsausgangPositionen.Steuerpflichtig AS RP_Steuerpflichtig, Sum(RechnungsausgangPositionen.SteuerpflichtigerBetrag) AS RP_SteuerpflichtigerBetrag, Sum(RechnungsausgangPositionen.SteuerfreierBetrag) AS RP_SteuerfreierBetrag, min(RechnungsausgangPositionen.Belegdaten) AS RP_Belegdaten, Count(1) AS RP_Satzzähler, min(AufschubkontoNr) as AufschubkontoNr FROM RechnungsausgangPositionen INNER JOIN Rechnungsausgang ON RechnungsausgangPositionen.RK_ID = Rechnungsausgang.RK_ID GROUP BY Rechnungsausgang.RechnungsDatum, Rechnungsausgang.RechnungsNr, RechnungsausgangPositionen.LeistungsNr, RechnungsausgangPositionen.LeistungsBez, RechnungsausgangPositionen.Steuerpflichtig " & If(Firma > 0, " ,Rechnungsausgang.Firma_ID ", "") & If(Buchungsjahr > 0, " ,Rechnungsausgang.Buchungsjahr ", "") & " HAVING (((Rechnungsausgang.RechnungsDatum)='" & RechnungsDatum.ToShortDateString & "') AND ((Rechnungsausgang.RechnungsNr)=" & RechnungsNr & ")) " & If(Firma > 0, " and Rechnungsausgang.Firma_ID=" & Firma, "") & If(Buchungsjahr > 0, " and Rechnungsausgang.Buchungsjahr=" & Buchungsjahr, "") & " ORDER BY Rechnungsausgang.RechnungsDatum, Rechnungsausgang.RechnungsNr, RechnungsausgangPositionen.LeistungsNr, RechnungsausgangPositionen.LeistungsBez, RechnungsausgangPositionen.Steuerpflichtig;" End Function End Class