EXG-GEstellung, Tetrapak

This commit is contained in:
2026-10-23 23:24:14 +02:00
parent ca3c6a16bf
commit b67c2dfd1b
8 changed files with 454 additions and 172 deletions

View File

@@ -22,8 +22,9 @@ Partial Class usrCntlATLAS_EXGestellung
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.SplitContainer = New System.Windows.Forms.SplitContainer()
Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel()
Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components)
Me.btnAllgemein = New System.Windows.Forms.Button()
Me.pnl = New System.Windows.Forms.Panel()
Me.cboDakosyAction = New VERAG_PROG_ALLGEMEIN.MyComboBox()
@@ -35,8 +36,10 @@ Partial Class usrCntlATLAS_EXGestellung
Me.Label5 = New System.Windows.Forms.Label()
Me.Button2 = New System.Windows.Forms.Button()
Me.cbxNCTS = New System.Windows.Forms.CheckBox()
Me.MyPanel1 = New VERAG_PROG_ALLGEMEIN.MyPanel()
Me.MyDatagridview1 = New VERAG_PROG_ALLGEMEIN.MyDatagridview()
Me.MyPanel1 = New VERAG_PROG_ALLGEMEIN.MyPanel(Me.components)
Me.cbxBestLand = New System.Windows.Forms.CheckBox()
Me.cbxVersLand = New System.Windows.Forms.CheckBox()
Me.MyDatagridview1 = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components)
Me.Label7 = New System.Windows.Forms.Label()
Me.Label4 = New System.Windows.Forms.Label()
Me.TextBox1 = New System.Windows.Forms.TextBox()
@@ -46,7 +49,7 @@ Partial Class usrCntlATLAS_EXGestellung
Me.Label2 = New System.Windows.Forms.Label()
Me.cboStammreferenz = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.Label6 = New System.Windows.Forms.Label()
Me.MyPanel2 = New VERAG_PROG_ALLGEMEIN.MyPanel()
Me.MyPanel2 = New VERAG_PROG_ALLGEMEIN.MyPanel(Me.components)
Me.cboStammreferenz2 = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.cbxAutoTranslate = New System.Windows.Forms.CheckBox()
Me.Label8 = New System.Windows.Forms.Label()
@@ -55,7 +58,7 @@ Partial Class usrCntlATLAS_EXGestellung
Me.Button3 = New System.Windows.Forms.Button()
Me.Label1 = New System.Windows.Forms.Label()
Me.lblBezugsnummer = New System.Windows.Forms.Label()
Me.cntxtBezugsnr = New System.Windows.Forms.ContextMenuStrip()
Me.cntxtBezugsnr = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.NeueBezugsnummerVergebenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.txtDyMandant = New System.Windows.Forms.Label()
@@ -281,15 +284,43 @@ Partial Class usrCntlATLAS_EXGestellung
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.MyPanel1.BackColor = System.Drawing.Color.WhiteSmoke
Me.MyPanel1.Controls.Add(Me.cbxBestLand)
Me.MyPanel1.Controls.Add(Me.cbxVersLand)
Me.MyPanel1.Controls.Add(Me.MyDatagridview1)
Me.MyPanel1.Controls.Add(Me.Label7)
Me.MyPanel1.Enabled = False
Me.MyPanel1.Location = New System.Drawing.Point(454, 88)
Me.MyPanel1.Location = New System.Drawing.Point(454, 90)
Me.MyPanel1.Name = "MyPanel1"
Me.MyPanel1.Size = New System.Drawing.Size(560, 525)
Me.MyPanel1.Size = New System.Drawing.Size(560, 529)
Me.MyPanel1.TabIndex = 20
Me.MyPanel1.Visible = False
'
'cbxBestLand
'
Me.cbxBestLand.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.cbxBestLand.AutoSize = True
Me.cbxBestLand.Checked = True
Me.cbxBestLand.CheckState = System.Windows.Forms.CheckState.Checked
Me.cbxBestLand.Location = New System.Drawing.Point(337, 28)
Me.cbxBestLand.Name = "cbxBestLand"
Me.cbxBestLand.Size = New System.Drawing.Size(223, 17)
Me.cbxBestLand.TabIndex = 28
Me.cbxBestLand.Text = "Bestimmungsland aus Empfänger-Adresse"
Me.cbxBestLand.UseVisualStyleBackColor = True
'
'cbxVersLand
'
Me.cbxVersLand.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.cbxVersLand.AutoSize = True
Me.cbxVersLand.Checked = True
Me.cbxVersLand.CheckState = System.Windows.Forms.CheckState.Checked
Me.cbxVersLand.Location = New System.Drawing.Point(337, 6)
Me.cbxVersLand.Name = "cbxVersLand"
Me.cbxVersLand.Size = New System.Drawing.Size(220, 17)
Me.cbxVersLand.TabIndex = 27
Me.cbxVersLand.Text = "Versendungsland aus Versender-Adresse"
Me.cbxVersLand.UseVisualStyleBackColor = True
'
'MyDatagridview1
'
Me.MyDatagridview1.AKTUALISIERUNGS_INTERVALL = -1
@@ -299,7 +330,7 @@ Partial Class usrCntlATLAS_EXGestellung
Me.MyDatagridview1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.MyDatagridview1.Location = New System.Drawing.Point(20, 51)
Me.MyDatagridview1.Name = "MyDatagridview1"
Me.MyDatagridview1.Size = New System.Drawing.Size(537, 457)
Me.MyDatagridview1.Size = New System.Drawing.Size(537, 461)
Me.MyDatagridview1.TabIndex = 26
'
'Label7
@@ -643,4 +674,6 @@ Partial Class usrCntlATLAS_EXGestellung
Friend WithEvents Label9 As Label
Friend WithEvents Button5 As Button
Friend WithEvents Label10 As Label
Friend WithEvents cbxBestLand As CheckBox
Friend WithEvents cbxVersLand As CheckBox
End Class

View File

@@ -1,6 +1,7 @@
Imports System.Data.SqlClient
Imports com.sun.tools.doclets.internal.toolkit.util
Imports DAKOSY_Worker
Imports DocumentFormat.OpenXml.Office2010.Word
Imports TAlex.WPF.Helpers
Public Class usrCntlATLAS_EXGestellung
@@ -244,7 +245,7 @@ Public Class usrCntlATLAS_EXGestellung
Me.FindForm.Close()
End If
Me.Cursor = Cursors.Default
Me.Cursor = Cursors.Default
End Sub
Private isFormattingMRN As Boolean = False
@@ -675,7 +676,7 @@ Public Class usrCntlATLAS_EXGestellung
End If
End If
DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, BezugsNr, cbxAutoTranslate.Checked, cbxForceTranslate.Checked)
DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, BezugsNr, cbxAutoTranslate.Checked, cbxForceTranslate.Checked, cbxVersLand.Checked, cbxBestLand.Checked)
'Console.WriteLine("NCTS: EXG übernommen: " & EXG.exg_ObjectName)

View File

