From 85bbceae0aa4a54c6478715d52a05a99d0b1abde Mon Sep 17 00:00:00 2001 From: Developer01 Date: Mon, 15 Jun 2026 10:03:10 +0200 Subject: [PATCH] Modularisierung und Optimierung der PDF-Erstellung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Methode `Create_PDFfromXML` wurde vollständig überarbeitet, um die Struktur und Lesbarkeit zu verbessern. Die Logik wurde modularisiert, indem neue Methoden wie `InitializeFilePaths`, `InitializePDF`, `ProcessInvoiceData` und `FinalizePDF` eingeführt wurden. Neue Hilfsklassen (`FilePaths`, `PdfRenderContext`, `InvoiceItemData`) wurden hinzugefügt, um die Datenstrukturierung und den Kontext zu verbessern. Die Verarbeitung von Bereichen und Folgeelementen wurde in spezifische Methoden ausgelagert (`HandleAreaSwitch`, `HandleFollowUpItem`). Die Rendering-Logik wurde durch Methoden wie `RenderDisplayItem` und `RenderMultiLineText` vereinfacht. Neue Konstanten für Layout und Textformate wurden eingeführt, um die Standardisierung zu fördern. Die Debug-Logs wurden erweitert, um detaillierte Einblicke in die Verarbeitungsschritte zu bieten. Die Änderungen verbessern die Wartbarkeit, Modularität und Robustheit der PDF-Erstellung erheblich. --- Jobs/ZUGFeRD/XRechnungViewDocument.vb | 1351 +++++++++++++++---------- Jobs/logParser.txt | 361 ++++--- 2 files changed, 1047 insertions(+), 665 deletions(-) diff --git a/Jobs/ZUGFeRD/XRechnungViewDocument.vb b/Jobs/ZUGFeRD/XRechnungViewDocument.vb index a1e6b316..1384b654 100644 --- a/Jobs/ZUGFeRD/XRechnungViewDocument.vb +++ b/Jobs/ZUGFeRD/XRechnungViewDocument.vb @@ -19,6 +19,35 @@ Public Class XRechnungViewDocument Private fontResName As String Private fontResNameBold As String Private fontResNameItalic As String + + ' Layout-Konstanten + Private Const MARGIN_LEFT As Integer = 10 + Private Const MARGIN_TOP As Integer = 15 + Private Const LINE_WIDTH As Integer = 200 + Private Const PAGE_HEIGHT_LIMIT As Integer = 270 + Private Const FOOTER_Y As Integer = 280 + Private Const FOOTER_TEXT_Y As Integer = 285 + Private Const LINE_HEIGHT As Integer = 5 + + ' Spalten-Positionen für Tabellen + Private Const COL_POS_NUMBER As Integer = 10 + Private Const COL_POS_AMOUNT As Integer = 19 + Private Const COL_POS_UNIT As Integer = 35 + Private Const COL_POS_TEXT As Integer = 50 + Private Const COL_POS_REASON As Integer = 20 + Private Const COL_POS_TAX As Integer = 163 + Private Const COL_POS_SUM As Integer = 181 + Private Const COL_VALUE_X As Integer = 70 + + ' Text-Größen + Private Const TEXT_SIZE_TITLE As Integer = 18 + Private Const TEXT_SIZE_NORMAL As Integer = 10 + + ' Text-Längen für Umbruch + Private Const MAX_TEXT_LENGTH_FULL As Integer = 112 + Private Const MAX_TEXT_LENGTH_POSITION As Integer = 64 + Private Const MAX_TEXT_LENGTH_NOTE As Integer = 70 + Public Sub New(LogConfig As LogConfig, MSSQL As MSSQLServer, GDPictureLicenseKey As String) _logConfig = LogConfig _logger = LogConfig.GetLogger() @@ -26,510 +55,819 @@ Public Class XRechnungViewDocument _file = New ZUGFeRD.FileFunctions(LogConfig, MSSQL) _gdpictureLicenseKey = GDPictureLicenseKey End Sub - Public Function Create_PDFfromXML(pXmlFile As FileInfo, pDTItemValues As DataTable) As FileInfo + Public Function Create_PDFfromXML(pXmlFile As FileInfo, pDTItemValues As DataTable) As FileInfo _logger.Debug("Create_PDFfromXML() Start") Try - Dim LicenseManager = New LicenseManager() - LicenseManager.RegisterKEY(_gdpictureLicenseKey) - Dim oXRechnungFile = pXmlFile.FullName - Dim oNewFileinfo As FileInfo - Dim oXmlFilePath = pXmlFile.FullName - Dim oViewRecieptFilename = pXmlFile.Name - Dim oTempFilePath = Path.Combine(Path.GetDirectoryName(oXmlFilePath), "temp") - If Not Directory.Exists(oTempFilePath) Then - Directory.CreateDirectory(oTempFilePath) - End If + ' 1. Initialisierung der Dateipfade + Dim paths As FilePaths = InitializeFilePaths(pXmlFile) + If paths Is Nothing Then Return Nothing - oTempFilePath = Path.Combine(oTempFilePath, "xrechnung.xml") - If File.Exists(oTempFilePath) Then - File.Delete(oTempFilePath) - End If + ' 2. PDF erstellen und konfigurieren + Dim pdfDoc As GdPicturePDF = InitializePDF() + If pdfDoc Is Nothing Then Return Nothing + ' 3. Rendering-Context erstellen + Dim context As New PdfRenderContext(pdfDoc, paths.CreatedString) + ' 4. Erste Seite mit Header/Footer + CreateNewPage(context) + ' 5. Daten verarbeiten und rendern + ProcessInvoiceData(context, pDTItemValues) - pXmlFile = New FileInfo(oTempFilePath) - - 'oViewRecieptFilename = oViewRecieptFilename.Replace(".xml", ".pdf") - oViewRecieptFilename = Regex.Replace(oViewRecieptFilename, ".xml", ".pdf", RegexOptions.IgnoreCase) - Dim MyGDPicturePDF = New GdPicturePDF - - Dim oPDFStatus As GdPictureStatus = MyGDPicturePDF.NewPDF(PdfConformance.PDF_A_3a) - - If oPDFStatus <> GdPictureStatus.OK Then - _logger.Warn($"Error initializing PDF: {oPDFStatus}") - Return Nothing - End If - - Dim oOutputPath = Path.Combine(Path.GetDirectoryName(oXmlFilePath), oViewRecieptFilename) - _logger.Debug("Create_PDFfromXML() Resulting PDF Filepath: [{0}]", oOutputPath) - If File.Exists(oOutputPath) Then - File.Delete(oOutputPath) - End If - - - Dim oCreatedString = $"Maschinell erstellt durch / Automatically created by Digital Data E-Rechnung Parser: {Now.ToString}" - - - - MyGDPicturePDF.SetOrigin(PdfOrigin.PdfOriginTopLeft) - MyGDPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitMillimeter) - MyGDPicturePDF.SetLineWidth(1) - fontResName = MyGDPicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelvetica) - fontResNameBold = MyGDPicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold) - fontResNameItalic = MyGDPicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBoldOblique) - MyGDPicturePDF.SetTitle("xInvoice VisualReceipt") - MyGDPicturePDF.SetAuthor("Digital Data GmbH, Ludwig Rinn Str. 16, 35452 Heuchelheim") - 'Create a New page - MyGDPicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4) - ' Dim oCurrent As Integer = MyGDPicturePDF.GetCurrentPage() - 'Den HEader erzeugen - Dim yPosition As Integer = 15 - MyGDPicturePDF.SetTextSize(18) - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "xRechnung Sichtbeleg - xInvoice Visual Receipt") - yPosition += 10 - MyGDPicturePDF.SetTextSize(10) - MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row1) - yPosition += 5 - MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row2) - yPosition += 5 - MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row1) - yPosition += 5 - MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row2) - 'Den Footer erzeugen - MyGDPicturePDF.DrawLine(10, 280, 200, 280) - - MyGDPicturePDF.DrawText(fontResName, 10, 285, oCreatedString) - - - Dim oArea As String = "" - Dim oIsPosition As Boolean = False - Dim oPosCount = 0 - Dim oPosTerm As String = "" - Dim oPosDesc As String = "" - Dim oCurrencySymbol = "€" - Dim oWidthLine = 200 - yPosition += 5 - - Dim font As New Font("Helvetica", 10) - Dim xRight As Integer = 100 - Dim oIndex As Integer = 0 - Dim oYPlus As Integer = 0 - Dim oCreateTextBox As Boolean = False - Dim oInvHasDiscount As Boolean = False - Dim oYDyn As Integer = 0 - Dim Former_oItemSPECNAME As String = "" - For Each oRow As DataRow In pDTItemValues.Rows - Dim Y_eq_lastrow As Boolean = CBool(oRow.Item("Y_eq_lastrow")) - Dim oRowCaption As String = oRow.Item("Row_Caption") - Dim oItemSPECNAME As String = oRow.Item("SPEC_NAME") - Dim oItemValue As String = oRow.Item("ITEM_VALUE") - Dim oDisplay As Boolean = oRow.Item("Display") - Dim oAreaSwitch As Boolean = False - Dim oDescriptionFollowup As Boolean = False - If oItemSPECNAME = "RECEIPT_ALLOWANCE_REASON" Then - Console.WriteLine("Uiuiu") - End If - If oRow.Item("Area") = "INTERNAL" Then - If oItemSPECNAME = "STATIC_Y_SWITCH" Then - yPosition = oItemValue - End If - End If - If yPosition >= 270 Then - oPDFStatus = MyGDPicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4) - If oPDFStatus <> GdPictureStatus.OK Then - _logger.Warn($"Could not create a second page. The error was: {oPDFStatus}") - Exit For - Else - 'Wieder einen Header und Footer erzeugen - yPosition = 15 - MyGDPicturePDF.SetTextSize(18) - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "xRechnung Sichtbeleg - xInvoice Visual Receipt") - yPosition += 10 - MyGDPicturePDF.SetTextSize(10) - MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row1) - yPosition += 5 - MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_DE_Row2) - yPosition += 5 - MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row1) - yPosition += 5 - MyGDPicturePDF.DrawText(fontResNameItalic, 10, yPosition, XRechnungStrings.CommentSichtbeleg_EN_Row2) - - MyGDPicturePDF.DrawLine(10, 280, 200, 280) - 'Footer erzeugen - MyGDPicturePDF.DrawText(fontResName, 10, 285, oCreatedString) - End If - 'oCurrent = MyGDPicturePDF.GetCurrentPage() - End If - - - If oRow.Item("Area") = "INTERNAL" Then - _logger.Debug($"Next Item as Area is internal") - Continue For - End If - _logger.Debug($"Working on SPEC_NAME: {oItemSPECNAME}") - - If oArea <> oRow.Item("Area") Then - '########## AREA WECHSEL ########### - oAreaSwitch = True - oCreateTextBox = False - oArea = oRow.Item("Area") - _logger.Debug($"Area-Switch to: {oArea}") - Dim oAREACaption As String - If oArea = "TYPE" Then - oAREACaption = $"{Return_InvType(oItemValue)} [{oItemValue}]" - ElseIf oArea = "SELLER" Then - oAREACaption = "Verkäufer / Seller:" - ElseIf oArea = "BUYER" Then - oAREACaption = "Käufer / Buyer:" - ElseIf oArea = "POSITION" Then - oAREACaption = "Positionen / Positions:" - oIsPosition = True - ElseIf oArea = "INCLUDED_NOTE" Then - oAREACaption = "Notizen und Hinweise / Notes:" - oIsPosition = True - ElseIf oArea = "ALLOWANCE" Then - If oItemSPECNAME = "RECEIPT_ALLOWANCE_CHARGE_INDICATOR" Then - If oItemValue = "False" Then - oAREACaption = "Rabatt/Discount:" - oInvHasDiscount = True - Else - oAREACaption = "Zuschlag/Surcharge:" - End If - Else - oAREACaption = "Zu- oder Abschlag/Surcharge or Discount:" - End If - oIsPosition = True - ElseIf oArea = "AMOUNT" Then - oAREACaption = "Beträge / Amounts:" - oCreateTextBox = True - ElseIf oArea = "TAXPOS" Then - oAREACaption = "Steuerbeträge / Tax amounts:" - oIsPosition = True - ElseIf oArea = "PAYMENT" Then - oAREACaption = "Zahlungsinformationen / Payment details:" - ElseIf oArea = "EXEMPTION" Then - oAREACaption = "UST.-Befreiungsgrund / Exemption reason:" - Else - oAREACaption = String.Empty - End If - - If Not oAREACaption = String.Empty Then - 'erste Area-Linie - yPosition += 5 - MyGDPicturePDF.DrawLine(10, yPosition, oWidthLine, yPosition) - 'gdpicturePDF.DrawText(fontResName, 10, yPosition, XRechnungStrings.Seperator_Line) - yPosition += 5 - 'Area caption - MyGDPicturePDF.DrawText(fontResNameBold, 10, yPosition, oAREACaption) - yPosition += 5 - If oArea = "TYPE" Then - MyGDPicturePDF.DrawLine(10, yPosition, oWidthLine, yPosition) - ' gdpicturePDF.DrawText(fontResName, 10, yPosition, XRechnungStrings.Seperator_Line) - yPosition += 5 - ElseIf oArea = "POSITION" Then - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "Pos#") - MyGDPicturePDF.DrawText(fontResName, 19, yPosition, "Anz./am.") - MyGDPicturePDF.DrawText(fontResName, 35, yPosition, "Einh/Unit") - MyGDPicturePDF.DrawText(fontResName, 50, yPosition, "Pos.Text") - MyGDPicturePDF.DrawText(fontResName, 163, yPosition, "Steuer/Tax") - MyGDPicturePDF.DrawText(fontResName, 181, yPosition, "Betrag/Sum") - ElseIf oArea = "INCLUDED_NODE" Then - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "Hinweistext/Notes") - ElseIf oArea = "ALLOWANCE" Then - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, "Pos#") - ' MyGDPicturePDF.DrawText(fontResName, 20, yPosition, "Betrag/Amount") - MyGDPicturePDF.DrawText(fontResName, 20, yPosition, "Grund/Reason") - MyGDPicturePDF.DrawText(fontResName, 163, yPosition, "Steuer/Tax") - MyGDPicturePDF.DrawText(fontResName, 163, yPosition, "Steuer/Tax") - MyGDPicturePDF.DrawText(fontResName, 181, yPosition, "Betrag/Sum") - yPosition += 5 - oPosCount = 0 - ElseIf oArea = "EXEMPTION" Then - - End If - End If - If oArea = "TYPE" Then - If oItemSPECNAME = "INVOICE_CURRENCY" Then - If oItemValue <> "EUR" Then - oCurrencySymbol = oItemValue - End If - End If - ElseIf oArea = "POSITION" Then - oIsPosition = True - If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then - oPosCount += 1 - oYDyn = 0 - yPosition += 5 - oPosTerm = "" - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oPosCount) - MyGDPicturePDF.DrawText(fontResName, 19, yPosition, oItemValue) - oDisplay = False - End If - ElseIf oArea = "ALLOWANCE" Then - oIsPosition = True - Dim validNames As String() = {"POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_RECEIPT_ALLOWANCE_CHARGE_INDICATOR"} - If validNames.Contains(oItemSPECNAME) Then - oPosCount += 1 - oPosTerm = "" - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oPosCount) - ' - Dim oCurrTerm = FormatCurrency(oItemValue, oCurrencySymbol) - MyGDPicturePDF.DrawText(fontResName, 20, yPosition, oCurrTerm) - oDisplay = False - End If - ElseIf oArea = "INCLUDED_NOTE" Then - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oItemValue) - oDisplay = False - ElseIf oArea = "TAXPOS" Then - oIsPosition = True - If oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then - oPosCount = 1 - oPosTerm = $"{oItemValue} %:" - oItemValue = oPosTerm - oDisplay = False - ' yPosition -= 5 - End If - - End If - Else - 'INDIVIDUELLES VERHALTEN BEI Folge-ITEMS - _logger.Debug($"FollowItem - Area: [{oArea}] - ItemSpecname: [{oItemSPECNAME}] - ItemValue: [{oItemValue}]") - 'Dim otextBoxYPos As Integer - If oArea = "POSITION" Or oArea = "ALLOWANCE" Then - If oItemSPECNAME <> Former_oItemSPECNAME And Former_oItemSPECNAME <> "" Then - If oItemSPECNAME = "INVOICE_POSITION_ARTICLE_DESCRIPTION" And Former_oItemSPECNAME = "INVOICE_POSITION_ARTICLE" Then - oDescriptionFollowup = True - Else - Former_oItemSPECNAME = oItemSPECNAME - End If - Else - Former_oItemSPECNAME = oItemSPECNAME - End If - If {"INVOICE_POSITION_AMOUNT", "POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT"}.Contains(oItemSPECNAME) Then - oPosCount += 1 - If Not oDescriptionFollowup Then - oYPlus = 0 - oYDyn = 0 - End If - oPosTerm = "" - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oPosCount) - If oItemSPECNAME = "INVOICE_POSITION_AMOUNT" Then - MyGDPicturePDF.DrawText(fontResName, 19, yPosition, oItemValue) - ElseIf {"POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT"}.Contains(oItemSPECNAME) Then - Dim oTerm = FormatCurrency(oItemValue, oCurrencySymbol) - If oInvHasDiscount And oItemSPECNAME = "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT" And Not oTerm.StartsWith("-") Then - oTerm = "-" + oTerm - End If - MyGDPicturePDF.DrawText(fontResName, 181, yPosition, oTerm) - Else - If oYDyn = 0 Then - oYDyn = yPosition - End If - Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue) - For Each olinepart As String In oPartsNL - Dim oParts As List(Of String) = StringFunctions.SplitText_Length(olinepart, 64) - ' Durchlaufen der einzelnen Teile in einer Schleife - For Each part As String In oParts - MyGDPicturePDF.DrawText(fontResName, 19, oYDyn, part) - oYDyn += 5 - oYPlus += 5 - Next - Next - End If - - oDisplay = False - ElseIf oItemSPECNAME = "INVOICE_POSITION_UNIT_TYPE" Then - oYPlus = 0 - Dim oUnit = Return_UnitType(oItemValue) - MyGDPicturePDF.DrawText(fontResName, 35, yPosition, oUnit) - oDisplay = False - ElseIf {"POSITION_ALLOWANCE_REASON", "RECEIPT_ALLOWANCE_REASON", "INVOICE_POSITION_ARTICLE", "INVOICE_POSITION_ARTICLE_DESCRIPTION"}.Contains(oItemSPECNAME) Then - 'Tabellendarstellung - If Not oDescriptionFollowup Then - oYPlus = 0 - End If - If oYDyn = 0 Then - oYDyn = yPosition - End If - Dim oX = 50 - If oItemSPECNAME.Contains("ALLOWANCE") Then - oX = 20 - End If - oPosDesc = "" - oPosDesc = oItemValue - Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue) - - For Each olinepart As String In oPartsNL - Dim oParts As List(Of String) = StringFunctions.SplitText_Length(olinepart, 64) - ' Durchlaufen der einzelnen Teile in einer Schleife - For Each part As String In oParts - MyGDPicturePDF.DrawText(fontResName, oX, oYDyn, part) - oYDyn += 5 - oYPlus += 5 - Next - Next - oDisplay = False - ElseIf oItemSPECNAME = "INVOICE_POSITION_NOTE" Then - 'Tabellendarstellung - Dim cleanedText As String = RemoveNewlinesAndTabs(oItemValue) - Dim oParts As List(Of String) = StringFunctions.SplitText_Length(cleanedText, 70) - ' Durchlaufen der einzelnen Teile in einer Schleife - If oYDyn = 0 Then - oYDyn = yPosition - End If - Dim oPartsNL As List(Of String) = StringFunctions.SplitTextByNewLine(oItemValue) - For Each olinepart As String In oPartsNL - Dim oPartsPN As List(Of String) = StringFunctions.SplitText_Length(olinepart, 70) - ' Durchlaufen der einzelnen Teile in einer Schleife - For Each part As String In oPartsPN - MyGDPicturePDF.DrawText(fontResName, 50, oYDyn, part) - oYDyn += 5 - oYPlus += 5 - Next - Next - - 'oPosTerm += $" {oItemValue}" - oDisplay = False - ElseIf {"INVOICE_TAXPOS_TAX_RATE", "INVOICE_TAXPOS_RATE", "POSITION_ALLOWANCE_CALCULATION_PERCENT", "RECEIPT_ALLOWANCE_CALCULATION_PERCENT", "RECEIPT_ALLOWANCE_VAT_RATE"}.Contains(oItemSPECNAME) Then - MyGDPicturePDF.DrawText(fontResName, 163, yPosition, $"{oItemValue} %") - oDisplay = False - ElseIf {"INVOICE_POSITION_TAX_AMOUNT"}.Contains(oItemSPECNAME) Then - - Dim oYPos = yPosition - 3.5 - Dim TAXTERM = FormatCurrency(oItemValue, oCurrencySymbol) - MyGDPicturePDF.DrawTextBox(fontResName, 177, oYPos, 198, YCoo_TextBoxPlus5(oYPos), - TextAlignment.TextAlignmentFar, TextAlignment.TextAlignmentNear, - TAXTERM) - End If - oItemValue = oPosTerm - ElseIf oArea = "HEAD" Then - If {"INVOICE_DATE", "INVOICE_SERVICE_DATE"}.Contains(oItemSPECNAME) Then - oItemValue = StringFunctions.DatetimeStringToGermanStringConverter(oItemValue, _logger) - End If - ElseIf oArea = "TAXPOS" Then - If oItemSPECNAME = "INVOICE_TAXPOS_RATE" Then - oPosCount += 1 - oPosTerm = $"{oItemValue} %: " - oDisplay = False - ElseIf oItemSPECNAME = "INVOICE_TAXPOS_AMOUNT" Then - oPosTerm += FormatCurrency(oItemValue, oCurrencySymbol) - oDisplay = False - ElseIf oItemSPECNAME = "INVOICE_TAXPOS_TYPE" Then - oPosTerm += $" {oItemValue}" - ElseIf oItemValue.Contains("EXEMPTION") Then - _logger.Debug($"We got an Exemption: {oItemValue}") - End If - oItemValue = oPosTerm - End If - End If - - If oDisplay = True And Len(oItemValue) > 0 Then - If Y_eq_lastrow = False And oAreaSwitch = False Then - yPosition += 5 - End If - If oArea = "AMOUNT" Or oArea = "ALLOWANCE" Then - - Dim oCURRENCYFORMAT = {"INVOICE_TOTAL_TAX", "INVOICE_TOTAL_NET", "INVOICE_TOTAL_GROSS", "INVOICE_TOTAL_CHARGE_AMOUNT", "POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT", - "POSITION_ALLOWANCE_CALCULATION_PERCENT", "RECEIPT_ALLOWANCE_CALCULATION_PERCENT"} - If oCURRENCYFORMAT.Contains(oItemSPECNAME) Then - oItemValue = FormatCurrency(oItemValue, oCurrencySymbol) - End If - End If - If oRowCaption <> String.Empty Then - 'Zuerst die RowCaption - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oRowCaption) - 'Dann den Wert - If oCreateTextBox Then - Dim otextBoxYPos = yPosition - 3 - MyGDPicturePDF.DrawTextBox(fontResName, 70, otextBoxYPos, 90, YCoo_TextBoxPlus5(otextBoxYPos), - TextAlignment.TextAlignmentFar, TextAlignment.TextAlignmentCenter, - oItemValue) - Else - MyGDPicturePDF.DrawText(fontResName, 70, yPosition, oItemValue) - End If - Else - If Y_eq_lastrow = True Then - MyGDPicturePDF.DrawText(fontResName, oRow.Item("xPosition"), yPosition, oItemValue) - Else - If oItemValue.Length > 112 Then - ' Liste zur Speicherung der Teilstrings - Dim teilStrings As New List(Of String) - ' Schleife, um den String in Teilstrings zu zerlegen - For i As Integer = 0 To oItemValue.Length - 1 Step 112 - ' Sicherstellen, dass wir nicht über die Länge des Strings hinausgehen - Dim laenge As Integer = Math.Min(112, oItemValue.Length - i) - Dim teilString As String = oItemValue.Substring(i, laenge) - teilStrings.Add(teilString) - Next - - ' Ausgabe der Teilstrings - For Each teilString As String In teilStrings - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, teilString) - yPosition += 5 - Next - Else - MyGDPicturePDF.DrawText(fontResName, 10, yPosition, oItemValue) - End If - - End If - End If - Else - If oItemSPECNAME = "INVOICE_POSITION_TAX_AMOUNT" And oYPlus > 0 Then - yPosition += oYPlus - Else - - - End If - End If - oIndex += 1 - Next - ' Dim oeinv_Format As PdfInvoiceDataFormat = PdfInvoiceDataFormat.ZUGFeRD_2_0 - Dim oAttString = "E-invoice XML attachment" - If File.Exists(oXmlFilePath) Then - MyGDPicturePDF.EmbedFile(oXmlFilePath, oAttString) - Else - _logger.Info("XML File is not existing and could not be embedded!") - Return Nothing - End If - - MyGDPicturePDF.EnableCompression(True) - - 'Finalize And save the PDF - oPDFStatus = MyGDPicturePDF.SaveToFile(oOutputPath) - If oPDFStatus = GdPictureStatus.OK Then - _logger.Info("PDF VisualReceipt generated successfully!") - _logger.Debug("Vor MOVE... oxmlFilePath: [{0}] / oTempFilePath: [{1}]", oXmlFilePath, oTempFilePath) - File.Move(oXmlFilePath, oTempFilePath) - Else - _logger.Warn($"Error generating PDF VisualReceipt: {oPDFStatus}") - End If - 'Release resources - MyGDPicturePDF.CloseDocument() - If oPDFStatus = GdPictureStatus.OK Then - ' File.Delete(oXRechnungFile) - oNewFileinfo = New FileInfo(oOutputPath) - _logger.Info("Create_PDFfromXML() End successfully. File [{0}] written.", oNewFileinfo.FullName) - Return oNewFileinfo - Else - _logger.Warn("Create_PDFfromXML() Ends with nothing") - Return Nothing - End If + ' 6. XML einbetten und speichern + Return FinalizePDF(pdfDoc, paths) Catch ex As Exception _logger.Error(ex) Return Nothing End Try End Function - 'Private Function FormatCurrency(ByVal pValue As String, pCurrencySymbol As String) As String - ' pValue = pValue.Replace(".", ",") - ' Dim oBetrag As Decimal = pValue - ' Dim oFormatiert As String = oBetrag.ToString("N2", New Globalization.CultureInfo("de-DE")) - ' oFormatiert = $"{oFormatiert} {pCurrencySymbol}" - ' Return oFormatiert - 'End Function + +#Region "Initialisierung" + + Private Function InitializeFilePaths(xmlFile As FileInfo) As FilePaths + Try + Dim xmlPath As String = xmlFile.FullName + Dim tempPath As String = Path.Combine(Path.GetDirectoryName(xmlPath), "temp") + + ' Temp-Verzeichnis erstellen + If Not Directory.Exists(tempPath) Then + Directory.CreateDirectory(tempPath) + End If + + Dim tempXmlPath As String = Path.Combine(tempPath, "xrechnung.xml") + If File.Exists(tempXmlPath) Then + File.Delete(tempXmlPath) + End If + + Dim pdfFilename As String = Regex.Replace(xmlFile.Name, ".xml", ".pdf", RegexOptions.IgnoreCase) + Dim outputPath As String = Path.Combine(Path.GetDirectoryName(xmlPath), pdfFilename) + + If File.Exists(outputPath) Then + File.Delete(outputPath) + End If + + Dim paths As New FilePaths With { + .XmlPath = xmlPath, + .TempPath = tempPath, + .TempXmlPath = tempXmlPath, + .PdfFilename = pdfFilename, + .OutputPath = outputPath, + .CreatedString = $"Maschinell erstellt durch / Automatically created by Digital Data E-Rechnung Parser: {Now.ToString}" + } + + _logger.Debug("Create_PDFfromXML() Resulting PDF Filepath: [{0}]", paths.OutputPath) + Return paths + + Catch ex As Exception + _logger.Error("Error initializing file paths", ex) + Return Nothing + End Try + End Function + + Private Function InitializePDF() As GdPicturePDF + Try + Dim licManager As New LicenseManager() + licManager.RegisterKEY(_gdpictureLicenseKey) + + Dim pdf As New GdPicturePDF() + Dim status As GdPictureStatus = pdf.NewPDF(PdfConformance.PDF_A_3a) + + If status <> GdPictureStatus.OK Then + _logger.Warn($"Error initializing PDF: {status}") + Return Nothing + End If + + ' PDF-Einstellungen + pdf.SetOrigin(PdfOrigin.PdfOriginTopLeft) + pdf.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitMillimeter) + pdf.SetLineWidth(1) + pdf.SetTitle("xInvoice VisualReceipt") + pdf.SetAuthor("Digital Data GmbH, Ludwig Rinn Str. 16, 35452 Heuchelheim") + + ' Fonts initialisieren + fontResName = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelvetica) + fontResNameBold = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold) + fontResNameItalic = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBoldOblique) + + Return pdf + + Catch ex As Exception + _logger.Error("Error initializing PDF", ex) + Return Nothing + End Try + End Function + +#End Region + +#Region "Seiten-Management" + + Private Sub CreateNewPage(context As PdfRenderContext) + Dim status As GdPictureStatus = context.PDF.NewPage(PdfPageSizes.PdfPageSizeA4) + If status <> GdPictureStatus.OK Then + Throw New Exception($"Could not create page: {status}") + End If + + DrawHeader(context.PDF) + DrawFooter(context.PDF, context.CreatedString) + context.YPosition = MARGIN_TOP + 30 ' Nach Header + End Sub + + Private Sub DrawHeader(pdf As GdPicturePDF) + Dim y As Integer = MARGIN_TOP + + pdf.SetTextSize(TEXT_SIZE_TITLE) + pdf.DrawText(fontResName, MARGIN_LEFT, y, "xRechnung Sichtbeleg - xInvoice Visual Receipt") + y += 10 + + pdf.SetTextSize(TEXT_SIZE_NORMAL) + pdf.DrawText(fontResNameItalic, MARGIN_LEFT, y, XRechnungStrings.CommentSichtbeleg_DE_Row1) + y += LINE_HEIGHT + pdf.DrawText(fontResNameItalic, MARGIN_LEFT, y, XRechnungStrings.CommentSichtbeleg_DE_Row2) + y += LINE_HEIGHT + pdf.DrawText(fontResNameItalic, MARGIN_LEFT, y, XRechnungStrings.CommentSichtbeleg_EN_Row1) + y += LINE_HEIGHT + pdf.DrawText(fontResNameItalic, MARGIN_LEFT, y, XRechnungStrings.CommentSichtbeleg_EN_Row2) + End Sub + + Private Sub DrawFooter(pdf As GdPicturePDF, createdString As String) + pdf.DrawLine(MARGIN_LEFT, FOOTER_Y, LINE_WIDTH, FOOTER_Y) + pdf.DrawText(fontResName, MARGIN_LEFT, FOOTER_TEXT_Y, createdString) + End Sub + + Private Sub CheckAndCreateNewPageIfNeeded(context As PdfRenderContext) + If context.YPosition >= PAGE_HEIGHT_LIMIT Then + Dim status As GdPictureStatus = context.PDF.NewPage(PdfPageSizes.PdfPageSizeA4) + If status <> GdPictureStatus.OK Then + _logger.Warn($"Could not create a second page. The error was: {status}") + Throw New Exception($"Could not create page: {status}") + End If + + DrawHeader(context.PDF) + DrawFooter(context.PDF, context.CreatedString) + context.YPosition = MARGIN_TOP + 30 + End If + End Sub + +#End Region + +#Region "Datenverarbeitung" + + Private Sub ProcessInvoiceData(context As PdfRenderContext, dataTable As DataTable) + Dim formerItemSpecName As String = "" + + For Each oRow As DataRow In dataTable.Rows + ' Prüfen ob neue Seite benötigt wird + CheckAndCreateNewPageIfNeeded(context) + + Dim itemData As New InvoiceItemData(oRow) + + ' Interne Zeilen behandeln + If itemData.NormalizedArea = "INTERNAL" Then + HandleInternalRow(context, itemData) + Continue For + End If + + _logger.Debug($"WorkingItem: Area=[{itemData.NormalizedArea}] SpecName=[{itemData.SpecName}] Value=[{itemData.Value}] Caption=[{itemData.Caption}] Display=[{itemData.Display}] LastRow=[{itemData.IsLastRowSameArea}]") + + ' WICHTIG: Area-Switch-Flag VORHER setzen! + Dim isAreaSwitch As Boolean = (context.CurrentArea <> itemData.NormalizedArea) + + ' Area-Wechsel behandeln + If isAreaSwitch Then + formerItemSpecName = "" ' Reset bei Area-Wechsel + HandleAreaSwitch(context, itemData) + Else + HandleFollowUpItem(context, itemData, formerItemSpecName) + End If + + ' Item anzeigen - MIT Area-Switch-Info übergeben! + If itemData.Display AndAlso Not String.IsNullOrEmpty(itemData.Value) Then + RenderDisplayItem(context, itemData, isAreaSwitch) ' ← Parameter hinzugefügt! + End If + Next + End Sub + + Private Sub HandleInternalRow(context As PdfRenderContext, itemData As InvoiceItemData) + _logger.Debug("Next Item as Area is internal") + If itemData.SpecName = "STATIC_Y_SWITCH" Then + context.YPosition = CInt(itemData.Value) + End If + End Sub + +#End Region + +#Region "Area-Switch Handling" + + Private Sub HandleAreaSwitch(context As PdfRenderContext, itemData As InvoiceItemData) + ' WICHTIG: CurrentArea speichert die NORMALISIERTE Area + context.CurrentArea = itemData.NormalizedArea + context.CreateTextBox = False + _logger.Debug($"Area-Switch to: {context.CurrentArea}") + + ' Area-Header zeichnen - ÜBERGIBT itemData komplett + Dim areaCaption As String = GetAreaCaption(context, itemData) + If Not String.IsNullOrEmpty(areaCaption) Then + DrawAreaHeader(context, areaCaption) + DrawAreaSpecificHeaders(context) + End If + + ' Area-spezifische Initialisierung - VERWENDET context.CurrentArea (normalisiert) + Select Case context.CurrentArea + Case "TYPE" + HandleTypeAreaSwitch(context, itemData) + Case "POSITION" + HandlePositionAreaSwitch(context, itemData) + Case "ALLOWANCE" + HandleAllowanceAreaSwitch(context, itemData) + Case "INCL_NOTE" + HandleIncludedNoteAreaSwitch(context, itemData) + Case "TAXPOS" + HandleTaxPosAreaSwitch(context, itemData) + Case "AMOUNT" + context.CreateTextBox = True + End Select + End Sub + + Private Function GetAreaCaption(context As PdfRenderContext, itemData As InvoiceItemData) As String + ' VERWENDET NormalizedArea für Switch, aber AreaCaptionFromPattern für INCL_NOTE + Select Case itemData.NormalizedArea + Case "TYPE" + Return $"{Return_InvType(itemData.Value)} [{itemData.Value}]" + Case "SELLER" + Return "Verkäufer / Seller:" + Case "BUYER" + Return "Käufer / Buyer:" + Case "HEAD" + Return String.Empty + Case "POSITION" + Return "Positionen / Positions:" + Case "INCL_NOTE" + ' Verwendet den Caption aus dem Pattern INCL_NOTE#... + If Not String.IsNullOrEmpty(itemData.AreaCaptionFromPattern) Then + Return itemData.AreaCaptionFromPattern + End If + ' Fallback wenn kein Pattern vorhanden + Return "Notizen und Hinweise / Notes:" + Case "ALLOWANCE" + Return GetAllowanceCaption(context, itemData) + Case "AMOUNT" + Return "Beträge / Amounts:" + Case "TAXPOS" + Return "Steuerbeträge / Tax amounts:" + Case "PAYMENT" + Return "Zahlungsinformationen / Payment details:" + Case "EXEMPTION" + Return "UST.-Befreiungsgrund / Exemption reason:" + Case Else + Return String.Empty + End Select + End Function + + Private Function GetAllowanceCaption(context As PdfRenderContext, itemData As InvoiceItemData) As String + If itemData.SpecName = "RECEIPT_ALLOWANCE_CHARGE_INDICATOR" Then + If itemData.Value = "False" Then + context.HasDiscount = True + Return "Rabatt/Discount:" + Else + Return "Zuschlag/Surcharge:" + End If + End If + Return "Zu- oder Abschlag/Surcharge or Discount:" + End Function + + Private Sub DrawAreaHeader(context As PdfRenderContext, caption As String) + context.YPosition += LINE_HEIGHT + context.PDF.DrawLine(MARGIN_LEFT, context.YPosition, LINE_WIDTH, context.YPosition) + context.YPosition += LINE_HEIGHT + context.PDF.DrawText(fontResNameBold, MARGIN_LEFT, context.YPosition, caption) + context.YPosition += LINE_HEIGHT + + If context.CurrentArea = "TYPE" Then + context.PDF.DrawLine(MARGIN_LEFT, context.YPosition, LINE_WIDTH, context.YPosition) + context.YPosition += LINE_HEIGHT + End If + End Sub + + Private Sub DrawAreaSpecificHeaders(context As PdfRenderContext) + 'VERWENDET context.CurrentArea (bereits normalisiert) + Select Case context.CurrentArea + Case "POSITION" + DrawPositionTableHeader(context) + Case "INCL_NOTE" + ' Kein spezifischer Header für INCL_NOTE mehr nötig + ' Der Caption kommt bereits aus GetAreaCaption + Case "ALLOWANCE" ' ← KORRIGIERT! + DrawAllowanceTableHeader(context) + End Select + End Sub + + Private Sub DrawPositionTableHeader(context As PdfRenderContext) + context.PDF.DrawText(fontResName, COL_POS_NUMBER, context.YPosition, "Pos#") + context.PDF.DrawText(fontResName, COL_POS_AMOUNT, context.YPosition, "Anz./am.") + context.PDF.DrawText(fontResName, COL_POS_UNIT, context.YPosition, "Einh/Unit") + context.PDF.DrawText(fontResName, COL_POS_TEXT, context.YPosition, "Pos.Text") + context.PDF.DrawText(fontResName, COL_POS_TAX, context.YPosition, "Steuer/Tax") + context.PDF.DrawText(fontResName, COL_POS_SUM, context.YPosition, "Betrag/Sum") + End Sub + + Private Sub DrawAllowanceTableHeader(context As PdfRenderContext) + context.PDF.DrawText(fontResName, COL_POS_NUMBER, context.YPosition, "Pos#") + context.PDF.DrawText(fontResName, COL_POS_REASON, context.YPosition, "Grund/Reason") + context.PDF.DrawText(fontResName, COL_POS_TAX, context.YPosition, "Steuer/Tax") + context.PDF.DrawText(fontResName, COL_POS_SUM, context.YPosition, "Betrag/Sum") + context.PositionCount = 0 + End Sub + +#End Region + +#Region "Area-Specific Switch Handlers" + + Private Sub HandleTypeAreaSwitch(context As PdfRenderContext, itemData As InvoiceItemData) + If itemData.SpecName = "INVOICE_CURRENCY" Then + If itemData.Value <> "EUR" Then + context.CurrencySymbol = itemData.Value + End If + End If + End Sub + + Private Sub HandlePositionAreaSwitch(context As PdfRenderContext, itemData As InvoiceItemData) + If itemData.SpecName = "INVOICE_POSITION_AMOUNT" Then + ' KEIN Increment hier - wird in Follow-Up gemacht + context.YDynamic = 0 + context.YPosition += LINE_HEIGHT ' Neue Zeile für erste Position + context.PDF.DrawText(fontResName, COL_POS_NUMBER, context.YPosition, "1") ' Erste Position ist immer 1 + context.PDF.DrawText(fontResName, COL_POS_AMOUNT, context.YPosition, itemData.Value) + context.PositionCount = 1 ' Zähler auf 1 setzen statt increment + itemData.Display = False + End If + End Sub + + Private Sub HandleAllowanceAreaSwitch(context As PdfRenderContext, itemData As InvoiceItemData) + ' Erste Allowance: Prüfe ob es CHARGE_INDICATOR (Metadata) oder ACTUAL_AMOUNT (erste Zeile) ist + If itemData.SpecName = "RECEIPT_ALLOWANCE_CHARGE_INDICATOR" Then + ' Nur Metadata - nichts rendern, nur Flag setzen + _logger.Debug($"Found RECEIPT_ALLOWANCE_CHARGE_INDICATOR with value [{itemData.Value}]. Setting HasDiscount={itemData.Value = "False"} in context.") + itemData.Display = False + ElseIf {"RECEIPT_ALLOWANCE_ACTUAL_AMOUNT", "POSITION_ALLOWANCE_ACTUAL_AMOUNT"}.Contains(itemData.SpecName) Then + ' Erste Allowance-Zeile + context.YPosition += LINE_HEIGHT + context.PDF.DrawText(fontResName, COL_POS_NUMBER, context.YPosition, "1") + Dim currTerm As String = FormatCurrency(itemData.Value, context.CurrencySymbol) + If context.HasDiscount AndAlso itemData.SpecName = "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT" AndAlso Not currTerm.StartsWith("-") Then + currTerm = "-" + currTerm + End If + context.PDF.DrawText(fontResName, COL_POS_SUM, context.YPosition, currTerm) ' ← In COL_POS_SUM! + context.PositionCount = 1 + itemData.Display = False + _logger.Debug($"First Allowance/Charge rendered with amount [{currTerm}]. PositionCount set to 1. HasDiscount={context.HasDiscount}. Display set to False.") + End If + End Sub + + Private Sub HandleIncludedNoteAreaSwitch(context As PdfRenderContext, itemData As InvoiceItemData) + ' Erste Note direkt ausgeben + context.PDF.DrawText(fontResName, MARGIN_LEFT, context.YPosition, itemData.Value) + itemData.Display = False + End Sub + + Private Sub HandleTaxPosAreaSwitch(context As PdfRenderContext, itemData As InvoiceItemData) + If itemData.SpecName = "INVOICE_TAXPOS_RATE" Then + context.PositionCount = 1 + context.TaxPosText = $"{itemData.Value} %: " ' ← In Context speichern! + context.IsFirstTaxPosDisplay = True ' ← Flag setzen! + itemData.Display = False + _logger.Debug($"TAXPOS RATE in AreaSwitch accumulated: [{context.TaxPosText}]") + End If + End Sub + +#End Region + + +#Region "Follow-Up Item Handling" + Private Sub HandleFollowUpItem(context As PdfRenderContext, itemData As InvoiceItemData, ByRef formerItemSpecName As String) + _logger.Debug($"FollowItem START - CurrentArea: [{context.CurrentArea}] - ItemArea: [{itemData.NormalizedArea}] - SpecName: [{itemData.SpecName}] - Value: [{itemData.Value}] - YPos: [{context.YPosition}]") + + Dim descriptionFollowup As Boolean = False + + Select Case context.CurrentArea + Case "POSITION", "ALLOWANCE" + _logger.Debug($"FollowItem: Entering POSITION/ALLOWANCE handler") + HandlePositionOrAllowanceFollowUp(context, itemData, formerItemSpecName, descriptionFollowup) + Case "HEAD" + _logger.Debug($"FollowItem: Entering HEAD handler") + HandleHeadFollowUp(itemData) + Case "TAXPOS" + _logger.Debug($"FollowItem: Entering TAXPOS handler") + HandleTaxPosFollowUp(context, itemData) + Case "INCL_NOTE" + _logger.Debug($"FollowItem: Entering INCL_NOTE handler - YPosition before={context.YPosition}") + context.YPosition += LINE_HEIGHT + context.PDF.DrawText(fontResName, MARGIN_LEFT, context.YPosition, itemData.Value) + itemData.Display = False + _logger.Debug($"FollowItem: INCL_NOTE handler - YPosition after={context.YPosition}, Display set to False") + Case Else + _logger.Warn($"FollowItem: UNHANDLED CurrentArea=[{context.CurrentArea}] for SpecName=[{itemData.SpecName}]") + End Select + + _logger.Debug($"FollowItem END - CurrentArea: [{context.CurrentArea}] - YPos: [{context.YPosition}] - Display: [{itemData.Display}]") + End Sub + + Private Sub HandlePositionOrAllowanceFollowUp(context As PdfRenderContext, itemData As InvoiceItemData, ByRef formerItemSpecName As String, ByRef descriptionFollowup As Boolean) + ' Former Item Tracking + If itemData.SpecName <> formerItemSpecName AndAlso formerItemSpecName <> "" Then + If itemData.SpecName = "INVOICE_POSITION_ARTICLE_DESCRIPTION" AndAlso formerItemSpecName = "INVOICE_POSITION_ARTICLE" Then + descriptionFollowup = True + Else + formerItemSpecName = itemData.SpecName + End If + Else + formerItemSpecName = itemData.SpecName + End If + + ' Spezifische Item-Behandlung + If {"INVOICE_POSITION_AMOUNT", "POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT"}.Contains(itemData.SpecName) Then + HandlePositionAmountFollowUp(context, itemData, descriptionFollowup) + ElseIf itemData.SpecName = "INVOICE_POSITION_UNIT_TYPE" Then + HandleUnitTypeFollowUp(context, itemData) + ElseIf {"POSITION_ALLOWANCE_REASON", "RECEIPT_ALLOWANCE_REASON"}.Contains(itemData.SpecName) Then + ' ALLOWANCE_REASON direkt in Spalte schreiben + context.PDF.DrawText(fontResName, COL_POS_REASON, context.YPosition, itemData.Value) + itemData.Display = False + ElseIf {"INVOICE_POSITION_ARTICLE", "INVOICE_POSITION_ARTICLE_DESCRIPTION"}.Contains(itemData.SpecName) Then + HandleArticleTextFollowUp(context, itemData, descriptionFollowup) + ElseIf itemData.SpecName = "INVOICE_POSITION_NOTE" Then + HandlePositionNoteFollowUp(context, itemData) + ElseIf {"INVOICE_TAXPOS_TAX_RATE", "INVOICE_TAXPOS_RATE"}.Contains(itemData.SpecName) Then + ' ← NUR für POSITION: Tax Rate + HandleTaxRateFollowUp(context, itemData) + ElseIf {"RECEIPT_ALLOWANCE_VAT_RATE", "POSITION_ALLOWANCE_VAT_RATE"}.Contains(itemData.SpecName) Then + ' ← NEU: Für ALLOWANCE: VAT Rate (nicht CALCULATION_PERCENT!) + HandleTaxRateFollowUp(context, itemData) + ElseIf itemData.SpecName = "INVOICE_POSITION_TAX_AMOUNT" Then + HandlePositionTaxAmountFollowUp(context, itemData) + ElseIf {"RECEIPT_ALLOWANCE_VAT_CODE", "POSITION_ALLOWANCE_VAT_CODE"}.Contains(itemData.SpecName) Then + ' VAT_CODE wird nicht angezeigt (nur Metadata) + itemData.Display = False + ElseIf {"RECEIPT_ALLOWANCE_CALCULATION_PERCENT", "POSITION_ALLOWANCE_CALCULATION_PERCENT"}.Contains(itemData.SpecName) Then + ' ← NEU: CALCULATION_PERCENT wird nicht angezeigt (nur Metadata) + itemData.Display = False + ElseIf itemData.SpecName = "RECEIPT_ALLOWANCE_CHARGE_INDICATOR" Then + ' CHARGE_INDICATOR im Follow-Up (zweite Allowance) wird nicht angezeigt + itemData.Display = False + End If + End Sub + + Private Sub HandlePositionAmountFollowUp(context As PdfRenderContext, itemData As InvoiceItemData, descriptionFollowup As Boolean) + context.PositionCount += 1 + If Not descriptionFollowup Then + context.YPlus = 0 + context.YDynamic = 0 + End If + + ' WICHTIG: Neue Zeile für jede neue Position! + context.YPosition += LINE_HEIGHT + + context.PDF.DrawText(fontResName, COL_POS_NUMBER, context.YPosition, context.PositionCount.ToString()) + + If itemData.SpecName = "INVOICE_POSITION_AMOUNT" Then + context.PDF.DrawText(fontResName, COL_POS_AMOUNT, context.YPosition, itemData.Value) + ElseIf {"POSITION_ALLOWANCE_ACTUAL_AMOUNT", "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT"}.Contains(itemData.SpecName) Then + Dim term As String = FormatCurrency(itemData.Value, context.CurrencySymbol) + If context.HasDiscount AndAlso itemData.SpecName = "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT" AndAlso Not term.StartsWith("-") Then + term = "-" + term + End If + context.PDF.DrawText(fontResName, COL_POS_SUM, context.YPosition, term) + Else + If context.YDynamic = 0 Then + context.YDynamic = context.YPosition + End If + RenderMultiLineText(context, itemData.Value, COL_POS_AMOUNT, MAX_TEXT_LENGTH_POSITION) + End If + + itemData.Display = False + End Sub + + Private Sub HandleUnitTypeFollowUp(context As PdfRenderContext, itemData As InvoiceItemData) + context.YPlus = 0 + Dim unit As String = Return_UnitType(itemData.Value) + context.PDF.DrawText(fontResName, COL_POS_UNIT, context.YPosition, unit) + itemData.Display = False + End Sub + + Private Sub HandleArticleTextFollowUp(context As PdfRenderContext, itemData As InvoiceItemData, descriptionFollowup As Boolean) + If Not descriptionFollowup Then + context.YPlus = 0 + End If + If context.YDynamic = 0 Then + context.YDynamic = context.YPosition + End If + + Dim xPos As Integer = COL_POS_TEXT + If itemData.SpecName.Contains("ALLOWANCE") Then + xPos = COL_POS_REASON + End If + + RenderMultiLineText(context, itemData.Value, xPos, MAX_TEXT_LENGTH_POSITION) + itemData.Display = False + End Sub + + Private Sub HandlePositionNoteFollowUp(context As PdfRenderContext, itemData As InvoiceItemData) + If context.YDynamic = 0 Then + context.YDynamic = context.YPosition + End If + RenderMultiLineText(context, itemData.Value, COL_POS_TEXT, MAX_TEXT_LENGTH_NOTE) + itemData.Display = False + End Sub + + Private Sub HandleTaxRateFollowUp(context As PdfRenderContext, itemData As InvoiceItemData) + context.PDF.DrawText(fontResName, COL_POS_TAX, context.YPosition, $"{itemData.Value} %") + itemData.Display = False + End Sub + + Private Sub HandlePositionTaxAmountFollowUp(context As PdfRenderContext, itemData As InvoiceItemData) + Dim yPos As Double = context.YPosition - 3.5 + Dim taxTerm As String = FormatCurrency(itemData.Value, context.CurrencySymbol) + context.PDF.DrawTextBox(fontResName, 177, yPos, 198, YCoo_TextBoxPlus5(yPos), + TextAlignment.TextAlignmentFar, TextAlignment.TextAlignmentNear, + taxTerm) + itemData.Display = False ' WICHTIG: Display auf False setzen! + End Sub + + Private Sub HandleHeadFollowUp(itemData As InvoiceItemData) + If {"INVOICE_DATE", "INVOICE_SERVICE_DATE"}.Contains(itemData.SpecName) Then + itemData.Value = StringFunctions.DatetimeStringToGermanStringConverter(itemData.Value, _logger) + End If + End Sub + + Private Sub HandleTaxPosFollowUp(context As PdfRenderContext, itemData As InvoiceItemData) + ' TAXPOS Items werden zu einem String kombiniert + If itemData.SpecName = "INVOICE_TAXPOS_RATE" Then + context.PositionCount += 1 + context.TaxPosText = $"{itemData.Value} %: " ' Speichern statt direkt setzen + itemData.Display = False + _logger.Debug($"TAXPOS RATE accumulated: [{context.TaxPosText}]") + ElseIf itemData.SpecName = "INVOICE_TAXPOS_AMOUNT" Then + Dim amount As String = FormatCurrency(itemData.Value, context.CurrencySymbol) + context.TaxPosText &= amount ' Anhängen + itemData.Display = False + _logger.Debug($"TAXPOS AMOUNT accumulated: [{context.TaxPosText}]") + ElseIf itemData.SpecName = "INVOICE_TAXPOS_TYPE" Then + context.TaxPosText &= $" {itemData.Value}" ' Anhängen + itemData.Value = context.TaxPosText ' JETZT den kombinierten String setzen + itemData.Display = True ' Und anzeigen! + context.TaxPosText = "" ' Reset für nächste TAXPOS + _logger.Debug($"TAXPOS TYPE final: [{itemData.Value}], Display=True") + ElseIf itemData.Value.Contains("EXEMPTION") Then + _logger.Debug($"We got an Exemption: {itemData.Value}") + End If + End Sub + +#End Region + +#Region "Rendering" + Private Sub RenderDisplayItem(context As PdfRenderContext, itemData As InvoiceItemData, isAreaSwitch As Boolean) + ' Spezielle Behandlung für TAXPOS: Erstes Display-Item nach Area-Switch + Dim skipLineHeight As Boolean = isAreaSwitch OrElse context.IsFirstTaxPosDisplay + + If context.IsFirstTaxPosDisplay Then + context.IsFirstTaxPosDisplay = False ' Reset nach Verwendung + _logger.Debug($"RenderDisplayItem: TAXPOS first display item - skipping line height") + End If + + ' Y-Position anpassen - ABER NICHT nach Area-Switch oder erstem TAXPOS Display! + If Not itemData.IsLastRowSameArea AndAlso Not skipLineHeight Then + context.YPosition += LINE_HEIGHT + _logger.Debug($"RenderDisplayItem: Adding line height. New YPosition: {context.YPosition}") + End If + + ' Formatierung für Währungsfelder + Dim displayValue As String = itemData.Value + If ShouldFormatAsCurrency(context.CurrentArea, itemData.SpecName) Then + displayValue = FormatCurrency(itemData.Value, context.CurrencySymbol) + End If + + ' Rendern basierend auf Layout + If Not String.IsNullOrEmpty(itemData.Caption) Then + RenderLabelValuePair(context, itemData.Caption, displayValue) + Else + If itemData.IsLastRowSameArea Then + context.PDF.DrawText(fontResName, itemData.XPosition, context.YPosition, displayValue) + Else + RenderTextWithWrapping(context, displayValue) + End If + End If + End Sub + + Private Function ShouldFormatAsCurrency(area As String, specName As String) As Boolean + If area <> "AMOUNT" AndAlso area <> "ALLOWANCE" Then Return False + + Dim currencyFields As String() = { + "INVOICE_TOTAL_TAX", "INVOICE_TOTAL_NET", "INVOICE_TOTAL_GROSS", + "INVOICE_TOTAL_CHARGE_AMOUNT", "POSITION_ALLOWANCE_ACTUAL_AMOUNT", + "RECEIPT_ALLOWANCE_ACTUAL_AMOUNT", "POSITION_ALLOWANCE_CALCULATION_PERCENT", + "RECEIPT_ALLOWANCE_CALCULATION_PERCENT" + } + + Return currencyFields.Contains(specName) + End Function + + Private Sub RenderLabelValuePair(context As PdfRenderContext, label As String, value As String) + context.PDF.DrawText(fontResName, MARGIN_LEFT, context.YPosition, label) + + If context.CreateTextBox Then + Dim textBoxYPos As Integer = context.YPosition - 3 + context.PDF.DrawTextBox(fontResName, COL_VALUE_X, textBoxYPos, 90, YCoo_TextBoxPlus5(textBoxYPos), + TextAlignment.TextAlignmentFar, TextAlignment.TextAlignmentCenter, + value) + Else + context.PDF.DrawText(fontResName, COL_VALUE_X, context.YPosition, value) + End If + End Sub + + Private Sub RenderTextWithWrapping(context As PdfRenderContext, text As String) + If text.Length > MAX_TEXT_LENGTH_FULL Then + For i As Integer = 0 To text.Length - 1 Step MAX_TEXT_LENGTH_FULL + Dim length As Integer = Math.Min(MAX_TEXT_LENGTH_FULL, text.Length - i) + Dim part As String = text.Substring(i, length) + context.PDF.DrawText(fontResName, MARGIN_LEFT, context.YPosition, part) + context.YPosition += LINE_HEIGHT + Next + Else + context.PDF.DrawText(fontResName, MARGIN_LEFT, context.YPosition, text) + End If + End Sub + + Private Sub RenderMultiLineText(context As PdfRenderContext, text As String, xPos As Integer, maxLength As Integer) + Dim partsNL As List(Of String) = StringFunctions.SplitTextByNewLine(text) + + For Each linePart As String In partsNL + Dim parts As List(Of String) = StringFunctions.SplitText_Length(linePart, maxLength) + For Each part As String In parts + context.PDF.DrawText(fontResName, xPos, context.YDynamic, part) + context.YDynamic += LINE_HEIGHT + context.YPlus += LINE_HEIGHT + Next + Next + End Sub + +#End Region + +#Region "Finalisierung" + + Private Function FinalizePDF(pdf As GdPicturePDF, paths As FilePaths) As FileInfo + Try + ' XML einbetten + If File.Exists(paths.XmlPath) Then + pdf.EmbedFile(paths.XmlPath, "E-invoice XML attachment") + Else + _logger.Info("XML File is not existing and could not be embedded!") + Return Nothing + End If + + pdf.EnableCompression(True) + + ' Speichern + Dim status As GdPictureStatus = pdf.SaveToFile(paths.OutputPath) + If status = GdPictureStatus.OK Then + _logger.Info("PDF VisualReceipt generated successfully!") + _logger.Debug("Vor MOVE... oxmlFilePath: [{0}] / oTempFilePath: [{1}]", paths.XmlPath, paths.TempXmlPath) + File.Move(paths.XmlPath, paths.TempXmlPath) + + pdf.CloseDocument() + Dim result As New FileInfo(paths.OutputPath) + _logger.Info("Create_PDFfromXML() End successfully. File [{0}] written.", result.FullName) + Return result + Else + _logger.Warn($"Error generating PDF VisualReceipt: {status}") + pdf.CloseDocument() + Return Nothing + End If + + Catch ex As Exception + pdf.CloseDocument() + _logger.Error("Error finalizing PDF", ex) + Return Nothing + End Try + End Function + +#End Region + +#Region "Helper Classes" + + Private Class FilePaths + Public Property XmlPath As String + Public Property TempPath As String + Public Property TempXmlPath As String + Public Property PdfFilename As String + Public Property OutputPath As String + Public Property CreatedString As String + End Class + + Private Class PdfRenderContext + Public Property PDF As GdPicturePDF + Public Property YPosition As Integer + Public Property CurrentArea As String + Public Property CurrencySymbol As String + Public Property PositionCount As Integer + Public Property HasDiscount As Boolean + Public Property YDynamic As Integer + Public Property YPlus As Integer + Public Property CreateTextBox As Boolean + Public Property CreatedString As String + Public Property TaxPosText As String + Public Property IsFirstTaxPosDisplay As Boolean ' ← NEU + + Public Sub New(pdf As GdPicturePDF, createdString As String) + Me.PDF = pdf + Me.CreatedString = createdString + YPosition = MARGIN_TOP + CurrentArea = String.Empty + CurrencySymbol = "€" + PositionCount = 0 + HasDiscount = False + YDynamic = 0 + YPlus = 0 + CreateTextBox = False + TaxPosText = "" + IsFirstTaxPosDisplay = False ' ← NEU + End Sub + End Class + + Private Class InvoiceItemData + Public Property Area As String + Public Property SpecName As String + Public Property Value As String + Public Property Caption As String + Public Property Display As Boolean + Public Property IsLastRowSameArea As Boolean + Public Property XPosition As Integer + Public Property AreaSwitch As Boolean + + ' Neue Property für normalisierte Area + Public ReadOnly Property NormalizedArea As String + Get + Return NormalizeAreaName(Area) + End Get + End Property + + ' Neue Property für Area-Caption (nur bei INCL_NOTE#) + Public ReadOnly Property AreaCaptionFromPattern As String + Get + If Area.StartsWith("INCL_NOTE#") Then + Return Area.Substring(10) ' Entfernt "INCL_NOTE#" + End If + Return String.Empty + End Get + End Property + + Public Sub New(row As DataRow) + Area = GetSafeString(row, "Area") + SpecName = GetSafeString(row, "SPEC_NAME") + Value = GetSafeString(row, "ITEM_VALUE") + Caption = GetSafeString(row, "Row_Caption") + Display = GetSafeBoolean(row, "Display", False) + IsLastRowSameArea = GetSafeBoolean(row, "Y_eq_lastrow", False) + XPosition = GetSafeInteger(row, "xPosition", MARGIN_LEFT) + AreaSwitch = False + End Sub + + Private Shared Function GetSafeString(row As DataRow, columnName As String) As String + If row.Table.Columns.Contains(columnName) AndAlso Not IsDBNull(row.Item(columnName)) Then + Return row.Item(columnName).ToString() + End If + Return String.Empty + End Function + + Private Shared Function GetSafeBoolean(row As DataRow, columnName As String, defaultValue As Boolean) As Boolean + If row.Table.Columns.Contains(columnName) AndAlso Not IsDBNull(row.Item(columnName)) Then + Return CBool(row.Item(columnName)) + End If + Return defaultValue + End Function + + Private Shared Function GetSafeInteger(row As DataRow, columnName As String, defaultValue As Integer) As Integer + If row.Table.Columns.Contains(columnName) AndAlso Not IsDBNull(row.Item(columnName)) Then + Return CInt(row.Item(columnName)) + End If + Return defaultValue + End Function + + ' Statische Hilfsmethode für Area-Normalisierung + Private Shared Function NormalizeAreaName(area As String) As String + If area.StartsWith("INCL_NOTE#") Then + Return "INCL_NOTE" + End If + Return area + End Function + End Class + +#End Region + +#Region "Hilfsfunktionen" + Private Function FormatCurrency(ByVal pValue As String, pCurrencySymbol As String) As String pValue = pValue.Trim() @@ -556,21 +894,22 @@ Public Class XRechnungViewDocument Return $"{oFormatiert} {pCurrencySymbol}" End Function - Private Function FormatStringT(ByVal text As String) As String Return text.Replace(vbCr, " - ").Replace(vbLf, "").Replace(vbTab, " ") End Function + Private Function RemoveNewlinesAndTabs(ByVal text As String) As String Return text.Replace(vbCr, " - ").Replace(vbLf, "").Replace(vbTab, " ") End Function - Private Function YCoo_TextBoxMinus5(yPosition As Integer) + + Private Function YCoo_TextBoxMinus5(yPosition As Integer) As Integer Return yPosition - 5 End Function - Private Function YCoo_TextBoxPlus5(yPosition As Integer) + + Private Function YCoo_TextBoxPlus5(yPosition As Integer) As Integer Return yPosition + 5 End Function - Function SplitTextByNewLine(text As String) As List(Of String) If String.IsNullOrEmpty(text) Then Return New List(Of String)() @@ -581,28 +920,6 @@ Public Class XRechnungViewDocument Return lines End Function - - - - - - - - - - - - - - - - - - - - - - Private Function Return_InvType(pType As String) As String Dim oReturn As String = "Rechnung/invoice" If pType = "380" Then @@ -661,4 +978,6 @@ Public Class XRechnungViewDocument Return oReturn End Function -End Class +#End Region + +End Class \ No newline at end of file diff --git a/Jobs/logParser.txt b/Jobs/logParser.txt index 0a07a141..ef4626c9 100644 --- a/Jobs/logParser.txt +++ b/Jobs/logParser.txt @@ -1,149 +1,212 @@ -14:11:16.2895|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:31) -> Create_PDFfromXML() Start -14:11:16.7508|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:67) -> Create_PDFfromXML() Resulting PDF Filepath: [E:\DocumentProcessing\Input\CF98H9H9GßK7HT6CTINCLUDED20260609~Attm0.pdf] -14:11:17.2907|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TYPE -14:11:17.2907|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: TYPE -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_CURRENCY -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [TYPE] - ItemSpecname: [INVOICE_CURRENCY] - ItemValue: [EUR] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_NUMBER -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: HEAD -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_DATE -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [HEAD] - ItemSpecname: [INVOICE_DATE] - ItemValue: [20260415] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_REFERENCE -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [HEAD] - ItemSpecname: [INVOICE_REFERENCE] - ItemValue: [.] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_REFERENCE3 -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [HEAD] - ItemSpecname: [INVOICE_REFERENCE3] - ItemValue: [BUEMMERSTEDER TREDDE 26] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_SELLER_NAME -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: SELLER -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_SELLER_ADDRESS -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [SELLER] - ItemSpecname: [INVOICE_SELLER_ADDRESS] - ItemValue: [ANCKELMANNSPLATZ 1] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_SELLER_POSTALCODE -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [SELLER] - ItemSpecname: [INVOICE_SELLER_POSTALCODE] - ItemValue: [20537] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_SELLER_CITY -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [SELLER] - ItemSpecname: [INVOICE_SELLER_CITY] - ItemValue: [HAMBURG] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_SELLER_TAX_ID -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [SELLER] - ItemSpecname: [INVOICE_SELLER_TAX_ID] - ItemValue: [DE815728335] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_BUYER_NAME -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: BUYER -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_BUYER_ADRESS2 -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [BUYER] - ItemSpecname: [INVOICE_BUYER_ADRESS2] - ItemValue: [26133 OLDENBURG] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_BUYER_POSTALCODE -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [BUYER] - ItemSpecname: [INVOICE_BUYER_POSTALCODE] - ItemValue: [26133] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_BUYER_CITY -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [BUYER] - ItemSpecname: [INVOICE_BUYER_CITY] - ItemValue: [OLDENBURG] -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TOTAL_NET -14:11:17.2998|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TOTAL_TAX -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [AMOUNT] - ItemSpecname: [INVOICE_TOTAL_TAX] - ItemValue: [290.24] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TOTAL_GROSS -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [AMOUNT] - ItemSpecname: [INVOICE_TOTAL_GROSS] - ItemValue: [1817.81] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_RATE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: TAXPOS -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [TAXPOS] - ItemSpecname: [INVOICE_TAXPOS_AMOUNT] - ItemValue: [290.24] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_TYPE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [TAXPOS] - ItemSpecname: [INVOICE_TAXPOS_TYPE] - ItemValue: [VAT] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_PAYMENT_IBAN -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: PAYMENT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_PAYMENT_BIC -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [PAYMENT] - ItemSpecname: [INVOICE_PAYMENT_BIC] - ItemValue: [DRESDEFF200] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: POSITION -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_UNIT_TYPE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_UNIT_TYPE] - ItemValue: [C62] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_ARTICLE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_ARTICLE] - ItemValue: [Grundpreis] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_TAX_RATE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_TAXPOS_TAX_RATE] - ItemValue: [19.00] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_TAX_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_TAX_AMOUNT] - ItemValue: [0.00] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_AMOUNT] - ItemValue: [30] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_UNIT_TYPE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_UNIT_TYPE] - ItemValue: [DAY] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_ARTICLE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_ARTICLE] - ItemValue: [Zusatztage] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_TAX_RATE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_TAXPOS_TAX_RATE] - ItemValue: [19.00] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_TAX_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_TAX_AMOUNT] - ItemValue: [1388.70] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_AMOUNT] - ItemValue: [30] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_UNIT_TYPE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_UNIT_TYPE] - ItemValue: [DAY] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_ARTICLE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_ARTICLE] - ItemValue: [Basis-Schutzpaket] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_TAX_RATE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_TAXPOS_TAX_RATE] - ItemValue: [19.00] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_TAX_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_TAX_AMOUNT] - ItemValue: [0.00] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_AMOUNT] - ItemValue: [30] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_UNIT_TYPE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_UNIT_TYPE] - ItemValue: [DAY] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_ARTICLE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_ARTICLE] - ItemValue: [Wintertaugliche Bereifung] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_TAX_RATE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_TAXPOS_TAX_RATE] - ItemValue: [19.00] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_TAX_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_TAX_AMOUNT] - ItemValue: [0.00] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_AMOUNT] - ItemValue: [10] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_UNIT_TYPE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_UNIT_TYPE] - ItemValue: [P1] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_ARTICLE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_ARTICLE] - ItemValue: [Hoch-Saison Zuschlag] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_TAX_RATE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_TAXPOS_TAX_RATE] - ItemValue: [19.00] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_POSITION_TAX_AMOUNT -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [POSITION] - ItemSpecname: [INVOICE_POSITION_TAX_AMOUNT] - ItemValue: [138.87] -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:17.3098|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: INCLUDED_NOTE -14:11:21.7769|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Tarif/Produkt:RETPM1DE-TR RET MONTH 28 2000KM LDW] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Rechnung 100347739726 für Zeitraum 11.11.2025 bis 11.12.2025] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Rechnung 100347849509 für Zeitraum 11.12.2025 bis 10.01.2026] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Rechnung 100347967044 für Zeitraum 10.01.2026 bis 09.02.2026] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Kundennummer: 75434222] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Mietvertragsnummer: 1099811038] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Fahrer: ANDREAS HEYKAMP] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Driver ID: 123198150] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Anmietung: OLDENBURG/OLDENBURG] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Anmietung: 09.02.2026 13:38:00] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Rückgabe: OLDENBURG/OLDENBURG] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Rückgabe: 11.03.2026 13:38:00] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Gefahrene Fahrzeugkategorie: TMHW] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Fahrzeug: M.A.N. MN 3140TMHW] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Berechnete Fahrzeugkategorie: TMHW] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Kennzeichen: HH-WN8367] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Berechnete Tage: 30] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Gefahrene Kilometer: -] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Faelliger Betrag/ Amount Due in EUR: 1,817.81] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INCLUDED_NOTE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [INCLUDED_NOTE] - ItemSpecname: [INCLUDED_NOTE] - ItemValue: [Lastschrift/ Debit Note: 100348247743] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_RATE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:179) -> Area-Switch to: TAXPOS -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_AMOUNT -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [TAXPOS] - ItemSpecname: [INVOICE_TAXPOS_AMOUNT] - ItemValue: [290.24] -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:172) -> Working on SPEC_NAME: INVOICE_TAXPOS_TYPE -14:11:21.7985|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:299) -> FollowItem - Area: [TAXPOS] - ItemSpecname: [INVOICE_TAXPOS_TYPE] - ItemValue: [VAT] -14:11:21.8517|XRechnungViewDocument|INFO >> Create_PDFfromXML(XRechnungViewDocument.vb:503) -> PDF VisualReceipt generated successfully! -14:11:21.8517|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:504) -> Vor MOVE... oxmlFilePath: [E:\DocumentProcessing\Input\CF98H9H9GßK7HT6CTINCLUDED20260609~Attm0.xml] / oTempFilePath: [E:\DocumentProcessing\Input\temp\xrechnung.xml] -14:11:21.8567|XRechnungViewDocument|INFO >> Create_PDFfromXML(XRechnungViewDocument.vb:514) -> Create_PDFfromXML() End successfully. File [E:\DocumentProcessing\Input\CF98H9H9GßK7HT6CTINCLUDED20260609~Attm0.pdf] written. \ No newline at end of file +10:37:58.6259|XRechnungViewDocument|DEBUG >> Create_PDFfromXML(XRechnungViewDocument.vb:60) -> Create_PDFfromXML() Start +10:37:58.6259|XRechnungViewDocument|DEBUG >> InitializeFilePaths(XRechnungViewDocument.vb:122) -> Create_PDFfromXML() Resulting PDF Filepath: [E:\DocumentProcessing\Input\CF98H9H9GßK7HCTALLOWANCE20260612~Attm0.pdf] +10:38:01.1471|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[TYPE] SpecName=[INVOICE_TYPE] Value=[380] Caption=[] Display=[False] LastRow=[False] +10:38:01.1471|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: TYPE +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[TYPE] SpecName=[INVOICE_CURRENCY] Value=[EUR] Caption=[] Display=[False] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [TYPE] - ItemArea: [TYPE] - SpecName: [INVOICE_CURRENCY] - Value: [EUR] - YPos: [65] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[TYPE] for SpecName=[INVOICE_CURRENCY] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [TYPE] - YPos: [65] - Display: [False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[HEAD] SpecName=[INVOICE_NUMBER] Value=[371803-MP-2] Caption=[Rechnungsnummer/Invoice-No:] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: HEAD +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[HEAD] SpecName=[INVOICE_DATE] Value=[20251212] Caption=[Datum/Date:] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [HEAD] - ItemArea: [HEAD] - SpecName: [INVOICE_DATE] - Value: [20251212] - YPos: [65] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:462) -> FollowItem: Entering HEAD handler +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [HEAD] - YPos: [65] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 70 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[HEAD] SpecName=[INVOICE_SERVICE_DATE] Value=[20251210] Caption=[Leistungsdatum/Service date:] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [HEAD] - ItemArea: [HEAD] - SpecName: [INVOICE_SERVICE_DATE] - Value: [20251210] - YPos: [70] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:462) -> FollowItem: Entering HEAD handler +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [HEAD] - YPos: [70] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 75 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[HEAD] SpecName=[INVOICE_REFERENCE] Value=[3151305357] Caption=[BT-13 BestellReferenz/BORD:] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [HEAD] - ItemArea: [HEAD] - SpecName: [INVOICE_REFERENCE] - Value: [3151305357] - YPos: [75] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:462) -> FollowItem: Entering HEAD handler +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [HEAD] - YPos: [75] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 80 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[HEAD] SpecName=[INVOICE_REFERENCE3] Value=[7099391] Caption=[BT-19 KSt/CostCenter] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [HEAD] - ItemArea: [HEAD] - SpecName: [INVOICE_REFERENCE3] - Value: [7099391] - YPos: [80] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:462) -> FollowItem: Entering HEAD handler +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [HEAD] - YPos: [80] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 85 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[SELLER] SpecName=[INVOICE_SELLER_NAME] Value=[Tecfeld GmbH] Caption=[] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: SELLER +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[SELLER] SpecName=[INVOICE_SELLER_ADDRESS] Value=[Albert-Schweitzer-Ring 31] Caption=[] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [SELLER] - ItemArea: [SELLER] - SpecName: [INVOICE_SELLER_ADDRESS] - Value: [Albert-Schweitzer-Ring 31] - YPos: [100] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[SELLER] for SpecName=[INVOICE_SELLER_ADDRESS] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [SELLER] - YPos: [100] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 105 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[SELLER] SpecName=[INVOICE_SELLER_POSTALCODE] Value=[22045] Caption=[] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [SELLER] - ItemArea: [SELLER] - SpecName: [INVOICE_SELLER_POSTALCODE] - Value: [22045] - YPos: [105] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[SELLER] for SpecName=[INVOICE_SELLER_POSTALCODE] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [SELLER] - YPos: [105] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 110 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[SELLER] SpecName=[INVOICE_SELLER_CITY] Value=[Hamburg] Caption=[] Display=[True] LastRow=[True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [SELLER] - ItemArea: [SELLER] - SpecName: [INVOICE_SELLER_CITY] - Value: [Hamburg] - YPos: [110] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[SELLER] for SpecName=[INVOICE_SELLER_CITY] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [SELLER] - YPos: [110] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[SELLER] SpecName=[INVOICE_SELLER_TAX_ID] Value=[DE324798118] Caption=[USt-ID/Seller tax ID:] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [SELLER] - ItemArea: [SELLER] - SpecName: [INVOICE_SELLER_TAX_ID] - Value: [DE324798118] - YPos: [110] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[SELLER] for SpecName=[INVOICE_SELLER_TAX_ID] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [SELLER] - YPos: [110] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 115 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[SELLER] SpecName=[INVOICE_SELLER_ID] Value=[7099391] Caption=[Lieferant-Nr/Seller ID:] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [SELLER] - ItemArea: [SELLER] - SpecName: [INVOICE_SELLER_ID] - Value: [7099391] - YPos: [115] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[SELLER] for SpecName=[INVOICE_SELLER_ID] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [SELLER] - YPos: [115] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 120 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[BUYER] SpecName=[INVOICE_BUYER_NAME] Value=[WISAG Gebäudetechnik Nord] Caption=[] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: BUYER +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[BUYER] SpecName=[INVOICE_BUYER_ADRESS2] Value=[GmbH & Co.KG] Caption=[] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [BUYER] - ItemArea: [BUYER] - SpecName: [INVOICE_BUYER_ADRESS2] - Value: [GmbH & Co.KG] - YPos: [135] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[BUYER] for SpecName=[INVOICE_BUYER_ADRESS2] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [BUYER] - YPos: [135] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 140 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[BUYER] SpecName=[INVOICE_BUYER_ADRESS] Value=[Heidenkampsweg 51] Caption=[] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [BUYER] - ItemArea: [BUYER] - SpecName: [INVOICE_BUYER_ADRESS] - Value: [Heidenkampsweg 51] - YPos: [140] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[BUYER] for SpecName=[INVOICE_BUYER_ADRESS] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [BUYER] - YPos: [140] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 145 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[BUYER] SpecName=[INVOICE_BUYER_POSTALCODE] Value=[20097 ] Caption=[] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [BUYER] - ItemArea: [BUYER] - SpecName: [INVOICE_BUYER_POSTALCODE] - Value: [20097 ] - YPos: [145] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[BUYER] for SpecName=[INVOICE_BUYER_POSTALCODE] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [BUYER] - YPos: [145] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 150 +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[BUYER] SpecName=[INVOICE_BUYER_CITY] Value=[ Hamburg] Caption=[] Display=[True] LastRow=[True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [BUYER] - ItemArea: [BUYER] - SpecName: [INVOICE_BUYER_CITY] - Value: [ Hamburg] - YPos: [150] +10:38:01.1599|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[BUYER] for SpecName=[INVOICE_BUYER_CITY] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [BUYER] - YPos: [150] - Display: [True] +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_CHARGE_INDICATOR] Value=[True] Caption=[] Display=[False] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: ALLOWANCE +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleAllowanceAreaSwitch(XRechnungViewDocument.vb:415) -> Found RECEIPT_ALLOWANCE_CHARGE_INDICATOR with value [True]. Setting HasDiscount=False in context. +10:38:01.1599|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_ACTUAL_AMOUNT] Value=[6.29] Caption=[] Display=[True] LastRow=[False] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_ACTUAL_AMOUNT] - Value: [6.29] - YPos: [170] +10:38:01.1599|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [175] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_REASON] Value=[TVZ] Caption=[] Display=[True] LastRow=[True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_REASON] - Value: [TVZ] - YPos: [175] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [175] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_CALCULATION_PERCENT] Value=[0.75] Caption=[] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_CALCULATION_PERCENT] - Value: [0.75] - YPos: [175] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [175] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_VAT_RATE] Value=[19.00] Caption=[] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_VAT_RATE] - Value: [19.00] - YPos: [175] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [175] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_VAT_CODE] Value=[S] Caption=[] Display=[True] LastRow=[True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_VAT_CODE] - Value: [S] - YPos: [175] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [175] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_CHARGE_INDICATOR] Value=[True] Caption=[] Display=[False] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_CHARGE_INDICATOR] - Value: [True] - YPos: [175] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [175] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_ACTUAL_AMOUNT] Value=[20.00] Caption=[] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_ACTUAL_AMOUNT] - Value: [20.00] - YPos: [175] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [180] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_REASON] Value=[Porto/Fracht] Caption=[] Display=[True] LastRow=[True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_REASON] - Value: [Porto/Fracht] - YPos: [180] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [180] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_CALCULATION_PERCENT] Value=[100.00] Caption=[] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_CALCULATION_PERCENT] - Value: [100.00] - YPos: [180] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [180] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_VAT_RATE] Value=[19.00] Caption=[] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_VAT_RATE] - Value: [19.00] - YPos: [180] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [180] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[ALLOWANCE] SpecName=[RECEIPT_ALLOWANCE_VAT_CODE] Value=[S] Caption=[] Display=[True] LastRow=[True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [ALLOWANCE] - ItemArea: [ALLOWANCE] - SpecName: [RECEIPT_ALLOWANCE_VAT_CODE] - Value: [S] - YPos: [180] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [ALLOWANCE] - YPos: [180] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[AMOUNT] SpecName=[INVOICE_TOTAL_NET] Value=[864.87] Caption=[Nettobetrag/Net amount:] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: AMOUNT +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[AMOUNT] SpecName=[INVOICE_TOTAL_TAX] Value=[164.33] Caption=[Steuerbetrag/Tax amount:] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [AMOUNT] - ItemArea: [AMOUNT] - SpecName: [INVOICE_TOTAL_TAX] - Value: [164.33] - YPos: [195] +10:38:01.1715|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[AMOUNT] for SpecName=[INVOICE_TOTAL_TAX] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [AMOUNT] - YPos: [195] - Display: [True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 200 +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[AMOUNT] SpecName=[INVOICE_TOTAL_GROSS] Value=[1029.20] Caption=[Bruttobetrag/Gross amount:] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [AMOUNT] - ItemArea: [AMOUNT] - SpecName: [INVOICE_TOTAL_GROSS] - Value: [1029.20] - YPos: [200] +10:38:01.1715|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[AMOUNT] for SpecName=[INVOICE_TOTAL_GROSS] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [AMOUNT] - YPos: [200] - Display: [True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 205 +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[AMOUNT] SpecName=[INVOICE_TOTAL_CHARGE_AMOUNT] Value=[26.29] Caption=[Zuschläge/Charge amount:] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [AMOUNT] - ItemArea: [AMOUNT] - SpecName: [INVOICE_TOTAL_CHARGE_AMOUNT] - Value: [26.29] - YPos: [205] +10:38:01.1715|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[AMOUNT] for SpecName=[INVOICE_TOTAL_CHARGE_AMOUNT] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [AMOUNT] - YPos: [205] - Display: [True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 210 +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[TAXPOS] SpecName=[INVOICE_TAXPOS_RATE] Value=[19.00] Caption=[] Display=[False] LastRow=[True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: TAXPOS +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleTaxPosAreaSwitch(XRechnungViewDocument.vb:444) -> TAXPOS RATE in AreaSwitch accumulated: [19.00 %: ] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[TAXPOS] SpecName=[INVOICE_TAXPOS_AMOUNT] Value=[164.33] Caption=[] Display=[False] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [TAXPOS] - ItemArea: [TAXPOS] - SpecName: [INVOICE_TAXPOS_AMOUNT] - Value: [164.33] - YPos: [225] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:465) -> FollowItem: Entering TAXPOS handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleTaxPosFollowUp(XRechnungViewDocument.vb:611) -> TAXPOS AMOUNT accumulated: [19.00 %: 164,33 €] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [TAXPOS] - YPos: [225] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[TAXPOS] SpecName=[INVOICE_TAXPOS_TYPE] Value=[VAT] Caption=[] Display=[True] LastRow=[True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [TAXPOS] - ItemArea: [TAXPOS] - SpecName: [INVOICE_TAXPOS_TYPE] - Value: [VAT] - YPos: [225] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:465) -> FollowItem: Entering TAXPOS handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleTaxPosFollowUp(XRechnungViewDocument.vb:617) -> TAXPOS TYPE final: [19.00 %: 164,33 € VAT], Display=True +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [TAXPOS] - YPos: [225] - Display: [True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:632) -> RenderDisplayItem: TAXPOS first display item - skipping line height +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[PAYMENT] SpecName=[INVOICE_PAYMENT_TERMS] Value=[#SKONTO#TAGE=8#PROZENT=2.00# +] Caption=[] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: PAYMENT +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[PAYMENT] SpecName=[INVOICE_PAYMENT_IBAN] Value=[DE09200505501261129074] Caption=[IBAN:] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [PAYMENT] - ItemArea: [PAYMENT] - SpecName: [INVOICE_PAYMENT_IBAN] - Value: [DE09200505501261129074] - YPos: [240] +10:38:01.1715|XRechnungViewDocument|WARN >> HandleFollowUpItem(XRechnungViewDocument.vb:474) -> FollowItem: UNHANDLED CurrentArea=[PAYMENT] for SpecName=[INVOICE_PAYMENT_IBAN] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [PAYMENT] - YPos: [240] - Display: [True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:638) -> RenderDisplayItem: Adding line height. New YPosition: 245 +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[POSITION] SpecName=[INVOICE_POSITION_AMOUNT] Value=[1.00] Caption=[] Display=[True] LastRow=[False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: POSITION +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[POSITION] SpecName=[INVOICE_POSITION_UNIT_TYPE] Value=[MTR] Caption=[] Display=[True] LastRow=[True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [POSITION] - ItemArea: [POSITION] - SpecName: [INVOICE_POSITION_UNIT_TYPE] - Value: [MTR] - YPos: [265] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [POSITION] - YPos: [265] - Display: [False] +10:38:01.1715|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[POSITION] SpecName=[INVOICE_POSITION_ARTICLE] Value=[Radiallüfter 60 kW Viessmann] Caption=[] Display=[True] LastRow=[True] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [POSITION] - ItemArea: [POSITION] - SpecName: [INVOICE_POSITION_ARTICLE] - Value: [Radiallüfter 60 kW Viessmann] - YPos: [265] +10:38:01.1715|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [POSITION] - YPos: [265] - Display: [False] +10:38:01.1873|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[POSITION] SpecName=[INVOICE_POSITION_ARTICLE_DESCRIPTION] Value=[7831032] Caption=[] Display=[True] LastRow=[True] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [POSITION] - ItemArea: [POSITION] - SpecName: [INVOICE_POSITION_ARTICLE_DESCRIPTION] - Value: [7831032] - YPos: [265] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [POSITION] - YPos: [265] - Display: [False] +10:38:01.1873|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[POSITION] SpecName=[INVOICE_TAXPOS_TAX_RATE] Value=[19.00] Caption=[] Display=[True] LastRow=[True] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [POSITION] - ItemArea: [POSITION] - SpecName: [INVOICE_TAXPOS_TAX_RATE] - Value: [19.00] - YPos: [265] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [POSITION] - YPos: [265] - Display: [False] +10:38:01.1873|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[POSITION] SpecName=[INVOICE_POSITION_TAX_AMOUNT] Value=[838.58] Caption=[] Display=[True] LastRow=[True] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [POSITION] - ItemArea: [POSITION] - SpecName: [INVOICE_POSITION_TAX_AMOUNT] - Value: [838.58] - YPos: [265] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:459) -> FollowItem: Entering POSITION/ALLOWANCE handler +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [POSITION] - YPos: [265] - Display: [False] +10:38:01.1873|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[TAXPOS] SpecName=[INVOICE_TAXPOS_RATE] Value=[19.00] Caption=[] Display=[False] LastRow=[False] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleAreaSwitch(XRechnungViewDocument.vb:269) -> Area-Switch to: TAXPOS +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleTaxPosAreaSwitch(XRechnungViewDocument.vb:444) -> TAXPOS RATE in AreaSwitch accumulated: [19.00 %: ] +10:38:01.1873|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[TAXPOS] SpecName=[INVOICE_TAXPOS_AMOUNT] Value=[164.33] Caption=[] Display=[False] LastRow=[False] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [TAXPOS] - ItemArea: [TAXPOS] - SpecName: [INVOICE_TAXPOS_AMOUNT] - Value: [164.33] - YPos: [45] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:465) -> FollowItem: Entering TAXPOS handler +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleTaxPosFollowUp(XRechnungViewDocument.vb:611) -> TAXPOS AMOUNT accumulated: [19.00 %: 164,33 €] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [TAXPOS] - YPos: [45] - Display: [False] +10:38:01.1873|XRechnungViewDocument|DEBUG >> ProcessInvoiceData(XRechnungViewDocument.vb:234) -> WorkingItem: Area=[TAXPOS] SpecName=[INVOICE_TAXPOS_TYPE] Value=[VAT] Caption=[] Display=[True] LastRow=[False] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:453) -> FollowItem START - CurrentArea: [TAXPOS] - ItemArea: [TAXPOS] - SpecName: [INVOICE_TAXPOS_TYPE] - Value: [VAT] - YPos: [45] +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:465) -> FollowItem: Entering TAXPOS handler +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleTaxPosFollowUp(XRechnungViewDocument.vb:617) -> TAXPOS TYPE final: [19.00 %: 164,33 € VAT], Display=True +10:38:01.1873|XRechnungViewDocument|DEBUG >> HandleFollowUpItem(XRechnungViewDocument.vb:477) -> FollowItem END - CurrentArea: [TAXPOS] - YPos: [45] - Display: [True] +10:38:01.1873|XRechnungViewDocument|DEBUG >> RenderDisplayItem(XRechnungViewDocument.vb:632) -> RenderDisplayItem: TAXPOS first display item - skipping line height +10:38:01.2414|XRechnungViewDocument|INFO >> FinalizePDF(XRechnungViewDocument.vb:730) -> PDF VisualReceipt generated successfully! +10:38:01.2414|XRechnungViewDocument|DEBUG >> FinalizePDF(XRechnungViewDocument.vb:731) -> Vor MOVE... oxmlFilePath: [E:\DocumentProcessing\Input\CF98H9H9GßK7HCTALLOWANCE20260612~Attm0.xml] / oTempFilePath: [E:\DocumentProcessing\Input\temp\xrechnung.xml] +10:38:01.2414|XRechnungViewDocument|INFO >> FinalizePDF(XRechnungViewDocument.vb:736) -> Create_PDFfromXML() End successfully. File [E:\DocumentProcessing\Input\CF98H9H9GßK7HCTALLOWANCE20260612~Attm0.pdf] written. +10:38:01.2696|FilesystemEx|DEBUG >> GetVersionedString(FilesystemEx.vb:202) -> Versioned: String [CF98H9H9GßK7HCTALLOWANCE20260612~Attm0], Version [1] +10:38:01.2696|FilesystemEx|DEBUG >> GetVersionedFilenameWithFilecheck(FilesystemEx.vb:148) -> Intermediate Filename is E:\DocumentProcessing\Output\File\DocumentKindAssigned\ZUGFeRD\Success\CF98H9H9GßK7HCTALLOWANCE20260612~Attm0.pdf +10:38:01.2696|FilesystemEx|DEBUG >> GetVersionedFilenameWithFilecheck(FilesystemEx.vb:149) -> File version: 1 +10:38:01.2696|FilesystemEx|DEBUG >> GetVersionedFilenameWithFilecheck(FilesystemEx.vb:157) -> Final Filename is E:\DocumentProcessing\Output\File\DocumentKindAssigned\ZUGFeRD\Success\CF98H9H9GßK7HCTALLOWANCE20260612~Attm0.pdf +10:38:01.2696|FileFunctions|INFO >> MoveFiles(FileFunctions.vb:72) -> File moved to E:\DocumentProcessing\Output\File\DocumentKindAssigned\ZUGFeRD\Success\CF98H9H9GßK7HCTALLOWANCE20260612~Attm0.pdf +10:38:01.2696|FileFunctions|INFO >> MoveFiles(FileFunctions.vb:122) -> Finished moving files +10:38:01.2696|ImportZUGFeRDFiles|INFO >> Start(ImportZUGFeRDFiles.vb:114) -> END processing file group K7HCTALLOWANCE20260612 +10:38:01.2696|ImportZUGFeRDFiles|DEBUG >> Start(ImportZUGFeRDFiles.vb:114) -> Before default sql commit: oxRechnungHandle [True] +10:38:01.2696|ImportZUGFeRDFiles|DEBUG >> Start(ImportZUGFeRDFiles.vb:114) -> Before default sql close +10:38:01.2696|ImportZUGFeRDFiles|DEBUG >> Start(ImportZUGFeRDFiles.vb:524) -> Finishing Job ImportZUGFeRDFiles