Imports System.Windows.Documents Imports VERAG_PROG_ALLGEMEIN Public Class usrCntlDatenarchiv Dim DatenarchivBind As cEasyBinding Public table Public BIND_DB Private EditRow As Integer = -1 Sub New(table, BIND_DB) Me.table = table Me.BIND_DB = BIND_DB InitializeComponent() End Sub Private Sub usrCntlDatenarchiv_Load(sender As Object, e As EventArgs) Handles Me.Load loaddgv() 'cboPartnersystem.Items.Clear() Dim distinctDT As DataTable = DatenarchivBind.bindingdataTable.DefaultView.ToTable(True, "Param_system") cboPartnersystem.Items.Add(New MyListItem("", "")) For Each d As DataRow In distinctDT.Rows If Not cboPartnersystem.Items.Contains(d.Item(0)) Then cboPartnersystem.Items.Add(d.Item(0)) Next End Sub Private Sub btnSuche_Click(sender As Object, e As EventArgs) Handles btnSuche.Click Me.Cursor = Cursors.WaitCursor loaddgv() Me.Cursor = Cursors.Default End Sub Function getAPIList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Param_system", cboPartnersystem._value)) Return list End Function Function getDatenarchivwhere() As String Dim sqlstr = " and Param_testsystem = " & IIf(cbxTestsystem.Checked, "1 ", "0 ") If cboPartnersystem._value <> "" Then sqlstr &= " And [Param_system] = '" & cboPartnersystem._value & "'" Return sqlstr End Function Private Sub DataGridView_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView.CellDoubleClick Me.Cursor = Cursors.WaitCursor Dim tmprowindex As Integer = e.RowIndex If DataGridView.Columns(e.ColumnIndex).Name = "open" Then If DataGridView.CurrentRow.Cells("Param_value").Value IsNot DBNull.Value AndAlso DataGridView.CurrentRow.Cells("Param_value").Value.ToString.StartsWith("\\") Then Process.Start(DataGridView.CurrentRow.Cells("Param_value").Value) End If Else End If Me.Cursor = Cursors.Default End Sub Private Sub cboPartnersystem_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboPartnersystem.SelectedIndexChanged btnSuche_Click(sender, e) End Sub Public Sub loaddgv() VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = cbxTestsystem.Checked Try DatenarchivBind = New cEasyBinding(BIND_DB) Dim sqlstr As String = "" Dim TopMax = If(IsNumeric(txtMaxSrch.Text), " TOP " & txtMaxSrch.Text, "") DatenarchivBind.initBinding("SELECT " & TopMax & " [Param_name],[Param_value], [Param_system] FROM " & table & " WHERE 1 = 1 " & getDatenarchivwhere(), table) DataGridView.DataSource = DatenarchivBind.bindingdataTable With DataGridView If .RowCount = 0 Then Me.Cursor = Cursors.Default : Exit Sub .RowHeadersVisible = False .ReadOnly = False '.SelectionMode = DataGridViewSelectionMode.FullRowSelect .MultiSelect = False For Each cc As DataGridViewColumn In .Columns If cc.Name.ToLower.Contains("param_") Then cc.HeaderText = cc.Name.Replace("Param_", "") If cc.Name.ToLower.Contains("value") Then cc.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill Else cc.Width = 200 End If End If Next lblErgebnis.Text = "Ergebnisse: " & .RowCount If .Columns("open") Is Nothing Then Dim c As New DataGridViewImageColumn c.Name = "open" : c.HeaderText = "open" c.Image = New Bitmap(1, 1) c.Width = 40 : c.DefaultCellStyle.Padding = New Padding(2) : c.DefaultCellStyle.BackColor = Color.White c.DefaultCellStyle.Tag = "open" .Columns.Add(c) End If For Each r As DataGridViewRow In .Rows If r.Cells("Param_value").Value IsNot DBNull.Value AndAlso r.Cells("Param_value").Value <> "" Then Dim path As New System.IO.DirectoryInfo(r.Cells("Param_value").Value) If path.Exists Then DirectCast(r.Cells("open"), DataGridViewImageCell).Value = My.Resources.search End If End If Next End With Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End Sub Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnSave.Click If DataGridView.Columns.Count = 0 Or DataGridView.SelectedRows.Count = 0 Then 'alles gelöscht oder markierte Zeile gelöscht DatenarchivBind.updateBinding() Exit Sub End If If DataGridView.CurrentRow.Cells("Param_name").ToString <> "" AndAlso DataGridView.CurrentRow.Cells("Param_value").ToString <> "" AndAlso DataGridView.CurrentRow.Cells("Param_system").ToString <> "" AndAlso EditRow >= 0 Then DatenarchivBind.updateBinding() End If End Sub Private Sub DataGridView_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView.EditingControlShowing EditRow = DataGridView.CurrentRow.Index End Sub Private Sub DataGridView_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView.SelectionChanged If EditRow >= 0 Then Dim new_row As Integer = EditRow EditRow = -1 DataGridView.CurrentCell = DataGridView.Rows(new_row).Cells( DataGridView.CurrentCell.ColumnIndex) End If End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim jahr As Integer = 2026 'Dim zupruefendeDokumente As String = " select top(100000) * from [tblDatenarchiv_Collection] where Year(coll_date) = " & jahr & " and coll_archiv = 0 and isnull(coll_pfad,'') <> '' order by coll_date desc " Dim zupruefendeDokumente As String = " select top(100000) * from [tblDatenarchiv_Collection] where cast(coll_date as Date) = '29.10.2026' and coll_archiv = 0 and isnull(coll_pfad,'') <> '' order by coll_date desc " VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = True Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Dim Datenarchiv_DOKS As DataTable = SQL.loadDgvBySql(zupruefendeDokumente, "FMZOLL") Dim dtFehlendeDOKS = Datenarchiv_DOKS.Clone() Dim listOfSources As New List(Of String) Dim listOfCOLL_DAID As New List(Of Integer) If Datenarchiv_DOKS.Rows.Count > 0 Then For Each r As DataRow In Datenarchiv_DOKS.Rows If r.Item("coll_pfad") <> "" Then If Not System.IO.File.Exists(r.Item("coll_pfad")) Then dtFehlendeDOKS.ImportRow(r) lblfehlendeDokumente.Text = "fehlende DOK.: " & dtFehlendeDOKS.Rows.Count addToLlist(listOfSources, listOfCOLL_DAID, r) 'Me.Refresh() If dtFehlendeDOKS.Rows.Count >= 1000 Then Exit For End If End If lblWorkingArea.Text = "geprüft DOK.: : " & Datenarchiv_DOKS.Rows.IndexOf(r) & "/" & Datenarchiv_DOKS.Rows.Count Me.Refresh() Next If dtFehlendeDOKS.Rows.Count > 0 Then MsgBox("Es existieren " & dtFehlendeDOKS.Rows.Count & " Datenarchiv-Datensätze, die kein zugeordnetes Dokument besitzen!") VERAG_PROG_ALLGEMEIN.cProgramFunctions.genExcelFromDT_NEW(dtFehlendeDOKS,,,,, True,,, True) Dim deleted As Boolean = False If vbYes = MsgBox("Sollen diese Datenarchiveinträge gelöscht werden?" & vbNewLine & "Bitte vorher Excelliste prüfen!", vbYesNo) Then Dim Where As String = "" For Each DAID In listOfCOLL_DAID Where &= DAID & "," Next Where = Where.Substring(0, Where.Length - 1) deleted = SQL.doSQL("DELETE FROM [tblDatenarchiv_Collection] WHERE [coll_daId] in (" & Where & ")", "FMZOLL") deleted = SQL.doSQL("DELETE FROM [tblDatenarchiv] WHERE [da_id] in (" & Where & ")", "FMZOLL") If deleted Then For Each source In listOfSources 'Hier muss die DA-ID in der verknüpften Tabelle auf NULL gesetzt werden! Select Case source Case "AVISO_ANHAENGE" : SQL.doSQL("UPDATE tblAvisoAnhaenge set tblAvisoAnhaenge.anh_docId = NULL where tblAvisoAnhaenge.anh_docId in (" & Where & ")", "AVISO") ' -> Eintrag auch gleich löschen- > NEIN nur DA_ID laut Andreas, wegen Nachvollziehbarkeit: 05.11.2026 'Case "UID_PRUEFUNG"; EORI_PRUEFUNG -> Über AVISO-Anhänge Case "RECHNUNGEN" : SQL.doSQL("UPDATE Rechnungsausgang set Rechnungsausgang.dsId = NULL where Rechnungsausgang.dsId in (" & Where & ")", "FMZOLL") Case "ZUGFERD" : SQL.doSQL("UPDATE Rechnungsausgang set Rechnungsausgang.zugferdcheck_daid = NULL where Rechnungsausgang.zugferdcheck_daid in (" & Where & ")", "FMZOLL") Case "CREDITSAFE" : SQL.doSQL("UPDATE tblBonitaetsauskunft set tblBonitaetsauskunft.ba_datenarchivId = NULL where tblBonitaetsauskunft.ba_datenarchivId in (" & Where & ")", "FMZOLL") '3x weil 3 versch. Felder! Case "VOLLMACHTEN" SQL.doSQL("UPDATE tblKundenVollmachten set tblKundenVollmachten.kdvm_datenarchivId = NULL where tblKundenVollmachten.kdvm_datenarchivId in (" & Where & ")", "FMZOLL") SQL.doSQL("UPDATE tblKundenVollmachten set tblKundenVollmachten.kdvm_emailId = NULL where tblKundenVollmachten.kdvm_emailId in (" & Where & ")", "FMZOLL") SQL.doSQL("UPDATE tblKundenVollmachten set tblKundenVollmachten.kdvm_datenarchivId_2 = NULL where tblKundenVollmachten.kdvm_datenarchivId_2 in (" & Where & ")", "FMZOLL") 'MDM Case "USTVA" : SQL.doSQL("UPDATE tblUStVPositionen set tblUStVPositionen.UStVPo_daId = NULL where UStVPo_daId_loeschbar = 1 AND tblUStVPositionen.UStVPo_daId in (" & Where & ")", "FMZOLL") Case "USTVERS" : SQL.doSQL("UPDATE tblUStVErstattung set tblUStVErstattung.UStVEr_daId = NULL where tblUStVErstattung.UStVEr_daId in (" & Where & ")", "FMZOLL") End Select Next End If If deleted Then MsgBox("Daten wurden erfolgreich bereinigt!") Else MsgBox("Fehler beim Bereinigen der Daten!") End If End If Else MsgBox("Es wurden keine fehlenden Dokumente gefunden!") End If End If End Sub Private Sub addToLlist(listOfSources As List(Of String), listOfCOLL_DAID As List(Of Integer), r As DataRow) Dim da_id As Integer If Not IsDBNull(r.Item("coll_daId")) AndAlso Integer.TryParse(Convert.ToString(r.Item("coll_daId")).Trim(), da_id) Then If Not listOfCOLL_DAID.Contains(da_id) Then listOfCOLL_DAID.Add(da_id) End If End If If r.Item("coll_pfad").ToString.Contains("AVISO_ANHAENGE") Then If Not listOfSources.Contains("AVISO_ANHAENGE") Then listOfSources.Add("AVISO_ANHAENGE") ElseIf r.Item("coll_pfad").ToString.Contains("RECHNUNGEN") Then If Not listOfSources.Contains("RECHNUNGEN") Then listOfSources.Add("RECHNUNGEN") ElseIf r.Item("coll_pfad").ToString.Contains("CHAT_ANHAENGE") Then If Not listOfSources.Contains("CHAT_ANHAENGE") Then listOfSources.Add("CHAT_ANHAENGE") ElseIf r.Item("coll_pfad").ToString.Contains("VOLLMACHTEN") Then If Not listOfSources.Contains("VOLLMACHTEN") Then listOfSources.Add("VOLLMACHTEN") ElseIf r.Item("coll_pfad").ToString.Contains("CREDITSAFE") Then If Not listOfSources.Contains("CREDITSAFE") Then listOfSources.Add("CREDITSAFE") ElseIf r.Item("coll_pfad").ToString.Contains("ZUGFERD") Then If Not listOfSources.Contains("ZUGFERD") Then listOfSources.Add("ZUGFERD") ElseIf r.Item("coll_pfad").ToString.Contains("KD_VERTRÄGE") Then If Not listOfSources.Contains("KD_VERTRÄGE") Then listOfSources.Add("KD_VERTRÄGE") ElseIf r.Item("coll_pfad").ToString.Contains("ZOLLDATEN") AndAlso r.Item("coll_pfad").ToString.Contains("DAKOSY") Then If Not listOfSources.Contains("ZOLLDATEN") Then listOfSources.Add("ZOLLDATEN_DAKOSY") ElseIf r.Item("coll_pfad").ToString.Contains("UID_PRUEFUNG") Then If Not listOfSources.Contains("UID_PRUEFUNG") Then listOfSources.Add("UID_PRUEFUNG") ElseIf r.Item("coll_pfad").ToString.Contains("EORI_PRUEFUNG") Then If Not listOfSources.Contains("EORI_PRUEFUNG") Then listOfSources.Add("EORI_PRUEFUNG") End If 'MDM-Spezifisch If r.Item("coll_pfad").ToString.Contains("USTVERS_") AndAlso r.Item("coll_pfad").ToString.Contains("MDM") Then If Not listOfSources.Contains("USTVERS_") Then listOfSources.Add("USTVERS") End If If r.Item("coll_pfad").ToString.Contains("USTVA_") AndAlso r.Item("coll_pfad").ToString.Contains("MDM") Then If Not listOfSources.Contains("USTVA_") Then listOfSources.Add("USTVA") End If End Sub End Class