@@ -1570,163 +1570,343 @@ Public Class cATLAS_EZA_IMPORT
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
Try
Me.Cursor = Cursors.WaitCursor
importExcel_TetraPak()
importExcel_TetraPak(cbxGezeKN8.Checked, cbxGezeTranslate.Checked, cbxGezeTNR8to11.Checked)
Finally
Me.Cursor = Cursors.Default
End Try
End Sub
Private Function importExcel_TetraPak() As Boolean
' In cATLAS_EZA_IMPORT einfügen. Vorhandene Tetra*-Hilfsfunktionen durch diese Version ersetzen.
' Erforderliche Imports: System.Data.SqlClient, System.Globalization, System.Linq,
' System.Text.RegularExpressions, Microsoft.Office.Interop (Excel-Alias wie im Projekt vorhanden).
' Der bestehende Button8_Click kann unverändert importExcel_TetraPak() aufrufen.
Private Function importExcel_TetraPak(OP_addKN8 As Boolean, OP_translate As Boolean, OP_TNR8to11 As Boolean) As Boolean
Dim f As New frmImportFromAVISOAnhaenge(AVISO, SENDUNG)
f.ShowDialog(Me)
If f.DialogResult <> DialogResult.OK OrElse f.LIST_FILES Is Nothing OrElse f.LIST_FILES.Count = 0 Then Return False
If f.LIST_FILES.Count <> 1 Then
MsgBox("Bitte genau eine Excel-Datei auswählen.")
Return False
End If
If f.DialogResult <> DialogResult.OK OrElse f.LIST_FILES Is Nothing OrElse f.LIST_FILES.Count <> 1 Then Return False
Dim filePath As String = f.LIST_FILES(0)
If Not (filePath.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase) OrElse filePath.EndsWith(".xls", StringComparison.OrdinalIgnoreCase)) Then Return False
Dim xlApp As Excel.Application = Nothing
Dim wb As Excel.Workbook = Nothing
Dim ws As Excel.Worksheet = Nothing
Dim used As Excel.Range = Nothing
Dim imported As New List(Of DAKOSY_Worker.cDakosy_EZA_Warenposition)
Dim head As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase)
Dim kopf As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase)
Dim warnings As New List(Of String)
Try
xlApp = New Excel.Application With {.DisplayAlerts = False, .Visible = False}
wb = xlApp.Workbooks.Open(filePath, ReadOnly:=True)
ws = CType(wb.Worksheets(1), Excel.Worksheet)
Dim lastCol As Integer = CInt(ws.Cells(1, ws.Columns.Count).End(Excel.XlDirection.xlToLeft).Column)
Dim lastRow As Integer = CInt(ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1)
For c As Integer = 1 To lastCol
Dim key As String = TetraCell(ws.Cells(1, c).Value2)
If key <> "" AndAlso Not head.ContainsKey(key) Then head.Add(key, c)
Next
used = ws.UsedRange
Dim lastRow As Integer = used.Row + used.Rows.Count - 1
Dim lastCol As Integer = used.Column + used.Columns.Count - 1
If lastRow < 2 Then Return False
' Einmaliges Lesen des Datenblocks statt tausender COM-Zugriffe.
Dim values As Object(,) = CType(ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Value2, Object(,))
Dim head As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase)
For c As Integer = 1 To lastCol
Dim h As String = TetraCell(values(1, c))
If h <> "" AndAlso Not head.ContainsKey(h) Then head.Add(h, c)
Next
' Neues Layout zuerst; alte Feldnamen nur dort, wo sie dieselbe Bedeutung haben.
Dim kopf As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase)
Dim kopfFields As String() = {"Country of Destination", "Country of Dispatch", "Shipment Gross Weight (kg)", "Importer EORI Number", "Invoice Reference Number", "MIC Invoice Number", "Invoice Value", "Currency", "Term of Delivery", "Term of Delivery Place", "Seller Name 1", "Seller Name 2", "Seller Street", "Seller City", "Seller Country", "Supplier Name 1", "Supplier Name 2", "Supplier Street", "Supplier City", "Supplier Country", "Freight Costs", "Currency Freight Costs", "Insurance Costs", "Currency Insurance Costs", "Inland Freight Costs", "Currency Inland Freight", "Other Expenses Costs", "Currency Other Expenses", "Package Information", "Invoice Type", "Office of Entry", "Mode of Transport at the Border", "Identity of the means of transport at the border", "Nationality of the means of transport at the border", "Inland Mode of Transport", "Identity of the inland means of transport"}
For r As Integer = 2 To lastRow
Dim line As String = TetraGet(ws, head, r, "Shipment Line")
Dim tariff As String = TetraGet(ws, head, r, "Tariff Number").Replace(" ", "")
Dim article As String = TetraGet(ws, head, r, "Part Number")
Dim description As String = TetraGet(ws, head, r, "Part Description")
If line = "" AndAlso tariff = "" AndAlso article = "" AndAlso description = "" AndAlso
TetraGet(ws, head, r, "Country of Origin") = "" AndAlso
TetraGet(ws, head, r, "Net Weight (kg)") = "" AndAlso
TetraGet(ws, head, r, "Gross Weight (kg)") = "" AndAlso
TetraGet(ws, head, r, "Line Value") = "" AndAlso
TetraGet(ws, head, r, "Number of Packages") = "" AndAlso
TetraGet(ws, head, r, "Package Type") = "" AndAlso
TetraGet(ws, head, r, "Import Customs Procedure") = "" Then Continue For
For Each k As String In kopfFields
Dim v As String = TetraGet(values, head, r, k)
If v <> "" AndAlso (Not kopf.ContainsKey(k) OrElse kopf(k) = "") Then kopf(k) = v
Next
Next
Dim currency As String = TetraKopf(kopf, "Currency").ToUpperInvariant()
Dim invoiceNo As String = TetraKopf(kopf, "Invoice Reference Number")
If invoiceNo = "" Then invoiceNo = TetraGet(values, head, 2, "Invoice Number")
Dim invoiceType As String = TetraKopf(kopf, "Invoice Type").ToUpperInvariant()
If invoiceType = "" Then invoiceType = "N380"
Dim invoiceValue As Decimal
Dim hasInvoiceValue As Boolean = TetraTryDecimal(TetraKopf(kopf, "Invoice Value"), invoiceValue)
Dim knownOrigins As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
For r As Integer = 2 To lastRow
Dim o As String = TetraGet(values, head, r, "Country of Origin").ToUpperInvariant()
If o <> "" Then knownOrigins.Add(o)
Next
Dim commonOrigin As String = If(knownOrigins.Count = 1, knownOrigins.FirstOrDefault(), "")
For r As Integer = 2 To lastRow
Dim line As String = TetraGet(values, head, r, "Shipment Line")
Dim article As String = TetraGet(values, head, r, "Part Number")
Dim description As String = TetraGet(values, head, r, "Part Description")
Dim tariff As String = TetraGet(values, head, r, "Tariff Number").Replace(" ", "")
Dim origin As String = TetraGet(values, head, r, "Country of Origin").Trim().ToUpperInvariant()
If origin = "" AndAlso commonOrigin <> "" Then origin = commonOrigin
If origin = "RS" Then origin = "XS"
Dim netText As String = TetraGet(values, head, r, "Net Weight (kg)")
Dim grossText As String = TetraGet(values, head, r, "Gross Weight (kg)")
Dim valueText As String = TetraGet(values, head, r, "Line Value")
Dim procedure As String = TetraGet(values, head, r, "Import Customs Procedure").Replace(" ", "")
If line = "" AndAlso article = "" AndAlso description = "" AndAlso tariff = "" AndAlso origin = "" AndAlso netText = "" AndAlso grossText = "" AndAlso valueText = "" AndAlso procedure = "" Then Continue For
Dim pos As New DAKOSY_Worker.cDakosy_EZA_Warenposition
If line <> "" Then pos.ezaWP_PositionsNummer = line
pos.ezaWP_VerfahrensCodeVorangegangenesVerfahren = "00"
If line <> "" Then pos.ezaWP_PositionsNummer = line Else pos.ezaWP_PositionsNummer = (imported.Count + 1).ToString(CultureInfo.InvariantCulture)
If article <> "" Then pos.ezaWP_Artikelnummer = article
If description <> "" Then pos.ezaWP_Warenbezeichnung = description
If tariff <> "" Then pos.ezaWP_WarennummerEZT = tariff
Dim origin As String = TetraGet(ws, head, r, "Country of Origin").ToUpperInvariant()
' GEZE-Logik: Übersetzung -> KN8-Text -> Erweiterung auf 11 Stellen.
If OP_translate AndAlso Not String.IsNullOrWhiteSpace(pos.ezaWP_Warenbezeichnung) Then
cDeeplAPI.deepl_Translate(pos.ezaWP_Warenbezeichnung, pos.ezaWP_Warenbezeichnung, "DE")
End If
If OP_addKN8 AndAlso If(pos.ezaWP_WarennummerEZT, "").Length >= 8 Then
Dim kn8Text As String = cTariffKN8_Interface.getKN8FromTNR(pos.ezaWP_WarennummerEZT.Substring(0, 8))
If Not String.IsNullOrWhiteSpace(kn8Text) Then pos.ezaWP_Warenbezeichnung = kn8Text & ",hier: " & If(pos.ezaWP_Warenbezeichnung, "")
End If
If If(pos.ezaWP_Warenbezeichnung, "").Length > 240 Then pos.ezaWP_Warenbezeichnung = pos.ezaWP_Warenbezeichnung.Substring(0, 240)
If OP_TNR8to11 AndAlso If(pos.ezaWP_WarennummerEZT, "").Length >= 8 AndAlso pos.ezaWP_WarennummerEZT.Length < 11 Then
Dim fullTariff As String = VERAG_PROG_ALLGEMEIN.cATEZ_Tariff.GetFullTariff_Only1Result(pos.ezaWP_WarennummerEZT, "TR", cboTnrDrc_Geze._value, cboTnrTrg_Geze._value)
If Not String.IsNullOrWhiteSpace(fullTariff) Then pos.ezaWP_WarennummerEZT = fullTariff
End If
If origin <> "" Then pos.ezaWP_UrsprungslandCode = origin
Dim currency As String = TetraGet(ws, head, r, "Currency").ToUpperInvariant()
If currency <> "" Then pos.ezaWP_ArtikelpreisWaehrung = currency
Dim number As Decimal
If TetraTryDecimal(TetraGet(ws, head, r, "Net Weight (kg)"), number) Then pos.ezaWP_Eigenmasse = number.ToString("0.###", CultureInfo.CurrentCulture)
If TetraTryDecimal(TetraGet(ws, head, r, "Gross Weight (kg)"), number) Then pos.ezaWP_Rohmasse = CDbl(number)
If TetraTryDecimal(TetraGet(ws, head, r, "Line Value"), number) Then pos.ezaWP_Artikelpreis = number.ToString("0.00", CultureInfo.CurrentCulture)
If TetraTryDecimal(TetraGet(ws, head, r, "Number of Packages"), number) Then pos.ezaWP_PackstueckAnzahl = number.ToString("0.###", CultureInfo.InvariantCulture)
Dim packageType As String = TetraGet(ws, head, r, "Package Type")
If packageType <> "" Then pos.ezaWP_PackstueckArt = packageType
Dim procedure As String = TetraGet(ws, head, r, "Import Customs Procedure")
Dim n As Decimal
If TetraTryDecimal(netText, n) Then pos.ezaWP_Eigenmasse = n.ToString("0.###", CultureInfo.CurrentCulture)
If TetraTryDecimal(grossText, n) Then pos.ezaWP_Rohmasse = CDbl(n)
If TetraTryDecimal(valueText, n) Then pos.ezaWP_Artikelpreis = n.ToString("0.00", CultureInfo.CurrentCulture)
If procedure.Length >= 2 Then pos.ezaWP_AnmeldeVErfahren = procedure.Substring(0, 2)
If procedure.Length >= 4 Then pos.ezaWP_VerfahrensCodeVorangegangenesVerfahren = procedure.Substring(2, 2)
Dim preference As String = TetraGet(ws, head, r, "Preference Code")
If preference <> "" Then pos.ezaWP_BeguenstigungBenatragtCode = preference
Dim invoice As String = TetraGet(ws, head, r, "Invoice Number")
If invoice <> "" Then
Dim pref As String = TetraGet(values, head, r, "Preference Code")
If pref <> "" Then pos.ezaWP_BeguenstigungBenatragtCode = pref
' Alte Datei: explizite Packstückfelder; neue Datei: Gesamt-Packstückinfo in AG (unten verteilt).
Dim pkgCount As Decimal
If TetraTryDecimal(TetraGet(values, head, r, "Number of Packages"), pkgCount) Then pos.ezaWP_PackstueckAnzahl = pkgCount.ToString("0", CultureInfo.InvariantCulture)
Dim pkgType As String = TetraGet(values, head, r, "Package Type")
If pkgType <> "" Then pos.ezaWP_PackstueckArt = pkgType
If invoiceNo <> "" Then
pos.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With {
.ezaWpUl_Art = "N380", .ezaWpUl_Bereich = "4", .ezaWpUl_VorlageKz = "J", .ezaWpUl_Nummer = invoice, .ezaWpUl_DatumAusstellung = Nothing
})
.ezaWpUl_Art = invoiceType, .ezaWpUl_Bereich = "4", .ezaWpUl_VorlageKz = "J", .ezaWpUl_Nummer = invoiceNo, .ezaWpUl_DatumAusstellung = Nothing
})
End If
Dim ycodes As String = TetraGet(ws, head, r, "Y-Document Type")
Dim ycodes As String = TetraGet(values, head, r, "Y-Document Codes", "Y-Document Type")
For Each code As String In ycodes.Split(New Char() {","c, ";"c}, StringSplitOptions.RemoveEmptyEntries)
Dim docCode As String = code.Trim().ToUpperInvariant()
If docCode <> "" Then
pos.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With {
.ezaWpUl_Art = docCode, .ezaWpUl_Bereich = "5", .ezaWpUl_VorlageKz = "J", .ezaWpUl_Nummer = "", .ezaWpUl_DatumAusstellung = Nothing
})
.ezaWpUl_Art = docCode, .ezaWpUl_Bereich = "5", .ezaWpUl_VorlageKz = "J", .ezaWpUl_Nummer = "", .ezaWpUl_DatumAusstellung = Nothing
})
End If
Next
imported.Add(pos)
For Each key As String In {"Currency", "Term of Delivery", "Term of Delivery Place", "Shipment Gross Weight (kg)", "Identity of the means of transport at the border", "Declarant EORI Number", "Seller Name 1", "Seller Name 2", "Seller Street", "Seller City", "Seller Country", "Invoice Number", "Importer EORI Number", "Country of Dispatch", "Country of Destination"}
Dim v As String = TetraGet(ws, head, r, key)
If v <> "" AndAlso (Not kopf.ContainsKey(key) OrElse kopf(key) = "") Then kopf(key) = v
Next
Next
If imported.Count = 0 Then
MsgBox("Keine Warenpositionen gefunden.")
Return False
End If
' Packstücke: z.B. "4 Pallets 21 Reels 0 Cartons" -> 4 Paletten.
' Nur wenn keine expliziten positionsbezogenen Packstücke im alten Layout existieren.
Dim pkgInfo As String = TetraKopf(kopf, "Package Information")
Dim pallets As Integer = TetraPackageCount(pkgInfo, "pallets?", "paletten?")
Dim reels As Integer = TetraPackageCount(pkgInfo, "reels?", "rollen?")
Dim cartons As Integer = TetraPackageCount(pkgInfo, "cartons?", "kartons?")
Dim totalPackages As Integer = 0
Dim packageCode As String = ""
If pallets > 0 Then
totalPackages = pallets : packageCode = "PX" ' UN/ECE 21: pallet
ElseIf cartons > 0 Then
totalPackages = cartons : packageCode = "CT"
ElseIf reels > 0 Then
totalPackages = reels : packageCode = "RL"
End If
If totalPackages > 0 AndAlso imported.All(Function(p) If(p.ezaWP_PackstueckAnzahl, "").ToString().Trim() = "") Then
' Die Excel enthält nur eine Gesamtanzahl, keine positionsbezogene Zuordnung.
' Für die Erfassung proportional zum Warenwert verteilen (Rest auf letzte Position).
' Die Verteilung ist ein Vorschlag und muss vor Zollversand fachlich geprüft werden.
' Keine unbewiesene proportionale Aufteilung: alle Packstuecke auf erste Position,
' restliche Positionen ohne Anzahl; Zuordnung ist fachlich zu pruefen.
imported(0).ezaWP_PackstueckAnzahl = totalPackages.ToString(CultureInfo.InvariantCulture)
imported(0).ezaWP_PackstueckArt = packageCode
warnings.Add("Packstücke aus '" & pkgInfo & "' abgeleitet: " & totalPackages & " x " & packageCode & ". Vorlaeufig erste Position; positionsbezogene Zuordnung muss geprueft werden.")
ElseIf pkgInfo <> "" AndAlso totalPackages = 0 Then
warnings.Add("Packstückangabe konnte nicht sicher erkannt werden: " & pkgInfo)
End If
Dim replace As Boolean = False
If EZA.eza_WARENPOS.Count > 0 Then
Dim answer = MsgBox("Vorhandene " & EZA.eza_WARENPOS.Count & " Positionen ersetzen?" & vbCrLf & "Ja = ersetzen, Nein = ergänzen, Abbrechen = Import abbrechen.", MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question)
If answer = MsgBoxResult.Cancel Then Return False
replace = (answer = MsgBoxResult.Yes)
End If
Dim gross As Decimal = 0D
TetraTryDecimal(TetraKopf(kopf, "Shipment Gross Weight (kg)"), gross)
' Versender (CZ) aus Verkäufer W:AA, sofern noch nicht vorhanden.
' CZ = Versender laut bisheriger AVISO-Vorgabe: Verkäufer/Seller.
Dim sellerName As String = (TetraKopf(kopf, "Seller Name 1") & " " & TetraKopf(kopf, "Seller Name 2")).Trim()
If sellerName <> "" AndAlso Not EZA.eza_ADRESSEN.Any(Function(a) String.Equals(a.ezaAd_AdressTyp, "CZ", StringComparison.OrdinalIgnoreCase)) Then
If sellerName <> "" AndAlso Not EZA.eza_ADRESSEN.Any(Function(a) String.Equals(If(a.ezaAd_AdressTyp, "").ToString(), "CZ", StringComparison.OrdinalIgnoreCase)) Then
EZA.eza_ADRESSEN.Add(New DAKOSY_Worker.cDakosy_EZA_Adressen With {
.ezaAd_AdressTyp = "CZ",
.ezaAd_NameFirma1 = sellerName,
.ezaAd_StrasseHausNr1 = TetraKopf(kopf, "Seller Street"),
.ezaAd_Ort = TetraKopf(kopf, "Seller City"),
.ezaAd_LandCode = TetraKopf(kopf, "Seller Country").ToUpperInvariant()
})
.ezaAd_AdressTyp = "CZ", .ezaAd_NameFirma1 = sellerName,
.ezaAd_StrasseHausNr1 = TetraKopf(kopf, "Seller Street"), .ezaAd_Ort = TetraKopf(kopf, "Seller City"),
.ezaAd_LandCode = TetraKopf(kopf, "Seller Country").ToUpperInvariant()
})
End If
' Anmelder = Adresstyp CN, EORI aus Spalte L.
Dim declarantEori As String = TetraKopf(kopf, "Declarant EORI Number")
If Not String.IsNullOrWhiteSpace(declarantEori) Then
TetraSetBestimmungsbundesland(declarantEori)
End If
If declarantEori <> "" Then
Dim adrCN = EZA.eza_ADRESSEN.FirstOrDefault(Function(a) String.Equals(a.ezaAd_AdressTyp, "CN", StringComparison.OrdinalIgnoreCase))
' CN: ausschliesslich Importer EORI; kein Declarant-Fallback.
Dim importerEori As String = TetraKopf(kopf, "Importer EORI Number")
If importerEori <> "" Then
Dim adrCN = EZA.eza_ADRESSEN.FirstOrDefault(Function(a) String.Equals(If(a.ezaAd_AdressTyp, "").ToString(), "CN", StringComparison.OrdinalIgnoreCase))
If adrCN Is Nothing Then
adrCN = New DAKOSY_Worker.cDakosy_EZA_Adressen With {.ezaAd_AdressTyp = "CN"}
EZA.eza_ADRESSEN.Add(adrCN)
End If
adrCN.ezaAd_TeilnehmerEORI = declarantEori
adrCN.ezaAd_TeilnehmerEORI = importerEori
TetraSetBestimmungsbundesland(importerEori)
End If
If replace Then EZA.eza_WARENPOS.Clear()
For Each pos In imported
EZA.eza_WARENPOS.Add(pos)
Next
If TetraKopf(kopf, "Currency") <> "" Then EZA.eza_Rechnungswaehrung = TetraKopf(kopf, "Currency")
If TetraKopf(kopf, "Term of Delivery") <> "" Then EZA.eza_LieferbedingungCode = TetraKopf(kopf, "Term of Delivery")
If TetraKopf(kopf, "Term of Delivery Place") <> "" Then EZA.eza_LieferbedingungOrt = TetraKopf(kopf, "Term of Delivery Place")
If gross > 0D Then EZA.eza_GesamtRohmasse = CDbl(gross)
If TetraKopf(kopf, "Country of Dispatch") <> "" Then EZA.eza_VersendungsLandCode = TetraKopf(kopf, "Country of Dispatch")
EZA.eza_WARENPOS.AddRange(imported)
Dim euEftaCtc As String() = {
"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",
"IS", "LI", "NO", "CH",
"TR", "MK", "RS", "GB", "UA", "GE", "MD", "ME"
}
If currency <> "" Then EZA.eza_Rechnungswaehrung = currency
If hasInvoiceValue Then EZA.eza_Rechnungspreis = CDbl(invoiceValue)
Dim incoterm As String = TetraKopf(kopf, "Term of Delivery")
If incoterm <> "" Then EZA.eza_LieferbedingungCode = incoterm
Dim incotermPlace As String = TetraKopf(kopf, "Term of Delivery Place")
If incotermPlace <> "" Then EZA.eza_LieferbedingungOrt = incotermPlace
Dim gross As Decimal
If TetraTryDecimal(TetraKopf(kopf, "Shipment Gross Weight (kg)"), gross) Then EZA.eza_GesamtRohmasse = CDbl(gross)
Dim dispatch As String = TetraKopf(kopf, "Country of Dispatch").Trim().ToUpperInvariant()
If dispatch = "RS" Then dispatch = "XS"
If TetraKopf(kopf, "Country of Dispatch") <> "" Then EZA.eza_ZollrechtlicherStatus = If(euEftaCtc.Contains(TetraKopf(kopf, "Country of Dispatch").ToUpperInvariant()), "EU", "IM")
If dispatch <> "" Then
EZA.eza_VersendungsLandCode = dispatch
' ATLAS Einfuhr: EU für Vertragsparteien des gemeinsamen Versandverfahrens
Dim ctcCountries As String() = {"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", "XS", "CH", "NO", "IS", "LI", "TR", "MK", "GB", "UA", "GE", "MD", "ME"}
If TetraKopf(kopf, "Country of Destination") <> "" Then EZA.eza_Bestimmungsland = TetraKopf(kopf, "Country of Destination")
If TetraKopf(kopf, "Identity of the means of transport at the border") <> "" Then EZA.eza_KennzeichenNameBefoerderungsmittelAnkunft = TetraKopf(kopf, "Identity of the means of transport at the border")
MsgBox(imported.Count & " Tetra-Pak-Positionen eingelesen.")
EZA.eza_ZollrechtlicherStatus = If(ctcCountries.Contains(dispatch), "EU", "IM")
End If
Dim destination As String = TetraKopf(kopf, "Country of Destination").ToUpperInvariant()
If destination <> "" Then EZA.eza_Bestimmungsland = destination
Dim modeBorder As String = TetraKopf(kopf, "Mode of Transport at the Border")
If modeBorder <> "" Then EZA.eza_VerkehrszweigGrenze = modeBorder
Dim modeInland As String = TetraKopf(kopf, "Inland Mode of Transport")
If modeInland <> "" Then EZA.eza_VerkehrszweigInland = modeInland
Dim vehicle As String = TetraKopf(kopf, "Identity of the means of transport at the border")
If vehicle <> "" Then EZA.eza_KennzeichenNameBefoerderungsmittelAnkunft = vehicle
' DV1: Fracht bis EU-Verbringungsort (010), nach EU-Verbringungsort (014).
' Annahme: Freight Costs = Gesamtfracht; Inland Freight Costs = darin enthaltener EU-Anteil.
' Kostenart 014 ist ein Abzug; die Vorzeichenlogik muss in der DAKOSY-Ausgabe geprüft werden.
Dim freight As Decimal, insurance As Decimal, inlandFreight As Decimal, otherExpenses As Decimal
Dim hasFreight As Boolean = TetraTryDecimal(TetraKopf(kopf, "Freight Costs"), freight)
Dim hasInsurance As Boolean = TetraTryDecimal(TetraKopf(kopf, "Insurance Costs"), insurance)
Dim hasInland As Boolean = TetraTryDecimal(TetraKopf(kopf, "Inland Freight Costs"), inlandFreight)
Dim hasOther As Boolean = TetraTryDecimal(TetraKopf(kopf, "Other Expenses Costs"), otherExpenses)
Dim freightCurrency As String = TetraKopf(kopf, "Currency Freight Costs").ToUpperInvariant()
Dim inlandCurrency As String = TetraKopf(kopf, "Currency Inland Freight").ToUpperInvariant()
Dim insuranceCurrency As String = TetraKopf(kopf, "Currency Insurance Costs").ToUpperInvariant()
If freightCurrency = "" Then freightCurrency = currency
If inlandCurrency = "" Then inlandCurrency = freightCurrency
If insuranceCurrency = "" Then insuranceCurrency = currency
Dim incotermCode As String = If(incoterm, "").Trim().ToUpperInvariant()
If incotermCode.Length > 3 Then incotermCode = incotermCode.Substring(0, 3)
Dim dv1Costs As New List(Of DAKOSY_Worker.cDakosy_EZA_DV1Kosten)
' Originalwährungen an DAKOSY übergeben. Umrechnung nur für eine Differenz
' zwischen Gesamtfracht und EU-Inlandsfracht mit verschiedenen Währungen.
Dim freightValid As Boolean = hasFreight AndAlso freight > 0D AndAlso freightCurrency <> ""
Dim inlandValid As Boolean = hasInland AndAlso inlandFreight > 0D AndAlso inlandCurrency <> ""
If hasFreight AndAlso freight < 0D Then warnings.Add("Negative Gesamtfracht: keine automatische DV1-Übernahme.")
If hasInland AndAlso inlandFreight < 0D Then warnings.Add("Negative Inlandsfracht: keine automatische DV1-Übernahme.")
If hasFreight AndAlso freight > 0D AndAlso freightCurrency = "" Then warnings.Add("Gesamtfracht ohne Währung: keine DV1-Übernahme.")
If hasInland AndAlso inlandFreight > 0D AndAlso inlandCurrency = "" Then warnings.Add("Inlandsfracht ohne Währung: keine DV1-Übernahme.")
Dim splitValid As Boolean = freightValid AndAlso (Not hasInland OrElse inlandFreight = 0D OrElse inlandValid)
Dim beforeEU As Decimal = If(freightValid, freight, 0D)
Dim beforeEUCurrency As String = freightCurrency
If splitValid AndAlso inlandValid Then
If freightCurrency = inlandCurrency Then
beforeEU = freight - inlandFreight
Else
Try
' Inland in die Währung der Gesamtfracht umrechnen;
' die DV1-Kostenart 010 bleibt in der ursprünglichen Frachtwährung.
Dim inlandConverted As Decimal = CDec(VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(CDbl(inlandFreight), inlandCurrency, freightCurrency))
If inlandConverted <= 0D Then Throw New Exception("Ungültiges Umrechnungsergebnis")
beforeEU = freight - inlandConverted
Catch ex As Exception
splitValid = False
warnings.Add("Umrechnung der Inlandsfracht von " & inlandCurrency & " nach " & freightCurrency & " fehlgeschlagen (" & ex.Message & ").")
End Try
End If
If splitValid AndAlso beforeEU < 0D Then
splitValid = False
warnings.Add("EU-Inlandsfracht übersteigt Gesamtfracht nach Währungsabgleich; keine Differenzbildung.")
End If
End If
If hasInland AndAlso inlandFreight > 0D AndAlso Not inlandValid Then splitValid = False
If splitValid Then beforeEU = Math.Round(beforeEU, 2, MidpointRounding.AwayFromZero)
Select Case incotermCode
Case "EXW", "FCA", "FAS", "FOB"
If splitValid AndAlso beforeEU > 0D Then
If MsgBox("Lieferbedingung " & incotermCode & ": " & beforeEU.ToString("N2") & " " & beforeEUCurrency & " als Kostenart 010 hinzurechnen?" & vbCrLf & "Gesamtfracht: " & freight.ToString("N2") & " " & freightCurrency & "; EU-Inlandsfracht: " & inlandFreight.ToString("N2") & " " & inlandCurrency & "." & vbCrLf & "Bitte bestätigen, dass der Betrag nicht bereits im Rechnungspreis enthalten ist und die EU-Abgrenzung stimmt.", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) = MsgBoxResult.Yes Then
dv1Costs.Add(New DAKOSY_Worker.cDakosy_EZA_DV1Kosten With {
.Kostenart = "010", .Kosten = beforeEU.ToString("0.00", CultureInfo.InvariantCulture),
.KostenWaehrung = beforeEUCurrency, .WechselkursArt = "01", .Verteilungsart = "PRICE", .Minimalbetrag = "0.01"
})
End If
End If
If inlandValid Then warnings.Add("EU-Inlandsfracht " & inlandFreight.ToString("N2") & " " & inlandCurrency & " nicht als 014 abgezogen: Einschluss im Rechnungspreis bei " & incotermCode & " nicht nachgewiesen.")
Case "CFR", "CIF", "CPT", "CIP", "DAP", "DPU", "DDP"
If inlandValid Then
If MsgBox("Lieferbedingung " & incotermCode & ": EU-Inlandsfracht " & inlandFreight.ToString("N2") & " " & inlandCurrency & " als Kostenart 014 abziehen?" & vbCrLf & "Nur bestätigen, wenn diese Kosten bereits im Rechnungspreis enthalten und gesondert nachgewiesen sind.", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) = MsgBoxResult.Yes Then
dv1Costs.Add(New DAKOSY_Worker.cDakosy_EZA_DV1Kosten With {
.Kostenart = "014", .Kosten = inlandFreight.ToString("0.00", CultureInfo.InvariantCulture),
.KostenWaehrung = inlandCurrency, .WechselkursArt = "01", .Verteilungsart = "WEIGHT", .Minimalbetrag = "0.01"
})
warnings.Add("Kostenart 014: DAKOSY-Code WEIGHT und Abzugswirkung vor Versand im XML/UI prüfen.")
End If
ElseIf freightValid Then
warnings.Add("Lieferbedingung " & incotermCode & ": Gesamtfracht vorhanden, aber kein verwertbarer EU-Inlandsanteil; kein 014-Abzug.")
End If
If freightValid Then warnings.Add("Lieferbedingung " & incotermCode & ": Gesamtfracht nicht zusätzlich als 010 angesetzt (Doppelzählungsrisiko).")
Case Else
If freightValid OrElse inlandValid Then warnings.Add("Lieferbedingung '" & incotermCode & "' nicht eindeutig: Fracht nicht als 010/014 übernommen.")
End Select
If hasFreight AndAlso freight > 0D AndAlso Not hasInland Then warnings.Add("Inland Freight Costs ist leer: EU-Anteil unbekannt; Kostenaufteilung vor Zollversand prüfen.")
If hasInsurance AndAlso insurance > 0D Then
If insuranceCurrency = "" Then
warnings.Add("Versicherungskosten ohne Währung: nicht übernommen.")
ElseIf MsgBox("Versicherung " & insurance.ToString("N2") & " " & insuranceCurrency & " als Kostenart 012 hinzurechnen?" & vbCrLf & "Nur bestätigen, wenn die Versicherung nicht bereits im Rechnungspreis enthalten ist.", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) = MsgBoxResult.Yes Then
dv1Costs.Add(New DAKOSY_Worker.cDakosy_EZA_DV1Kosten With {
.Kostenart = "012", .Kosten = insurance.ToString("0.00", CultureInfo.InvariantCulture),
.KostenWaehrung = insuranceCurrency, .WechselkursArt = "01", .Verteilungsart = "PRICE", .Minimalbetrag = "0.01"
})
End If
End If
If hasOther AndAlso otherExpenses <> 0D Then warnings.Add("Sonstige Kosten " & otherExpenses.ToString("N2") & " wurden nicht automatisch übernommen; Kostenart und Zollwertrelevanz prüfen.")
' Bei bestehenden DV1-Kosten nur nach expliziter Entscheidung ersetzen oder ergänzen.
If dv1Costs.Count > 0 Then
If EZA.eza_DV1Kostenverteilung Is Nothing Then EZA.eza_DV1Kostenverteilung = New List(Of DAKOSY_Worker.cDakosy_EZA_DV1Kosten)
If EZA.eza_DV1Kostenverteilung.Count > 0 Then
Dim dvAnswer = MsgBox("Vorhandene " & EZA.eza_DV1Kostenverteilung.Count & " DV1-Kosteneinträge ersetzen?" & vbCrLf & "Ja = ersetzen, Nein = ergänzen, Abbrechen = neue Kosten nicht übernehmen.", MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question)
If dvAnswer = MsgBoxResult.Cancel Then dv1Costs.Clear()
If dvAnswer = MsgBoxResult.Yes Then EZA.eza_DV1Kostenverteilung.Clear()
End If
For Each cost As DAKOSY_Worker.cDakosy_EZA_DV1Kosten In dv1Costs
If Not EZA.eza_DV1Kostenverteilung.Any(Function(k) k.Kostenart = cost.Kostenart AndAlso k.Kosten = cost.Kosten AndAlso k.KostenWaehrung = cost.KostenWaehrung) Then EZA.eza_DV1Kostenverteilung.Add(cost)
Next
End If
Debug.WriteLine("TetraPak DV1-Kosten nach Import: " & If(EZA.eza_DV1Kostenverteilung Is Nothing, 0, EZA.eza_DV1Kostenverteilung.Count))
If knownOrigins.Count > 1 Then warnings.Add("Mehrere Ursprungslaender vorhanden: leere Positionen nicht automatisch ergaenzt.")
If invoiceNo <> "" Then warnings.Add("Rechnung " & invoiceNo & ": Rechnungsdatum ist im Excel nicht enthalten; Unterlage ohne Datum übernommen.")
If Not OP_addKN8 Then warnings.Add("KN8-Langtext wurde nicht ergänzt (Option deaktiviert).")
Dim msg As String = imported.Count & " Tetra-Pak-Positionen eingelesen."
If warnings.Count > 0 Then msg &= vbCrLf & vbCrLf & "Prüfhinweise:" & vbCrLf & "- " & String.Join(vbCrLf & "- ", warnings)
MsgBox(msg, MsgBoxStyle.Information, "Tetra Pak Excel-Import")
Me.DialogResult = DialogResult.OK
Me.Close()
Return True
@@ -1742,20 +1922,31 @@ Public Class cATLAS_EZA_IMPORT
If xlApp IsNot Nothing Then xlApp.Quit()
Catch
End Try
For Each obj As Object In New Object() {ws, wb, xlApp}
If obj IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj)
For Each obj As Object In New Object() {used, ws, wb, xlApp}
Try
If obj IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj)
Catch
End Try
Next
End Try
End Function
Private Function TetraCell(value As Object) As String
If value Is Nothing Then Return ""
Return Convert.ToString(value, CultureInfo.InvariantCulture).Trim()
End Function
Private Function TetraGet(ws As Excel.Worksheet, header As Dictionary(Of String, Integer), row As Integer, name As String) As String
If Not header.ContainsKey(name) Then Return ""
Return TetraCell(ws.Cells(row, header(name)).Value2)
Private Function TetraGet(values As Object(,), header As Dictionary(Of String, Integer), row As Integer, ParamArray names As String()) As String
For Each name As String In names
Dim col As Integer
If header.TryGetValue(name, col) Then
Dim v As String = TetraCell(values(row, col))
If v <> "" Then Return v
End If
Next
Return ""
End Function
Private Function TetraKopf(kopf As Dictionary(Of String, String), name As String) As String
@@ -1767,31 +1958,35 @@ Public Class cATLAS_EZA_IMPORT
Private Function TetraTryDecimal(value As String, ByRef number As Decimal) As Boolean
number = 0D
If String.IsNullOrWhiteSpace(value) Then Return False
If Decimal.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, number) Then Return True
Return Decimal.TryParse(value, NumberStyles.Number, CultureInfo.GetCultureInfo("de-DE"), number)
Dim culture As CultureInfo = If(value.Contains(",") AndAlso Not value.Contains("."), CultureInfo.GetCultureInfo("de-DE"), CultureInfo.InvariantCulture)
If Decimal.TryParse(value, NumberStyles.Number, culture, number) Then Return True
Return Decimal.TryParse(value, NumberStyles.Number, If(culture.Name = "de-DE", CultureInfo.InvariantCulture, CultureInfo.GetCultureInfo("de-DE")), number)
End Function
Private Sub TetraSetBestimmungsbundesland(declarantEORI As String)
If String.IsNullOrWhiteSpace(declarantEORI) Then Exit Sub
Private Function TetraPackageCount(value As String, ParamArray patterns As String()) As Integer
For Each p As String In patterns
Dim m = System.Text.RegularExpressions.Regex.Match(value, "(?i)(\d+)\s*" & p & "\b")
If m.Success Then
Dim n As Integer
If Integer.TryParse(m.Groups(1).Value, n) Then Return n
End If
Next
Return 0
End Function
Private Sub TetraSetBestimmungsbundesland(importerEORI As String)
If String.IsNullOrWhiteSpace(importerEORI) Then Exit Sub
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Try
Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL()
Dim sqlText As String =
"SELECT TOP 1 A.[LandKz], A.[PLZ] " &
"FROM [VERAG].[dbo].[Kunden] K " &
"INNER JOIN [VERAG].[dbo].[Adressen] A ON A.[AdressenNr] = K.[KundenNr] " &
"WHERE LTRIM(RTRIM(K.[EORITIN])) = @EORI"
Dim sqlText As String = "SELECT TOP 1 A.[LandKz], A.[PLZ] FROM [VERAG].[dbo].[Kunden] K INNER JOIN [VERAG].[dbo].[Adressen] A ON A.[AdressenNr] = K.[KundenNr] WHERE LTRIM(RTRIM(K.[EORITIN])) = @EORI"
Using cmd As New SqlCommand(sqlText, conn)
cmd.Parameters.Add("@EORI", SqlDbType.VarChar, 50).Value = declarantEORI.Trim()
cmd.Parameters.Add("@EORI", SqlDbType.VarChar, 50).Value = importerEORI.Trim()
Using dr As SqlDataReader = cmd.ExecuteReader()
If dr.Read() Then
Dim land As String = If(dr.IsDBNull(0), "", dr.GetValue(0).ToString().Trim().ToUpperInvariant())
Dim plz As String = If(dr.IsDBNull(1), "", dr.GetValue(1).ToString().Trim())
If (land = "DE" Or land = "D") AndAlso plz <> "" Then
If (land = "DE" OrElse land = "D") AndAlso plz <> "" Then
EZA.eza_Bestimmungsbundesland = VERAG_PROG_ALLGEMEIN.cDEBundeslaenderPLZ.LOADBundeslandCode_ByPLZ(plz)
ElseIf land <> "" AndAlso land <> "DE" AndAlso land <> "D" Then
EZA.eza_Bestimmungsbundesland = 25
@@ -1805,6 +2000,9 @@ Public Class cATLAS_EZA_IMPORT
End Try
End Sub
Private Sub cbxGezeTranslate_CheckedChanged(sender As Object, e As EventArgs) Handles cbxGezeTranslate.CheckedChanged
End Sub
'================================================================================================================================
'================================================================================================================================

