fix für PDF-Attachment bei MergePDFs

This commit is contained in:
2026-06-25 14:14:44 +02:00
parent 66c6f84725
commit c829d349aa
14 changed files with 491 additions and 55 deletions

View File

@@ -1,10 +1,11 @@
Imports System.IO Imports System.IO
Imports com.sun.org.apache.xpath.internal.operations
Imports Microsoft.Office.Interop Imports Microsoft.Office.Interop
Imports VERAG_PROG_ALLGEMEIN Imports VERAG_PROG_ALLGEMEIN
Public Class cAutomailversand 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 Try
Dim sql As New VERAG_PROG_ALLGEMEIN.SQL Dim sql As New VERAG_PROG_ALLGEMEIN.SQL
@@ -37,7 +38,7 @@ Public Class cAutomailversand
LEFT JOIN tblKundenErweitert on tblKundenErweitert.kde_KundenNr = Rechnungsausgang.RechnungsKundenNr LEFT JOIN tblKundenErweitert on tblKundenErweitert.kde_KundenNr = Rechnungsausgang.RechnungsKundenNr
INNER JOIN Währungstabelle on LandKz = Rechnungsausgang.RechnungsLandKz 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 & "' 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 GROUP BY RechnungsNr, RechnungsKundenNr,tblKundenErweitert.kde_SR_IM_EX
ORDER BY RechnungsLandKz, RechnungsKundenNr" ORDER BY RechnungsLandKz, RechnungsKundenNr"
@@ -158,7 +159,7 @@ Public Class cAutomailversand
showError = mailoeffnen 'bei MailÖffnen fehler anzeigen! showError = mailoeffnen 'bei MailÖffnen fehler anzeigen!
setEmailText(row, FirmaID, RechnungsNr, Mailsubject, HTMLMail, SammelrechungArt, dt, BelegartenNr) 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) loadAndSetAnhaenge_new(SR_DT, ATTACHMENTS, listPDFs,,, KDE_ERW.kde_merge_pdf)
If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then Mailsubject &= " TEST" If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then Mailsubject &= " TEST"
@@ -475,10 +476,15 @@ Public Class cAutomailversand
End Sub 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 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 Return RechnungsNrisSet
End Function End Function

View File

@@ -999,7 +999,14 @@ Public Class frmAbrechnungsMaske
Select Case cboSort._value Select Case cboSort._value
Case "EZ" 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 Case Else
selectedRows = selectedRows _ selectedRows = selectedRows _

View File

@@ -462,6 +462,7 @@ Partial Class frmFaktSammelRgDrucken
'Button6 'Button6
' '
Me.Button6.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 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.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.Button6.Image = Global.SDL.My.Resources.Resources.rechnung1 Me.Button6.Image = Global.SDL.My.Resources.Resources.rechnung1
Me.Button6.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft Me.Button6.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft

View File

@@ -140,7 +140,7 @@ Public Class frmFaktSammelRgDrucken
Dim SQLAUTOMAIL_RECHNUNGSDATuM = "" Dim SQLAUTOMAIL_RECHNUNGSDATuM = ""
If cbxAUTOMail.Checked Then 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 Else
SQLAUTOMAIL_RECHNUNGSDATuM = " AND Rechnungsausgang.Status IN (0,2) AND CONVERT(DATE, Rechnungsausgang.Abfertigungsdatum, 104) <= '" & txtZeitraumBis._value & "'" SQLAUTOMAIL_RECHNUNGSDATuM = " AND Rechnungsausgang.Status IN (0,2) AND CONVERT(DATE, Rechnungsausgang.Abfertigungsdatum, 104) <= '" & txtZeitraumBis._value & "'"
End If End If
@@ -979,7 +979,7 @@ Public Class frmFaktSammelRgDrucken
For Each r In MyDatagridview1.SelectedRows For Each r In MyDatagridview1.SelectedRows
Dim fun As New cAutomailversand 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 Next
initDGV() initDGV()

View File

