From 99bb7d39de730c1b331b1ac41a9ba33ca3784181 Mon Sep 17 00:00:00 2001 From: Andreas Luxbauer Date: Wed, 26 Nov 2025 09:03:21 +0100 Subject: [PATCH 1/2] procedures --- UID/ADMIN.vbproj | 1 + UID/My Project/AssemblyInfo.vb | 4 +- UID/cTRCustStat.vb | 301 +++++++++++++++++++++++++++++++ UID/usrctlProcedures.Designer.vb | 90 +++++++-- UID/usrctlProcedures.resx | 6 - UID/usrctlProcedures.vb | 113 ++++++++++++ 6 files changed, 489 insertions(+), 26 deletions(-) create mode 100644 UID/cTRCustStat.vb diff --git a/UID/ADMIN.vbproj b/UID/ADMIN.vbproj index 006a7f8..aaba6b3 100644 --- a/UID/ADMIN.vbproj +++ b/UID/ADMIN.vbproj @@ -320,6 +320,7 @@ + True diff --git a/UID/My Project/AssemblyInfo.vb b/UID/My Project/AssemblyInfo.vb index 70e96f6..f84ad35 100644 --- a/UID/My Project/AssemblyInfo.vb +++ b/UID/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/UID/cTRCustStat.vb b/UID/cTRCustStat.vb new file mode 100644 index 0000000..9a9603c --- /dev/null +++ b/UID/cTRCustStat.vb @@ -0,0 +1,301 @@ + +Imports System.Data + Imports System.Data.SqlClient + Imports System.Globalization + Imports ClosedXML.Excel + +Public Class cTRCustStat + + Private ReadOnly _connectionString As String + Private ReadOnly _de As CultureInfo = CultureInfo.GetCultureInfo("de-DE") + + Public Sub New(connectionString As String) + _connectionString = connectionString + End Sub + + ' Mehrere Dateien importieren + Public Sub ImportFiles(filePaths As IEnumerable(Of String)) + For Each p In filePaths + ImportSingleFile(p) + Next + End Sub + + Private Sub ImportSingleFile(filePath As String) + Using wb As New XLWorkbook(filePath) + Dim ws = wb.Worksheets.First() + + ' Header (Zeile 1) normalisieren + Dim lastCol = ws.Row(1).LastCellUsed().Address.ColumnNumber + Dim headers As New List(Of String) + For c = 1 To lastCol + headers.Add(NormalizeHeader(ws.Cell(1, c).GetString())) + Next + + Dim layout = DetectLayout(headers) + + Select Case layout + Case LayoutType.Exports + Dim dt = CreateExportsDataTable() ' Spaltennamen = SQL-Spalten EN + FillDataTable(ws, headers, dt, isExport:=True, sourceFile:=filePath) + BulkInsert(dt, "dbo.Customs_Exports") + + Case LayoutType.Imports + Dim dt = CreateImportsDataTable() + FillDataTable(ws, headers, dt, isExport:=False, sourceFile:=filePath) + BulkInsert(dt, "dbo.Customs_Imports") + + Case Else + Throw New InvalidOperationException($"Unknown layout in file: {filePath}") + End Select + End Using + End Sub + + Private Enum LayoutType + Unknown = 0 + Exports = 1 + [Imports] = 2 + End Enum + + Private Function DetectLayout(headers As List(Of String)) As LayoutType + ' Export: hat "tcgb statü açıklaması" ODER "gümrük istatistik tarihi" + If headers.Any(Function(h) h.Contains("tcgb statu aciklamasi") OrElse h.Contains("gumruk istatistik tarihi")) Then + Return LayoutType.Exports + End If + ' Import: hat "gümrük idaresi kodu" und "tcgb kapanış tarihi" + If headers.Any(Function(h) h.Contains("gumruk idaresi kodu")) AndAlso + headers.Any(Function(h) h.Contains("tcgb kapanis tarihi")) Then + Return LayoutType.Imports + End If + Return LayoutType.Unknown + End Function + + Private Function NormalizeHeader(raw As String) As String + If raw Is Nothing Then Return "" + Dim s = raw.Trim().ToLowerInvariant() + s = s.Replace("ı", "i").Replace("ş", "s").Replace("ğ", "g").Replace("ü", "u").Replace("ö", "o").Replace("ç", "c") + s = System.Text.RegularExpressions.Regex.Replace(s, "\s+", " ") + Return s + End Function + + ' --- DataTables: Spaltennamen = EN-Tabellenschema --- + Private Function CreateExportsDataTable() As DataTable + Dim dt As New DataTable("Customs_Exports") + dt.Columns.Add("CustomsOfficeName", GetType(String)) + dt.Columns.Add("RegistrationNo", GetType(String)) + dt.Columns.Add("RegistrationDate", GetType(Date)) + dt.Columns.Add("StatisticsDate", GetType(Date)) + dt.Columns.Add("ConsignorConsigneeTaxNo", GetType(String)) + dt.Columns.Add("ConsignorConsigneeName", GetType(String)) + dt.Columns.Add("ConsigneeName", GetType(String)) + dt.Columns.Add("DestinationCountryCode", GetType(String)) + dt.Columns.Add("DestinationCountryName", GetType(String)) + dt.Columns.Add("OriginCountryCode", GetType(String)) + dt.Columns.Add("OriginCountryName", GetType(String)) + dt.Columns.Add("IncotermCode", GetType(String)) + dt.Columns.Add("LineNo", GetType(Integer)) + dt.Columns.Add("RegimeCode", GetType(String)) + dt.Columns.Add("RegimeDescription", GetType(String)) + dt.Columns.Add("HSCode", GetType(String)) + dt.Columns.Add("HSDescription", GetType(String)) + dt.Columns.Add("CommercialDescription", GetType(String)) + dt.Columns.Add("DeclarationStatus", GetType(String)) + dt.Columns.Add("InvoiceAmount", GetType(Decimal)) + dt.Columns.Add("InvoiceCurrencyCode", GetType(String)) + dt.Columns.Add("Quantity", GetType(Decimal)) + dt.Columns.Add("QuantityUnit", GetType(String)) + dt.Columns.Add("NetWeightKg", GetType(Decimal)) + dt.Columns.Add("CalculatedLineValueUSD", GetType(Decimal)) + dt.Columns.Add("StatisticalValueUSD", GetType(Decimal)) + dt.Columns.Add("SourceFile", GetType(String)) + dt.Columns.Add("ImportedAtUtc", GetType(DateTime)) + Return dt + End Function + + Private Function CreateImportsDataTable() As DataTable + Dim dt As New DataTable("Customs_Imports") + dt.Columns.Add("CustomsOfficeCode", GetType(String)) + dt.Columns.Add("CustomsOfficeName", GetType(String)) + dt.Columns.Add("RegistrationNo", GetType(String)) + dt.Columns.Add("RegistrationDate", GetType(Date)) + dt.Columns.Add("ClosingDate", GetType(Date)) + dt.Columns.Add("ConsignorConsigneeTaxNo", GetType(String)) + dt.Columns.Add("ConsignorConsigneeName", GetType(String)) + dt.Columns.Add("SenderName", GetType(String)) + dt.Columns.Add("DispatchCountryCode", GetType(String)) + dt.Columns.Add("DispatchCountryName", GetType(String)) + dt.Columns.Add("OriginCountryCode", GetType(String)) + dt.Columns.Add("OriginCountryName", GetType(String)) + dt.Columns.Add("IncotermCode", GetType(String)) + dt.Columns.Add("LineNo", GetType(Integer)) + dt.Columns.Add("RegimeCode", GetType(String)) + dt.Columns.Add("RegimeDescription", GetType(String)) + dt.Columns.Add("HSCode", GetType(String)) + dt.Columns.Add("HSDescription", GetType(String)) + dt.Columns.Add("CommercialDescription", GetType(String)) + dt.Columns.Add("InvoiceAmount", GetType(Decimal)) + dt.Columns.Add("InvoiceCurrencyCode", GetType(String)) + dt.Columns.Add("Quantity", GetType(Decimal)) + dt.Columns.Add("QuantityUnit", GetType(String)) + dt.Columns.Add("NetWeightKg", GetType(Decimal)) + dt.Columns.Add("CalculatedLineValueUSD", GetType(Decimal)) + dt.Columns.Add("StatisticalValueUSD", GetType(Decimal)) + dt.Columns.Add("SourceFile", GetType(String)) + dt.Columns.Add("ImportedAtUtc", GetType(DateTime)) + Return dt + End Function + + ' --- Excel -> DataTable --- + Private Sub FillDataTable(ws As IXLWorksheet, + headers As List(Of String), + dt As DataTable, + isExport As Boolean, + sourceFile As String) + + Dim rowFirst = 2 + Dim rowLast = ws.LastRowUsed().RowNumber() + Dim colLast = ws.Row(1).LastCellUsed().Address.ColumnNumber + + Dim map As Dictionary(Of String, String) = + If(isExport, GetExportHeaderMap(), GetImportHeaderMap()) + + For r = rowFirst To rowLast + Dim dr = dt.NewRow() + dr("SourceFile") = sourceFile + dr("ImportedAtUtc") = DateTime.UtcNow + + For c = 1 To colLast + Dim rawHeader = NormalizeHeader(ws.Cell(1, c).GetString()) + If Not map.ContainsKey(rawHeader) Then Continue For + + Dim targetCol = map(rawHeader) + Dim txt = ws.Cell(r, c).GetFormattedString().Trim() + + If String.IsNullOrWhiteSpace(txt) Then + ' skip + ElseIf dt.Columns(targetCol).DataType Is GetType(Date) Then + dr(targetCol) = ParseDate(txt) + ElseIf dt.Columns(targetCol).DataType Is GetType(Decimal) Then + dr(targetCol) = ParseDecimal(txt) + ElseIf dt.Columns(targetCol).DataType Is GetType(Integer) Then + Dim i As Integer + If Integer.TryParse(txt, NumberStyles.Any, _de, i) OrElse + Integer.TryParse(txt, NumberStyles.Any, CultureInfo.InvariantCulture, i) Then + dr(targetCol) = i + End If + Else + dr(targetCol) = txt + End If + Next + + ' Mindestprüfung: RegistrationNo muss da sein + If dt.Columns.Contains("RegistrationNo") AndAlso + Not IsDBNull(dr("RegistrationNo")) AndAlso + Not String.IsNullOrWhiteSpace(CStr(dr("RegistrationNo"))) Then + dt.Rows.Add(dr) + End If + Next + End Sub + + Private Function ParseDecimal(s As String) As Decimal + Dim d As Decimal + If Decimal.TryParse(s, NumberStyles.Any, _de, d) Then Return d ' 3.499,09 + If Decimal.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, d) Then Return d ' 3499.09 + Return 0D + End Function + + Private Function ParseDate(s As String) As Date + Dim d As Date + Dim formats = { + "dd.MMM.yyyy", "d.MMM.yyyy", + "dd.MM.yyyy", "d.MM.yyyy", + "dd.MMM.yy", "dd.MM.yy", + "yyyy-MM-dd", "dd-MMM-yyyy" + } + If Date.TryParseExact(s, formats, _de, DateTimeStyles.None, d) Then Return d + If Date.TryParse(s, _de, DateTimeStyles.None, d) Then Return d + If Date.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.None, d) Then Return d + Return Date.MinValue + End Function + + Private Sub BulkInsert(dt As DataTable, targetTable As String) + Using cn As New SqlConnection(_connectionString) + cn.Open() + Using bulk As New SqlBulkCopy(cn) + bulk.DestinationTableName = targetTable + bulk.BulkCopyTimeout = 0 + bulk.BatchSize = 10000 + For Each col As DataColumn In dt.Columns + bulk.ColumnMappings.Add(col.ColumnName, col.ColumnName) + Next + bulk.WriteToServer(dt) + End Using + End Using + End Sub + + ' --- Header-Mappings: Türkischer Exceltitel -> EN-Spalte --- + Private Function GetExportHeaderMap() As Dictionary(Of String, String) + Return New Dictionary(Of String, String) From { + {"tcgb", "CustomsOfficeName"}, + {"gümrük idaresi adı", "CustomsOfficeName"}, ' manche Dateien haben beide + {"tcgb tescil no", "RegistrationNo"}, + {"tcgb tescil tarihi", "RegistrationDate"}, + {"gümrük istatistik tarihi (bordro tarihi)", "StatisticsDate"}, + {"gonderici / alici vergi no", "ConsignorConsigneeTaxNo"}, + {"gonderici/alici adi", "ConsignorConsigneeName"}, + {"alici adi", "ConsigneeName"}, + {"gidecegi ulke (17) kodu", "DestinationCountryCode"}, + {"gidecegi ulke (17) adi", "DestinationCountryName"}, + {"mense ulke kodu", "OriginCountryCode"}, + {"mense ulke adi", "OriginCountryName"}, + {"teslim sekli kodu", "IncotermCode"}, + {"kalem sira no", "LineNo"}, + {"kalem rejim kodu", "RegimeCode"}, + {"kalem rejim aciklamasi", "RegimeDescription"}, + {"gtip kodu", "HSCode"}, + {"gtip aciklamasi", "HSDescription"}, + {"31. ticari tanimi", "CommercialDescription"}, + {"tcgb statu aciklamasi", "DeclarationStatus"}, + {"fatura tutari", "InvoiceAmount"}, + {"fatura tutari doviz turu kodu", "InvoiceCurrencyCode"}, + {"olcu (esya) miktari", "Quantity"}, + {"olcu birimi aciklamasi", "QuantityUnit"}, + {"net agirlik (kg)", "NetWeightKg"}, + {"hesaplanmis kalem kiymeti usd degeri", "CalculatedLineValueUSD"}, + {"istatistiki kiymet usd degeri", "StatisticalValueUSD"} + } + End Function + + Private Function GetImportHeaderMap() As Dictionary(Of String, String) + Return New Dictionary(Of String, String) From { + {"gümrük idaresi kodu", "CustomsOfficeCode"}, + {"gumruk idaresi kodu", "CustomsOfficeCode"}, + {"gümrük idaresi adı", "CustomsOfficeName"}, + {"gumruk idaresi adi", "CustomsOfficeName"}, + {"tcgb tescil no", "RegistrationNo"}, + {"tcgb tescil tarihi", "RegistrationDate"}, + {"tcgb kapanis tarihi", "ClosingDate"}, + {"gonderici / alici vergi no", "ConsignorConsigneeTaxNo"}, + {"gonderici/alici adi", "ConsignorConsigneeName"}, + {"gonderen adi", "SenderName"}, + {"cikis ulkesi kodu", "DispatchCountryCode"}, + {"cikis ulkesi adi", "DispatchCountryName"}, + {"mense ulke kodu", "OriginCountryCode"}, + {"mense ulke adi", "OriginCountryName"}, + {"teslim sekli kodu", "IncotermCode"}, + {"kalem sira no", "LineNo"}, + {"kalem rejim kodu", "RegimeCode"}, + {"kalem rejim aciklamasi", "RegimeDescription"}, + {"gtip kodu", "HSCode"}, + {"gtip aciklamasi", "HSDescription"}, + {"31. ticari tanimi", "CommercialDescription"}, + {"fatura tutari", "InvoiceAmount"}, + {"fatura doviz kodu", "InvoiceCurrencyCode"}, + {"olcu (esya) miktari", "Quantity"}, + {"olcu birimi aciklamasi", "QuantityUnit"}, + {"net agirlik (kg)", "NetWeightKg"}, + {"hesaplanmis kalem kiymeti usd degeri", "CalculatedLineValueUSD"}, + {"istatistiki kiymet usd degeri", "StatisticalValueUSD"} + } + End Function + +End Class \ No newline at end of file diff --git a/UID/usrctlProcedures.Designer.vb b/UID/usrctlProcedures.Designer.vb index 7d5a956..d8458b9 100644 --- a/UID/usrctlProcedures.Designer.vb +++ b/UID/usrctlProcedures.Designer.vb @@ -22,7 +22,7 @@ Partial Class usrctlProcedures 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. Private Sub InitializeComponent() - Me.TabControl1 = New System.Windows.Forms.TabControl() + Me.tbTRStat = New System.Windows.Forms.TabControl() Me.TabPage3 = New System.Windows.Forms.TabPage() Me.Label16 = New System.Windows.Forms.Label() Me.txtHMRCApplName = New System.Windows.Forms.TextBox() @@ -103,6 +103,8 @@ Partial Class usrctlProcedures Me.Label20 = New System.Windows.Forms.Label() Me.dtp_von = New System.Windows.Forms.DateTimePicker() Me.Button52 = New System.Windows.Forms.Button() + Me.TabPage8 = New System.Windows.Forms.TabPage() + Me.btnImportTrStat = New System.Windows.Forms.Button() Me.Button18 = New System.Windows.Forms.Button() Me.TextBox1 = New System.Windows.Forms.TextBox() Me.lblAnzahl = New System.Windows.Forms.Label() @@ -156,7 +158,9 @@ Partial Class usrctlProcedures Me.Button99 = New System.Windows.Forms.Button() Me.DataGridViewTextBoxColumn1 = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.DataGridViewTextBoxColumn2 = New System.Windows.Forms.DataGridViewTextBoxColumn() - Me.TabControl1.SuspendLayout() + Me.TabPage9 = New System.Windows.Forms.TabPage() + Me.Button53 = New System.Windows.Forms.Button() + Me.tbTRStat.SuspendLayout() Me.TabPage3.SuspendLayout() Me.TabPage1.SuspendLayout() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() @@ -167,22 +171,26 @@ Partial Class usrctlProcedures Me.TabPage5.SuspendLayout() Me.TabPage6.SuspendLayout() Me.TabPage7.SuspendLayout() + Me.TabPage8.SuspendLayout() + Me.TabPage9.SuspendLayout() Me.SuspendLayout() ' - 'TabControl1 + 'tbTRStat ' - Me.TabControl1.Controls.Add(Me.TabPage3) - Me.TabControl1.Controls.Add(Me.TabPage1) - Me.TabControl1.Controls.Add(Me.TabPage2) - Me.TabControl1.Controls.Add(Me.TabPage4) - Me.TabControl1.Controls.Add(Me.TabPage5) - Me.TabControl1.Controls.Add(Me.TabPage6) - Me.TabControl1.Controls.Add(Me.TabPage7) - Me.TabControl1.Location = New System.Drawing.Point(7, 407) - Me.TabControl1.Name = "TabControl1" - Me.TabControl1.SelectedIndex = 0 - Me.TabControl1.Size = New System.Drawing.Size(609, 314) - Me.TabControl1.TabIndex = 2 + Me.tbTRStat.Controls.Add(Me.TabPage3) + Me.tbTRStat.Controls.Add(Me.TabPage1) + Me.tbTRStat.Controls.Add(Me.TabPage2) + Me.tbTRStat.Controls.Add(Me.TabPage4) + Me.tbTRStat.Controls.Add(Me.TabPage5) + Me.tbTRStat.Controls.Add(Me.TabPage6) + Me.tbTRStat.Controls.Add(Me.TabPage7) + Me.tbTRStat.Controls.Add(Me.TabPage8) + Me.tbTRStat.Controls.Add(Me.TabPage9) + Me.tbTRStat.Location = New System.Drawing.Point(7, 407) + Me.tbTRStat.Name = "tbTRStat" + Me.tbTRStat.SelectedIndex = 0 + Me.tbTRStat.Size = New System.Drawing.Size(609, 314) + Me.tbTRStat.TabIndex = 2 ' 'TabPage3 ' @@ -959,6 +967,26 @@ Partial Class usrctlProcedures Me.Button52.Text = "DAKOSY Daten prüfen" Me.Button52.UseVisualStyleBackColor = True ' + 'TabPage8 + ' + Me.TabPage8.Controls.Add(Me.btnImportTrStat) + Me.TabPage8.Location = New System.Drawing.Point(4, 22) + Me.TabPage8.Name = "TabPage8" + Me.TabPage8.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage8.Size = New System.Drawing.Size(601, 288) + Me.TabPage8.TabIndex = 7 + Me.TabPage8.Text = "TabPage8" + Me.TabPage8.UseVisualStyleBackColor = True + ' + 'btnImportTrStat + ' + Me.btnImportTrStat.Location = New System.Drawing.Point(7, 43) + Me.btnImportTrStat.Name = "btnImportTrStat" + Me.btnImportTrStat.Size = New System.Drawing.Size(131, 48) + Me.btnImportTrStat.TabIndex = 0 + Me.btnImportTrStat.Text = "Import TrStat" + Me.btnImportTrStat.UseVisualStyleBackColor = True + ' 'Button18 ' Me.Button18.Location = New System.Drawing.Point(59, 183) @@ -1438,6 +1466,26 @@ Partial Class usrctlProcedures Me.DataGridViewTextBoxColumn2.HeaderText = "anz" Me.DataGridViewTextBoxColumn2.Name = "DataGridViewTextBoxColumn2" ' + 'TabPage9 + ' + Me.TabPage9.Controls.Add(Me.Button53) + Me.TabPage9.Location = New System.Drawing.Point(4, 22) + Me.TabPage9.Name = "TabPage9" + Me.TabPage9.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage9.Size = New System.Drawing.Size(601, 288) + Me.TabPage9.TabIndex = 8 + Me.TabPage9.Text = "T1 Serice" + Me.TabPage9.UseVisualStyleBackColor = True + ' + 'Button53 + ' + Me.Button53.Location = New System.Drawing.Point(228, 120) + Me.Button53.Name = "Button53" + Me.Button53.Size = New System.Drawing.Size(145, 49) + Me.Button53.TabIndex = 25 + Me.Button53.Text = "T1 Servcie" + Me.Button53.UseVisualStyleBackColor = True + ' 'usrctlProcedures ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -1492,11 +1540,11 @@ Partial Class usrctlProcedures Me.Controls.Add(Me.lblAnzahl) Me.Controls.Add(Me.TextBox1) Me.Controls.Add(Me.Button18) - Me.Controls.Add(Me.TabControl1) + Me.Controls.Add(Me.tbTRStat) Me.Controls.Add(Me.Button26) Me.Name = "usrctlProcedures" Me.Size = New System.Drawing.Size(931, 724) - Me.TabControl1.ResumeLayout(False) + Me.tbTRStat.ResumeLayout(False) Me.TabPage3.ResumeLayout(False) Me.TabPage3.PerformLayout() Me.TabPage1.ResumeLayout(False) @@ -1514,11 +1562,13 @@ Partial Class usrctlProcedures Me.TabPage6.PerformLayout() Me.TabPage7.ResumeLayout(False) Me.TabPage7.PerformLayout() + Me.TabPage8.ResumeLayout(False) + Me.TabPage9.ResumeLayout(False) Me.ResumeLayout(False) Me.PerformLayout() End Sub - Friend WithEvents TabControl1 As System.Windows.Forms.TabControl + Friend WithEvents tbTRStat As System.Windows.Forms.TabControl Friend WithEvents TabPage1 As System.Windows.Forms.TabPage Friend WithEvents TextBox2 As System.Windows.Forms.TextBox Friend WithEvents TabPage2 As System.Windows.Forms.TabPage @@ -1652,4 +1702,8 @@ Partial Class usrctlProcedures Friend WithEvents Button52 As Button Friend WithEvents Label22 As Label Friend WithEvents dtpbis As DateTimePicker + Friend WithEvents TabPage8 As TabPage + Friend WithEvents btnImportTrStat As Button + Friend WithEvents TabPage9 As TabPage + Friend WithEvents Button53 As Button End Class diff --git a/UID/usrctlProcedures.resx b/UID/usrctlProcedures.resx index c9977e7..508fc32 100644 --- a/UID/usrctlProcedures.resx +++ b/UID/usrctlProcedures.resx @@ -123,10 +123,4 @@ True - - True - - - True - \ No newline at end of file diff --git a/UID/usrctlProcedures.vb b/UID/usrctlProcedures.vb index 3b1edd0..012f464 100644 --- a/UID/usrctlProcedures.vb +++ b/UID/usrctlProcedures.vb @@ -4304,6 +4304,119 @@ OPTION (MAXRECURSION 1000);", "AVISO") ' End Sub + Private Sub btnImportTrStat_Click(sender As Object, e As EventArgs) Handles btnImportTrStat.Click + ' SQL Connection String (ggf. anpassen) + Dim connectionString As String = "Data Source=DEVELOPER\DEVSQL;Initial Catalog=TRCustStat;Integrated Security=false;User ID=sa;Password=BmWr501956;" + + ' FileDialog vorbereiten + Using ofd As New OpenFileDialog() + ofd.Title = "Select one or more Customs Excel files" + ofd.Filter = "Excel Files (*.xlsx;*.xls;*.xlsm)|*.xlsx;*.xls;*.xlsm|All Files (*.*)|*.*" + ofd.Multiselect = True + ofd.InitialDirectory = "D:\CustomsUploads" ' optionaler Startordner + + If ofd.ShowDialog() = DialogResult.OK Then + Dim selectedFiles = ofd.FileNames + + Try + Dim importer As New cTRCustStat(connectionString) + importer.ImportFiles(selectedFiles) + + MessageBox.Show($"✅ Import completed successfully." & vbCrLf & + $"Files imported: {selectedFiles.Length}", + "Import Finished", MessageBoxButtons.OK, MessageBoxIcon.Information) + Catch ex As Exception + MessageBox.Show("❌ Error during import:" & vbCrLf & ex.Message, + "Import Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + End Try + End If + End Using + End Sub + + Private Sub Button53_Click(sender As Object, e As EventArgs) Handles Button53.Click + TESTs("D:\Andreas\TMP\TESTT1.pdf") + End Sub + + Private Async Sub TESTs(pdfPath As String) + + Try + Dim READ As New VERAG_PROG_ALLGEMEIN.cATEZ_Read_T1 + ' dieselbe Instanz verwenden + Dim result As T1ProcessResult = Await READ.ProcessPdfAsync(pdfPath) + + Dim sb As New System.Text.StringBuilder() + + sb.AppendLine("=== Grunddaten ===") + sb.AppendLine("Status: " & If(result.Status, "")) + sb.AppendLine("Document Count: " & result.DocumentCount) + sb.AppendLine("Document Type: " & If(result.DocumentType, "")) + sb.AppendLine("Processing Time (s): " & result.ProcessingTimeSeconds) + + sb.AppendLine() + sb.AppendLine("=== Kopf-T1-Daten ===") + sb.AppendLine("Date: " & If(result.DateField, "")) + sb.AppendLine("Dispatch Country: " & If(result.DispatchCountry, "")) + sb.AppendLine("Dispatch Place: " & If(result.DispatchPlace, "")) + sb.AppendLine("Loading Place: " & If(result.LoadingPlace, "")) + sb.AppendLine("Destination Country: " & If(result.DestinationCountry, "")) + sb.AppendLine("Destination Customs Authority: " & If(result.DestinationCustomsAuthority, "")) + sb.AppendLine("Mode of Transport: " & If(result.ModeOfTransport, "")) + sb.AppendLine("Type of Transport: " & If(result.TypeOfTransport, "")) + sb.AppendLine("Transit ID: " & If(result.TransitId, "")) + sb.AppendLine("Truck ID Border: " & If(result.TruckIdBorder, "")) + sb.AppendLine("Truck ID Transit: " & If(result.TruckIdTransit, "")) + + sb.AppendLine() + sb.AppendLine("=== Items ===") + If result.Items IsNot Nothing AndAlso result.Items.Count > 0 Then + For i As Integer = 0 To result.Items.Count - 1 + Dim it = result.Items(i) + sb.AppendLine($"Item #{i + 1}") + sb.AppendLine($" Export ID: {it.ExportId}") + sb.AppendLine($" Invoice No: {it.InvoiceNo}") + sb.AppendLine($" Item Index: {it.ItemIndex}") + sb.AppendLine($" Sender: {it.Sender}") + sb.AppendLine($" Total Package: {it.TotalPackage}") + sb.AppendLine($" Total Weight: {it.TotalWeight}") + sb.AppendLine() + Next + Else + sb.AppendLine("Keine Items vorhanden.") + End If + + sb.AppendLine("=== Additional Data (ungeparst) ===") + If result.AdditionalData IsNot Nothing AndAlso result.AdditionalData.Count > 0 Then + For Each kvp In result.AdditionalData + sb.AppendLine($" {kvp.Key}: {kvp.Value.ToString()}") + Next + Else + sb.AppendLine("Keine zusätzlichen Felder.") + End If + + MessageBox.Show(sb.ToString(), "T1 Dokument verarbeitet", MessageBoxButtons.OK, MessageBoxIcon.Information) + + Catch apiEx As T1ApiException + Dim sbErr As New System.Text.StringBuilder() + sbErr.AppendLine("T1 API Fehler") + sbErr.AppendLine("HTTP-Status: " & CInt(apiEx.StatusCode)) + If Not String.IsNullOrEmpty(apiEx.ErrorKey) Then + sbErr.AppendLine("Error Key: " & apiEx.ErrorKey) + End If + sbErr.AppendLine("Nachricht: " & apiEx.Message) + If Not String.IsNullOrEmpty(apiEx.RawResponse) Then + sbErr.AppendLine() + sbErr.AppendLine("Raw Response:") + sbErr.AppendLine(apiEx.RawResponse) + End If + + MessageBox.Show(sbErr.ToString(), "T1 API Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) + + Catch ex As Exception + MessageBox.Show(ex.ToString(), "Allgemeiner Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) + End Try + + End Sub + 'Private Sub Button26_Click(sender As Object, e As EventArgs) From 8e9e964c0223a2fa88ab03d567a00f47be5a754d Mon Sep 17 00:00:00 2001 From: Andreas Luxbauer Date: Wed, 26 Nov 2025 09:06:37 +0100 Subject: [PATCH 2/2] merge beheben --- UID/usrctlProcedures.Designer.vb | 20 ++++++++++---------- UID/usrctlProcedures.vb | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/UID/usrctlProcedures.Designer.vb b/UID/usrctlProcedures.Designer.vb index 6c2b762..573265b 100644 --- a/UID/usrctlProcedures.Designer.vb +++ b/UID/usrctlProcedures.Designer.vb @@ -93,7 +93,7 @@ Partial Class usrctlProcedures Me.Button50 = New System.Windows.Forms.Button() Me.Button49 = New System.Windows.Forms.Button() Me.TabPage7 = New System.Windows.Forms.TabPage() - Me.Button53 = New System.Windows.Forms.Button() + Me.btnT1Data = New System.Windows.Forms.Button() Me.Label22 = New System.Windows.Forms.Label() Me.dtpbis = New System.Windows.Forms.DateTimePicker() Me.lblDakosyImport = New System.Windows.Forms.Label() @@ -164,7 +164,7 @@ Partial Class usrctlProcedures Me.Column2 = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.Button54 = New System.Windows.Forms.Button() Me.Label23 = New System.Windows.Forms.Label() - Me.TabControl1.SuspendLayout() + 'Me.TabControl1.SuspendLayout() Me.TabPage3.SuspendLayout() Me.TabPage1.SuspendLayout() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() @@ -1502,7 +1502,7 @@ Partial Class usrctlProcedures ' 'TabPage9 ' - Me.TabPage9.Controls.Add(Me.Button53) + Me.TabPage9.Controls.Add(Me.btnT1Data) Me.TabPage9.Location = New System.Drawing.Point(4, 22) Me.TabPage9.Name = "TabPage9" Me.TabPage9.Padding = New System.Windows.Forms.Padding(3) @@ -1513,12 +1513,12 @@ Partial Class usrctlProcedures ' 'Button53 ' - Me.Button53.Location = New System.Drawing.Point(228, 120) - Me.Button53.Name = "Button53" - Me.Button53.Size = New System.Drawing.Size(145, 49) - Me.Button53.TabIndex = 25 - Me.Button53.Text = "T1 Servcie" - Me.Button53.UseVisualStyleBackColor = True + Me.btnT1Data.Location = New System.Drawing.Point(228, 120) + Me.btnT1Data.Name = "btnT1Data" + Me.btnT1Data.Size = New System.Drawing.Size(145, 49) + Me.btnT1Data.TabIndex = 25 + Me.btnT1Data.Text = "T1 Servcie" + Me.btnT1Data.UseVisualStyleBackColor = True ' 'usrctlProcedures ' @@ -1736,7 +1736,7 @@ Partial Class usrctlProcedures Friend WithEvents Button52 As Button Friend WithEvents Label22 As Label Friend WithEvents dtpbis As DateTimePicker - Friend WithEvents Button53 As Button + Friend WithEvents btnT1Data As Button Friend WithEvents Label23 As Label Friend WithEvents Button54 As Button Friend WithEvents TabPage8 As TabPage diff --git a/UID/usrctlProcedures.vb b/UID/usrctlProcedures.vb index bb107a2..ca8c8cc 100644 --- a/UID/usrctlProcedures.vb +++ b/UID/usrctlProcedures.vb @@ -4444,7 +4444,7 @@ OPTION (MAXRECURSION 1000);", "AVISO") ' End Using End Sub - Private Sub Button53_Click(sender As Object, e As EventArgs) Handles Button53.Click + Private Sub btnT1Data_Click(sender As Object, e As EventArgs) Handles btnT1Data.Click TESTs("D:\Andreas\TMP\TESTT1.pdf") End Sub