View File

@@ -708,7 +708,16 @@ Public Class usrCntlATLAS_EZA
EZA.eza_LetzteBearbeitung = Now
EZA.eza_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB
EZA.eza_firma = Me.FIRMA_DY
For Each p In EZA.eza_WARENPOS
Debug.WriteLine("VOR | Pos " & p.ezaWP_PositionsNummer & " | Ursprung: " & If(p.ezaWP_UrsprungslandCode, "NULL").ToString())
Next
DAKOSY_Interface_SEND.loadInClass_VersandanmeldungEZA(EZA, Me, DY_ANM)
For Each p In EZA.eza_WARENPOS
Debug.WriteLine("NACH | Pos " & p.ezaWP_PositionsNummer & " | Ursprung: " & If(p.ezaWP_UrsprungslandCode, "NULL").ToString())
Next
If Not EZA.SAVE_ALL() Then Exit Sub
Dim saveFile = ""
If DAKOSY_Interface_SEND.generateVersandanmeldungEZA(EZA, saveFile, cboDakosyAction._value) Then

View File

@@ -33,6 +33,9 @@
Public Sub initSrch(Optional blockEvents As Boolean = False)
sbUrsprungsland.initSearchBox(Me.FindForm, " [Code] ,[Description] as Land FROM tbl_DY_ZollDE_C0008_LaenderFull", {"Code", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "Code", "FMZOLL", , 400, 200)
sbPraeferenzursprungsland.initSearchBox(Me.FindForm, " [Code] ,[Description] as Land FROM tbl_DY_ZollDE_C0008_LaenderFull", {"Code", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "Code", "FMZOLL", , 400, 200)
sbPkTyp.initSearchBox(Me.FindForm, " [Code] ,[Description] as Verpackungsart, Code + ' ' + Description as display FROM tbl_DY_ZollDE_C0017_PackstueckeVerpackungsarten", {"Code", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "display", "FMZOLL", , 400, 200)
sbUlArt.initSearchBox(Me.FindForm, " [Code] ,[Description] as Art, Code + ' ' + Description as display FROM tbl_DY_ZollDE_I0200_Unterlagearten", {"Description", "'%'+Code", "DocumentCode", "Division"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "display", "FMZOLL", , 400, 200)
' sbExportAusLand.initSearchBox(Me.FindForm, " [Code] ,[Description] as Land FROM tbl_DY_ZollDE_C0008_LaenderFull", {"Code", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", "Code", "Code", "Code", "FMZOLL", , 400, 200)
@@ -165,6 +168,10 @@
Me.cboBeguenstigung.changeItem(If(WARE.ezaWP_BeguenstigungBenatragtCode, ""))
Me.sbUrsprungsland.SET_VALUE(If(WARE.ezaWP_UrsprungslandCode, ""))
Debug.WriteLine("EZA Pos " & (id + 1) &
" | Modell: " & If(WARE.ezaWP_UrsprungslandCode, "NULL") &
" | Control: " & If(Me.sbUrsprungsland._value, "NULL"))
Me.sbPraeferenzursprungsland.SET_VALUE(If(WARE.ezaWP_Praeferenzursprungsland, ""))
@@ -272,63 +279,69 @@
End Sub
Private Sub cboAngVerfahren_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboAngVerfahren.SelectedIndexChanged
Dim bisher As String = If(cboVorangegangenesVerfahren._value, "")
Dim verfahren As String = If(cboAngVerfahren._value, "")
cboVorangegangenesVerfahren.Items.Clear()
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", ""))
If cboAngVerfahren._value.StartsWith("01") Then
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0100 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0171 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0178 - ", "78"))
End If
Select Case verfahren
Case "01"
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0100 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0171 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0178 - ", "78"))
If cboAngVerfahren._value.StartsWith("40") Then
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4000 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4010 - ", "10"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4031 - ", "31"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4051 - ", "51"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4054 - ", "54"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4071 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4078 - ", "78"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4090 - ", "90"))
End If
Case "40"
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4000 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4010 - ", "10"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4031 - ", "31"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4051 - ", "51"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4054 - ", "54"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4071 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4078 - ", "78"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4090 - ", "90"))
If cboAngVerfahren._value.StartsWith("42") Then
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4200 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4210 - ", "10"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4222 - ", "22"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4223 - ", "23"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4251 - ", "51"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4254 - ", "54"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4271 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4278 - ", "78"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4291 - ", "91"))
End If
Case "42"
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4200 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4210 - ", "10"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4222 - ", "22"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4223 - ", "23"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4251 - ", "51"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4254 - ", "54"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4271 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4278 - ", "78"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4291 - ", "91"))
If cboAngVerfahren._value.StartsWith("45") Then
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4500 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4571 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4578 - ", "78"))
End If
Case "45"
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4500 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4571 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4578 - ", "78"))
If cboAngVerfahren._value.StartsWith("49") Then
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4900 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4951 - ", "51"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4954 - ", "54"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4971 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4978 - ", "78"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4991 - ", "91"))
End If
Case "49"
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4900 - ", "00"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4951 - ", "51"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4954 - ", "54"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4971 - ", "71"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4978 - ", "78"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4991 - ", "91"))
If cboAngVerfahren._value.StartsWith("61") Then
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6121 - ", "21"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6123 - ", "23"))
End If
Case "61"
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6121 - ", "21"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6123 - ", "23"))
If cboAngVerfahren._value.StartsWith("63") Then
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6321 - ", "21"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6323 - ", "23"))
End If
Case "63"
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6321 - ", "21"))
cboVorangegangenesVerfahren.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6323 - ", "23"))
End Select
If bisher <> "" Then
For Each item As VERAG_PROG_ALLGEMEIN.MyListItem In cboVorangegangenesVerfahren.Items
If item.Value.ToString() = bisher Then
cboVorangegangenesVerfahren.changeItem(bisher)
Exit For
End If
Next
End If
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

