Imports System.IO Imports System.Globalization Imports System.Xml Imports Renci.SshNet Imports System.Net Imports System.Text Imports System.Text.RegularExpressions Public Class frmMDMNachrichtenVerarbeitung Dim cntDatenEingelesen As Integer = 0 Dim dsNichtErkannt As Integer = 0 Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Dim allowClose = False ' Dim DY_PFAD = "C:\Users\DEVELOPER1\Desktop\test\TEST\" Dim TELOTEC_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Einarbeitung\" Dim VERARBEITUNGS_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Einarbeitung\" Dim ZIEL_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Ablage\" Dim ERROR_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_ERROR\" ' Dim BOX_VERSION = "8.8" Dim Dateiname = "" Sub New() ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Sub New(allowClose) 'autostart ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() Me.allowClose = allowClose ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Sub initPfade() Me.TELOTEC_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("PLOSE_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) Me.VERARBEITUNGS_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("VERARBEITUNGS_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) 'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_Einarbeitung\" Me.ZIEL_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("ZIEL_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) 'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_Ablage\" Me.ERROR_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("ERROR_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) 'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_ERROR\" If Not System.IO.Directory.Exists(VERARBEITUNGS_PFAD) Then System.IO.Directory.CreateDirectory(VERARBEITUNGS_PFAD) If Not System.IO.Directory.Exists(ZIEL_PFAD) Then System.IO.Directory.CreateDirectory(ZIEL_PFAD) If Not System.IO.Directory.Exists(ERROR_PFAD) Then System.IO.Directory.CreateDirectory(ERROR_PFAD) 'Me.BOX_VERSION = MDM_Worker.cDY_Paramter.GET_PARAM_ByName("BOX_VERSION", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) End Sub Private Sub frmDYNachrichtenVerarbeitung_Load(sender As Object, e As EventArgs) Handles Me.Load initPfade() For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD) ListBox3.Items.Add(frmStartOptions.cut_file(d)) Me.Refresh() Next End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Me.Enabled = False Try Label9.Visible = True Dim cnt = getNachrichtenDatenFromMDMServices() ' If(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, getNachrichtenDatenFromMDMServicesTEST(), getNachrichtenDatenFromMDMServices()) Label9.Text = cnt & " Datensätze empfangen." Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Me.Enabled = True End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Me.Enabled = False Try Label5.Visible = True DatenEinlesen() If dsNichtErkannt > 0 Then Label6.Text = dsNichtErkannt & " Datensätze nicht " & vbNewLine & "erkannt." Label6.Visible = True End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Me.Enabled = True Label5.Text = cntDatenEingelesen & " Datensätze verarbeitet." End Sub Function getNachrichtenDatenFromMDMServices() As Integer Dim cnt = 0 Try Dim MDM_server = "" Dim MDM_name = "" Dim MDM_pwd = "" Dim MDM_port = "" Dim MDM_PFAD_out = "" MDM_Worker.cMDMFunctions.getSFTPLoginData(MDM_server, MDM_name, MDM_pwd, MDM_port, "", MDM_PFAD_out) DownloadFtpDirectory(MDM_server & "/"c & MDM_PFAD_out, New NetworkCredential(MDM_name, MDM_pwd), "", cnt, True) ' DownloadFtpDirectory("ftp://80.16.102.180" & "/"c & MDM_PFAD_out, New NetworkCredential(MDM_name, MDM_pwd), "", cnt, True) Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return cnt End Function Sub DownloadFtpDirectory(url As String, credentials As NetworkCredential, localPath As String, ByRef cnt As Integer, deleteAfterDownload As Boolean) Dim listRequest As FtpWebRequest = WebRequest.Create(url) listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails listRequest.Credentials = credentials Dim lines As List(Of String) = New List(Of String) Using listResponse As FtpWebResponse = listRequest.GetResponse(), listStream As Stream = listResponse.GetResponseStream(), listReader As StreamReader = New StreamReader(listStream) While Not listReader.EndOfStream lines.Add(listReader.ReadLine()) End While End Using For Each line As String In lines Dim tokens As String() = line.Split(New Char() {" "}, 9, StringSplitOptions.RemoveEmptyEntries) Dim name As String = tokens(8) Dim permissions As String = tokens(0) Dim localFilePath As String = Path.Combine(localPath, name) Dim fileUrl As String = url + name If permissions(0) = "d" Then 'Ordner If Not Directory.Exists(localFilePath) Then Directory.CreateDirectory(localFilePath) End If DownloadFtpDirectory(fileUrl + "/", credentials, localFilePath, cnt, deleteAfterDownload) Else If True Then ' Temp.DownloadPfad Dim downloadRequest As FtpWebRequest = WebRequest.Create(fileUrl) downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile downloadRequest.Credentials = credentials Dim fileDateTmp As Date = ServerDateFile(credentials, fileUrl) 'Dim destFilenameTMP = VERARBEITUNGS_PFAD & "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & name), name.Replace(".csv", "_") & " RGDAT_" & fileDateTmp.ToShortDateString & "_" & Now.ToString("yyMMdd_HHmmss.fff") & ".csv", name) ' Dim FimeNameTmp = If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & name), name.Replace(".csv", "_") & " RGDAT_" & fileDateTmp.ToShortDateString & "_" & Now.ToString("yyMMdd_HHmmss.fff") & ".csv", name) name = name.Replace(".csv", "_RGDAT_" & fileDateTmp.ToShortDateString & ".csv") Dim destFilenameTMP = VERARBEITUNGS_PFAD & "." & If(System.IO.File.Exists(VERARBEITUNGS_PFAD & "." & name), name.Replace(".csv", "_") & Now.ToString("yyMMdd_HHmmss.fff") & ".csv", name) Using downloadResponse As FtpWebResponse = downloadRequest.GetResponse(), sourceStream As Stream = downloadResponse.GetResponseStream(), targetStream As Stream = File.OpenWrite(destFilenameTMP) Dim buffer As Byte() = New Byte(10240 - 1) {} Dim read As Integer Do read = sourceStream.Read(buffer, 0, buffer.Length) If read > 0 Then targetStream.Write(buffer, 0, read) End If Loop While read > 0 sourceStream.Dispose() targetStream.Dispose() downloadResponse.Dispose() Dim destFilename = VERARBEITUNGS_PFAD & If(System.IO.File.Exists(VERARBEITUNGS_PFAD & name), name.Replace(".csv", "_") & Now.ToString("yyMMdd_HHmmss.fff") & ".csv", name) System.IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen Dim fi As FileInfo = New FileInfo(destFilename) ListBox3.Items.Add(frmStartOptions.cut_file(fi.Name)) 'zur Liste hinzufügen cnt += 1 'Datei nach download löschen If deleteAfterDownload Then Dim ftpReq As FtpWebRequest = WebRequest.Create(fileUrl) ftpReq.Method = WebRequestMethods.Ftp.DeleteFile ftpReq.Credentials = credentials Dim ftpResp As FtpWebResponse = ftpReq.GetResponse ftpResp.Close() End If End Using End If End If Next End Sub Private Function ServerDateFile(credentials As NetworkCredential, fileUrl As String) As Date Dim ServerDate As DateTime Try Dim request As FtpWebRequest = WebRequest.Create(fileUrl) request.Method = WebRequestMethods.Ftp.GetDateTimestamp request.Credentials = credentials Using response = CType(request.GetResponse(), Net.FtpWebResponse) ServerDate = response.LastModified.ToShortDateString End Using Return ServerDate Catch ex As WebException VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "PLOSE GET DATE FILE: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return ServerDate End Function Function getNachrichtenDatenFromMDMServices_ALTERNATIV() As Integer Dim cnt = 0 Try For Each f In System.IO.Directory.GetFiles(TELOTEC_PFAD) Dim FI As New FileInfo(f) If Not FI.Name.StartsWith(".") Then 'Temp. DownloadPfad Dim destFilenameTMP = VERARBEITUNGS_PFAD + "." & If(System.IO.File.Exists(VERARBEITUNGS_PFAD & "." & FI.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & FI.Name 'Datei herunterladen System.IO.File.Copy(f, destFilenameTMP) If System.IO.File.Exists(destFilenameTMP) Then System.IO.File.Delete(f) 'Datei nach erfolgreichem Herunterladen vom Server löschen 'Gültiger Filename Dim destFilename = VERARBEITUNGS_PFAD & If(System.IO.File.Exists(VERARBEITUNGS_PFAD & FI.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & FI.Name System.IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen Dim fi_dest As FileInfo = New FileInfo(destFilename) ListBox3.Items.Add(frmStartOptions.cut_file(fi_dest.Name)) 'zur Liste hinzufügen cnt += 1 lblDatenCnt.Text = cnt Me.Refresh() End If Next Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return cnt 'Dim cnt = 0 'Try ' Dim DY_server = "" ' Dim DY_name = "" ' Dim DY_pwd = "" ' Dim DY_port = "" ' Dim DY_PFAD_out = "" ' DAKOSY_Worker.cDakosyFunftions.getSFTPLoginData(DY_server, DY_name, DY_pwd, DY_port, "", DY_PFAD_out) ' Dim ConnectionInfo As New ConnectionInfo(DY_server, DY_port, DY_name, New PasswordAuthenticationMethod(DY_name, DY_pwd)) ' Using client = New SftpClient(ConnectionInfo) ' client.Connect() ' For Each f In client.ListDirectory(DY_PFAD_out) ' ' MsgBox(f.Name) ' If Not f.Name.StartsWith(".") Then ' 'Temp. DownloadPfad ' Dim destFilenameTMP = VERARBEITUNGS_PFAD + "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & f.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & f.Name ' 'Datei herunterladen ' Dim downloadFileStream As Stream = File.OpenWrite(destFilenameTMP) ' client.DownloadFile(f.FullName, downloadFileStream) ' If IO.File.Exists(destFilenameTMP) Then client.DeleteFile(f.FullName) 'Datei nach erfolgreichem Herunterladen vom Server löschen ' downloadFileStream.Dispose() ' 'Gültiger Filename ' Dim destFilename = VERARBEITUNGS_PFAD & If(IO.File.Exists(VERARBEITUNGS_PFAD & f.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & f.Name ' IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen ' Dim fi As FileInfo = New FileInfo(destFilename) ' ListBox3.Items.Add(frmStartOptions.cut_file(fi.Name)) 'zur Liste hinzufügen ' cnt += 1 ' End If ' Next ' client.Disconnect() ' End Using 'Catch ex As Exception ' VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) 'End Try 'Return cnt End Function ' Dim toEncodeAsBytes() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode) ' string returnValue = System.Convert.ToBase64String(toEncodeAsBytes) Public Function stripNonValidXMLCharacters(ByVal textIn As String) As String Dim textOut As System.Text.StringBuilder = New System.Text.StringBuilder() Dim current As Char If textIn Is Nothing OrElse textIn = String.Empty Then Return String.Empty For i As Integer = 0 To textIn.Length - 1 current = textIn(i) If (current = "9" OrElse current = "10" OrElse current = "13") OrElse ((current >= "32") AndAlso (current <= "55295")) OrElse ((current >= "57344") AndAlso (current <= "65533")) OrElse ((current >= "65536") AndAlso (current <= "1114111")) Then textOut.Append(current) End If Next Return textOut.ToString() End Function Public Function SanitizeXmlString(ByVal xml As String) As String If xml Is Nothing Then Throw New ArgumentNullException("xml") End If Dim buffer As System.Text.StringBuilder = New System.Text.StringBuilder(xml.Length) For Each c As Char In xml If IsLegalXmlChar(Asc(c)) Then buffer.Append(c) End If Next Return buffer.ToString() End Function Public Function IsLegalXmlChar(ByVal character As Integer) As Boolean Return (character = 9 OrElse character = 10 OrElse character = 13 OrElse (character >= 32 AndAlso character <= 55295) OrElse (character >= 57344 AndAlso character <= 65533) OrElse (character >= 65536 AndAlso character <= 1114111)) End Function Sub DatenEinlesen() VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.MAIL If ListBox3.Items.Count = 0 Then Label6.Text = "Keine Daten zum Einlesen vorhanden." Label6.Visible = True Exit Sub End If For i = 1 To 5 For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD) Try Dateiname = d cWorker_NCTS.Dateiname = d If System.IO.File.Exists(d) Then Dim found = False Dim fi As FileInfo = New FileInfo(d) ' EDIFACT ' If fi.Extension = ".edi" Then Dim alreadyMoved = False '------------------------------------------------------------------------------------------------------------------------------ ' PLOSE '------------------------------------------------------------------------------------------------------------------------------ Select Case i Case 1 '------------------------------------------ '------------------ DETAIL ------------------ '------------------------------------------ If fi.Extension.ToLower = ".csv" Then If Not found And cGetMsgType.isPLOSE_Detail(d) Then If readPLOSE_Detail(d) <> "" Then found = True ' If bezugsNr <> "" Then addDGVEinarbeitung("NCTS: Versandbestätigung", bezugsNr) : found = True End If If found Then cntDatenEingelesen += 1 End If Case 2 '------------------------------------------ '------------------ HEADER ------------------ '------------------------------------------ If fi.Extension.ToLower = ".csv" Then If Not found And cGetMsgType.isPLOSE_Header(d) Then If readPLOSE_Header(d) <> "" Then found = True ' If bezugsNr <> "" Then addDGVEinarbeitung("NCTS: Versandbestätigung", bezugsNr) : found = True End If If found Then cntDatenEingelesen += 1 End If Case 3 '------------------------------------------ '------------------ PLOSE_INVData: neues CSV --> Rechnungen + PDF-Link ------------------ '------------------------------------------ If fi.Extension.ToLower = ".csv" Then If Not found And cGetMsgType.isPLOSE_INVData(d) Then If readPLOSE_INVData(d) <> "" Then found = True ' ' If bezugsNr <> "" Then addDGVEinarbeitung("NCTS: Versandbestätigung", bezugsNr) : found = True End If If found Then cntDatenEingelesen += 1 End If Case 4 '------------------------------------------ '------------------ PDF ------------------ '------------------------------------------ If fi.Extension.ToLower = ".pdf" Then found = False If Not System.IO.Directory.Exists(ZIEL_PFAD & "Invoice_PDF\" & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") Then System.IO.Directory.CreateDirectory(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") 'File in Datenarchiv sichern: Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("MDM", "MDM_DATEN", "PLOSE", Now.Year, Now.ToString("yyyyMMdd"), frmStartOptions.getFileName(d),) DS.uploadDataToDATENSERVER(d) 'DatenArchiv-Id in tblPLOSE_Inv_Data Tabelle eintragen (über PDF-Name) : Dim EintragVorhanden As Integer = CInt(SQL.getValueTxtBySqlVarList("SELECT isnull(count(*),0) FROM tblPLOSE_Inv_Data where [plInv_PdfFileName] = '" & DS.da_name & "'", "FMZOLL")) If EintragVorhanden > 0 Then SQL.doSQL("Update [tblPLOSE_Inv_Data] SET [plInv_daId]='" & DS.da_id & "' where [plInv_PdfFileName] = '" & DS.da_name & "' and [plInv_Einlesedatum] > DATEADD(DAY,-60,getdate()) and [plInv_daId] is null ", "FMZOLL") Else 'beispiel 1 '542073_2504495.01_2025-fln-000004495.pdf -> DATEINAME laut DB Eintrag 'b_542073_2504495.01_2025-fln-000004495.pdf -> DATEINAME im Datenarchiv 'alle vorangehenden Buchstaben und Zeichen abschneiden und mit der ersten Zahl beginnen!! 'beispiel 2 '510101-2503740.01_2025-sfc-000003740.pdf -> DATEINAME laut DB Eintrag 'b_510101_2503740.01_2025-sfc-000003740.pdf -> DATEINAME im Datenarchiv Dim filename = frmStartOptions.getFileName(d) If Regex.IsMatch(filename, "^[A-Za-z]") Then Dim match As Match = Regex.Match(filename, "\d+") If match.Success Then Dim fileNameNew = filename.Substring(match.Index).Trim EintragVorhanden = CInt(SQL.getValueTxtBySqlVarList("SELECT isnull(count(*),0) FROM tblPLOSE_Inv_Data where [plInv_PdfFileName] ='" & fileNameNew & "'", "FMZOLL")) If EintragVorhanden > 0 Then SQL.doSQL("Update [tblPLOSE_Inv_Data] SET [plInv_daId]='" & DS.da_id & "' where [plInv_PdfFileName] = '" & fileNameNew & "' and [plInv_Einlesedatum] > DATEADD(DAY,-60,getdate()) and [plInv_daId] is null ", "FMZOLL") Else If filename.Contains("-") Then EintragVorhanden = CInt(SQL.getValueTxtBySqlVarList("SELECT isnull(count(*),0) FROM tblPLOSE_Inv_Data where replace([plInv_PdfFileName],'-','_') ='" & fileNameNew.ToString.Replace("-", "_") & "'", "FMZOLL")) If EintragVorhanden > 0 Then SQL.doSQL("Update [tblPLOSE_Inv_Data] SET [plInv_daId]='" & DS.da_id & "' where replace([plInv_PdfFileName],'-','_') ='" & fileNameNew.ToString.Replace("-", "_") & "' and [plInv_Einlesedatum] > DATEADD(DAY,-60,getdate()) and [plInv_daId] is null ", "FMZOLL") End If End If End If End If End If End If frmStartOptions.moveFile_DateBack(d, ZIEL_PFAD & "Invoice_PDF\" & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") addDGVEinarbeitung("PDF", DS.da_name) dgvEinarbeitung.Refresh() 'Eintrag End If Case 5 frmStartOptions.moveFile_DateBack(d, ERROR_PFAD) dsNichtErkannt += 1 End Select If True Then If Not alreadyMoved Then If found Then If Not System.IO.Directory.Exists(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") Then System.IO.Directory.CreateDirectory(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") frmStartOptions.moveFile_DateBack(d, ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") End If End If End If Me.Refresh() End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Next Next End Sub Function getString(doc As XmlDocument) As Boolean If doc.HasChildNodes Then ' If doc.GetElementsByTagName("DakosyMessageInternal").Count > 0 Then Dim sw = New StringWriter() Dim xw = New XmlTextWriter(sw) doc.WriteTo(xw) Dim XmlString = sw.ToString() MsgBox(XmlString) End If Return False End Function Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click Me.Close() End Sub Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click Me.Close() End Sub Sub addDGVEinarbeitung(art, BezugsNr) dgvEinarbeitung.Rows.Add(art, BezugsNr) Try dgvEinarbeitung.FirstDisplayedScrollingRowIndex = dgvEinarbeitung.RowCount - 1 Catch ex As Exception End Try End Sub Function readPLOSE_Detail(d As String) As String Try readPLOSE_Detail = "" Dim KdnR = "" Dim plose_RechnungsJahr = "" Dim plose_RechnungsLieferantCode = "" Dim plose_RechnungsNr = "" Dim plose_RechnungsDat = Nothing Dim plose_Lieferant = Nothing Dim fi As FileInfo = New FileInfo(d) If fi.Name.Length > 8 Then 'Dim plose_RechnungsNr = fi.Name.Substring(0, 8) plose_RechnungsJahr = fi.Name.Substring(0, 2) plose_RechnungsLieferantCode = fi.Name.Substring(2, 1) ' plose_RechnungsNr = fi.Name.Substring(3, 5) '--------> auslesen [tblPLOSE_Lieferant] Select Case plose_RechnungsLieferantCode Case "0" : plose_Lieferant = "PLOSE Sistem Service" Case "7" : plose_Lieferant = "Consortio PLOSE" Case "1" : plose_Lieferant = "Plose Union" Case "9" : plose_Lieferant = "PLOSE UNION SOCIETA COOPERATIVA" End Select 'FALSCHE WERTE!!! 'If fi.FullName.Contains("_RGDAT_") Then ' Try ' plose_RechnungsDat = CDate(fi.FullName.Substring(fi.FullName.IndexOf("_RGDAT_") + 7, 10)) ' Catch ex As Exception ' VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "PLOSE RG DATUM, FILE: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) ' End Try 'End If End If Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(d, Encoding.UTF8) MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(";") Dim currentRow As String() Dim cnt = 0 If True Then While Not MyReader.EndOfData Try currentRow = MyReader.ReadFields() If True Then 'fi.Name.Length > 8 Then Select Case currentRow(0) Case "TR1" 'RECHNUGNSDATUM If currentRow.Length > 1 AndAlso currentRow(1).ToString.Length = 8 Then Dim datumParse = DateTime.ParseExact(currentRow(1), "yyyyMMdd", Nothing) plose_RechnungsDat = datumParse 'Rechnungsdatum aus TR1 Datensatz, überschreibt den Wert aus der Dateierstellung End If 'RECHNUGNSNR If currentRow.Length > 2 Then 'AndAlso currentRow(1).ToString.Length = 8 Then plose_RechnungsNr = SQL.isleernothing(currentRow(2)) 'Rechnungsdatum aus TR1 Datensatz, überschreibt den Wert aus der Dateierstellung End If Case "TR5" If currentRow.Length > 24 AndAlso currentRow(12) <> "839160" Then 'KDNR <> VERAG --> Die Kosten bleiben uns Dim PLOSE As New MDM_Worker.cPLOSE PLOSE.plose_Dateiname = fi.Name PLOSE.plose_RechnungsNr = plose_RechnungsNr PLOSE.plose_Lieferant = plose_Lieferant PLOSE.plose_LieferantCode = plose_RechnungsLieferantCode PLOSE.plose_RechnungsJahr = plose_RechnungsJahr If plose_RechnungsDat IsNot Nothing Then PLOSE.plose_RechnungsDatum = plose_RechnungsDat PLOSE.plose_Datensatztyp = SQL.isleernothing(currentRow(0)) PLOSE.plose_KodexMautTankstelle = SQL.isleernothing(currentRow(1)) PLOSE.plose_BeschreibungMautTankstelle = SQL.isleernothing(currentRow(2)) PLOSE.plose_KodexEinfahrt = SQL.isleernothing(currentRow(3)) PLOSE.plose_BeschreibungEinfahrt = SQL.isleernothing(currentRow(4)) PLOSE.plose_KodexAusfahrt = SQL.isleernothing(currentRow(5)) PLOSE.plose_BeschreibungAusfahrt = SQL.isleernothing(currentRow(6)) PLOSE.plose_Kartenkodex = SQL.isleernothing(currentRow(7)) PLOSE.plose_Kontonummer = SQL.isleernothing(currentRow(8)) PLOSE.plose_NummerKarteGeraet = SQL.isleernothing(currentRow(9)) PLOSE.plose_Kennzeichen = SQL.isleernothing(currentRow(10)) PLOSE.plose_InterneNrFahrzeug = SQL.isleernothing(currentRow(11)) PLOSE.plose_POLSEKundennummer = SQL.isleernothing(currentRow(12)) PLOSE.plose_Firmenname = SQL.isleernothing(currentRow(13)) PLOSE.plose_DatumTransaktion = SQL.isleernothingDateFormatstring(currentRow(14)) PLOSE.plose_Produktbeschreibung = SQL.isleernothing(currentRow(15)) PLOSE.plose_Menge = SQL.isNullNothingDbl(currentRow(16)) PLOSE.plose_Preis = SQL.isNullNothingDbl(currentRow(17)) PLOSE.Einheitsrabatt = SQL.isleernothing(currentRow(18)) PLOSE.plose_NettobetragTransaktion = SQL.isNullNothingDbl(currentRow(19)) PLOSE.plose_MWSTBetrag = SQL.isNullNothingDbl(currentRow(20)) PLOSE.plose_BruttobetragTransaktion = SQL.isNullNothingDbl(currentRow(21)) PLOSE.plose_NettobetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(22)) PLOSE.plose_MWSTBetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(23)) PLOSE.plose_BruttobetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(24)) PLOSE.plose_WaehrungLandDiesntleistung = SQL.isleernothing(currentRow(25)) PLOSE.plose_WaehrungAbbuchung = SQL.isleernothing(currentRow(26)) PLOSE.plose_DokumentNrQuittungUhrzeit = SQL.isleernothing(currentRow(27)) PLOSE.plose_ArtTransaktion = SQL.isleernothing(currentRow(28)) PLOSE.plose_Fahrzeugklasse = SQL.isleernothing(currentRow(29)) PLOSE.plose_KlassenidentifikationEURO = SQL.isleernothing(currentRow(30)) PLOSE.plose_ProduktbeschreibungShort = SQL.isleernothing(currentRow(31)) PLOSE.plose_DokumentNrQuittungUhrzeit = SQL.isleernothing(currentRow(32)) PLOSE.plose_Geraetetyp = SQL.isleernothing(currentRow(33)) PLOSE.plose_ProduktCode = SQL.isleernothing(currentRow(34)) PLOSE.plose_ReferenzenBuchungMaut = SQL.isleernothing(currentRow(35)) If currentRow.Length > 36 Then PLOSE.plose_SupplierRechnungsNr = SQL.isleernothing(currentRow(36)) If currentRow.Length > 37 AndAlso currentRow(37).ToString.Length = 8 Then Dim datumParse = DateTime.ParseExact(currentRow(37), "yyyyMMdd", Nothing) PLOSE.plose_SupplierRechnungsDatum = datumParse End If If If(PLOSE.plose_SupplierRechnungsNr, "").contains("-SFC-") Then ' SOFICO PLOSE.plose_LieferantCode = "90" PLOSE.plose_Lieferant = SQL.DLookup("pl_Bezeichnung", "tblPLOSE_Lieferant", " [pl_LieferantCode]='" & PLOSE.plose_LieferantCode & "' ", "FMZOLL", "") End If '''''''''''' If PLOSE.SAVE() Then End If End If End Select cnt += 1 End If 'For Each currentField In currentRow 'Next Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End While 'Label30.Text = (cnt + 1) & " / " & LineCount 'Label31.Visible = True readPLOSE_Detail = "Zeilen: " & cnt Else ' MsgBox("FEHLER beim Löschen der vorhandenen OP-Liste.") End If End Using Try ' System.IO.File.Delete(p) Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try addDGVEinarbeitung("PLOSE: Detail" & KdnR, readPLOSE_Detail) ' End Using 'End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) readPLOSE_Detail = "" End Try End Function Function readPLOSE_Header(d As String) As String Try Return "" ' Keine Übernahme der Daten (RgDatum) --> Falsches Format!!! readPLOSE_Header = "" Dim KdnR = "" Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(d, Encoding.UTF8) MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(";") Dim currentRow As String() Dim cnt = 0 If True Then While Not MyReader.EndOfData Try currentRow = MyReader.ReadFields() Dim fi As FileInfo = New FileInfo(d) If fi.Name.Length > 8 Then Dim plose_RechnungsNr = fi.Name.Substring(0, 8) If IsNumeric(plose_RechnungsNr) AndAlso IsNumeric(currentRow(12)) Then If currentRow.Length > 24 AndAlso currentRow(12) <> "839160" Then 'KDNR <> VERAG --> Die Kosten bleiben uns Dim plose_RechnungsDatum = SQL.isleernothingDateFormatstring(currentRow(14)) If plose_RechnungsDatum IsNot Nothing AndAlso IsDate(plose_RechnungsDatum) Then MDM_Worker.cPLOSE.UPDATE_RGDatum(plose_RechnungsDatum, plose_RechnungsNr, currentRow(12)) cnt += 1 End If End If End If End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End While 'Label30.Text = (cnt + 1) & " / " & LineCount 'Label31.Visible = True readPLOSE_Header = "Zeilen: " & cnt Else MsgBox("FEHLER beim Löschen der vorhandenen OP-Liste.") End If End Using Try ' System.IO.File.Delete(p) Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try addDGVEinarbeitung("PLOSE: Header" & KdnR, readPLOSE_Header) ' End Using 'End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) MsgBox(ex.StackTrace & ex.Message) readPLOSE_Header = "" End Try End Function Function readPLOSE_INVData(d As String) As String Try Dim cnt = 0 readPLOSE_INVData = "" Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(d, Encoding.UTF8) MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(";") Dim currentRow As String() Dim fi As FileInfo = New FileInfo(d) While Not MyReader.EndOfData Try currentRow = MyReader.ReadFields() If currentRow(0) <> "PloseCode" Then ' Header If currentRow.Length >= 15 Then Dim PLOSE_INV As New MDM_Worker.cPLOSE_Inv_Data PLOSE_INV.plInv_SupplierRechnungsDatum = SQL.isleernothingDateFormatstring(currentRow(7)) PLOSE_INV.plInv_SupplierRechnungsNr = SQL.isleernothing(currentRow(8)) PLOSE_INV.plInv_SupplierCountry = SQL.isleernothing(currentRow(6)) PLOSE_INV.plInv_Lieferant = SQL.isleernothing(currentRow(4)) PLOSE_INV.plInv_LieferantCode = SQL.isleernothing(currentRow(3)) PLOSE_INV.plInv_LieferantUID = SQL.isleernothing(currentRow(5)) PLOSE_INV.plInv_PdfFileName = SQL.isleernothing(currentRow(14)) If If(PLOSE_INV.plInv_PdfFileName, "") <> "" Then If Not PLOSE_INV.plInv_PdfFileName.ToString.ToLower.EndsWith(".pdf") Then PLOSE_INV.plInv_PdfFileName += ".pdf" ' Falls Endung nciht .pdf --> anfügen End If If currentRow.Length >= 16 Then PLOSE_INV.plInv_Currency = SQL.isleernothing(currentRow(15)) End If PLOSE_INV.plInv_Einlesedatum = Now.ToShortDateString PLOSE_INV.plInv_Datensatztyp = "PDF" PLOSE_INV.plInv_PLOSEKundennummer = SQL.isleernothing(currentRow(0)) PLOSE_INV.plInv_Firmenname = SQL.isleernothing(currentRow(1)) ' PLOSE_INV.plInv_DatumTransaktion = SQL.isleernothing(currentRow(0)) ' PLOSE_INV.plInv_Produktbeschreibung = SQL.isleernothing(currentRow(0)) PLOSE_INV.plInv_Services = SQL.isleernothing(currentRow(13)) PLOSE_INV.plInv_Nettobetrag = CDbl(CDbl(SQL.isNullReturnValue(currentRow(9), 0).replace(".", ",")) + CDbl(SQL.isNullReturnValue(currentRow(11), 0).replace(".", ","))) PLOSE_INV.plInv_MWSTBetrag = CDbl(SQL.isNullReturnValue(currentRow(10), 0).replace(".", ",")) PLOSE_INV.plInv_Bruttobetrag = CDbl(SQL.isNullReturnValue(currentRow(12), 0).replace(".", ",")) ' [plInv_daId] 'If If(PLOSE_INV.plInv_PdfFileName, "") <> "" Then 'And PLOSE_INV.plInv_daId Is Nothing Then ' PLOSE_INV.plInv_daId = SQL.getValueTxtBySql("SELECT TOP (1) [da_id] FROM [tblDatenarchiv] where da_kategorie = 'MDM' AND da_ordner='MDM_DATEN' and da_name='" & PLOSE_INV.plInv_PdfFileName & "' order by da_id desc", "FMZOLL",,, Nothing) 'End If PLOSE_INV.plInv_Dateiname = fi.Name '''''''''''' If PLOSE_INV.SAVEUNQIUE() Then ' UPDATE tblPLOSE_Details: SQL.doSQL("UPDATE [tblPLOSE_Details] SET [plose_plInvId] ='" & PLOSE_INV.plInv_Id & "' where plose_SupplierRechnungsNr='" & PLOSE_INV.plInv_SupplierRechnungsNr & "' AND plose_SupplierRechnungsDatum='" & PLOSE_INV.plInv_SupplierRechnungsDatum & "'", "FMZOLL") End If End If End If cnt += 1 Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End While readPLOSE_INVData = "Zeilen: " & cnt End Using Try ' System.IO.File.Delete(p) Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try addDGVEinarbeitung("PLOSE: INV_DATA (" & cnt & ")", readPLOSE_INVData) ' End Using 'End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) MsgBox(ex.StackTrace & ex.Message) readPLOSE_INVData = "" End Try End Function Private Sub dgvEinarbeitung_SelectionChanged(sender As Object, e As EventArgs) Handles dgvEinarbeitung.SelectionChanged dgvEinarbeitung.ClearSelection() End Sub Private Sub frmTCNachrichtenVerarbeitung_Shown(sender As Object, e As EventArgs) Handles Me.Shown If allowClose Then Me.Refresh() Button2.PerformClick() Button1.PerformClick() System.Threading.Thread.Sleep(2000) Me.Close() End If End Sub Private Sub pnl_Paint(sender As Object, e As PaintEventArgs) Handles pnl.Paint End Sub End Class