@@ -1,12 +1,13 @@
Imports iTextSharp.text.pdf Imports System.IO
Imports System.IO
Imports Microsoft.Office.Interop
Imports System.Net Imports System.Net
Imports GrapeCity.ActiveReports
Imports System.Net.Mail Imports System.Net.Mail
Imports System.Reflection Imports System.Reflection
Imports System.Text.RegularExpressions Imports System.Text.RegularExpressions
Imports System.Windows.Documents 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 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 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("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", 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("AT Fiskal-Vollmacht", FormularManagerArten.AT_Fiskal))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Export Vollmacht", FormularManagerArten.VERAG_EXPORT)) 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 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("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", 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("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 Import/Export", FormularManagerArten.GB_Vollmacht_IE))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht indirekt", FormularManagerArten.GB_Vollmacht_indirekt)) 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 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("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", 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("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 Import/Export", FormularManagerArten.GB_Vollmacht_IE))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht indirekt", FormularManagerArten.GB_Vollmacht_indirekt)) 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 If reader.NumberOfPages > 0 Then
document.Open() document.Open()
addAttachmentToCurrentPDF(reader, pdf)
addOnlyFirstAttachmentToCurrentPDF(reader, pdf)
pdf.AddDocument(reader) pdf.AddDocument(reader)
reader.Close() reader.Close()
@@ -7200,6 +7202,7 @@ Public Class FormularManagerNEU
For i As Integer = 0 To filespecs.Size - 1 Step 2 For i As Integer = 0 To filespecs.Size - 1 Step 2
' Get the attachment's file specification ' Get the attachment's file specification
Dim fileArray As PdfDictionary = filespecs.GetAsDict(i + 1) Dim fileArray As PdfDictionary = filespecs.GetAsDict(i + 1)
Dim file As PdfDictionary = fileArray.GetAsDict(PdfName.EF) Dim file As PdfDictionary = fileArray.GetAsDict(PdfName.EF)
@@ -7213,12 +7216,77 @@ Public Class FormularManagerNEU
' Add the attachment to the new PDF ' Add the attachment to the new PDF
Dim fileSpec As PdfFileSpecification = PdfFileSpecification.FileEmbedded(copy, Nothing, fileName, fileContent) Dim fileSpec As PdfFileSpecification = PdfFileSpecification.FileEmbedded(copy, Nothing, fileName, fileContent)
copy.AddFileAttachment(fileName, fileSpec) copy.AddFileAttachment(fileName, fileSpec)
Exit For
Next Next
Next Next
End If End If
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 End Function

View File