View File

@@ -272,7 +272,12 @@
POSITION.ezaWP_VerfahrensCodeVorangegangenesVerfahren = cProgramFunctions.isLeerNothing(P.cboVorangegangenesVerfahren._value)
POSITION.ezaWP_BeguenstigungBenatragtCode = cProgramFunctions.isLeerNothing(P.cboBeguenstigung._value)
POSITION.ezaWP_UrsprungslandCode = cProgramFunctions.isLeerNothing(P.sbUrsprungsland._value)
Dim ursprung As String = If(P.sbUrsprungsland._value, "").ToString().Trim()
If ursprung <> "" Then POSITION.ezaWP_UrsprungslandCode = ursprung
Debug.WriteLine("GET Pos " & cnt &
" | Control: " & If(P.sbUrsprungsland._value, "NULL"))
POSITION.ezaWP_Praeferenzursprungsland = cProgramFunctions.isLeerNothing(P.sbPraeferenzursprungsland._value)
POSITION.ezaWP_UNTERLAGEN = New List(Of DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen)

View File

@@ -351,6 +351,7 @@ Public Class DAKOSY_Interface_SEND
If cDY.eza_Rechnungspreis IsNot Nothing Then EA.KopfDaten.Rechnungspreis = cDY.eza_Rechnungspreis
If cDY.eza_Rechnungswaehrung IsNot Nothing Then EA.KopfDaten.Rechnungswaehrung = cDY.eza_Rechnungswaehrung
If If(cDY.eza_DV1Kz, False) Then
If EA.KopfDaten.DV1Angaben Is Nothing Then EA.KopfDaten.DV1Angaben = New FreierVerkehrAktVeredelUmwandlung_004.DV1AngabenAVUVTyp
If cDY.eza_DV1Kz IsNot Nothing Then EA.KopfDaten.DV1Angaben.DV1Kz = CInt(Int(cDY.eza_DV1Kz))
If cDY.eza_DV1Vertretungsverhaeltnis IsNot Nothing Then EA.KopfDaten.DV1Angaben.Vertretungsverhaeltnis = cDY.eza_DV1Vertretungsverhaeltnis
If cDY.eza_DV1FruehereEntscheidungen IsNot Nothing Then EA.KopfDaten.DV1Angaben.FruehereEntscheidungen = cDY.eza_DV1FruehereEntscheidungen
@@ -365,6 +366,23 @@ Public Class DAKOSY_Interface_SEND
If cDY.eza_DV1SpezielleVereinbarungUmstand IsNot Nothing Then EA.KopfDaten.DV1Angaben.SpezielleVereinbarungUmstand = cDY.eza_DV1SpezielleVereinbarungUmstand
End If
'DV1-Kostenverteilung: direkt unter KopfDaten, unabhängig vom DV1Kz.
'Die Liste stammt aus dem Excel-Import bzw. der gespeicherten EZA.
If cDY.eza_DV1Kostenverteilung IsNot Nothing AndAlso cDY.eza_DV1Kostenverteilung.Count > 0 Then
EA.KopfDaten.DV1Kostenverteilung = New List(Of FreierVerkehrAktVeredelUmwandlung_004.DV1KostenverteilungAVUVTyp)
For Each k As cDakosy_EZA_DV1Kosten In cDY.eza_DV1Kostenverteilung
If k Is Nothing OrElse String.IsNullOrWhiteSpace(k.Kostenart) OrElse String.IsNullOrWhiteSpace(k.Kosten) Then Continue For
Dim dvKosten As New FreierVerkehrAktVeredelUmwandlung_004.DV1KostenverteilungAVUVTyp With {
.Kostenart = k.Kostenart.Trim(),
.Kosten = k.Kosten.Trim(),
.KostenWaehrung = If(k.KostenWaehrung, "").Trim(),
.WechselkursArt = If(k.WechselkursArt, "").Trim(),
.Verteilungsart = If(k.Verteilungsart, "").Trim(),
.Minimalbetrag = If(k.Minimalbetrag, "").Trim()}
EA.KopfDaten.DV1Kostenverteilung.Add(dvKosten)
Next
End If
If cDY.eza_UNTERLAGEN.Count > 0 Then
EA.KopfDaten.Unterlage = New List(Of FreierVerkehrAktVeredelUmwandlung_004.UnterlageVzKopfAVUVTyp)
@@ -524,7 +542,7 @@ Public Class DAKOSY_Interface_SEND
If u.ezaWP_Rohmasse IsNot Nothing Then WP.Rohmasse = u.ezaWP_Rohmasse
End If
If u.ezaWP_Eigenmasse IsNot Nothing Then WP.Eigenmasse = u.ezaWP_Eigenmasse
If u.ezaWP_Eigenmasse IsNot Nothing Then WP.Eigenmasse = CDec(u.ezaWP_Eigenmasse).ToString("F1", Globalization.CultureInfo.InvariantCulture)
If u.ezaWP_AHStatMenge IsNot Nothing Then WP.AHStatMenge = u.ezaWP_AHStatMenge
If u.ezaWP_AHStatMengeMasseinheit IsNot Nothing Then WP.AHStatMengeMasseinheit = u.ezaWP_AHStatMengeMasseinheit
If u.ezaWP_AHStatMengeQualifier IsNot Nothing Then WP.AHStatMengeQualifier = u.ezaWP_AHStatMengeQualifier

View File

@@ -194,7 +194,12 @@ Public Class cRelayHub
Dim token As String = cRelayHubToken.GetAccessToken(environment)
http.AuthToken = token
Dim apiUrl As String = GetApiUrl(environment)
Dim fullUrl As String = apiUrl & "/job-orders/init"
Console.WriteLine("API_URL =: " & apiUrl)
Debug.WriteLine("RelayHub Environment: " & environment.ToString())
Debug.WriteLine("RelayHub URL: " & fullUrl)
Debug.WriteLine("RelayHub OutputApplication: " & If(JsonConvert.DeserializeObject(Of cRelayHubJobOrderRequest)(jsonPayload).outputApplication, ""))
Return http.PostJson2(apiUrl & "/job-orders/init", "application/json", jsonPayload)
End Function