From 83b7797ee2dccba207d826de6f58a5557e5699d1 Mon Sep 17 00:00:00 2001
From: alexei-dobriansky <77933119+alexei-dobriansky@users.noreply.github.com>
Date: Fri, 3 Jul 2026 15:45:15 +0200
Subject: [PATCH] Bug 624364: Intrastat DE groups detail lines by
Country/Region of Origin
The INTRA-2022-DE data exchange definition grouped export detail lines by Tariff
No. (Field ID 5) but omitted Country/Region of Origin Code (Field ID 24), so two
lines with the same tariff but different origin country were merged and one origin
was lost. Add Field ID 24 to both detail grouping sets (7-RCPTDETAIL and
8-SHPTDETAIL) in the runtime label text and the mirrored DE_DataExchDefMap.xml,
and add a per-company upgrade tag that re-imports the definition so existing
tenants pick up the new grouping.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../app/AppResources/DE_DataExchDefMap.xml | 2 ++
.../src/IntrastatReportDEUpgrade.Codeunit.al | 22 +++++++++++++++++++
.../IntrastatReportManagementDE.Codeunit.al | 4 ++--
.../src/IntrastatReportTestDE.Codeunit.al | 20 +++++++++++++++++
4 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/src/Apps/DE/IntrastatDE/app/AppResources/DE_DataExchDefMap.xml b/src/Apps/DE/IntrastatDE/app/AppResources/DE_DataExchDefMap.xml
index b123be2112..2982becfa1 100644
--- a/src/Apps/DE/IntrastatDE/app/AppResources/DE_DataExchDefMap.xml
+++ b/src/Apps/DE/IntrastatDE/app/AppResources/DE_DataExchDefMap.xml
@@ -344,6 +344,7 @@
+
@@ -574,6 +575,7 @@
+
diff --git a/src/Apps/DE/IntrastatDE/app/src/IntrastatReportDEUpgrade.Codeunit.al b/src/Apps/DE/IntrastatDE/app/src/IntrastatReportDEUpgrade.Codeunit.al
index 015fed199d..1c4466ff0d 100644
--- a/src/Apps/DE/IntrastatDE/app/src/IntrastatReportDEUpgrade.Codeunit.al
+++ b/src/Apps/DE/IntrastatDE/app/src/IntrastatReportDEUpgrade.Codeunit.al
@@ -15,6 +15,7 @@ codeunit 11034 IntrastatReportDEUpgrade
begin
UpdateLinesType();
UpdateDefaultDataExchangeDef();
+ UpdateDataExchangeDefCountryOfOriginGrouping();
end;
local procedure UpdateLinesType()
@@ -53,6 +54,21 @@ codeunit 11034 IntrastatReportDEUpgrade
UpgradeTag.SetUpgradeTag(GetIntrastatDERcptPartnerIDRemovalTag());
end;
+ local procedure UpdateDataExchangeDefCountryOfOriginGrouping()
+ var
+ DataExchDef: Record "Data Exch. Def";
+ IntrastatReportManagementDE: Codeunit IntrastatReportManagementDE;
+ UpgradeTag: Codeunit "Upgrade Tag";
+ begin
+ if UpgradeTag.HasUpgradeTag(GetIntrastatDECountryOfOriginGroupingTag()) then
+ exit;
+
+ if DataExchDef.Get('INTRA-2022-DE') then
+ IntrastatReportManagementDE.CreateDefaultDataExchangeDef();
+
+ UpgradeTag.SetUpgradeTag(GetIntrastatDECountryOfOriginGroupingTag());
+ end;
+
internal procedure GetIntrastatTypeUpdateTag(): Code[250]
begin
exit('MS-481518-IntrastatTypeUpdateDE-20230818');
@@ -63,9 +79,15 @@ codeunit 11034 IntrastatReportDEUpgrade
exit('MS-622161-IntrastatDERcptPartnerIDRemoval-20260301');
end;
+ internal procedure GetIntrastatDECountryOfOriginGroupingTag(): Code[250]
+ begin
+ exit('MS-624364-IntrastatDECountryOfOriginGrouping-20260703');
+ end;
+
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Upgrade Tag", 'OnGetPerCompanyUpgradeTags', '', false, false)]
local procedure RegisterUpgradeTags(var PerCompanyUpgradeTags: List of [Code[250]])
begin
PerCompanyUpgradeTags.Add(GetIntrastatDERcptPartnerIDRemovalTag());
+ PerCompanyUpgradeTags.Add(GetIntrastatDECountryOfOriginGroupingTag());
end;
}
diff --git a/src/Apps/DE/IntrastatDE/app/src/IntrastatReportManagementDE.Codeunit.al b/src/Apps/DE/IntrastatDE/app/src/IntrastatReportManagementDE.Codeunit.al
index a8ed7f5351..def91c96dc 100644
--- a/src/Apps/DE/IntrastatDE/app/src/IntrastatReportManagementDE.Codeunit.al
+++ b/src/Apps/DE/IntrastatDE/app/src/IntrastatReportManagementDE.Codeunit.al
@@ -508,10 +508,10 @@ codeunit 11029 IntrastatReportManagementDE
Locked = true; // will be replaced with file import when available
DataExchangeXMLP4Txt: Label 'ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer1400ALPHANUM_ONLY00001.00=ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer1400ALPHANUM_ONLY00001.00=ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer',
Locked = true; // will be replaced with file import when available
- DataExchangeXMLP5Txt: Label '1400ALPHANUM_ONLY00001.00=ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer1400ALPHANUM_ONLY00001.00=TRANSACTIONACODETransaction A Code41100000.00TRANSACTIONBCODETransaction B Code42100000.00',
+ DataExchangeXMLP5Txt: Label '1400ALPHANUM_ONLY00001.00=ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer1400ALPHANUM_ONLY00001.00=TRANSACTIONACODETransaction A Code41100000.00TRANSACTIONBCODETransaction B Code42100000.00',
Locked = true; // will be replaced with file import when available
DataExchangeXMLP6Txt: Label 'ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer1400ALPHANUM_ONLY00001.00=ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer1400ALPHANUM_ONLY00001.00=ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer1400ALPHANUM_ONLY00001.00=ALPHANUM_ONLYAlphanumeric Text Only70000000.00ROUNDTOINTRound to integer14',
Locked = true; // will be replaced with file import when available
- DataExchangeXMLP7Txt: Label '00ALPHANUM_ONLY00001.00=TRANSACTIONACODETransaction A Code41100000.00TRANSACTIONBCODETransaction B Code42100000.00',
+ DataExchangeXMLP7Txt: Label '00ALPHANUM_ONLY00001.00=TRANSACTIONACODETransaction A Code41100000.00TRANSACTIONBCODETransaction B Code42100000.00',
Locked = true; // will be replaced with file import when available
}
diff --git a/src/Apps/DE/IntrastatDE/test/src/IntrastatReportTestDE.Codeunit.al b/src/Apps/DE/IntrastatDE/test/src/IntrastatReportTestDE.Codeunit.al
index 622a0f7adf..a70eeab14d 100644
--- a/src/Apps/DE/IntrastatDE/test/src/IntrastatReportTestDE.Codeunit.al
+++ b/src/Apps/DE/IntrastatDE/test/src/IntrastatReportTestDE.Codeunit.al
@@ -138,6 +138,26 @@ codeunit 148700 "Intrastat Report Test DE"
'New Intrastat report must inherit the Default Submission Channel from the setup.');
end;
+ [Test]
+ procedure DataExchDefinitionGroupsDetailLinesByCountryOfOrigin()
+ var
+ DataExchFieldGrouping: Record "Data Exch. Field Grouping";
+ begin
+ // [SCENARIO 624364] The INTRA-2022-DE detail line definitions group by Country/Region of Origin (Field ID 24)
+ // so detail lines with the same tariff but different origin country are not merged into one.
+ Initialize();
+
+ // [THEN] The receipt detail line definition groups by Country/Region of Origin (Field ID 24)
+ DataExchFieldGrouping.SetRange("Data Exch. Def Code", IntrastatDEDataExchDefCodeTok);
+ DataExchFieldGrouping.SetRange("Data Exch. Line Def Code", '7-RCPTDETAIL');
+ DataExchFieldGrouping.SetRange("Field ID", 24);
+ Assert.IsFalse(DataExchFieldGrouping.IsEmpty(), 'Receipt detail must group by Country/Region of Origin (Field ID 24).');
+
+ // [THEN] The shipment detail line definition groups by Country/Region of Origin (Field ID 24)
+ DataExchFieldGrouping.SetRange("Data Exch. Line Def Code", '8-SHPTDETAIL');
+ Assert.IsFalse(DataExchFieldGrouping.IsEmpty(), 'Shipment detail must group by Country/Region of Origin (Field ID 24).');
+ end;
+
local procedure Initialize()
var
IntrastatReportSetup: Record "Intrastat Report Setup";