@@ -2591,6 +2591,16 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
'''</summary>
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
'''<summary> '''<summary>
''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
'''</summary> '''</summary>

View File

@@ -994,4 +994,7 @@
<data name="Ustveu_Rechnungsanlagen_DE" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Ustveu_Rechnungsanlagen_DE" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ustveu-Rechnungsanlagen-DE.xls;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>..\Resources\Ustveu-Rechnungsanlagen-DE.xls;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="Ustveu_Rechnungsanlagen_BE" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ustveu_Rechnungsanlagen_BE.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root> </root>

Binary file not shown.

View File

@@ -5065,6 +5065,7 @@
<None Include="Resources\SR_EVOLOG.xlsx" /> <None Include="Resources\SR_EVOLOG.xlsx" />
<None Include="Resources\SR_TransFerry360.xlsx" /> <None Include="Resources\SR_TransFerry360.xlsx" />
<None Include="Resources\Ustveu-Rechnungsanlagen-DE.xls" /> <None Include="Resources\Ustveu-Rechnungsanlagen-DE.xls" />
<None Include="Resources\Ustveu_Rechnungsanlagen_BE.xlsx" />
<None Include="Resources\VERAG_CBAM_Report_Template.xlsx" /> <None Include="Resources\VERAG_CBAM_Report_Template.xlsx" />
<None Include="Resources\Zoll\EORI_UID.dotx"> <None Include="Resources\Zoll\EORI_UID.dotx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>

View File

@@ -4,6 +4,7 @@ Imports System.Reflection
Imports System.Windows.Documents Imports System.Windows.Documents
Imports com.sun.xml.internal.ws.api.pipe Imports com.sun.xml.internal.ws.api.pipe
Imports itextsharp.text.pdf Imports itextsharp.text.pdf
Imports java.rmi.server
Imports Microsoft.Office.Interop Imports Microsoft.Office.Interop
Imports VERAG_PROG_ALLGEMEIN Imports VERAG_PROG_ALLGEMEIN
@@ -80,7 +81,7 @@ Public Class frmMDM_USTVAntrag
' left join [tblUStVLeistender] as leist on leist.UStV_Leistender = [tblUStVPositionen].[UStVPo_Leistender] ' left join [tblUStVLeistender] as leist on leist.UStV_Leistender = [tblUStVPositionen].[UStVPo_Leistender]
' where UStVAn_ID='" & UStVAn_ID & "' ORDER BY UStVPo_ID", "FMZOLL") ' 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] FROM [tblUStVPositionen]
LEFT JOIN [tblUStVLeistender] as leist LEFT JOIN [tblUStVLeistender] as leist
ON ([tblUStVPositionen].[UStVPo_LeistenderId] > 0 ON ([tblUStVPositionen].[UStVPo_LeistenderId] > 0
@@ -99,6 +100,10 @@ Public Class frmMDM_USTVAntrag
If .Columns.Count > 0 Then If .Columns.Count > 0 Then
.Columns("UStVAn_ID").Visible = False .Columns("UStVAn_ID").Visible = False
.Columns("StrassenNrOnly").Visible = False
.Columns("StrasseOnly").Visible = False
.Columns("UStVPo_ID").HeaderText = "Pos" .Columns("UStVPo_ID").HeaderText = "Pos"
.Columns("UStVPo_ID").Width = 40 .Columns("UStVPo_ID").Width = 40
@@ -4149,21 +4154,43 @@ Public Class frmMDM_USTVAntrag
Dim BANK_IBAN As String = "" Dim BANK_IBAN As String = ""
Dim BANK_BIC 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 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" 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 Me.Cursor = Cursors.Default
@@ -4726,7 +4753,7 @@ Public Class frmMDM_USTVAntrag
list.Add("parkplatz") list.Add("parkplatz")
End If End If
If LeistungsBez.Contains("zubeh") Then If LeistungsBez.Contains("zubeh") Then
list.Add("zubehzubehör") list.Add("zubehör")
End If End If
If LeistungsBez.Contains("übern") Then If LeistungsBez.Contains("übern") Then
list.Add("übernachtung") list.Add("übernachtung")
@@ -4827,7 +4854,7 @@ Public Class frmMDM_USTVAntrag
End If End If
If typ = "maut" Then If typ = "maut" Then
Code = 4 Code = 4
SubCode = "4" SubCode = ""
End If End If
Case "SI" Case "SI"
@@ -4857,7 +4884,7 @@ Public Class frmMDM_USTVAntrag
End If End If
If typ = "maut" Then If typ = "maut" Then
Code = 4 Code = 4
SubCode = "4" SubCode = ""
End If End If
Case "HU" Case "HU"
@@ -4877,7 +4904,7 @@ Public Class frmMDM_USTVAntrag
End If End If
If typ = "maut" Then If typ = "maut" Then
Code = 4 Code = 4
SubCode = "4" SubCode = ""
End If End If
Case "SE" Case "SE"
@@ -5054,7 +5081,7 @@ Public Class frmMDM_USTVAntrag
End If End If
Datei.Save Datei.Save
Blatt = Datei.Worksheets(1) Blatt = Datei.Worksheets(1)
@@ -5078,6 +5105,156 @@ Public Class frmMDM_USTVAntrag
Me.Cursor = Cursors.Default 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 End Function
Private Function PDFInvoicesPath(ByRef posId As String) As String Private Function PDFInvoicesPath(ByRef posId As String) As String

View File

@@ -1,4 +1,5 @@
Imports System.ComponentModel Imports System.ComponentModel
Imports System.Data.SqlClient
Imports System.Reflection Imports System.Reflection
Imports System.Text.RegularExpressions Imports System.Text.RegularExpressions
Imports System.Threading Imports System.Threading
@@ -317,7 +318,7 @@ Public Class cProgramFunctions
Case 1, 7 : Return openThereforeNavigatorZollvollmachten_DE(KundenNr) Case 1, 7 : Return openThereforeNavigatorZollvollmachten_DE(KundenNr)
Case 2, 8 : Return openThereforeNavigatorFiskalVM_DE(KundenNr) Case 2, 8 : Return openThereforeNavigatorFiskalVM_DE(KundenNr)
Case 4, 9 : Return openThereforeNavigatorFiskalVM_AT(KundenNr) Case 4, 9 : Return openThereforeNavigatorFiskalVM_AT(KundenNr)
Case 12, 13 : Return openThereforeNavigatorVM_AT(KundenNr) ' Case 12, 13 : Return openThereforeNavigatorVM_AT(KundenNr)
End Select End Select
Return False Return False
End Function End Function
@@ -395,28 +396,74 @@ Public Class cProgramFunctions
End Function End Function
Shared Function openThereforeNavigatorVM_AT(KundenNr As String) 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 srch = KundenNr & "%" Try
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") 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 Catch ex As Exception
MsgBox("Fehler beim Öffnen!" & vbNewLine & ex.Message & ex.StackTrace)
MsgBox("ValidateSQLFieldLengths:" & vbCrLf & ex.Message)
Return False
End Try End Try
Return False
End Function End Function
Shared Function openThereforeNavigatorFiskalVM_AT(KundenNr As String) Shared Function openThereforeNavigatorFiskalVM_AT(KundenNr As String)

View File

@@ -449,6 +449,12 @@ Public Class cUStVPositionen
Public Function SAVE() As Boolean Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() 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) " & Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblUStVPositionen WHERE UStVAn_ID=@UStVAn_ID AND UStVPo_ID=@UStVPo_ID) " &
" BEGIN " & getUpdateCmd() & " END " & " BEGIN " & getUpdateCmd() & " END " &
" Else " & " Else " &

View File

@@ -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)) 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 xmlBytes = File.ReadAllBytes(xmlPath)
Dim fileName As String = "factur-x.xml" Dim fileName As String = "factur-x.xml"
If HasAttachment(pdf, fileName) Then
Return pdfPath
End If
Dim fs = PdfFileSpec.CreateEmbeddedFileSpec( Dim fs = PdfFileSpec.CreateEmbeddedFileSpec(
pdf, pdf,
xmlBytes, xmlBytes,
@@ -2490,6 +2496,32 @@ Public Class DATENVERVER_OPTIONS
End Function 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 Public Shared Function ConvertToPdfA3(inputPdf As String) As String

View File

@@ -366,6 +366,76 @@ Public Class cProgramFunctions
End If End If
End Sub 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 Public Shared Function fktEuro(varBetrag As Object, varVonWährung As Object, varNachWährung As Object) As Object
'(FixeTaxe, "ATS", RECHNUNG.Währungscode) '(FixeTaxe, "ATS", RECHNUNG.Währungscode)
'Dim varVonWährung As Object 'Dim varVonWährung As Object
@@ -948,11 +1018,19 @@ BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, [Control], New Object(
Return SQL.getValueTxtBySql(sqlstr, "FMZOLL") Return SQL.getValueTxtBySql(sqlstr, "FMZOLL")
End Function End Function
Shared Function getISO1Land(LandKz As String) Shared Function getLandEnglFromISO2Land(Iso2Land 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 & "' " 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 Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Return SQL.getValueTxtBySql(sqlstr, "FMZOLL") Return SQL.getValueTxtBySql(sqlstr, "FMZOLL")
End Function 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 Shared Function convertToIso(s) As String
Return s Return s