From c829d349aa1d84afd6636904212104838bfaa8ca Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Thu, 25 Jun 2026 14:14:44 +0200 Subject: [PATCH] =?UTF-8?q?fix=20f=C3=BCr=20PDF-Attachment=20bei=20MergePD?= =?UTF-8?q?Fs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SDL/Fakturierung/cAutomailversand.vb | 16 +- SDL/Fakturierung/frmAbrechnungsMaske.vb | 9 +- .../frmFaktSammelRgDrucken.Designer.vb | 1 + SDL/Fakturierung/frmFaktSammelRgDrucken.vb | 4 +- SDL/Formulare/KDFormulare/frmFormulare.vb | 84 ++++++- SDL/My Project/Resources.Designer.vb | 10 + SDL/My Project/Resources.resx | 3 + SDL/Resources/Ustveu_Rechnungsanlagen_BE.xlsx | Bin 0 -> 147809 bytes SDL/SDL.vbproj | 1 + SDL/USTV/frmMDM_USTVAntrag.vb | 211 ++++++++++++++++-- SDL/cProgramFunctions.vb | 87 ++++++-- .../Classes/USTV/cUSTVAntrag.vb | 6 + .../DATENSERVER/cDATENSERVER.vb | 32 +++ VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb | 82 ++++++- 14 files changed, 491 insertions(+), 55 deletions(-) create mode 100644 SDL/Resources/Ustveu_Rechnungsanlagen_BE.xlsx diff --git a/SDL/Fakturierung/cAutomailversand.vb b/SDL/Fakturierung/cAutomailversand.vb index 4e88c395..0a638ea8 100644 --- a/SDL/Fakturierung/cAutomailversand.vb +++ b/SDL/Fakturierung/cAutomailversand.vb @@ -1,10 +1,11 @@ Imports System.IO +Imports com.sun.org.apache.xpath.internal.operations Imports Microsoft.Office.Interop Imports VERAG_PROG_ALLGEMEIN Public Class cAutomailversand - Sub sendMailSammelrechnung(_Rechnungsdatum As Date, SammelrechungArt As Integer, FirmaID As Integer, Optional KundenNr As Integer = -1, Optional mailoeffnen As Boolean = False, Optional faktGruppe As String = "") + Sub sendMailSammelrechnung(_Rechnungsdatum As Date, SammelrechungArt As Integer, FirmaID As Integer, Optional KundenNr As Integer = -1, Optional mailoeffnen As Boolean = False, Optional faktGruppe As String = "", Optional datumBis As Date = Nothing) Try Dim sql As New VERAG_PROG_ALLGEMEIN.SQL @@ -37,7 +38,7 @@ Public Class cAutomailversand LEFT JOIN tblKundenErweitert on tblKundenErweitert.kde_KundenNr = Rechnungsausgang.RechnungsKundenNr INNER JOIN Währungstabelle on LandKz = Rechnungsausgang.RechnungsLandKz WHERE Rechnungsausgang.Status IN (2) and Rechnungsausgang.Automailversand_sent is null And Rechnungsausgang.Firma_ID = '" & FirmaID & "' And Rechnungsausgang.Sammelrechnung = '" & SammelrechungArt & "' And CONVERT(DATE,Rechnungsausgang.Rechnungsdatum,104) = '" & _Rechnungsdatum.ToShortDateString & "' - and isnull(Rechnungsausgang.Automailversand,0) = 1 and RechnungsNr > 0 and FakturierungsGruppe = '" & faktGruppe & "'" & IIf(KundenNr > 0, " AND RechnungsKundenNr = " & KundenNr, "") & " + and isnull(Rechnungsausgang.Automailversand,0) = 1 and RechnungsNr > 0 and FakturierungsGruppe = '" & faktGruppe & "'" & IIf(KundenNr > 0, " AND RechnungsKundenNr = " & KundenNr, "") & IIf(IsDate(datumBis), " AND CONVERT(DATE, Rechnungsausgang.Abfertigungsdatum, 104) <= '" & datumBis.ToShortDateString & "'", "") & " GROUP BY RechnungsNr, RechnungsKundenNr,tblKundenErweitert.kde_SR_IM_EX ORDER BY RechnungsLandKz, RechnungsKundenNr" @@ -158,7 +159,7 @@ Public Class cAutomailversand showError = mailoeffnen 'bei MailÖffnen fehler anzeigen! setEmailText(row, FirmaID, RechnungsNr, Mailsubject, HTMLMail, SammelrechungArt, dt, BelegartenNr) - If do_SR(row.Item("RechnungsKundenNr"), FirmaID, SammelrechungArt, Rechnungsdatum, RechnungsNr, DruckDatumZeit, MDMKopiedrucken, listPDFs,,,, showError, AbfertigungsNr, faktGruppe) Then + If do_SR(row.Item("RechnungsKundenNr"), FirmaID, SammelrechungArt, datumBis, Rechnungsdatum, RechnungsNr, DruckDatumZeit, MDMKopiedrucken, listPDFs,,,, showError, AbfertigungsNr, faktGruppe) Then loadAndSetAnhaenge_new(SR_DT, ATTACHMENTS, listPDFs,,, KDE_ERW.kde_merge_pdf) If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then Mailsubject &= " TEST" @@ -475,10 +476,15 @@ Public Class cAutomailversand End Sub - Private Function do_SR(kdNr As Integer, FirmaID As Integer, Sammelrechnungsart As Integer, Rechnungsdatum As Date, lastAktuelle_RgNr As Integer, DruckDatumZeit As Date, Kopie As Boolean, listPDFs As List(Of String), Optional EinzelAnlagen As Boolean = False, Optional Sammelbericht As Boolean = True, Optional saveInThereFore As Boolean = False, Optional showError As Boolean = True, Optional AbfertigungsArt As String = "", Optional faktGruppe As String = "") + Private Function do_SR(kdNr As Integer, FirmaID As Integer, Sammelrechnungsart As Integer, DatumBis As Date, Rechnungsdatum As Date, lastAktuelle_RgNr As Integer, DruckDatumZeit As Date, Kopie As Boolean, listPDFs As List(Of String), Optional EinzelAnlagen As Boolean = False, Optional Sammelbericht As Boolean = True, Optional saveInThereFore As Boolean = False, Optional showError As Boolean = True, Optional AbfertigungsArt As String = "", Optional faktGruppe As String = "") Dim RechnungsNrisSet As Boolean = False - RechnungsNrisSet = cFakturierung.doSAMMELRechnungsDruck(FirmaID, Sammelrechnungsart, Rechnungsdatum, Rechnungsdatum, "", EinzelAnlagen, Sammelbericht, kdNr, 4, listPDFs, "", lastAktuelle_RgNr, DruckDatumZeit,,,,,, faktGruppe, AbfertigungsArt, True, Kopie, True, saveInThereFore, showError) + + If DatumBis = Nothing Then + DatumBis = Rechnungsdatum + End If + + RechnungsNrisSet = cFakturierung.doSAMMELRechnungsDruck(FirmaID, Sammelrechnungsart, DatumBis, Rechnungsdatum, "", EinzelAnlagen, Sammelbericht, kdNr, 4, listPDFs, "", lastAktuelle_RgNr, DruckDatumZeit,,,,,, faktGruppe, AbfertigungsArt, True, Kopie, True, saveInThereFore, showError) Return RechnungsNrisSet End Function diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.vb b/SDL/Fakturierung/frmAbrechnungsMaske.vb index 5d09ace0..e439ad09 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.vb @@ -999,7 +999,14 @@ Public Class frmAbrechnungsMaske Select Case cboSort._value Case "EZ" - selectedRows = selectedRows.OrderBy(Function(r) CDate(r.Cells("ReErfZeitstempel").Value)) + selectedRows = selectedRows.OrderBy( + Function(r) + Dim value = r.Cells("ReErfZeitstempel").Value + Return If(value Is Nothing OrElse IsDBNull(value), + DateTime.MinValue, + Convert.ToDateTime(value)) + End Function + ) Case Else selectedRows = selectedRows _ diff --git a/SDL/Fakturierung/frmFaktSammelRgDrucken.Designer.vb b/SDL/Fakturierung/frmFaktSammelRgDrucken.Designer.vb index 6017197e..c0245d52 100644 --- a/SDL/Fakturierung/frmFaktSammelRgDrucken.Designer.vb +++ b/SDL/Fakturierung/frmFaktSammelRgDrucken.Designer.vb @@ -462,6 +462,7 @@ Partial Class frmFaktSammelRgDrucken 'Button6 ' Me.Button6.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button6.Enabled = False Me.Button6.FlatStyle = System.Windows.Forms.FlatStyle.Flat Me.Button6.Image = Global.SDL.My.Resources.Resources.rechnung1 Me.Button6.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft diff --git a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb index a4daa1e8..efb47e24 100644 --- a/SDL/Fakturierung/frmFaktSammelRgDrucken.vb +++ b/SDL/Fakturierung/frmFaktSammelRgDrucken.vb @@ -140,7 +140,7 @@ Public Class frmFaktSammelRgDrucken Dim SQLAUTOMAIL_RECHNUNGSDATuM = "" If cbxAUTOMail.Checked Then - SQLAUTOMAIL_RECHNUNGSDATuM = "AND Rechnungsausgang.Status IN (2) AND CONVERT(DATE, Rechnungsausgang.Rechnungsdatum, 104) = '" & txtRechnungsdatum._value & "'" + SQLAUTOMAIL_RECHNUNGSDATuM = "AND Rechnungsausgang.Status IN (2) AND CONVERT(DATE, Rechnungsausgang.Rechnungsdatum, 104) = '" & txtRechnungsdatum._value & "' AND CONVERT(DATE, Rechnungsausgang.Abfertigungsdatum, 104) <= '" & txtZeitraumBis._value & "'" Else SQLAUTOMAIL_RECHNUNGSDATuM = " AND Rechnungsausgang.Status IN (0,2) AND CONVERT(DATE, Rechnungsausgang.Abfertigungsdatum, 104) <= '" & txtZeitraumBis._value & "'" End If @@ -979,7 +979,7 @@ Public Class frmFaktSammelRgDrucken For Each r In MyDatagridview1.SelectedRows Dim fun As New cAutomailversand - fun.sendMailSammelrechnung(CDate(txtRechnungsdatum.Text), Sammelrechung, Firma, r.Cells("RechnungsKundenNr").Value, cbxMailoeffnen.Checked) + fun.sendMailSammelrechnung(CDate(txtRechnungsdatum.Text), Sammelrechung, Firma, r.Cells("RechnungsKundenNr").Value, cbxMailoeffnen.Checked,, CDate(txtZeitraumBis.Text)) Next initDGV() diff --git a/SDL/Formulare/KDFormulare/frmFormulare.vb b/SDL/Formulare/KDFormulare/frmFormulare.vb index bd4764a4..573396c6 100644 --- a/SDL/Formulare/KDFormulare/frmFormulare.vb +++ b/SDL/Formulare/KDFormulare/frmFormulare.vb @@ -1,12 +1,13 @@ -Imports iTextSharp.text.pdf -Imports System.IO -Imports Microsoft.Office.Interop +Imports System.IO Imports System.Net -Imports GrapeCity.ActiveReports Imports System.Net.Mail Imports System.Reflection Imports System.Text.RegularExpressions Imports System.Windows.Documents +Imports com.sun.tools.internal.ws.wsdl.document.mime +Imports GrapeCity.ActiveReports +Imports itextsharp.text.pdf +Imports Microsoft.Office.Interop Imports VERAG_PROG_ALLGEMEIN @@ -238,7 +239,7 @@ Public Class frmFormulare MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Vollmacht (indirekt)", FormularManagerArten.DE_Vollmacht_indirekt)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Fiskal-Vollmacht", FormularManagerArten.DE_Fiskal)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht", FormularManagerArten.AT_Vollmacht)) - MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht 4200 EV", FormularManagerArten.AT_Vollmacht_EV)) + MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht EV", FormularManagerArten.AT_Vollmacht_EV)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Fiskal-Vollmacht", FormularManagerArten.AT_Fiskal)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Export Vollmacht", FormularManagerArten.VERAG_EXPORT)) @@ -309,7 +310,7 @@ Public Class frmFormulare MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Vollmacht (indirekt)", FormularManagerArten.DE_Vollmacht_indirekt)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Fiskal-Vollmacht", FormularManagerArten.DE_Fiskal)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht", FormularManagerArten.AT_Vollmacht)) - MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht 4200 EV", FormularManagerArten.AT_Vollmacht_EV)) + MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht EV", FormularManagerArten.AT_Vollmacht_EV)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Fiskal-Vollmacht", FormularManagerArten.AT_Fiskal)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht Import/Export", FormularManagerArten.GB_Vollmacht_IE)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht indirekt", FormularManagerArten.GB_Vollmacht_indirekt)) @@ -359,7 +360,7 @@ Public Class frmFormulare MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Fiskal-Vollmacht", FormularManagerArten.DE_Fiskal)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE/AT Vollmacht (indirekt)", FormularManagerArten.DE_Vollmacht_indirekt)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht", FormularManagerArten.AT_Vollmacht)) - MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht 4200 EV", FormularManagerArten.AT_Vollmacht_EV)) + MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht EV", FormularManagerArten.AT_Vollmacht_EV)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Fiskal-Vollmacht", FormularManagerArten.AT_Fiskal)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht Import/Export", FormularManagerArten.GB_Vollmacht_IE)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht indirekt", FormularManagerArten.GB_Vollmacht_indirekt)) @@ -7152,7 +7153,8 @@ Public Class FormularManagerNEU If reader.NumberOfPages > 0 Then document.Open() - addAttachmentToCurrentPDF(reader, pdf) + + addOnlyFirstAttachmentToCurrentPDF(reader, pdf) pdf.AddDocument(reader) reader.Close() @@ -7200,6 +7202,7 @@ Public Class FormularManagerNEU For i As Integer = 0 To filespecs.Size - 1 Step 2 ' Get the attachment's file specification + Dim fileArray As PdfDictionary = filespecs.GetAsDict(i + 1) Dim file As PdfDictionary = fileArray.GetAsDict(PdfName.EF) @@ -7213,12 +7216,77 @@ Public Class FormularManagerNEU ' Add the attachment to the new PDF Dim fileSpec As PdfFileSpecification = PdfFileSpecification.FileEmbedded(copy, Nothing, fileName, fileContent) copy.AddFileAttachment(fileName, fileSpec) + Exit For + Next Next End If End If + End Function + + Public Shared Function addOnlyFirstAttachmentToCurrentPDF(reader As PdfReader, copy As PdfCopy) As Boolean + + Dim catalog As PdfDictionary = reader.Catalog + Dim names As PdfDictionary = CType(PdfReader.GetPdfObject(catalog.Get(PdfName.NAMES)), PdfDictionary) + + If names IsNot Nothing Then + Dim embeddedFiles As PdfDictionary = CType(PdfReader.GetPdfObject(names.Get(PdfName.EMBEDDEDFILES)), PdfDictionary) + + If embeddedFiles IsNot Nothing Then + Dim filespecs As PdfArray = embeddedFiles.GetAsArray(PdfName.NAMES) + + If filespecs Is Nothing Then Return False + + For i As Integer = 0 To filespecs.Size - 1 Step 2 + + Dim fileArray As PdfDictionary = filespecs.GetAsDict(i + 1) + Dim file As PdfDictionary = fileArray.GetAsDict(PdfName.EF) + + For Each key As PdfName In file.Keys + + Dim stream As PRStream = + CType(PdfReader.GetPdfObject(file.GetAsIndirectObject(key)), PRStream) + + Dim fileName As String = fileArray.GetAsString(key).ToString() + Dim fileContent As Byte() = PdfReader.GetStreamBytes(stream) + + Dim fileSpec As PdfFileSpecification = + PdfFileSpecification.FileEmbedded(copy, Nothing, fileName, fileContent) + + copy.AddFileAttachment(fileName, fileSpec) + + Return True ' only one attachment ever gets copied + + Next + Next + End If + End If + + Return False + + End Function + + + + Private Shared Function HasAnyAttachment(reader As PdfReader) As Boolean + + Dim catalog As PdfDictionary = reader.Catalog + + Dim names As PdfDictionary = + TryCast(PdfReader.GetPdfObject(catalog.Get(PdfName.NAMES)), PdfDictionary) + + If names Is Nothing Then Return True + + Dim embeddedFiles As PdfDictionary = + TryCast(PdfReader.GetPdfObject(names.Get(PdfName.EMBEDDEDFILES)), PdfDictionary) + + If embeddedFiles Is Nothing Then Return False + + Dim filespecs As PdfArray = embeddedFiles.GetAsArray(PdfName.NAMES) + + Return filespecs IsNot Nothing AndAlso filespecs.Size > 2 End Function diff --git a/SDL/My Project/Resources.Designer.vb b/SDL/My Project/Resources.Designer.vb index 33ece2bb..067d6a67 100644 --- a/SDL/My Project/Resources.Designer.vb +++ b/SDL/My Project/Resources.Designer.vb @@ -2591,6 +2591,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + ''' + Friend ReadOnly Property Ustveu_Rechnungsanlagen_BE() As Byte() + Get + Dim obj As Object = ResourceManager.GetObject("Ustveu_Rechnungsanlagen_BE", resourceCulture) + Return CType(obj,Byte()) + End Get + End Property + ''' ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. ''' diff --git a/SDL/My Project/Resources.resx b/SDL/My Project/Resources.resx index 1e835a90..acabd60d 100644 --- a/SDL/My Project/Resources.resx +++ b/SDL/My Project/Resources.resx @@ -994,4 +994,7 @@ ..\Resources\Ustveu-Rechnungsanlagen-DE.xls;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\Ustveu_Rechnungsanlagen_BE.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/SDL/Resources/Ustveu_Rechnungsanlagen_BE.xlsx b/SDL/Resources/Ustveu_Rechnungsanlagen_BE.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4638ee601e721b49c2bf29ad63675a62360425bc GIT binary patch literal 147809 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
    6+c{R+#jMC@#n={% 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 literal 0 HcmV?d00001 diff --git a/SDL/SDL.vbproj b/SDL/SDL.vbproj index cfc0d814..33db9b92 100644 --- a/SDL/SDL.vbproj +++ b/SDL/SDL.vbproj @@ -5065,6 +5065,7 @@ + Always diff --git a/SDL/USTV/frmMDM_USTVAntrag.vb b/SDL/USTV/frmMDM_USTVAntrag.vb index e7a4629f..2c4f98b2 100644 --- a/SDL/USTV/frmMDM_USTVAntrag.vb +++ b/SDL/USTV/frmMDM_USTVAntrag.vb @@ -4,6 +4,7 @@ Imports System.Reflection Imports System.Windows.Documents Imports com.sun.xml.internal.ws.api.pipe Imports itextsharp.text.pdf +Imports java.rmi.server Imports Microsoft.Office.Interop Imports VERAG_PROG_ALLGEMEIN @@ -80,7 +81,7 @@ Public Class frmMDM_USTVAntrag ' left join [tblUStVLeistender] as leist on leist.UStV_Leistender = [tblUStVPositionen].[UStVPo_Leistender] ' where UStVAn_ID='" & UStVAn_ID & "' ORDER BY UStVPo_ID", "FMZOLL") - .SET_SQL("SELECT [UStVAn_ID] ,[UStVPo_ID] " & IIf(cbxInterneNr.Checked, ",[UStVPo_interneNr] as intNr", "") & " ,[UStVPo_ReDat],[UStVPo_ReNr],[UStVPo_Leistungsbezeichnung],[UStVPo_Nettobetrag],[UStVPo_NettobetragEUR],[UStVPo_Leistender],leist.[UstV_Leistender_Strasse] + ' ' + leist.[UstV_Leistender_StrasseNr] as [UstV_Leistender_Strasse],leist.[UstV_Leistender_PLZ],leist.[UstV_Leistender_Stadt],leist.[UstV_Leistender_Land],leist.[UstV_Leistender_UstNr],[UStVPo_USteuerbetrag],[UStVPo_Schnittstelle],[UStVPo_SchnittstellenNr],[UStVPo_Umrechnungskurs],[UStVPo_USteuerbetragEUR],[UStVPo_Sachbearbeiter], [UStVPo_daId], [UStVPo_daId_loeschbar] ,[UStVPo_VZ],[UStVPo_VZ_RKID] ,cast(case when isnull([UStVPo_VZ_RKID],0) = 0 then 0 else 1 end as bit) as VZabrechnet + .SET_SQL("SELECT [UStVAn_ID] ,[UStVPo_ID] " & IIf(cbxInterneNr.Checked, ",[UStVPo_interneNr] as intNr", "") & " ,[UStVPo_ReDat],[UStVPo_ReNr],[UStVPo_Leistungsbezeichnung],[UStVPo_Nettobetrag],[UStVPo_NettobetragEUR],[UStVPo_Leistender],leist.[UstV_Leistender_Strasse] + ' ' + leist.[UstV_Leistender_StrasseNr] as [UstV_Leistender_Strasse],leist.[UstV_Leistender_Strasse] as StrasseOnly,leist.[UstV_Leistender_StrasseNr] as StrassenNrOnly,leist.[UstV_Leistender_PLZ],leist.[UstV_Leistender_Stadt],leist.[UstV_Leistender_Land],leist.[UstV_Leistender_UstNr],[UStVPo_USteuerbetrag],[UStVPo_Schnittstelle],[UStVPo_SchnittstellenNr],[UStVPo_Umrechnungskurs],[UStVPo_USteuerbetragEUR],[UStVPo_Sachbearbeiter], [UStVPo_daId], [UStVPo_daId_loeschbar] ,[UStVPo_VZ],[UStVPo_VZ_RKID] ,cast(case when isnull([UStVPo_VZ_RKID],0) = 0 then 0 else 1 end as bit) as VZabrechnet FROM [tblUStVPositionen] LEFT JOIN [tblUStVLeistender] as leist ON ([tblUStVPositionen].[UStVPo_LeistenderId] > 0 @@ -99,6 +100,10 @@ Public Class frmMDM_USTVAntrag If .Columns.Count > 0 Then .Columns("UStVAn_ID").Visible = False + + .Columns("StrassenNrOnly").Visible = False + .Columns("StrasseOnly").Visible = False + .Columns("UStVPo_ID").HeaderText = "Pos" .Columns("UStVPo_ID").Width = 40 @@ -4149,21 +4154,43 @@ Public Class frmMDM_USTVAntrag Dim BANK_IBAN As String = "" Dim BANK_BIC As String = "" - If IsDBNull(ADR.UstIdNr) OrElse ADR.UstIdNr Is Nothing Then - MsgBox("UID-Nr ist nicht im Kunden hinterlegt!") - End If - Dim filePath As String = "" Dim fileName As String = USTV_ANTRAG.UStVAn_KuNr & "_" & Antrag_LandKz & "_" & CDate(USTV_ANTRAG.UStVAn_ReDatVon).Month & "_" & CDate(USTV_ANTRAG.UStVAn_ReDatBis).Month & "_" & CDate(USTV_ANTRAG.UStVAn_ReDatBis).Year & "_VATRefund" + dTLANDEU = (New SQL).loadDgvBySql("select LandKz, MitgliedslandEU from Währungstabelle where LandKz is not null", "FMZOLL") + Dim isEU As Boolean = dTLANDEU.AsEnumerable().Where(Function(res) res.Field(Of String)("LandKz") = USTV_ANTRAG.UStVAn_LandKz).Select(Function(res) res.Field(Of Boolean)("MitgliedslandEU")).FirstOrDefault() + + If isEU Then + Dim UIDNr As Boolean = True + If IsDBNull(ADR.UstIdNr) OrElse ADR.UstIdNr Is Nothing Then + + Select Case MsgBox("UID-Nr ist nicht im Kunden hinterlegt!" & vbNewLine & "Fortfahren?", vbYesNo) + Case vbYes : UIDNr = False + Case vbNo : Exit Sub + End Select + + + MsgBox("UID-Nr ist nicht im Kunden hinterlegt!") + End If + + + Select Case ADR.LandKz + Case "RO", "R" : fileName = fileName & ".xml" : createXMLforRO(ADR, KUNDE, KUNDE_ERW, FIRMA, BANK_OWNER, BANK_IBAN, BANK_BIC, fileName, filePath) + Case "DE", "D" : fileName = fileName & ".csv" : createCSVforDE(ADR, KUNDE, KUNDE_ERW, FIRMA, BANK_OWNER, BANK_IBAN, BANK_BIC, fileName, filePath) 'ALTERNATIVE: ELMA5-Massendatenschnittstelle allerdings um einiges aufwendiger! + Case "HR" : fileName = fileName & ".xml" : createXMLforHR(ADR, KUNDE, KUNDE_ERW, FIRMA, BANK_OWNER, BANK_IBAN, BANK_BIC, fileName, filePath) + Case Else + MsgBox("Für das Kundenland " & ADR.LandKz & " wurde kein Export definiert") + End Select + + Else + Select Case Antrag_LandKz + Case "BE" : fileName = fileName & ".xlsx" : createCSVforBE(ADR, KUNDE, KUNDE_ERW, FIRMA, BANK_OWNER, BANK_IBAN, BANK_BIC, fileName, filePath) + Case Else + MsgBox("Für das Antragsland " & Antrag_LandKz & " wurde kein Export definiert") + End Select + + End If - Select Case ADR.LandKz - Case "RO", "R" : fileName = fileName & ".xml" : createXMLforRO(ADR, KUNDE, KUNDE_ERW, FIRMA, BANK_OWNER, BANK_IBAN, BANK_BIC, fileName, filePath) - Case "DE", "D" : fileName = fileName & ".csv" : createCSVforDE(ADR, KUNDE, KUNDE_ERW, FIRMA, BANK_OWNER, BANK_IBAN, BANK_BIC, fileName, filePath) 'ALTERNATIVE: ELMA5-Massendatenschnittstelle allerdings um einiges aufwendiger! - Case "HR" : fileName = fileName & ".xml" : createXMLforHR(ADR, KUNDE, KUNDE_ERW, FIRMA, BANK_OWNER, BANK_IBAN, BANK_BIC, fileName, filePath) - Case Else - MsgBox("Für das Land " & ADR.LandKz & " wurde kein Export definiert") - End Select Me.Cursor = Cursors.Default @@ -4726,7 +4753,7 @@ Public Class frmMDM_USTVAntrag list.Add("parkplatz") End If If LeistungsBez.Contains("zubeh") Then - list.Add("zubehzubehör") + list.Add("zubehör") End If If LeistungsBez.Contains("übern") Then list.Add("übernachtung") @@ -4827,7 +4854,7 @@ Public Class frmMDM_USTVAntrag End If If typ = "maut" Then Code = 4 - SubCode = "4" + SubCode = "" End If Case "SI" @@ -4857,7 +4884,7 @@ Public Class frmMDM_USTVAntrag End If If typ = "maut" Then Code = 4 - SubCode = "4" + SubCode = "" End If Case "HU" @@ -4877,7 +4904,7 @@ Public Class frmMDM_USTVAntrag End If If typ = "maut" Then Code = 4 - SubCode = "4" + SubCode = "" End If Case "SE" @@ -5054,7 +5081,7 @@ Public Class frmMDM_USTVAntrag End If - Datei.Save + Datei.Save Blatt = Datei.Worksheets(1) @@ -5078,6 +5105,156 @@ Public Class frmMDM_USTVAntrag Me.Cursor = Cursors.Default + End Function + + + Private Function createCSVforBE(ADR As cAdressen, KUNDE As cKunde, KUNDE_ERW As cKundenErweitert, FIRMA As cFirmen, BANK_OWNER As String, BANK_IBAN As String, BANK_BIC As String, filename As String, filePath As String) + + Try + + + Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SDL\tmp\" + If Not My.Computer.FileSystem.DirectoryExists(sPath) Then + My.Computer.FileSystem.CreateDirectory(sPath) + End If + + + Dim exclApp As Object 'as Application + Dim Datei As Object 'as WorkBook + Dim Blatt As Object 'Microsoft.Office.Interop.Excel.Worksheet 'As Object 'as Worksheet + exclApp = CreateObject("Excel.Application") + + With exclApp + .Visible = False + + Try + filePath = sPath & filename + + 'If File.Exists(filePath) Then + ' File.Delete(filePath) + 'End If + + My.Computer.FileSystem.WriteAllBytes(filePath, My.Resources.Ustveu_Rechnungsanlagen_BE, False) + + Catch ex As System.Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + Me.Cursor = Cursors.Default + Return False + + End Try + + Datei = .Workbooks.Open(filePath) 'Anpassen + Blatt = Datei.Worksheets(1) 'Anpassen + + + Dim counter As Integer = 1 + Dim zeile As Integer = 3 + Dim counterLeistungen As Integer = 1 + + For Each row As DataGridViewRow In dgvUSTVPositionen.SelectedRows.Cast(Of DataGridViewRow)().OrderBy(Function(dgvr) dgvr.Index) + + Dim UIDNrLeistender = "" + Dim LeistenderName As String = "" + Dim listOfLeistungstyp As New List(Of String) + + Dim Strasse As String = "" + If Not IsDBNull(row.Cells("StrasseOnly").Value) AndAlso row.Cells("StrasseOnly").Value IsNot Nothing AndAlso row.Cells("StrasseOnly").Value <> "" Then Strasse = row.Cells("StrasseOnly").Value + + Dim StrasseNR As String = "" + If Not IsDBNull(row.Cells("StrassenNrOnly").Value) AndAlso row.Cells("StrassenNrOnly").Value IsNot Nothing AndAlso row.Cells("StrassenNrOnly").Value <> "" Then StrasseNR = row.Cells("StrassenNrOnly").Value + + Dim Ort As String = "" + If Not IsDBNull(row.Cells("UstV_Leistender_Stadt").Value) AndAlso row.Cells("UstV_Leistender_Stadt").Value IsNot Nothing AndAlso row.Cells("UstV_Leistender_Stadt").Value <> "" Then Ort = row.Cells("UstV_Leistender_Stadt").Value + + Dim PLZ As String = "" + If Not IsDBNull(row.Cells("UstV_Leistender_PLZ").Value) AndAlso row.Cells("UstV_Leistender_PLZ").Value IsNot Nothing AndAlso row.Cells("UstV_Leistender_PLZ").Value <> "" Then PLZ = row.Cells("UstV_Leistender_PLZ").Value + + If Not IsDBNull(row.Cells("UstV_Leistender_UstNr").Value) AndAlso row.Cells("UstV_Leistender_UstNr").Value IsNot Nothing AndAlso row.Cells("UstV_Leistender_UstNr").Value <> "" Then + UIDNrLeistender = row.Cells("UstV_Leistender_UstNr").Value + 'UIDNrLeistender = UIDNrLeistender.ToString.Replace(Antrag_LandKz, "") DEU wollen das Land dabei! + End If + + LeistenderName = row.Cells("UStVPo_Leistender").Value + LeistenderName = LeistenderName.ToString.Replace(Antrag_LandKz, "") + + Dim Nettobetrag As Double = 0 + If Not IsDBNull(row.Cells("UStVPo_Nettobetrag").Value) AndAlso IsNumeric(row.Cells("UStVPo_Nettobetrag").Value) Then Nettobetrag = CDbl(row.Cells("UStVPo_Nettobetrag").Value) + + Dim Steuerbetrag As Double = 0 + If Not IsDBNull(row.Cells("UStVPo_USteuerbetrag").Value) AndAlso IsNumeric(row.Cells("UStVPo_USteuerbetrag").Value) Then Steuerbetrag = CDbl(row.Cells("UStVPo_USteuerbetrag").Value) + + Dim land = "" + Dim iso2Land = "" + If Not IsDBNull(row.Cells("UstV_Leistender_Land").Value) AndAlso row.Cells("UstV_Leistender_Land").Value IsNot Nothing AndAlso row.Cells("UstV_Leistender_Land").Value <> "" Then land = row.Cells("UstV_Leistender_Land").Value + + If land.Length = 2 Then + iso2Land = land + ElseIf land.Length = 3 Then + iso2Land = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2LandFromISO3Land(land) + ElseIf land.Length = 1 Then + iso2Land = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2LandFromISO1Land(land) + End If + + + Blatt.Range("A" & zeile).Value = counter + Blatt.Range("C" & zeile).Value = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(LeistenderName) + Blatt.Range("D" & zeile).Value = UIDNrLeistender + Blatt.Range("E" & zeile).Value = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(Strasse) + Blatt.Range("F" & zeile).Value = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(StrasseNR) + Blatt.Range("G" & zeile).Value = PLZ + Blatt.Range("H" & zeile).Value = Ort + Blatt.Range("I" & zeile).Value = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getLandEnglFromISO2Land(iso2Land) 'Funktion der das Land auf englisch zurückgibt + Blatt.Range("J" & zeile).Value = "Purchase" + Blatt.Range("K" & zeile).Value = "Normal" + Blatt.Range("L" & zeile).Value = CDate(row.Cells("UStVPo_ReDat").Value).ToString("dd.MM.yyyy") + Blatt.Range("M" & zeile).Value = row.Cells("UStVPo_ReNr").Value + Blatt.Range("N" & zeile).Value = Nettobetrag.ToString("0.00", CultureInfo.InvariantCulture) + Blatt.Range("O" & zeile).Value = Steuerbetrag.ToString("0.00", CultureInfo.InvariantCulture) + Blatt.Range("P" & zeile).Value = Steuerbetrag.ToString("0.00", CultureInfo.InvariantCulture) + + If Not IsDBNull(row.Cells("UStVPo_Leistungsbezeichnung").Value) AndAlso row.Cells("UStVPo_Leistungsbezeichnung").Value IsNot Nothing Then + + listOfLeistungstyp = getLeistungsTyp(row.Cells("UStVPo_Leistungsbezeichnung").Value, row.Cells("UStVPo_SchnittstellenNr").Value) + + Dim typeOfGoodsAndService As String = "" + If listOfLeistungstyp.Count > 0 Then + Select Case listOfLeistungstyp(0) + Case "maut" : typeOfGoodsAndService = "Road tolls and road user charge" + Case "diesel" : typeOfGoodsAndService = "Fuel" + Case "rest" : typeOfGoodsAndService = "Other" + Case "übernachtung" : typeOfGoodsAndService = "Accommodation" + Case "zubehör" : typeOfGoodsAndService = "Other" + Case "parkplatz" : typeOfGoodsAndService = "Travel expenses, such as taxi fares, public transport fares" + End Select + End If + + + Blatt.Range("B" & zeile).Value = typeOfGoodsAndService + + End If + + Datei.Save + + + counter += 1 + zeile += 1 + + Next + + Datei.Save + + .Visible = True + + + End With + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + Me.Cursor = Cursors.Default + + End Function Private Function PDFInvoicesPath(ByRef posId As String) As String diff --git a/SDL/cProgramFunctions.vb b/SDL/cProgramFunctions.vb index cf69d2da..53243ab7 100644 --- a/SDL/cProgramFunctions.vb +++ b/SDL/cProgramFunctions.vb @@ -1,4 +1,5 @@ Imports System.ComponentModel +Imports System.Data.SqlClient Imports System.Reflection Imports System.Text.RegularExpressions Imports System.Threading @@ -317,7 +318,7 @@ Public Class cProgramFunctions Case 1, 7 : Return openThereforeNavigatorZollvollmachten_DE(KundenNr) Case 2, 8 : Return openThereforeNavigatorFiskalVM_DE(KundenNr) Case 4, 9 : Return openThereforeNavigatorFiskalVM_AT(KundenNr) - Case 12, 13 : Return openThereforeNavigatorVM_AT(KundenNr) + ' Case 12, 13 : Return openThereforeNavigatorVM_AT(KundenNr) End Select Return False End Function @@ -395,28 +396,74 @@ Public Class cProgramFunctions End Function - Shared Function openThereforeNavigatorVM_AT(KundenNr As String) - Try - Dim srch = KundenNr & "%" - Dim docid As String = "" - docid = SQL_VERAG.getValueTxtBySql("SELECT TOP 1 isnull([DocNo],-1) FROM [Therefore].[dbo].[TheCat76] WHERE [String] LIKE '" & srch & "' ORDER BY [Eingabedatum] DESC", "SCANCANON") + Public Shared Function ValidateSQLFieldLengths(parameters As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable), tableName As String, Info As String, Optional conn_art As String = "FMZOLL", Optional showError As Boolean = True) As Boolean + + Try + + Dim sql As String = + "SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" & tableName & "' AND DATA_TYPE IN ('varchar','nvarchar','char','nchar')" + + Dim dt As DataTable = + (New SQL).loadDgvBySql(sql, conn_art) + + If dt Is Nothing Then Return False + + Dim fieldLengths As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) + + For Each r As DataRow In dt.Rows + + fieldLengths(r!COLUMN_NAME.ToString) = + CInt(r!CHARACTER_MAXIMUM_LENGTH) + + Next + + Dim errors As New List(Of String) + + For Each p As SQLVariable In parameters + + If p Is Nothing Then Continue For + If p.Value() Is Nothing Then Continue For + If p.Text() Is Nothing Then Continue For + + Dim fieldName As String = p.Text().TrimStart("@"c) + + If Not fieldLengths.ContainsKey(fieldName) Then Continue For + + Dim maxLen As Integer = fieldLengths(fieldName) + + ' varchar(max) / nvarchar(max) + If maxLen = -1 Then Continue For + + Dim value As String = p.Value().ToString + + If value.Length > maxLen Then + + errors.Add(fieldName & " -> " & value.Length & "/" & maxLen) + + End If + + Next + + If errors.Count > 0 Then + Info = "Folgende SQL-Felder sind zu lang:" & vbCrLf & vbCrLf & String.Join(vbCrLf, errors) + If showError Then + MsgBox(Info, MsgBoxStyle.Exclamation) + End If + + Return False + + End If + + Return True - If IsNumeric(docid) AndAlso docid > 0 Then - ' Process.Start("theviewer.exe -" & docid) - ' Process.Start("C:\Program Files (x86)\Therefore\theviewer.exe -" & docid) - Try - Shell("C:\Program Files (x86)\Therefore\theviewer.exe -d" & docid) - Catch ex As Exception - Shell("C:\Program Files\Therefore\theviewer.exe -d" & docid) - End Try - Else - MsgBox("Das Dokument konnte nicht gefunden werden.") - End If - Return True Catch ex As Exception - MsgBox("Fehler beim Öffnen!" & vbNewLine & ex.Message & ex.StackTrace) + + MsgBox("ValidateSQLFieldLengths:" & vbCrLf & ex.Message) + + Return False + End Try - Return False + End Function Shared Function openThereforeNavigatorFiskalVM_AT(KundenNr As String) diff --git a/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUSTVAntrag.vb b/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUSTVAntrag.vb index 817809ed..e8fc63a3 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUSTVAntrag.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/USTV/cUSTVAntrag.vb @@ -449,6 +449,12 @@ Public Class cUStVPositionen Public Function SAVE() As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + If VERAG_PROG_ALLGEMEIN.cProgramFunctions.ValidateSQLFieldLengths(list, "tblUStVPositionen", "", "FMZOLL") Then + Return False + End If + + Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblUStVPositionen WHERE UStVAn_ID=@UStVAn_ID AND UStVPo_ID=@UStVPo_ID) " & " BEGIN " & getUpdateCmd() & " END " & " Else " & diff --git a/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb b/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb index 3fb34d41..39c8dfb3 100644 --- a/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb +++ b/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb @@ -2458,9 +2458,15 @@ Public Class DATENVERVER_OPTIONS Using pdf As New iText.Kernel.Pdf.PdfDocument(New iText.Kernel.Pdf.PdfReader(pdfPath), New iText.Kernel.Pdf.PdfWriter(tempFile)) + + Dim xmlBytes = File.ReadAllBytes(xmlPath) Dim fileName As String = "factur-x.xml" + If HasAttachment(pdf, fileName) Then + Return pdfPath + End If + Dim fs = PdfFileSpec.CreateEmbeddedFileSpec( pdf, xmlBytes, @@ -2490,6 +2496,32 @@ Public Class DATENVERVER_OPTIONS End Function + Private Shared Function HasAttachment(pdf As iText.Kernel.Pdf.PdfDocument, fileName As String) As Boolean + + Dim catalog = pdf.GetCatalog().GetPdfObject() + Dim afObj = catalog.Get(iText.Kernel.Pdf.PdfName.AF) + + If afObj Is Nothing Then Return False + + Dim afArray = TryCast(afObj, iText.Kernel.Pdf.PdfArray) + If afArray Is Nothing Then Return False + + For i As Integer = 0 To afArray.Size() - 1 + Dim fsObj = afArray.Get(i) + Dim fsDict = TryCast(fsObj, iText.Kernel.Pdf.PdfDictionary) + + If fsDict Is Nothing Then Continue For + + Dim fName = fsDict.GetAsString(iText.Kernel.Pdf.PdfName.F) + + If fName IsNot Nothing AndAlso fName.ToString().Equals(fileName, StringComparison.OrdinalIgnoreCase) Then + Return True + End If + Next + + Return False + End Function + Public Shared Function ConvertToPdfA3(inputPdf As String) As String diff --git a/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb b/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb index 76000e23..98c17f2b 100644 --- a/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb +++ b/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb @@ -366,6 +366,76 @@ Public Class cProgramFunctions End If End Sub + Public Shared Function ValidateSQLFieldLengths(parameters As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable), tableName As String, Info As String, Optional conn_art As String = "FMZOLL", Optional showError As Boolean = True) As Boolean + + Try + + Dim sql As String = + "SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" & tableName & "' AND DATA_TYPE IN ('varchar','nvarchar','char','nchar')" + + Dim dt As DataTable = + (New SQL).loadDgvBySql(sql, conn_art) + + If dt Is Nothing Then Return False + + Dim fieldLengths As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) + + For Each r As DataRow In dt.Rows + + fieldLengths(r!COLUMN_NAME.ToString) = + CInt(r!CHARACTER_MAXIMUM_LENGTH) + + Next + + Dim errors As New List(Of String) + + For Each p As SQLVariable In parameters + + If p Is Nothing Then Continue For + If p.Value() Is Nothing Then Continue For + If p.Text() Is Nothing Then Continue For + + Dim fieldName As String = p.Text().TrimStart("@"c) + + If Not fieldLengths.ContainsKey(fieldName) Then Continue For + + Dim maxLen As Integer = fieldLengths(fieldName) + + ' varchar(max) / nvarchar(max) + If maxLen = -1 Then Continue For + + Dim value As String = p.Value().ToString + + If value.Length > maxLen Then + + errors.Add(fieldName & " -> " & value.Length & "/" & maxLen) + + End If + + Next + + If errors.Count > 0 Then + Info = "Folgende SQL-Felder sind zu lang:" & vbCrLf & vbCrLf & String.Join(vbCrLf, errors) + If showError Then + MsgBox(Info, MsgBoxStyle.Exclamation) + End If + + Return False + + End If + + Return True + + Catch ex As Exception + + MsgBox("ValidateSQLFieldLengths:" & vbCrLf & ex.Message) + + Return False + + End Try + + End Function + Public Shared Function fktEuro(varBetrag As Object, varVonWährung As Object, varNachWährung As Object) As Object '(FixeTaxe, "ATS", RECHNUNG.Währungscode) 'Dim varVonWährung As Object @@ -948,11 +1018,19 @@ BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, [Control], New Object( Return SQL.getValueTxtBySql(sqlstr, "FMZOLL") End Function - Shared Function getISO1Land(LandKz As String) - Dim sqlstr = "SELECT TOP 1 isnull(Währungstabelle.LandKz,'') AS LandKzISO1 FROM [Länderverzeichnis für die Außenhandelsstatistik] LEFT JOIN Währungstabelle ON [Länderverzeichnis für die Außenhandelsstatistik].LandNr = Währungstabelle.Währungsschlüssel WHERE [Länderverzeichnis für die Außenhandelsstatistik].LandKz='" & LandKz & "' " + Shared Function getLandEnglFromISO2Land(Iso2Land As String) + Dim sqlstr = "SELECT TOP 1 isnull(Land_EN,'') AS LandBez FROM [Währungstabelle] LEFT JOIN [Länderverzeichnis für die Außenhandelsstatistik] ON [Länderverzeichnis für die Außenhandelsstatistik].LandNr = Währungstabelle.Währungsschlüssel WHERE [Länderverzeichnis für die Außenhandelsstatistik].LandKz='" & Iso2Land & "' " Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Return SQL.getValueTxtBySql(sqlstr, "FMZOLL") End Function + + Shared Function getISO1Land(LandKz As String) + Dim sqlstr = "SELECT TOP 1 isnull(Währungstabelle.Land_EN,'') AS LandBez FROM [Länderverzeichnis für die Außenhandelsstatistik] LEFT JOIN Währungstabelle ON [Länderverzeichnis für die Außenhandelsstatistik].LandNr = Währungstabelle.Währungsschlüssel WHERE [Länderverzeichnis für die Außenhandelsstatistik].LandKz='" & LandKz & "' " + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + Return SQL.getValueTxtBySql(sqlstr, "FMZOLL") + End Function + + Shared Function convertToIso(s) As String Return s