Imports System.Data.SqlClient Imports System.IO Public Class cAllgemein Public Shared FIRMA As String Public Shared NIEDERLASSUNG As String 'SUB, WAI, ... Public Shared ABTEILUNG As String 'QS ZOLL ... Public Shared STAMMFILIALE As String 'IMEX,UNISPED;ATILLA... Public Shared WARENORT_ZUGANG As Boolean = False Public Shared WARENORT As String Public Shared ATILLA_SND As Boolean = True Public Shared NEWLOGIN As Boolean = False Public Shared CLUSTER As String = "" 'Firmenverbund Public Shared FIRMEN_GRUPPE As String = "VERAGDCS" 'Firmenverbund-Gruppe ' Public Shared SPECIFIC As cSPECIFIC = New cSPECIFIC Public Shared ERR_OP_GLOBAL As String = ERROR_OP.SHOW ' Public Shared AVISO_SERVER As String = "[BUCHHALTUNG\SQLEXPRESS]" 'Public Shared AVISO_SERVER As String = "[SQL01.verag.ost.dmn\VERAG]" 'Public Shared AVISO_SERVER As String = "[SQLGUIDE.verag.ost.dmn\VERAG]" Public Shared AVISO_SERVER As String = "[SQLGUIDE01.verag.ost.dmn]" '"[SQLGUIDE01.verag.ost.dmn]" Public Shared FMZOLL_SERVER As String = "[SQLGUIDE01.verag.ost.dmn]" '"[sqlcluster\verag]" '"[FMZOLL\SQLFMZOLL]" Public Shared SQLGUIDE01_USED As Boolean = True 'FM-ZOLL Ablöse!!!! Public Shared AVISO_LAYOUT_NEW As Boolean = False Public Shared CBAM_LIST As List(Of String) = Nothing 'Public Shared FMZOLL_ATLAS_Datensicherung As String = "\\192.168.0.91\f\FMZoll\Datensicherung\atlas\atlas\fssouzb" Public Shared FMZOLL_ATLAS_Datensicherung_OLD As String = "\\share01\F\FMZoll\Datensicherung\atlas\atlas\fssouzb" Public Shared UK_EORI_LTD = "GB078068385000" Public Shared BÜRO As String Public Shared PRINTER_BON As String Public Shared PRINTER_STANDARD As String Public Shared PRINTER_LIST As ArrayList = Nothing Public Shared dpi As Integer Public Shared TESTSYSTEM As Boolean = False Public Shared PROGNAME = "" Public Shared PROGID As Integer = 16 'AVISO Public Shared PROGVERSION As String = "" Public Shared USRNAME As String Public Shared ABW_USRNAME As String 'Public Shared USRBER As Integer Public Shared USRID As Integer Public Shared USR_VNAME As String Public Shared USR_NNAME As String Public Shared USRKURZNAME As String Public Shared USR_HrFrNAME As String Public Shared FIRMA_ID As Integer Public Shared FIRMA_NAME As String Public Shared AUTO_ABF_NR As Boolean = True Public Shared BENUTZER_BERECHTIGUNGS_GRUPPEN As cBerechtigungenBenutzerGruppenZuordnung_List = Nothing Public Shared BENUTZER_BERECHTIGUNGS_GRUPPEN_WHEREIN_SDL As String = "('XXXXXXXX')" Public Shared PARAMS As cParameterList = Nothing Public Shared TRANSLATE As cTranslate_LIST = Nothing Public Shared TRANSLATE_AUTO As cTranslateAuto_LIST = Nothing Public Shared _LAN As String = "DE" '"EN" Public Shared SESSION As New cSession Public Shared _DummyCNT As Integer Public Shared EMailTOBB_Error As String = "info@verimextransit.com" Public Shared EMOJI_PATH As String = "" Shared SQL As New SQL Public Shared MITARBEITER As cMitarbeiter Public Shared FIRMEN As List(Of cFirmen) Public Shared FILIALEN As List(Of cFilialen) Public Const LeerDatum As Date = #12/30/1899# 'wird als leerer Datumswert verwendet, da sonst Probleme bei Null/Date Public Shared Sub LOAD_DATA(Optional switchCompany = False, Optional firmaTmp = False, Optional NLTmp = "") MITARBEITER = New cMitarbeiter If MITARBEITER.LOAD(USRID) Then USR_NNAME = MITARBEITER.mit_nname USR_VNAME = MITARBEITER.mit_vname _LAN = MITARBEITER.mit_sprache USR_HrFrNAME = "" Select Case MITARBEITER.mit_geschlecht Case "m" : USR_HrFrNAME = "Herr " Case "w" : USR_HrFrNAME = "Frau " End Select USR_HrFrNAME &= MITARBEITER.mit_nname If switchCompany Then FIRMA = firmaTmp NIEDERLASSUNG = If(NLTmp <> "", NLTmp, MITARBEITER.mit_niederlassung) Else If FIRMA = "" Then FIRMA = If(MITARBEITER.mit_firma = "BEIDE", "VERAG", MITARBEITER.mit_firma) End If cSPECIFIC.FIRMA_BgColor = Drawing.Color.FromArgb(0, 54, 128) Select Case FIRMA Case "VERAG" CLUSTER = "FRONTOFFICE" Case "IMEX" STAMMFILIALE = "5501" CLUSTER = "FRONTOFFICE" Case "UNISPED" STAMMFILIALE = "5601" cSPECIFIC.FIRMA_BgColor = Drawing.Color.FromArgb(200, 0, 0) CLUSTER = "FRONTOFFICE" Case "AMBAR" STAMMFILIALE = "5701" CLUSTER = "FRONTOFFICE" Case "ATILLA" STAMMFILIALE = "4801" Case "FRONTOFFICE" STAMMFILIALE = "5801" CLUSTER = "FRONTOFFICE" Case "VERIMEX" STAMMFILIALE = "6001" CLUSTER = "FRONTOFFICE" End Select USRNAME = (MITARBEITER.mit_vname & " " & MITARBEITER.mit_nname) ABW_USRNAME = MITARBEITER.mit_abweichenderAnzeigename If NIEDERLASSUNG = "" Then NIEDERLASSUNG = MITARBEITER.mit_niederlassung If ABTEILUNG = "" Then ABTEILUNG = MITARBEITER.mit_abteilung Else MITARBEITER = Nothing End If LOAD_PROGRAMM() LOAD_PARAM() LOAD_TRANSLATE() LOAD_TRANSLATE_AUTO() LOAD_FIRMEN() LOAD_FILIALEN() LOAD_CHAT_EMOJIS() Try 'DRUCKER LADEN Dim sPrinters As New ArrayList For Each sPrinter As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters sPrinters.add(sPrinter) Next VERAG_PROG_ALLGEMEIN.cAllgemein.PRINTER_LIST = sPrinters Catch ex As Exception End Try If TESTSYSTEM Then AVISO_SERVER = "[DEVELOPER\DEVSQL]" FMZOLL_SERVER = "[DEVELOPER\DEVSQL]" End If End Sub Public Shared Sub LOAD_BER() BENUTZER_BERECHTIGUNGS_GRUPPEN = New cBerechtigungenBenutzerGruppenZuordnung_List(USRID) BENUTZER_BERECHTIGUNGS_GRUPPEN_WHEREIN_SDL = VERAG_PROG_ALLGEMEIN.cBerechtignunen.GetBenutzerBerechtigungsBezeichnungen_FormatWhereIn_SDL() End Sub Public Shared Sub LOAD_CHAT_EMOJIS() Try If System.IO.Directory.Exists(DATENVERVER_OPTIONS.getRootDir & "\DOKUMENTE\CHAT_EMOJIS\") Then Dim EMOJI_SOURCEPATH = DATENVERVER_OPTIONS.getRootDir & "\DOKUMENTE\CHAT_EMOJIS\" Dim EMOJI_SOURCELIST = System.IO.Directory.GetFiles(EMOJI_SOURCEPATH).ToList EMOJI_PATH = System.IO.Path.GetFullPath(My.Application.Info.DirectoryPath & "\Resources\CHAT_EMOJIS\") If Not System.IO.Directory.Exists(EMOJI_PATH) Then System.IO.Directory.CreateDirectory(EMOJI_PATH) End If For Each f In System.IO.Directory.GetFiles(EMOJI_PATH) Dim fi As New System.IO.FileInfo(f) If Not System.IO.Directory.GetFiles(EMOJI_PATH).Any(Function(c) c.Equals(fi.Name, StringComparison.OrdinalIgnoreCase)) Then System.IO.File.Delete(f) End If Next For Each f In System.IO.Directory.GetFiles(EMOJI_SOURCEPATH) Dim fi As New System.IO.FileInfo(f) fi.CopyTo(EMOJI_PATH & fi.Name, False) Next Else MsgBox("Fehler: Chat-Emojis Verzeichnis existiert nicht!") End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End Sub Public Shared Sub LOAD_PROGRAMM() Dim prog_Name = My.Application.Info.ProductName Select Case prog_Name.ToUpper Case "AVISO", "VERAG_PROG_ALLGEMEIN" PROGID = 16 Case "SDL" PROGID = 7 Case Else PROGID = SQL.getValueTxtBySql("SELECT isnull([prog_id],0) FROM [tblProgramme] WHERe [prog_codename]='" & prog_Name & "'", "ADMIN") End Select PROGNAME = SQL.getValueTxtBySql("SELECT prog_name FROM [tblProgramme] WHERe [prog_id]='" & PROGID & "'", "ADMIN") End Sub Public Shared Sub LOAD_PARAM() PARAMS = New cParameterList(PROGID, FIRMA) End Sub Public Shared Sub LOAD_FIRMEN() FIRMEN = cFirmen.LOAD_LIST End Sub Public Shared Sub LOAD_FILIALEN() FILIALEN = cFilialen.LOAD_LIST End Sub Public Shared Sub LOAD_TRANSLATE() TRANSLATE = New cTranslate_LIST(PROGID) End Sub Public Shared Sub LOAD_TRANSLATE_AUTO() TRANSLATE_AUTO = New cTranslateAuto_LIST() End Sub Public Shared Function GET_LAND() As String Select Case FIRMA Case "AMBAR" : Return "DE" End Select Return "AT" End Function Public Shared Function checkSteuerschluessel(firmenID As Integer, landKz As String, Optional UIDLandKz As String = "", Optional UstIdNr As String = "", Optional UstIdGeprüft As Object = Nothing) As Integer 'Return -1 If firmenID < 1 Then Return -1 Dim FIRMA_TMP = New VERAG_PROG_ALLGEMEIN.cFirmen(firmenID) Dim isEU As Boolean = False Dim sql As New SQL If landKz Is Nothing OrElse landKz = "" Then Return -1 Select Case FIRMA_TMP.Firma_LandKz Case "A", "AT" If landKz = "A" Then Return 2 isEU = sql.getValueTxtBySql("select MitgliedslandEU from Währungstabelle where landkz = '" & landKz & "'", "FMZOLL",) If isEU Then If UIDLandKz <> "" AndAlso UstIdNr <> "" AndAlso UstIdGeprüft IsNot Nothing AndAlso CDate(UstIdGeprüft) > Today.AddDays(-30) Then Return 10 Else Return 2 End If Else Return 0 End If Case "D", "DE" If landKz = "D" Then Return 19 isEU = sql.getValueTxtBySql("select MitgliedslandEU from Währungstabelle where landkz = '" & landKz & "'", "FMZOLL",) If isEU Then If UIDLandKz <> "" AndAlso UstIdNr <> "" AndAlso UstIdGeprüft IsNot Nothing AndAlso CDate(UstIdGeprüft) > Today.AddDays(-30) Then Return 10 Else Return 19 End If Else Return 0 End If Case "GB" If landKz = "GB" Then Return 20 isEU = sql.getValueTxtBySql("select MitgliedslandEU from Währungstabelle where landkz = '" & landKz & "'", "FMZOLL",) If isEU Then If UIDLandKz <> "" AndAlso UstIdNr <> "" AndAlso UstIdGeprüft IsNot Nothing AndAlso CDate(UstIdGeprüft) > Today.AddDays(-30) Then Return 10 Else Return 20 End If Else Return 0 End If 'Case "TR" ' If landKz = "TR" Then Return 20 ' isEU = sql.getValueTxtBySql("select MitgliedslandEU from Währungstabelle where landkz = '" & landKz & "'", "FMZOLL",) ' If isEU Then ' If UIDLandKz <> "" AndAlso UstIdNr <> "" AndAlso UstIdGeprüft IsNot Nothing Then ' Return 0 ' Else ' Return 20 ' End If ' End If End Select Return -1 End Function Public Shared Sub _TRANSLATE(o As System.Windows.Forms.Control) _TRANSLATE(o, o, _LAN) End Sub Public Shared Sub _TRANSLATE(o As System.Windows.Forms.Control, lan As String) _TRANSLATE(o, o, lan) End Sub Public Shared Function _getTRANSLATE_SUB(oMain As System.Windows.Forms.Control, o As System.Windows.Forms.Control, s As Object, Optional defaultStr As String = "") As String If defaultStr = "" Then defaultStr = s.Text If _LAN = "DE" Then Return defaultStr Dim TextTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.TRANSLATE.list.FindAll(Function(x) x.trs_object = oMain.Name And x.trs_control = o.Name And (x.trs_subControl IsNot DBNull.Value AndAlso x.trs_subControl = s.Name) And x.trs_sprache = _LAN) If TextTmp IsNot Nothing And TextTmp.Count > 0 Then Return TextTmp(0).trs_text End If Return defaultStr End Function Public Shared Function _getTRANSLATE(oMain As System.Windows.Forms.Control, o As System.Windows.Forms.Control, Optional defaultStr As String = "") As String If defaultStr = "" Then defaultStr = o.Text Dim TextTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.TRANSLATE.list.FindAll(Function(x) x.trs_object = oMain.Name And x.trs_control = o.Name And x.trs_sprache = _LAN) If TextTmp IsNot Nothing And TextTmp.Count > 0 Then Return TextTmp(0).trs_text End If Return defaultStr End Function Public Shared Sub _TRANSLATE(o As System.Windows.Forms.Control, s As System.Windows.Forms.Control, lan As String) If lan = "" Then Exit Sub If lan = "DE" Then Exit Sub 'o... Form 's... SubContainer 'c... Control ' MsgBox(o.GetType.ToString & " - " & o.name) Dim TextTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.TRANSLATE.list.FindAll(Function(x) x.trs_object = o.Name And x.trs_sprache = lan) If TextTmp IsNot Nothing Then For Each TXT As cTranslate In TextTmp Dim found = o.Controls.Find(TXT.trs_control, True) ' MsgBox(TXT.trs_control) If found IsNot Nothing AndAlso found.Count > 0 Then ' MsgBox("JA") Dim obj As System.Windows.Forms.Control = found(0) If obj IsNot Nothing Then If (TypeOf obj Is System.Windows.Forms.Label) Then DirectCast(obj, System.Windows.Forms.Label).Text = TXT.trs_text End If If (TypeOf obj Is System.Windows.Forms.Button) Or (TypeOf obj Is VERAG_PROG_ALLGEMEIN.FlatButton) Then DirectCast(obj, System.Windows.Forms.Button).Text = TXT.trs_text End If If (TypeOf obj Is System.Windows.Forms.CheckBox) Or (TypeOf obj Is VERAG_PROG_ALLGEMEIN.MyCheckbox) Then DirectCast(obj, System.Windows.Forms.CheckBox).Text = TXT.trs_text End If If (TypeOf obj Is System.Windows.Forms.TabPage) Then DirectCast(obj, System.Windows.Forms.TabPage).Text = TXT.trs_text End If If (TypeOf obj Is System.Windows.Forms.RadioButton) Or (TypeOf obj Is VERAG_PROG_ALLGEMEIN.MyRadioButton) Then DirectCast(obj, System.Windows.Forms.RadioButton).Text = TXT.trs_text End If If (TypeOf obj Is System.Windows.Forms.GroupBox) Then DirectCast(obj, System.Windows.Forms.GroupBox).Text = TXT.trs_text End If If (TypeOf obj Is System.Windows.Forms.MenuStrip) Then For Each tb As System.Windows.Forms.ToolStripMenuItem In DirectCast(obj, System.Windows.Forms.MenuStrip).Items If tb.Name = TXT.trs_subControl Then tb.Text = TXT.trs_text End If Next End If 'If (TypeOf obj Is System.Windows.Forms.TabControl) Then -->in Tabpage geregelt ' For Each tb As System.Windows.Forms.TabPage In DirectCast(obj, System.Windows.Forms.TabControl).TabPages ' If tb.Name = TXT.trs_subControl Then ' tb.Text = TXT.trs_text ' End If ' Next 'End If If (TypeOf obj Is System.Windows.Forms.ComboBox) Or (TypeOf obj Is VERAG_PROG_ALLGEMEIN.MyComboBox) Then 'DirectCast(obj, System.Windows.Forms.Label).Text = TXT.trs_text End If 'If (TypeOf obj Is VERAG_PROG_ALLGEMEIN.MyComboBox) Then ' Dim cboItems = VERAG_PROG_ALLGEMEIN.cAllgemein.TRANSLATE.list.FindAll(Function(x) x.trs_object = o.Name And x.trs_sprache = lan And x.trs_control = TXT.trs_control) ' For Each item As VERAG_PROG_ALLGEMEIN.MyListItem In DirectCast(obj, VERAG_PROG_ALLGEMEIN.MyComboBox).Items ' For Each sitem As cTranslate In cboItems ' If item.Text = sitem.trs_subControl Then ' Dim index = DirectCast(obj, VERAG_PROG_ALLGEMEIN.MyComboBox).Items(0).Equals ' DirectCast(DirectCast(obj, VERAG_PROG_ALLGEMEIN.MyComboBox).Items(item), VERAG_PROG_ALLGEMEIN.MyListItem).Text = sitem.trs_text ' End If ' Next ' Next 'End If End If End If Next End If End Sub Public Shared Function getMaxPosNrIncrement(FilialeNr As Integer, year As Integer) As Integer Dim cnt = 0 Dim returnValue = -1 Dim newMaxwert = CInt(year.ToString.Substring(2, 2) & "000000") '16000000 Do Dim conn As SqlConnection = VERAG_PROG_ALLGEMEIN.SQL.GetNewOpenConnectionFMZOLL Dim sql As String = " begin tran" & " if exists (select * from tblPosNr with (updlock,serializable) WHERE FilialeNr = @FilialeNr AND Jahr = @Jahr) " & " begin " & " UPDATE tblPosNr " & " SET wert=(select MAX(wert) FROM tblPosNr WHERE FilialeNr = @FilialeNr AND Jahr = @Jahr)+1 " & " WHERE FilialeNr = @FilialeNr AND Jahr = @Jahr " & " End " & " Else " & " begin " & " INSERT INTO tblPosNr " & " (wert,FilialeNr,Jahr) " & " VALUES(@newMaxwert, @FilialeNr,@Jahr) " & " End " & " commit tran " & " SELECT isnull(wert,-1) FROM tblPosNr WHERE FilialeNr = @FilialeNr AND Jahr = @Jahr" Dim dr As SqlDataReader Using cmd As New SqlCommand(sql, conn) cmd.Parameters.AddWithValue("@FilialeNr", FilialeNr) cmd.Parameters.AddWithValue("@Jahr", year) cmd.Parameters.AddWithValue("@newMaxwert", newMaxwert) Try dr = cmd.ExecuteReader() If dr.Read Then returnValue = CInt(dr.Item(0)) Catch ex As Exception MsgBox(System.Reflection.MethodInfo.GetCurrentMethod.Name & ": Fehler mit der Datenbankverbindung:" & vbCrLf & vbCrLf & ex.Message, vbExclamation, "Datenbankfehler") Finally dr.Close() End Try End Using cnt += 1 Loop While (SpedBuchExists(FilialeNr, returnValue) And cnt < 100000) ' conn.Close() Return returnValue End Function Public Shared Function isCLUSTER() As Boolean Return (FIRMA = CLUSTER) End Function Public Shared Function getFirmaFromFiliale2(FilialenNr As Object, Optional usedefaultFirma As Boolean = True, Optional defaultFIRMA As String = "VERAG") As String Dim FirmaTMP = "" If FilialenNr IsNot Nothing AndAlso IsNumeric(FilialenNr) Then ' FirmaTMP = SQL.getValueTxtBySql("SELECT TOP 1 [Firma] FROM [Filialen] WHERE FilialenNr='" & FilialenNr & "' ", "FMZOLL") If FILIALEN Is Nothing Then LOAD_FILIALEN() Dim FILIALE = FILIALEN.Find(Function(x) x.FilialenNr = FilialenNr) If FILIALE IsNot Nothing Then FirmaTMP = If(FILIALE.Firma, "") End If If usedefaultFirma AndAlso FirmaTMP = "" Then FirmaTMP = defaultFIRMA Return FirmaTMP End Function Public Shared Function getClusterFromFiliale(FilialenNr As Object, Optional usedefaultCLUSTER As Boolean = True, Optional defaultCLUSTER As String = "VERAG") As String Dim FirmaTMP = "" If FilialenNr IsNot Nothing AndAlso IsNumeric(FilialenNr) Then ' FirmaTMP = SQL.getValueTxtBySql("SELECT TOP 1 [Firma] FROM [Filialen] WHERE FilialenNr='" & FilialenNr & "' ", "FMZOLL") If FILIALEN Is Nothing Then LOAD_FILIALEN() Dim FILIALE = FILIALEN.Find(Function(x) x.FilialenNr = FilialenNr) If FILIALE IsNot Nothing Then FirmaTMP = If(FILIALE.Cluster, "") End If If usedefaultCLUSTER AndAlso FirmaTMP = "" Then FirmaTMP = defaultCLUSTER Return FirmaTMP End Function Public Shared Function getFirmaFromFiliale(FilialenNr As Object, Optional defaultVERAG As Boolean = True) As String Dim FirmaTMP = "" If FilialenNr IsNot Nothing AndAlso IsNumeric(FilialenNr) Then ' FirmaTMP = SQL.getValueTxtBySql("SELECT TOP 1 [Firma] FROM [Filialen] WHERE FilialenNr='" & FilialenNr & "' AND ( Firma='" & FIRMA & "' OR Cluster='" & CLUSTER & "')", "FMZOLL") If FILIALEN Is Nothing Then LOAD_FILIALEN() Dim FILIALE = FILIALEN.Find(Function(x) x.FilialenNr = FilialenNr And (x.Firma = FIRMA Or x.Cluster = CLUSTER)) If FILIALE IsNot Nothing Then FirmaTMP = If(FILIALE.Firma, "") End If If defaultVERAG AndAlso FirmaTMP = "" Then FirmaTMP = "VERAG" Return FirmaTMP End Function Public Shared Function getFirmaFromKdNr(KundenNr As Integer, Optional defaultVERAG As Boolean = True) As String Dim FirmaTMP = SQL.getValueTxtBySql("SELECT TOP 1 [Firma] FROM [Filialen] inner join Kunden ON Kunden.FilialenNr=Filialen.FilialenNr WHERE KundenNr='" & KundenNr & "' ", "FMZOLL") If defaultVERAG AndAlso FirmaTMP = "" Then FirmaTMP = "VERAG" Return FirmaTMP End Function Public Shared Function SpedBuchExists(FilialenNr As Integer, AbfertigungsNr As Integer) As Boolean Return (CInt(SQL.getValueTxtBySql("SELECT count(*) FROM Speditionsbuch WHERE FilialenNr=" & FilialenNr & " AND AbfertigungsNr=" & AbfertigungsNr & " ", "FMZOLL")) > 0) End Function Class cSPECIFIC Public Shared FIRMA_BgColor As System.Drawing.Color = Drawing.Color.FromArgb(0, 54, 128) Public Shared FIRMA_ForeColor As System.Drawing.Color = Drawing.Color.White End Class Public Shared Sub buildConnectionDATENARCHIV() Exit Sub buildConnectionDATENARCHIV_NEW() ' buildConnectionDATENARCHIV_OLD() End Sub Public Shared Sub buildConnectionDATENARCHIV_OLD() Try Dim netuse As New System.Diagnostics.ProcessStartInfo() netuse.FileName = "C:\Windows\system32\net" ' netuse.Arguments = "use \\192.168.0.91\Datenarchiv /User:VERAGOST\AVISOSMB BmWr501956" If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "UNISPED" Then netuse.Arguments = "use \\192.168.0.91\Datenarchiv /User:VERAGOST\AVISOSMB BmWr501956" Else netuse.Arguments = "use \\192.168.0.91\Datenarchiv /User:VERAGOST\AVISOSMB BmWr501956" End If netuse.CreateNoWindow = True netuse.WindowStyle = ProcessWindowStyle.Hidden System.Diagnostics.Process.Start(netuse) Catch ex As Exception MsgBox("ERR: DATENARCHIV Netzwerkzugriff fehlgeschlagen...") End Try End Sub Public Shared Sub buildConnectionDATENARCHIV_NEW() Try Dim netuse As New System.Diagnostics.ProcessStartInfo() netuse.FileName = "C:\Windows\system32\net" ' netuse.Arguments = "use \\datenarchiv.verag.ost.dmn\Datenarchiv /User:VERAGOST\AVISOSMB BmWr501956" If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "UNISPED" Then netuse.Arguments = "use " & VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir(False) & " /User:VERAGOST\AVISOSMB BmWr501956" Else netuse.Arguments = "use " & VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir(False) & " /User:VERAGOST\AVISOSMB BmWr501956" End If netuse.CreateNoWindow = True netuse.WindowStyle = ProcessWindowStyle.Hidden System.Diagnostics.Process.Start(netuse) Catch ex As Exception MsgBox("ERR: DATENARCHIV Netzwerkzugriff fehlgeschlagen...") End Try End Sub Public Shared Function getSTAMMFILIALE() As String If IsNumeric(VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE) Then Return VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE Else Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA Case "VERAG" Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG Case "SUB" : Return 4803 Case "SBG" : Return 5003 Case "WAI" : Return 5103 Case "NKD" : Return 5303 Case "NEU" : Return 4819 End Select Case "IMEX" : Return 5501 Case "UNISPED" : Return 5601 Case "AMBAR" : Return 5701 Case "ATILLA" : Return 4801 Case "FRONTOFFICE" : Return 5801 End Select End If Return "" End Function Public Shared Function ExtractPdfPages(ByVal SourceFile As String, ByVal TargetFile As String, pageStart As Integer, pagesEnd As Integer) As Boolean 'ITEXTSHARP Try Dim impPage As iTextSharp.text.pdf.PdfImportedPage = Nothing If SourceFile.Contains(" ") Then SourceFile = SourceFile Dim Reader As New iTextSharp.text.pdf.PdfReader(SourceFile) If Not TargetFile.ToLower.EndsWith(".pdf") Then TargetFile = TargetFile & ".pdf" Dim srcDoc As New iTextSharp.text.Document() 'Reader.GetPageSizeWithRotation(0)) Dim PdfCopyProvider As New iTextSharp.text.pdf.PdfCopy(srcDoc, New FileStream(TargetFile, System.IO.FileMode.Create)) PdfCopyProvider.SetFullCompression() srcDoc.Open() For p As Integer = pageStart To (pageStart + pagesEnd) - 1 If p > Reader.NumberOfPages Then MsgBox("Seitenanzahl überschritten!") srcDoc.Close() : Reader.Close() Return False End If impPage = PdfCopyProvider.GetImportedPage(Reader, p) ' ----- Ermitteln der Seitenauflösung und setzen für die neue Seite PdfCopyProvider.SetPageSize(New iTextSharp.text.Rectangle(0.0F, 0.0F, impPage.Width, impPage.Height, Reader.GetPageRotation(p))) ' ----- PDF Seite in das neue Dokument einfügen PdfCopyProvider.AddPage(impPage) Next ' ----- neues PDF Dokument und den Reader schließen srcDoc.Close() Reader.Close() Return True Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return False End Function End Class Public Class cNCTS_GUARANTEES Public Shared TOBB() As String = {"17TR0004000032349", "20TR0004000069756", "13TR0004000009323", "21TR0004000097157", "12TR0004000004665", "15TR0004000020917", "17TR0004000029518", "20DE0000000078205", "19IT01TR000003323", "21TR0004000079552", "21TR0004000078157", "21TR0004000090364", "21TR0004000092350", "20TR0004000069557", "21TR0004000097564", "21TR0004000084967", "19TR0004000056358", "19TR0004000053175", "19TR0004000053356", "22TR0004000126963", "22TR0004000114169", "19TR0004000059957", "21TR0004000097555", "23TR0004000151181", "21TR0004000096368", "23TR0004000154183"} Public Shared OREGON() As String = {"18DE0000000073276", "19DE0000000075520", "18DE0000000075520", "15TR0004000020500", "ITTR0000000000153", "21DE0000000079716", "21DE0000000081910"} Public Shared VERAG() As String = {"17DE0000000071678", "05AT510000G000FP7"} Public Shared IMEX() As String = {"16AT520000G000VA6"} Public Shared ATILLA() As String = {"20AT520000G000092"} Public Shared SGS() As String = {"16DE0000000068410"} Public Shared MARS() As String = {"15TR0004000020908"} Public Shared EKOL() As String = {"13TR0004000005094"} 'old: {"15TR0004000020917", "12TR0004000004665", "17TR0004000032349", "17TR0004000029518"f, "21TR0004000079552", "21TR00x04000078157", "21TR0004000092350", "20TR0004000069756", "21TR0004000090364", "21TR0004000097157"} 'cboBRG.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("TOBB - 15TR0004000020917 / 12TR0004000004665 / 17TR0004000032349 / 17TR0004000029518 / 21TR0004000079552 / 21TR0004000078157 / 21TR0004000092350", " '12TR0004000004665','15TR0004000020917','17TR0004000032349','17TR0004000029518','21TR0004000079552','21TR0004000078157','21TR0004000092350'")) Public Shared Function getSQLList(arr() As String) As String getSQLList = "" For Each i In arr getSQLList &= "'" & i & "'," Next If getSQLList <> "" Then getSQLList = getSQLList.Substring(0, getSQLList.Length - 1) End Function Public Shared Function getSlashList(arr) As String getSlashList = "" For Each i In arr getSlashList &= "" & i & " / " Next If getSlashList <> "" Then getSlashList = getSlashList.Substring(0, getSlashList.Length - 3) End Function End Class Public Class cSpeditionsbuchReport Public Function RunReport_VERAG_ZA_DETAIL(KDNR As Integer, AbfVon As Date, AbfBis As Date, Optional whereStr As String = "", Optional Open As Boolean = True, Optional list As List(Of SQLVariable) = Nothing, Optional showMessage As Boolean = True) As String Try Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr, list) If dt Is Nothing OrElse dt.Rows.Count = 0 Then Return "" End If Dim path As String = CreateTargetPath(AbfVon, AbfBis, "VERAG_RPT_DETAIL_") Dim templateBytes() As Byte = My.Resources.KVI_report ', My.Resources.KVI_report_general) My.Computer.FileSystem.WriteAllBytes(path, templateBytes, False) Dim exclApp As Object = Nothing Dim datei As Object = Nothing Dim blatt As Object = Nothing Try exclApp = CreateObject("Excel.Application") exclApp.Visible = False datei = exclApp.Workbooks.Open(path) blatt = datei.Worksheets(1) Dim errorTmp = "" CreateDetailReport(blatt, dt, KDNR, errorTmp) ' CreateGeneralReport(blatt, dt, KDNR, AbfVon, AbfBis) If errorTmp <> "" AndAlso showMessage Then MsgBox("Fehlende Datensätze des Detailberichtes (SpedBuch vorhanden): " & vbCrLf & errorTmp.Trim) End If datei.Save() If Open Then exclApp.Visible = True Else datei.Close(True) exclApp.Quit() End If Catch ex As Exception Try If datei IsNot Nothing Then datei.Close(False) Catch End Try Try If exclApp IsNot Nothing Then exclApp.Quit() Catch End Try MsgBox(ex.Message & vbCrLf & ex.StackTrace) Return "" End Try Return path Catch ex As Exception MsgBox(ex.Message & vbCrLf & ex.StackTrace) Return "" End Try End Function Public Function RunReport_VERAG_ZA_GENERAL(KDNR As Integer, AbfVon As Date, AbfBis As Date, Optional whereStr As String = "", Optional Open As Boolean = True, Optional DL_Kosten As Boolean = False, Optional list As List(Of SQLVariable) = Nothing, Optional showMessage As Boolean = True) As String Try Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr, list) If dt Is Nothing OrElse dt.Rows.Count = 0 Then Return "" End If Dim path As String = CreateTargetPath(AbfVon, AbfBis, "VERAG_RPT_GENERAL") Dim templateBytes() As Byte = My.Resources.KVI_report_general My.Computer.FileSystem.WriteAllBytes(path, templateBytes, False) Dim exclApp As Object = Nothing Dim datei As Object = Nothing Dim blatt As Object = Nothing Try exclApp = CreateObject("Excel.Application") exclApp.Visible = False datei = exclApp.Workbooks.Open(path) blatt = datei.Worksheets(1) CreateGeneralReport(blatt, dt, KDNR, AbfVon, AbfBis, DL_Kosten, showMessage) datei.Save() If Open Then exclApp.Visible = True Else datei.Close(True) exclApp.Quit() End If Catch ex As Exception Try If datei IsNot Nothing Then datei.Close(False) Catch End Try Try If exclApp IsNot Nothing Then exclApp.Quit() Catch End Try MsgBox(ex.Message & vbCrLf & ex.StackTrace) Return "" End Try Return path Catch ex As Exception MsgBox(ex.Message & vbCrLf & ex.StackTrace) Return "" End Try End Function Private Function LoadSpeditionsbuchData(KDNR As Integer, AbfVon As Date, AbfBis As Date, Optional whereStr As String = "", Optional list As List(Of SQLVariable) = Nothing) As DataTable Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Dim sqlText As String = "Select CAST([FilialenNr] As varchar) + '/' + CAST([AbfertigungsNr] as varchar) Abfertigungsnummer, " & " CAST([Abfertigungsdatum] as date) Abfertigungsdatum, " & " Absender, Empfänger, " & " Rechnungsbetrag Betrag, " & " BelegNr, " & " [FilialenNr], [AbfertigungsNr], " & " Speditionsbuch.Abfertigungsart, " & " Abfertigungsbezeichnung, " & " Speditionsbuch.Zollsystem_Land, " & " ISNULL(KdAuftragsNr,'') KdAuftragsNr, " & " SendungID " & "FROM Speditionsbuch " & "INNER JOIN [Abfertigungsarten] " & " ON Speditionsbuch.Abfertigungsart = Abfertigungsarten.Abfertigungsart " & "WHERE 1=1 AND" & If(KDNR > 0, " (EmpfängerKundenNr IN (" & KDNR & ") OR VermittlerKundenNr IN (" & KDNR & ")) AND ", "") & " Abfertigungsdatum BETWEEN '" & AbfVon.ToShortDateString & "' AND '" & AbfBis.ToShortDateString & "' " & " AND isAbfertigung = 1 " Return SQL.loadDgvBySql_Param(sqlText & " " & whereStr, "FMZOLL",, list) End Function Private Function CreateTargetPath(AbfVon As Date, AbfBis As Date, prefix As String) As String Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\" If Not My.Computer.FileSystem.DirectoryExists(sPath) Then My.Computer.FileSystem.CreateDirectory(sPath) End If Dim path As String = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & ".xlsx" While System.IO.File.Exists(path) path = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx" End While Return path End Function Private Function LoadCustomsDeclaration(r As DataRow) As cVERAG_CustomsDeclarations Dim cd As cVERAG_CustomsDeclarations = Nothing Dim belegNr As String = If(r("BelegNr"), "").ToString().Trim() If belegNr <> "" Then cd = cVERAG_CustomsDeclarations.loadByMRN(belegNr, True) End If If cd Is Nothing OrElse Not cd.hasEntry Then Dim sendungsId As String = If(r("SendungID"), "").ToString().Trim() If sendungsId <> "" Then cd = cVERAG_CustomsDeclarations.loadBySendungsID(sendungsId, True) End If End If If cd Is Nothing Then cd = New cVERAG_CustomsDeclarations Return cd End Function Private Sub CreateDetailReport(blatt As Object, dt As DataTable, kdnr As Integer, ByRef errorTmp As String) Dim cnt As Integer = 2 For Each r As DataRow In dt.Rows Try Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r) If Not cd.hasEntry Then errorTmp &= If(r("BelegNr"), "").ToString() & " " & If(r("FilialenNr"), "").ToString() & "/" & If(r("AbfertigungsNr"), "").ToString() & vbNewLine Else 'Durch else wird nur Zeile geschrieben, wenn auch eine Zolldeklaration gefunden wurde. Sonst wird nur eine Fehlermeldung ausgegeben. WriteDetailReportRow(blatt, r, cd, cnt, kdnr) End If Catch ex As Exception MsgBox(ex.Message & vbCrLf & ex.StackTrace) End Try Next End Sub Private Sub CreateGeneralReport(blatt As Object, dt As DataTable, kdnr As Integer, AbfVon As Date, AbfBis As Date, Optional DL_Kosten As Boolean = False, Optional ShowMessage As Boolean = True) blatt.Range("I1").Value = AbfVon.ToShortDateString & "-" & AbfBis.ToShortDateString Dim cnt As Integer = 3 For Each r As DataRow In dt.Rows Try Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r) If Not cd.hasEntry AndAlso ShowMessage Then MsgBox("ERROR: Nicht gefunden: " & If(r("BelegNr"), "").ToString() & " " & If(r("FilialenNr"), "").ToString() & "/" & If(r("AbfertigungsNr"), "").ToString()) End If WriteGeneralReportRow(blatt, r, cd, cnt, kdnr, DL_Kosten) Catch ex As Exception MsgBox(ex.Message & vbCrLf & ex.StackTrace) End Try Next End Sub Private Sub WriteDetailReportRow(blatt As Object, r As DataRow, cd As cVERAG_CustomsDeclarations, ByRef cnt As Integer, kdnrsrch As Integer) Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), kdnrsrch) If cd IsNot Nothing AndAlso cd.hasEntry Then Dim empfaenger As String = GetPartyName(cd, cVERAG_CustomsDeclarations.IMPORTER_ROLES, "") Dim absender As String = GetPartyName(cd, cVERAG_CustomsDeclarations.EXPORTER_ROLES, "") If cd.Items IsNot Nothing AndAlso cd.Items.Count > 0 Then For Each item As cVERAG_CustomsDeclarations_Item In cd.Items ' Abgaben kommen jetzt von der Position Dim eustBetrag As Decimal = GetDutyAmount(item, {"B%", "B00", "EUST", "VAT"}) Dim zollBetrag As Decimal = GetDutyAmountExcluding(item, {"B%", "B00", "EUST", "VAT"}) Dim itemInvoiceAmount As Decimal = If(item.zaItem_InvoiceValueForeign, item.zaItem_InvoiceValueEUR) Dim zollInProzent As Double = 0 If itemInvoiceAmount <> 0 Then zollInProzent = CDbl(zollBetrag / itemInvoiceAmount * 100D) End If blatt.Range("A" & cnt).Value = cnt - 1 blatt.Range("B" & cnt).Value = r("Abfertigungsdatum") blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr")) blatt.Range("D" & cnt).Value = empfaenger blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr") blatt.Range("F" & cnt).Value = kdAtrNr blatt.Range("G" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()), r("BelegNr"), cd.za_MRN) blatt.Range("H" & cnt).Value = item.zaItem_PosNo blatt.Range("I" & cnt).Value = item.zaItem_HSCode blatt.Range("J" & cnt).Value = "-" blatt.Range("K" & cnt).Value = item.zaItem_Description blatt.Range("L" & cnt).Value = "" blatt.Range("M" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(item.zaItem_InvoiceCurrency, "")), item.zaItem_InvoiceCurrency, cd.za_InvoiceCurrency) blatt.Range("N" & cnt).Value = item.zaItem_MainProcedure blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice blatt.Range("P" & cnt).Value = If(item.zaItem_PosNo = 1, cd.za_TotGrossMass, "") blatt.Range("Q" & cnt).Value = item.zaItem_NetMass blatt.Range("R" & cnt).Value = itemInvoiceAmount blatt.Range("S" & cnt).Value = eustBetrag blatt.Range("T" & cnt).Value = zollBetrag blatt.Range("U" & cnt).Value = zollInProzent.ToString("N2") & " %" blatt.Range("V" & cnt).Value = cd.za_CountryDispatch blatt.Range("W" & cnt).Value = absender blatt.Range("X" & cnt).Value = item.zaItem_OriginCountry blatt.Range("Y" & cnt).Value = cd.za_CountryDestination blatt.Range("Z" & cnt).Value = cd.za_Incoterms blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace blatt.Range("AB" & cnt).Value = item.zaItem_MainProcedure & If(Not String.IsNullOrWhiteSpace(item.zaItem_AdditionalProc), "/" & item.zaItem_AdditionalProc, "") blatt.Range("AC" & cnt).Value = item.zaItem_PreferenceCode blatt.Range("AD" & cnt).Value = If(IsItemCBAM(item), "Y", "N") blatt.Range("AE" & cnt).Value = item.GetInvoiceListString() cnt += 1 Next Else 'Fallback: wenn keine Positionen vorhanden sind, 'weiterhin Header-Duties verwenden Dim eustBetrag As Decimal = GetDutyAmount(cd, {"B%", "B00", "EUST", "VAT"}) Dim zollBetrag As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"}) Dim invoiceAmount As Decimal = If(cd.za_InvoiceAmount, 0D) Dim zollInProzent As Double = 0 If invoiceAmount <> 0 Then zollInProzent = CDbl(zollBetrag / invoiceAmount * 100D) End If blatt.Range("A" & cnt).Value = cnt - 1 blatt.Range("B" & cnt).Value = r("Abfertigungsdatum") blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr")) blatt.Range("D" & cnt).Value = empfaenger blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr") blatt.Range("F" & cnt).Value = kdAtrNr blatt.Range("G" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()), r("BelegNr"), cd.za_MRN) blatt.Range("H" & cnt).Value = "" blatt.Range("I" & cnt).Value = "" blatt.Range("J" & cnt).Value = "-" blatt.Range("K" & cnt).Value = "" blatt.Range("L" & cnt).Value = "" blatt.Range("M" & cnt).Value = cd.za_InvoiceCurrency blatt.Range("N" & cnt).Value = cd.za_MainProcedure blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice blatt.Range("P" & cnt).Value = cd.za_TotGrossMass blatt.Range("Q" & cnt).Value = "" blatt.Range("R" & cnt).Value = cd.za_InvoiceAmount blatt.Range("S" & cnt).Value = eustBetrag blatt.Range("T" & cnt).Value = zollBetrag blatt.Range("U" & cnt).Value = zollInProzent.ToString("N2") & " %" blatt.Range("V" & cnt).Value = cd.za_CountryDispatch blatt.Range("W" & cnt).Value = absender blatt.Range("X" & cnt).Value = "" blatt.Range("Y" & cnt).Value = cd.za_CountryDestination blatt.Range("Z" & cnt).Value = cd.za_Incoterms blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace blatt.Range("AB" & cnt).Value = "" blatt.Range("AC" & cnt).Value = "" blatt.Range("AD" & cnt).Value = "" blatt.Range("AE" & cnt).Value = "" cnt += 1 End If Else blatt.Range("A" & cnt).Value = cnt - 1 blatt.Range("B" & cnt).Value = r("Abfertigungsdatum") blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr")) blatt.Range("D" & cnt).Value = r("Empfänger") blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr") blatt.Range("F" & cnt).Value = kdAtrNr blatt.Range("G" & cnt).Value = r("BelegNr") cnt += 1 End If End Sub Private Function GetDienstleistungskosten(r As DataRow, kdnrsrch As Integer) As Decimal Try Dim sqlstr As String = "SELECT ISNULL(SUM(pos.SteuerfreierBetrag + pos.SteuerpflichtigerBetrag), 0) " & "FROM Rechnungsausgang RK " & "INNER JOIN RechnungsausgangPositionen POS ON RK.RK_ID = POS.RK_ID " & "INNER JOIN Leistungen ON POS.LeistungsNr = Leistungen.LeistungsNr " & "WHERE RK.FilialenNr = " & CInt(r("FilialenNr")) & " " & "AND RK.AbfertigungsNr = " & CInt(r("AbfertigungsNr")) & " " & "AND Leistungen.Abfertigungskosten = 1 " & "AND Leistungen.abzugsfaehigInZZ = 0 " & "AND RK.RechnungsKundenNr = " & kdnrsrch Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Return SQL.getValueTxtBySql(sqlstr, "FMZOLL",,, 0) Catch Return 0D End Try End Function Private Sub WriteDetailReportRow_OLD(blatt As Object, r As DataRow, cd As cVERAG_CustomsDeclarations, ByRef cnt As Integer, kdnrsrch As Integer) Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), kdnrsrch) If cd IsNot Nothing AndAlso cd.hasEntry Then Dim empfaenger As String = GetPartyName(cd, cVERAG_CustomsDeclarations.IMPORTER_ROLES, "") Dim absender As String = GetPartyName(cd, cVERAG_CustomsDeclarations.EXPORTER_ROLES, "") Dim eustBetrag As Decimal = GetDutyAmount(cd, {"B%", "B00", "EUST", "VAT"}) Dim zollBetrag As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"}) Dim invoiceAmount As Decimal = If(cd.za_InvoiceAmount, 0D) Dim zollInProzent As Double = 0 If invoiceAmount <> 0 Then zollInProzent = CDbl(zollBetrag / invoiceAmount * 100D) End If If cd.Items IsNot Nothing AndAlso cd.Items.Count > 0 Then Dim rowcounter As Integer = 0 For Each item As cVERAG_CustomsDeclarations_Item In cd.Items blatt.Range("A" & cnt).Value = cnt - 1 blatt.Range("B" & cnt).Value = r("Abfertigungsdatum") blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr")) blatt.Range("D" & cnt).Value = empfaenger blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr") blatt.Range("F" & cnt).Value = kdAtrNr blatt.Range("G" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()), r("BelegNr"), cd.za_MRN) blatt.Range("H" & cnt).Value = item.zaItem_PosNo blatt.Range("I" & cnt).Value = item.zaItem_HSCode blatt.Range("J" & cnt).Value = "-" blatt.Range("K" & cnt).Value = item.zaItem_Description blatt.Range("L" & cnt).Value = "" blatt.Range("M" & cnt).Value = cd.za_InvoiceCurrency blatt.Range("N" & cnt).Value = item.zaItem_MainProcedure 'cd.za_MainProcedure blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice blatt.Range("P" & cnt).Value = If(item.zaItem_PosNo = 1, cd.za_TotGrossMass, "") blatt.Range("Q" & cnt).Value = item.zaItem_NetMass blatt.Range("R" & cnt).Value = If(item.zaItem_InvoiceValueForeign, item.zaItem_InvoiceValueEUR) blatt.Range("S" & cnt).Value = If(rowcounter = 0, eustBetrag, "") blatt.Range("T" & cnt).Value = If(rowcounter = 0, zollBetrag, "") blatt.Range("U" & cnt).Value = If(rowcounter = 0, zollInProzent.ToString("N2") & " %", "") blatt.Range("V" & cnt).Value = cd.za_CountryDispatch blatt.Range("W" & cnt).Value = absender blatt.Range("X" & cnt).Value = item.zaItem_OriginCountry blatt.Range("Y" & cnt).Value = cd.za_CountryDestination blatt.Range("Z" & cnt).Value = cd.za_Incoterms blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace blatt.Range("AB" & cnt).Value = item.zaItem_MainProcedure & If(Not String.IsNullOrWhiteSpace(item.zaItem_AdditionalProc), "/" & item.zaItem_AdditionalProc, "") blatt.Range("AC" & cnt).Value = item.zaItem_PreferenceCode blatt.Range("AD" & cnt).Value = If(IsItemCBAM(item), "Y", "N") blatt.Range("AE" & cnt).Value = item.GetInvoiceListString() cnt += 1 rowcounter += 1 Next Else blatt.Range("A" & cnt).Value = cnt - 1 blatt.Range("B" & cnt).Value = r("Abfertigungsdatum") blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr")) blatt.Range("D" & cnt).Value = empfaenger blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr") blatt.Range("F" & cnt).Value = kdAtrNr blatt.Range("G" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()), r("BelegNr"), cd.za_MRN) blatt.Range("H" & cnt).Value = "" blatt.Range("I" & cnt).Value = "" blatt.Range("J" & cnt).Value = "-" blatt.Range("K" & cnt).Value = "" blatt.Range("L" & cnt).Value = "" blatt.Range("M" & cnt).Value = cd.za_InvoiceCurrency blatt.Range("N" & cnt).Value = cd.za_MainProcedure blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice blatt.Range("P" & cnt).Value = "" blatt.Range("Q" & cnt).Value = "" blatt.Range("R" & cnt).Value = "" blatt.Range("S" & cnt).Value = eustBetrag blatt.Range("T" & cnt).Value = zollBetrag blatt.Range("U" & cnt).Value = zollInProzent.ToString("N2") & " %" blatt.Range("V" & cnt).Value = cd.za_CountryDispatch blatt.Range("W" & cnt).Value = absender blatt.Range("X" & cnt).Value = "" blatt.Range("Y" & cnt).Value = cd.za_CountryDestination blatt.Range("Z" & cnt).Value = cd.za_Incoterms blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace blatt.Range("AB" & cnt).Value = "" blatt.Range("AC" & cnt).Value = "" blatt.Range("AD" & cnt).Value = "" cnt += 1 End If Else blatt.Range("A" & cnt).Value = cnt - 1 blatt.Range("B" & cnt).Value = r("Abfertigungsdatum") blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr")) blatt.Range("D" & cnt).Value = r("Empfänger") blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr") blatt.Range("F" & cnt).Value = kdAtrNr blatt.Range("G" & cnt).Value = r("BelegNr") cnt += 1 End If End Sub Private Sub WriteGeneralReportRow(blatt As Object, r As DataRow, cd As cVERAG_CustomsDeclarations, ByRef cnt As Integer, kdnrsrch As Integer, Optional DL_Kosten As Boolean = False) Dim dienstleistungsKosten As Decimal = 0D If DL_Kosten Then blatt.Range("P2").Value = "Service Costs" dienstleistungsKosten = GetDienstleistungskosten(r, kdnrsrch) End If Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), kdnrsrch) blatt.Range("A" & cnt).Value = cnt - 2 blatt.Range("B" & cnt).Value = r("Abfertigungsnummer") blatt.Range("C" & cnt).Value = r("Abfertigungsdatum") blatt.Range("D" & cnt).Value = r("Abfertigungsbezeichnung") blatt.Range("E" & cnt).Value = r("Absender") blatt.Range("F" & cnt).Value = r("Empfänger") blatt.Range("G" & cnt).Value = kdAtrNr blatt.Range("H" & cnt).Value = "" If cd IsNot Nothing AndAlso cd.hasEntry Then Dim zollBetrag As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"}) blatt.Range("H" & cnt).Value = cd.za_InvoiceAmount blatt.Range("I" & cnt).Value = GetInvoiceReferences(cd) blatt.Range("J" & cnt).Value = cd.za_MRN blatt.Range("K" & cnt).Value = zollBetrag blatt.Range("L" & cnt).Value = If(cd.Items IsNot Nothing, cd.Items.Count, 0) blatt.Range("M" & cnt).Value = GetPartyName(cd, cVERAG_CustomsDeclarations.DECLARANT_ROLES, "") blatt.Range("N" & cnt).Value = GetItemsDescription(cd) blatt.Range("O" & cnt).Value = cd.za_CountryDispatch & " --> " & cd.za_CountryDestination If DL_Kosten Then blatt.Range("P" & cnt).Value = dienstleistungsKosten End If Else If DL_Kosten Then blatt.Range("I" & cnt).Value = dienstleistungsKosten End If End If cnt += 1 End Sub Private Function GetPartyName(cd As cVERAG_CustomsDeclarations, roles As String(), Optional fallback As String = "") As String If cd Is Nothing OrElse cd.Parties Is Nothing Then Return fallback Dim p = cd.Parties.FirstOrDefault(Function(x) roles.Contains(If(x.zaParty_Role, "").Trim().ToUpper())) If p Is Nothing Then Return fallback Return If(p.zaParty_Name, fallback) End Function Private Function GetDutyAmount(cd As cVERAG_CustomsDeclarations, dutyTypes As String()) As Decimal If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D Return cd.Duties. Where(Function(d) DutyTypeMatches(If(d.zaDuty_DutyType, ""), dutyTypes)). Sum(Function(d) If(d.zaDuty_AmountEUR, 0D)) End Function Private Function GetDutyAmountExcluding(cd As cVERAG_CustomsDeclarations, excludedDutyTypes As String()) As Decimal If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D Return cd.Duties. Where(Function(d) Not DutyTypeMatches(If(d.zaDuty_DutyType, ""), excludedDutyTypes)). Sum(Function(d) If(d.zaDuty_AmountEUR, 0D)) End Function Private Function GetDutyAmount(cd As cVERAG_CustomsDeclarations_Item, dutyTypes As String()) As Decimal If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D Return cd.Duties. Where(Function(d) DutyTypeMatches(If(d.zaDuty_DutyType, ""), dutyTypes)). Sum(Function(d) If(d.zaDuty_AmountEUR, 0D)) End Function Private Function GetDutyAmountExcluding(cd As cVERAG_CustomsDeclarations_Item, excludedDutyTypes As String()) As Decimal If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D Return cd.Duties. Where(Function(d) Not DutyTypeMatches(If(d.zaDuty_DutyType, ""), excludedDutyTypes)). Sum(Function(d) If(d.zaDuty_AmountEUR, 0D)) End Function Private Function DutyTypeMatches(dutyType As String, patterns As String()) As Boolean Dim value As String = If(dutyType, "").Trim().ToUpper() If value = "" OrElse patterns Is Nothing Then Return False For Each p In patterns Dim pattern As String = If(p, "").Trim().ToUpper() If pattern = "" Then Continue For If pattern.Contains("%") Then Dim regexPattern As String = "^" & System.Text.RegularExpressions.Regex.Escape(pattern).Replace("%", ".*") & "$" If System.Text.RegularExpressions.Regex.IsMatch(value, regexPattern) Then Return True End If Else If value = pattern Then Return True End If End If Next Return False End Function Private Function GetInvoiceReferences(cd As cVERAG_CustomsDeclarations) As String If cd Is Nothing OrElse cd.Documents Is Nothing OrElse cd.Documents.Count = 0 Then Return "" Return String.Join(vbNewLine, cd.Documents. Where(Function(d) Not String.IsNullOrWhiteSpace(If(d.zaDoc_Reference, ""))). Select(Function(d) d.zaDoc_Reference). Distinct()) End Function Private Function GetItemsDescription(cd As cVERAG_CustomsDeclarations) As String If cd Is Nothing OrElse cd.Items Is Nothing OrElse cd.Items.Count = 0 Then Return "" Return String.Join(" | ", cd.Items. Where(Function(i) Not String.IsNullOrWhiteSpace(If(i.zaItem_Description, ""))). Select(Function(i) i.zaItem_Description). Distinct()) End Function Private Function IsItemCBAM_TNR(item As cVERAG_CustomsDeclarations_Item) As Boolean Try If item Is Nothing Then Return False If VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST Is Nothing Then VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST = cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers Dim cbamList = VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST ' VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers() Dim hs = If(item.zaItem_HSCode, "").Trim() If hs = "" OrElse cbamList Is Nothing Then Return False For Each p In cbamList If hs.StartsWith(If(p, "").Trim()) Then Return True Next Catch End Try Return False End Function Private Function IsItemCBAM(item As cVERAG_CustomsDeclarations_Item) As Boolean Try If item Is Nothing Then Return False ' Ursprungsland prüfen (nicht CBAM-pflichtige Länder ausschließen) Dim originCountry = If(item.zaItem_OriginCountry, "").Trim().ToUpper() Select Case originCountry ' EU-27 Case "AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR", "DE", "GR", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "RO", "SK", "SI", "ES", "SE", ' Ausnahmen "CH", ' Schweiz "NO", ' Norwegen "IS", ' Island "LI", ' Liechtenstein "XI" ' Nordirland Return False End Select If VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST Is Nothing Then VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST = cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers Dim cbamList = VERAG_PROG_ALLGEMEIN.cAllgemein.CBAM_LIST ' VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers() Dim hs = If(item.zaItem_HSCode, "").Trim() If hs = "" OrElse cbamList Is Nothing Then Return False For Each p In cbamList If hs.StartsWith(If(p, "").Trim()) Then Return True Next Catch End Try Return False End Function Private Function NormalizeKdAuftragsNr(value As Object, kdnrsrch As Integer) As String Dim kdAtrNr As String = If(value, "").ToString() If kdnrsrch = 770931 AndAlso kdAtrNr.Contains("/") Then kdAtrNr = kdAtrNr.Split("/"c)(0) End If Return kdAtrNr End Function Private Function LeftSafe(value As String, length As Integer) As String value = If(value, "") If value.Length < length Then Return value Return value.Substring(0, length) End Function Private Function RightSafe(value As String, length As Integer) As String value = If(value, "") If value.Length < length Then Return value Return value.Substring(value.Length - length, length) End Function Public Function RunReport_VERAG_ZA_DETAIL_FULL(KDNR As Integer, AbfVon As Date, AbfBis As Date, Optional whereStr As String = "", Optional Open As Boolean = True, Optional list As List(Of SQLVariable) = Nothing) As String Try Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr) If dt Is Nothing OrElse dt.Rows.Count = 0 Then Return "" End If Dim path As String = CreateTargetPathCsv(AbfVon, AbfBis, "KVI_DETAIL_FULL_") Using sw As New System.IO.StreamWriter(path, False, System.Text.Encoding.UTF8) sw.WriteLine(String.Join(";", { CsvField("Speditionsbuch_Abfertigungsnummer"), CsvField("Speditionsbuch_Abfertigungsdatum"), CsvField("Speditionsbuch_Absender"), CsvField("Speditionsbuch_Empfaenger"), CsvField("Speditionsbuch_BelegNr"), CsvField("Speditionsbuch_KdAuftragsNr"), CsvField("Speditionsbuch_FilialenNr"), CsvField("Speditionsbuch_AbfertigungsNr"), CsvField("Speditionsbuch_Abfertigungsart"), CsvField("Speditionsbuch_Abfertigungsbezeichnung"), CsvField("Speditionsbuch_Zollsystem_Land"), CsvField("Speditionsbuch_SendungID"), CsvField("za_Id"), CsvField("za_System"), CsvField("za_CustomsSystem"), CsvField("za_CustomsSystemCountry"), CsvField("za_IsExternalSystem"), CsvField("za_IsFinalDeclaration"), CsvField("za_UCR"), CsvField("za_Mandant_ID"), CsvField("za_Bereich_ID"), CsvField("za_Firma"), CsvField("za_Niederlassung"), CsvField("za_MRN"), CsvField("za_LRN"), CsvField("za_DeclarationNo"), CsvField("za_ReferenceCustomer"), CsvField("za_REGIME"), CsvField("za_RegistrationType"), CsvField("za_MainProcedure"), CsvField("za_AdditionalProcedure"), CsvField("za_DeclarationDate"), CsvField("za_ReleaseDate"), CsvField("za_AcceptanceDate"), CsvField("za_CustomsOffice"), CsvField("za_EntryCustomsOffice"), CsvField("za_RepresentationCode"), CsvField("za_TransportModeInland"), CsvField("za_TransportModeBorder"), CsvField("za_MeansOfTransport_Vehicle"), CsvField("za_MeansOfTransport_Type"), CsvField("za_MeansOfTransport_Nationality"), CsvField("za_ContainerNr1"), CsvField("za_ContainerNr2"), CsvField("za_ContainerNr3"), CsvField("za_ContainerNr4"), CsvField("za_ContainerNr5"), CsvField("za_ContainerNr6"), CsvField("za_ContainerNr7"), CsvField("za_ContainerNr8"), CsvField("za_ContainerNr9"), CsvField("za_CountryDispatch"), CsvField("za_CountryDestination"), CsvField("za_CountryDestinationState"), CsvField("za_CountryImport"), CsvField("za_WarehouseCode"), CsvField("za_Incoterms"), CsvField("za_IncotermsPlace"), CsvField("za_InvoiceAmount"), CsvField("za_InvoiceCurrency"), CsvField("za_FiscalRepFlag"), CsvField("za_TaxDeduction"), CsvField("za_ApplicantTaxOffice"), CsvField("za_ApplicantVATNo"), CsvField("za_DV1Flag"), CsvField("za_PrevDocument_Type"), CsvField("za_PrevDocument_No"), CsvField("za_AvisoId"), CsvField("za_SendungsId"), CsvField("za_Remarks"), CsvField("za_Sachbearbeiter"), CsvField("za_SachbearbeiterId"), CsvField("za_TotGrossMass"), CsvField("Parties_All"), CsvField("Importer_Name"), CsvField("Importer_EORI"), CsvField("Exporter_Name"), CsvField("Exporter_EORI"), CsvField("Declarant_Name"), CsvField("Declarant_EORI"), CsvField("Duties_All"), CsvField("Duty_Total"), CsvField("Duty_EUST"), CsvField("Duty_Excluding_EUST"), CsvField("Header_Documents_All"), CsvField("Item_Documents_All"), CsvField("All_Documents_Merged"), CsvField("Item_PosNo"), CsvField("Item_ArticleCode"), CsvField("Item_HSCode"), CsvField("Item_HSAddition1"), CsvField("Item_HSAddition2"), CsvField("Item_HSAddCodes1"), CsvField("Item_HSAddCodes2"), CsvField("Item_HSAddCodes3"), CsvField("Item_HSAddCodes4"), CsvField("Item_HSAddCodes5"), CsvField("Item_HSAddCodes6"), CsvField("Item_HSAddCodes7"), CsvField("Item_HSAddCodes8"), CsvField("Item_HSAddCodes9"), CsvField("Item_HSAddCodes10"), CsvField("Item_Description"), CsvField("Item_PackageColli"), CsvField("Item_PackageType"), CsvField("Item_PackageMark"), CsvField("Item_OriginCountry"), CsvField("Item_PreferentialCountry"), CsvField("Item_PreferenceCode"), CsvField("Item_QuotaNo"), CsvField("Item_MainProcedure"), CsvField("Item_AdditionalProc"), CsvField("Item_PrevProcedure"), CsvField("Item_GrossMass"), CsvField("Item_NetMass"), CsvField("Item_SuppUnitCode"), CsvField("Item_SuppQuantity"), CsvField("Item_StatisticalValueEUR"), CsvField("Item_CustomsValueEUR"), CsvField("Item_InvoiceCurrency"), CsvField("Item_InvoiceValueForeign"), CsvField("Item_InvoiceValueEUR"), CsvField("Item_BeguenstigungCode"), CsvField("Item_DV1Flag"), CsvField("Item_PosAddition"), CsvField("Item_Remarks"), CsvField("Item_isCBAM") })) For Each r As DataRow In dt.Rows Try Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r) Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), KDNR) Dim importer = GetParty(cd, cVERAG_CustomsDeclarations.IMPORTER_ROLES) Dim exporter = GetParty(cd, cVERAG_CustomsDeclarations.EXPORTER_ROLES) Dim declarant = GetParty(cd, cVERAG_CustomsDeclarations.DECLARANT_ROLES) Dim allParties As String = JoinParties(cd) Dim allDuties As String = JoinDuties(cd) Dim headerDocs As String = JoinDocuments(cd.Documents) Dim dutyTotal As Decimal = GetDutyAmountTotal(cd) Dim dutyEust As Decimal = GetDutyAmount(cd, {"B%", "B00", "EUST", "VAT"}) Dim dutyExcludingEust As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"}) If cd IsNot Nothing AndAlso cd.hasEntry AndAlso cd.Items IsNot Nothing AndAlso cd.Items.Count > 0 Then For Each item As cVERAG_CustomsDeclarations_Item In cd.Items Dim itemDocs As String = JoinDocuments(item.Documents) Dim allDocsMerged As String = MergeDocumentStrings(headerDocs, itemDocs) sw.WriteLine(String.Join(";", { CsvField(If(r("Abfertigungsnummer"), "")), CsvField(FormatDateForCsv(r("Abfertigungsdatum"))), CsvField(If(r("Absender"), "")), CsvField(If(r("Empfänger"), "")), CsvField(If(r("BelegNr"), "")), CsvField(kdAtrNr), CsvField(If(r("FilialenNr"), "")), CsvField(If(r("AbfertigungsNr"), "")), CsvField(If(r("Abfertigungsart"), "")), CsvField(If(r("Abfertigungsbezeichnung"), "")), CsvField(If(r("Zollsystem_Land"), "")), CsvField(If(r("SendungID"), "")), CsvField(cd.za_Id), CsvField(cd.za_System), CsvField(cd.za_CustomsSystem), CsvField(cd.za_CustomsSystemCountry), CsvField(FormatBoolForCsv(cd.za_IsExternalSystem)), CsvField(FormatBoolForCsv(cd.za_IsFinalDeclaration)), CsvField(cd.za_UCR), CsvField(cd.za_Mandant_ID), CsvField(cd.za_Bereich_ID), CsvField(cd.za_Firma), CsvField(cd.za_Niederlassung), CsvField(cd.za_MRN), CsvField(cd.za_LRN), CsvField(cd.za_DeclarationNo), CsvField(cd.za_ReferenceCustomer), CsvField(cd.za_REGIME), CsvField(cd.za_RegistrationType), CsvField(cd.za_MainProcedure), CsvField(cd.za_AdditionalProcedure), CsvField(FormatDateForCsv(cd.za_DeclarationDate)), CsvField(FormatDateForCsv(cd.za_ReleaseDate)), CsvField(FormatDateForCsv(cd.za_AcceptanceDate)), CsvField(cd.za_CustomsOffice), CsvField(cd.za_EntryCustomsOffice), CsvField(cd.za_RepresentationCode), CsvField(cd.za_TransportModeInland), CsvField(cd.za_TransportModeBorder), CsvField(cd.za_MeansOfTransport_Vehicle), CsvField(cd.za_MeansOfTransport_Type), CsvField(cd.za_MeansOfTransport_Nationality), CsvField(cd.za_ContainerNr1), CsvField(cd.za_ContainerNr2), CsvField(cd.za_ContainerNr3), CsvField(cd.za_ContainerNr4), CsvField(cd.za_ContainerNr5), CsvField(cd.za_ContainerNr6), CsvField(cd.za_ContainerNr7), CsvField(cd.za_ContainerNr8), CsvField(cd.za_ContainerNr9), CsvField(cd.za_CountryDispatch), CsvField(cd.za_CountryDestination), CsvField(cd.za_CountryDestinationState), CsvField(cd.za_CountryImport), CsvField(cd.za_WarehouseCode), CsvField(cd.za_Incoterms), CsvField(cd.za_IncotermsPlace), CsvField(FormatDecimalForCsv(cd.za_InvoiceAmount)), CsvField(cd.za_InvoiceCurrency), CsvField(FormatNullableBoolForCsv(cd.za_FiscalRepFlag)), CsvField(FormatNullableBoolForCsv(cd.za_TaxDeduction)), CsvField(cd.za_ApplicantTaxOffice), CsvField(cd.za_ApplicantVATNo), CsvField(FormatNullableBoolForCsv(cd.za_DV1Flag)), CsvField(cd.za_PrevDocument_Type), CsvField(cd.za_PrevDocument_No), CsvField(If(cd.za_AvisoId.HasValue, cd.za_AvisoId.Value.ToString(), "")), CsvField(If(cd.za_SendungsId.HasValue, cd.za_SendungsId.Value.ToString(), "")), CsvField(cd.za_Remarks), CsvField(cd.za_Sachbearbeiter), CsvField(cd.za_SachbearbeiterId), CsvField(FormatDecimalForCsv(cd.za_TotGrossMass)), CsvField(allParties), CsvField(If(importer Is Nothing, "", importer.zaParty_Name)), CsvField(If(importer Is Nothing, "", importer.zaParty_EORI)), CsvField(If(exporter Is Nothing, "", exporter.zaParty_Name)), CsvField(If(exporter Is Nothing, "", exporter.zaParty_EORI)), CsvField(If(declarant Is Nothing, "", declarant.zaParty_Name)), CsvField(If(declarant Is Nothing, "", declarant.zaParty_EORI)), CsvField(allDuties), CsvField(FormatDecimalForCsv(dutyTotal)), CsvField(FormatDecimalForCsv(dutyEust)), CsvField(FormatDecimalForCsv(dutyExcludingEust)), CsvField(headerDocs), CsvField(itemDocs), CsvField(allDocsMerged), CsvField(item.zaItem_PosNo), CsvField(item.zaItem_ArticleCode), CsvField(item.zaItem_HSCode), CsvField(item.zaItem_HSAddition1), CsvField(item.zaItem_HSAddition2), CsvField(item.zaItem_HSAddCodes1), CsvField(item.zaItem_HSAddCodes2), CsvField(item.zaItem_HSAddCodes3), CsvField(item.zaItem_HSAddCodes4), CsvField(item.zaItem_HSAddCodes5), CsvField(item.zaItem_HSAddCodes6), CsvField(item.zaItem_HSAddCodes7), CsvField(item.zaItem_HSAddCodes8), CsvField(item.zaItem_HSAddCodes9), CsvField(item.zaItem_HSAddCodes10), CsvField(item.zaItem_Description), CsvField(item.zaItem_PackageColli), CsvField(item.zaItem_PackageType), CsvField(item.zaItem_PackageMark), CsvField(item.zaItem_OriginCountry), CsvField(item.zaItem_PreferentialCountry), CsvField(item.zaItem_PreferenceCode), CsvField(item.zaItem_QuotaNo), CsvField(item.zaItem_MainProcedure), CsvField(item.zaItem_AdditionalProc), CsvField(item.zaItem_PrevProcedure), CsvField(FormatDecimalForCsv(item.zaItem_GrossMass)), CsvField(FormatDecimalForCsv(item.zaItem_NetMass)), CsvField(item.zaItem_SuppUnitCode), CsvField(FormatDecimalForCsv(item.zaItem_SuppQuantity)), CsvField(FormatDecimalForCsv(item.zaItem_StatisticalValueEUR)), CsvField(FormatDecimalForCsv(item.zaItem_CustomsValueEUR)), CsvField(item.zaItem_InvoiceCurrency), CsvField(FormatDecimalForCsv(item.zaItem_InvoiceValueForeign)), CsvField(FormatDecimalForCsv(item.zaItem_InvoiceValueEUR)), CsvField(item.zaItem_BeguenstigungCode), CsvField(FormatNullableBoolForCsv(item.zaItem_DV1Flag)), CsvField(item.zaItem_PosAddition), CsvField(item.zaItem_Remarks), CsvField(If(IsItemCBAM(item), "Y", "N")) })) Next Else sw.WriteLine(String.Join(";", { CsvField(If(r("Abfertigungsnummer"), "")), CsvField(FormatDateForCsv(r("Abfertigungsdatum"))), CsvField(If(r("Absender"), "")), CsvField(If(r("Empfänger"), "")), CsvField(If(r("BelegNr"), "")), CsvField(kdAtrNr), CsvField(If(r("FilialenNr"), "")), CsvField(If(r("AbfertigungsNr"), "")), CsvField(If(r("Abfertigungsart"), "")), CsvField(If(r("Abfertigungsbezeichnung"), "")), CsvField(If(r("Zollsystem_Land"), "")), CsvField(If(r("SendungID"), "")), CsvField(If(cd Is Nothing, "", cd.za_Id.ToString())), CsvField(If(cd Is Nothing, "", cd.za_System)), CsvField(If(cd Is Nothing, "", cd.za_CustomsSystem)), CsvField(If(cd Is Nothing, "", cd.za_CustomsSystemCountry)), CsvField(If(cd Is Nothing, "", FormatBoolForCsv(cd.za_IsExternalSystem))), CsvField(If(cd Is Nothing, "", FormatBoolForCsv(cd.za_IsFinalDeclaration))), CsvField(If(cd Is Nothing, "", cd.za_UCR)), CsvField(If(cd Is Nothing, "", cd.za_Mandant_ID)), CsvField(If(cd Is Nothing, "", cd.za_Bereich_ID)), CsvField(If(cd Is Nothing, "", cd.za_Firma)), CsvField(If(cd Is Nothing, "", cd.za_Niederlassung)), CsvField(If(cd Is Nothing, "", cd.za_MRN)), CsvField(If(cd Is Nothing, "", cd.za_LRN)), CsvField(If(cd Is Nothing, "", cd.za_DeclarationNo)), CsvField(If(cd Is Nothing, "", cd.za_ReferenceCustomer)), CsvField(If(cd Is Nothing, "", cd.za_REGIME)), CsvField(If(cd Is Nothing, "", cd.za_RegistrationType)), CsvField(If(cd Is Nothing, "", cd.za_MainProcedure)), CsvField(If(cd Is Nothing, "", cd.za_AdditionalProcedure)), CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_DeclarationDate))), CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_ReleaseDate))), CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_AcceptanceDate))), CsvField(If(cd Is Nothing, "", cd.za_CustomsOffice)), CsvField(If(cd Is Nothing, "", cd.za_EntryCustomsOffice)), CsvField(If(cd Is Nothing, "", cd.za_RepresentationCode)), CsvField(If(cd Is Nothing, "", cd.za_TransportModeInland)), CsvField(If(cd Is Nothing, "", cd.za_TransportModeBorder)), CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Vehicle)), CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Type)), CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Nationality)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr1)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr2)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr3)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr4)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr5)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr6)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr7)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr8)), CsvField(If(cd Is Nothing, "", cd.za_ContainerNr9)), CsvField(If(cd Is Nothing, "", cd.za_CountryDispatch)), CsvField(If(cd Is Nothing, "", cd.za_CountryDestination)), CsvField(If(cd Is Nothing, "", cd.za_CountryDestinationState)), CsvField(If(cd Is Nothing, "", cd.za_CountryImport)), CsvField(If(cd Is Nothing, "", cd.za_WarehouseCode)), CsvField(If(cd Is Nothing, "", cd.za_Incoterms)), CsvField(If(cd Is Nothing, "", cd.za_IncotermsPlace)), CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(cd.za_InvoiceAmount))), CsvField(If(cd Is Nothing, "", cd.za_InvoiceCurrency)), CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_FiscalRepFlag))), CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_TaxDeduction))), CsvField(If(cd Is Nothing, "", cd.za_ApplicantTaxOffice)), CsvField(If(cd Is Nothing, "", cd.za_ApplicantVATNo)), CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_DV1Flag))), CsvField(If(cd Is Nothing, "", cd.za_PrevDocument_Type)), CsvField(If(cd Is Nothing, "", cd.za_PrevDocument_No)), CsvField(If(cd Is Nothing OrElse Not cd.za_AvisoId.HasValue, "", cd.za_AvisoId.Value.ToString())), CsvField(If(cd Is Nothing OrElse Not cd.za_SendungsId.HasValue, "", cd.za_SendungsId.Value.ToString())), CsvField(If(cd Is Nothing, "", cd.za_Remarks)), CsvField(If(cd Is Nothing, "", cd.za_Sachbearbeiter)), CsvField(If(cd Is Nothing, "", cd.za_SachbearbeiterId)), CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(cd.za_TotGrossMass))), CsvField(If(cd Is Nothing, "", allParties)), CsvField(If(importer Is Nothing, "", importer.zaParty_Name)), CsvField(If(importer Is Nothing, "", importer.zaParty_EORI)), CsvField(If(exporter Is Nothing, "", exporter.zaParty_Name)), CsvField(If(exporter Is Nothing, "", exporter.zaParty_EORI)), CsvField(If(declarant Is Nothing, "", declarant.zaParty_Name)), CsvField(If(declarant Is Nothing, "", declarant.zaParty_EORI)), CsvField(If(cd Is Nothing, "", allDuties)), CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyTotal))), CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyEust))), CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyExcludingEust))), CsvField(If(cd Is Nothing, "", headerDocs)), CsvField(""), CsvField(If(cd Is Nothing, "", headerDocs)), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField(""), CsvField("") })) End If Catch ex As Exception MsgBox(ex.Message & vbCrLf & ex.StackTrace) End Try Next End Using If Open Then Process.Start(path) End If Return path Catch ex As Exception MsgBox(ex.Message & vbCrLf & ex.StackTrace) Return "" End Try End Function Private Function CreateTargetPathCsv(AbfVon As Date, AbfBis As Date, prefix As String) As String Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\" If Not My.Computer.FileSystem.DirectoryExists(sPath) Then My.Computer.FileSystem.CreateDirectory(sPath) End If Dim path As String = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & ".csv" While System.IO.File.Exists(path) path = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & "_" & Now.ToString("ddMMyyyyHHmmss") & ".csv" End While Return path End Function Private Function CsvField(value As Object) As String Dim s As String = If(value, "").ToString() s = s.Replace("""", """""") Return """" & s & """" End Function Private Function FormatDateForCsv(value As Object) As String If value Is Nothing OrElse value Is DBNull.Value Then Return "" If IsDate(value) Then Return CDate(value).ToString("yyyy-MM-dd") Return value.ToString() End Function Private Function FormatDecimalForCsv(value As Object) As String If value Is Nothing OrElse value Is DBNull.Value Then Return "" If IsNumeric(value) Then Return Convert.ToDecimal(value).ToString(System.Globalization.CultureInfo.InvariantCulture) Return value.ToString() End Function Private Function FormatBoolForCsv(value As Boolean) As String Return If(value, "1", "0") End Function Private Function FormatNullableBoolForCsv(value As Boolean?) As String If Not value.HasValue Then Return "" Return If(value.Value, "1", "0") End Function Private Function GetDutyAmountTotal(cd As cVERAG_CustomsDeclarations) As Decimal If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D Return cd.Duties.Sum(Function(d) If(d.zaDuty_AmountEUR, 0D)) End Function Private Function GetParty(cd As cVERAG_CustomsDeclarations, roles As String()) As cVERAG_CustomsDeclarations_Parties If cd Is Nothing OrElse cd.Parties Is Nothing Then Return Nothing Return cd.Parties.FirstOrDefault( Function(x) roles.Contains(If(x.zaParty_Role, "").Trim().ToUpper()) ) End Function Private Function JoinParties(cd As cVERAG_CustomsDeclarations) As String If cd Is Nothing OrElse cd.Parties Is Nothing OrElse cd.Parties.Count = 0 Then Return "" Return String.Join(" || ", cd.Parties.Select(Function(p) Return String.Join(" | ", { "Role=" & If(p.zaParty_Role, ""), "Name=" & If(p.zaParty_Name, ""), "EORI=" & If(p.zaParty_EORI, ""), "EORI_NL=" & If(p.zaParty_EORI_NL, ""), "Street=" & If(p.zaParty_Street, ""), "PostalCode=" & If(p.zaParty_PostalCode, ""), "City=" & If(p.zaParty_City, ""), "Country=" & If(p.zaParty_Country, ""), "TIN=" & If(p.zaParty_TIN, ""), "VAT=" & If(p.zaParty_VATNumber, ""), "TaxOffice=" & If(p.zaParty_TaxOffice, ""), "Contact=" & If(p.zaParty_ContactName, ""), "Phone=" & If(p.zaParty_Phone, ""), "Email=" & If(p.zaParty_Email, "") }) End Function)) End Function Private Function JoinDuties(cd As cVERAG_CustomsDeclarations) As String If cd Is Nothing OrElse cd.Duties Is Nothing OrElse cd.Duties.Count = 0 Then Return "" Return String.Join(" || ", cd.Duties.Select(Function(d) Return String.Join(" | ", { "DutyType=" & If(d.zaDuty_DutyType, ""), "AmountEUR=" & FormatDecimalForCsv(d.zaDuty_AmountEUR), "AmountForeign=" & FormatDecimalForCsv(d.zaDuty_AmountForeign), "Currency=" & If(d.zaDuty_Currency, ""), "BIN=" & If(d.zaDuty_BIN, ""), "AccountType=" & If(d.zaDuty_AccountType, ""), "AccountHeadCustoms=" & If(d.zaDuty_AccountHeadCustoms, ""), "ApplicationType=" & If(d.zaDuty_ApplicationType, ""), "AccountNo=" & If(d.zaDuty_AccountNo, ""), "AccountEORI=" & If(d.zaDuty_AccountEORI, ""), "AccountHolderName=" & If(d.zaDuty_AccountHolderName, ""), "LimitDate=" & FormatDateForCsv(d.zaDuty_LimitDate) }) End Function)) End Function Private Function JoinDocuments(docs As List(Of cVERAG_CustomsDeclarations_Document)) As String If docs Is Nothing OrElse docs.Count = 0 Then Return "" Return String.Join(" || ", docs.Select(Function(d) Return String.Join(" | ", { "Date=" & If(d.zaDoc_Date, ""), "Section=" & If(d.zaDoc_Section, ""), "Code=" & If(d.zaDoc_Code, ""), "Reference=" & If(d.zaDoc_Reference, ""), "Presentation=" & If(d.zaDoc_Presentation, ""), "DepAmount=" & If(d.zaDoc_DepreciationAmount, ""), "DepUnit=" & If(d.zaDoc_DepreciationUnitmeasurement, ""), "DepQual=" & If(d.zaDoc_DepreciationUnitmeasurementQualifier, ""), "Description=" & If(d.zaDoc_Description, "") }) End Function)) End Function Private Function MergeDocumentStrings(headerDocs As String, itemDocs As String) As String If headerDocs = "" Then Return itemDocs If itemDocs = "" Then Return headerDocs Return headerDocs & " || " & itemDocs End Function End Class