diff --git a/sources/autoNum/assignvariables.cpp b/sources/autoNum/assignvariables.cpp
index 3aa46b54c..ac92a4e9f 100644
--- a/sources/autoNum/assignvariables.cpp
+++ b/sources/autoNum/assignvariables.cpp
@@ -304,6 +304,7 @@ namespace autonum
str.replace("%{designation_auxiliary1}", dc.value("designation_auxiliary1").toString());
str.replace("%{manufacturer_auxiliary1}", dc.value("manufacturer_auxiliary1").toString());
str.replace("%{manufacturer_reference_auxiliary1}", dc.value("manufacturer_reference_auxiliary1").toString());
+ str.replace("%{machine_manufacturer_reference_auxiliary1}", dc.value("machine_manufacturer_reference_auxiliary1").toString());
str.replace("%{supplier_auxiliary1}", dc.value("supplier_auxiliary1").toString());
str.replace("%{quantity_auxiliary1}", dc.value("quantity_auxiliary1").toString());
str.replace("%{unity_auxiliary1}", dc.value("unity_auxiliary1").toString());
@@ -313,6 +314,7 @@ namespace autonum
str.replace("%{designation_auxiliary2}", dc.value("designation_auxiliary2").toString());
str.replace("%{manufacturer_auxiliary2}", dc.value("manufacturer_auxiliary2").toString());
str.replace("%{manufacturer_reference_auxiliary2}", dc.value("manufacturer_reference_auxiliary2").toString());
+ str.replace("%{machine_manufacturer_reference_auxiliary2}", dc.value("machine_manufacturer_reference_auxiliary2").toString());
str.replace("%{supplier_auxiliary2}", dc.value("supplier_auxiliary2").toString());
str.replace("%{quantity_auxiliary2}", dc.value("quantity_auxiliary2").toString());
str.replace("%{unity_auxiliary2}", dc.value("unity_auxiliary2").toString());
@@ -323,6 +325,7 @@ namespace autonum
str.replace("%{designation_auxiliary3}", dc.value("designation_auxiliary3").toString());
str.replace("%{manufacturer_auxiliary3}", dc.value("manufacturer_auxiliary3").toString());
str.replace("%{manufacturer_reference_auxiliary3}", dc.value("manufacturer_reference_auxiliary3").toString());
+ str.replace("%{machine_manufacturer_reference_auxiliary3}", dc.value("machine_manufacturer_reference_auxiliary3").toString());
str.replace("%{supplier_auxiliary3}", dc.value("supplier_auxiliary3").toString());
str.replace("%{quantity_auxiliary3}", dc.value("quantity_auxiliary3").toString());
str.replace("%{unity_auxiliary3}", dc.value("unity_auxiliary3").toString());
@@ -333,6 +336,7 @@ namespace autonum
str.replace("%{designation_auxiliary4}", dc.value("designation_auxiliary4").toString());
str.replace("%{manufacturer_auxiliary4}", dc.value("manufacturer_auxiliary4").toString());
str.replace("%{manufacturer_reference_auxiliary4}", dc.value("manufacturer_reference_auxiliary4").toString());
+ str.replace("%{machine_manufacturer_reference_auxiliary4}", dc.value("machine_manufacturer_reference_auxiliary4").toString());
str.replace("%{supplier_auxiliary4}", dc.value("supplier_auxiliary4").toString());
str.replace("%{quantity_auxiliary4}", dc.value("quantity_auxiliary4").toString());
str.replace("%{unity_auxiliary4}", dc.value("unity_auxiliary4").toString());
diff --git a/tests/qttest/fixtures/aux_machine_reference.qet b/tests/qttest/fixtures/aux_machine_reference.qet
new file mode 100644
index 000000000..5803b63b5
--- /dev/null
+++ b/tests/qttest/fixtures/aux_machine_reference.qet
@@ -0,0 +1,270 @@
+
+
+ 10/2/26
+ 02-10-2026
+ 2026-10-02
+ skeleton
+ /tmp/qet-mcp-new-2fmbrnvi/skeleton.qet
+ 19:29
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MMR-AUX1
+ MMR-AUX2
+ MMR-AUX3
+ MMR-AUX4
+ MR-AUX1
+ MR-AUX2
+ MR-AUX3
+ MR-AUX4
+
+
+
+
+
+
+
+ label
+
+
+ [%{machine_manufacturer_reference_auxiliary1}|MR-AUX1]
+ [%{machine_manufacturer_reference_auxiliary1}|%{manufacturer_reference_auxiliary1}]
+
+
+ [%{machine_manufacturer_reference_auxiliary2}|MR-AUX2]
+ [%{machine_manufacturer_reference_auxiliary2}|%{manufacturer_reference_auxiliary2}]
+
+
+ [%{machine_manufacturer_reference_auxiliary3}|MR-AUX3]
+ [%{machine_manufacturer_reference_auxiliary3}|%{manufacturer_reference_auxiliary3}]
+
+
+ [%{machine_manufacturer_reference_auxiliary4}|MR-AUX4]
+ [%{machine_manufacturer_reference_auxiliary4}|%{manufacturer_reference_auxiliary4}]
+
+
+
+
+
+
+
+
+
+ Elements importats
+ Zavedené prvky
+ Importerede elementer
+ Importierte Elemente
+ Εισηγμένα στοιχεία
+ Imported elements
+ Elementos importados
+ Éléments importés
+ Uvezeni elementi
+ Elementi importati
+ インバートされた要素
+ 전기 심볼 요소
+ 전기 심볼 요소
+ Elementen geïmporteerd
+ Elementen geïmporteerd
+ Elementy importowane
+ Elementos importados
+ Elementos importados
+ Elemente importate
+ Импортированные элементы
+ Uvoženi elementi
+ Importerade element
+ İthal öğeler
+ Імпортовані елементи
+ 导入元件
+
+
+
+ كهربائي
+ Elèctric
+ Elektrotechnika
+ Elektrisk
+ Elektrik
+ Ηλεκτρικά
+ Electric
+ Eléctrica
+ Sähkö
+ Electrique
+ Električno
+ Elektromos
+ Elettrica
+ 電気
+ 전기
+ Цахилгаан
+ Elektrisk
+ Elektrotechniek
+ Elektrisch
+ Elektrotechnika
+ Elétrico
+ Elétrica
+ Electric
+ Электротехника
+ Elektrické
+ Elektrika
+ Електрика
+ El
+ Elektrik
+ Електрика
+ 10_电气
+ 电气工程
+
+
+
+ متعدد الأقطاب
+ Multifilar
+ Vícežilový
+ Flere ledere
+ Allpolig
+ Πολυγραμμικό
+ All-pole
+ Multifilar
+ Yleisnapa
+ Multifilaire
+ Univerzalni
+ Többvonalas szimbólumok
+ Multifilare
+ 複線
+ 다-극
+ Бүх туйл
+ Alle poler
+ Veel polig
+ All-pole
+ Schematy wieloliniowe
+ Multipolar
+ Multifilar
+ Bipolar
+ Многополюсные
+ Všepólové
+ Vsi poli
+ Свe-полни
+ Allpolig
+ Çok kutuplu
+ Багатополюсні
+ 10_全极
+
+
+
+ طرفيات توصيل
+ Borns i regletes de borns
+ Svorky
+ Klemmer og klemmerækker
+ Klemmen und Klemmleisten
+ Ακροδέκτες και σειρές ακροδεκτών
+ Terminals and terminal strips
+ Terminales
+ Rimaelittimet
+ Bornes et borniers
+ Stezaljke i redne stezaljke
+ Sorkapcsok
+ Terminali
+ 端子と端子台
+ 단자 및 단자대
+ Клемм ба клеммын хавтан
+ Rekkeklemmer og klemlister
+ Klemmenlijst
+ Klemmen en klemmenstroken
+ Złącza i zaciski
+ Terminais
+ Bornes e borneiras
+ Borne și borniere
+ Клеммы и клеммники
+ Svorky a svorkovnice
+ Vrstne sponke in sponke
+ Клеме и редне клеме
+ Plintar och plintrader
+ Klemensler ve klemens şeritleri
+ Клеми та клемні колодки
+ 接线端子与端子排
+
+
+
+
+
+ طرف توصيل
+ Born de continuïtat
+ Spojovací svorka
+ Klemme
+ Klemme
+ Ακροδέκτης
+ Terminal block
+ Terminal de unión
+ Liitinrima
+ Borne continuité
+ Stezaljka
+ Sorkapocs
+ Terminale di unione
+ 端子ブロック
+ 단자 블록
+ Клеммын блок
+ Rekkeklemme
+ klem doorgang
+ Klemmenblok
+ Zacisk
+ Terminal de combinação
+ Borne de combinacao
+ Bloc de borne
+ Клеммное соединение
+ Svorkovnica
+ Vrstna sponka
+ Клемни блок
+ Plint
+ Klemens bloğu
+ Клемна колодка
+ 2号接线端子
+
+
+ generic
+ generic
+
+ Author: The QElectroTech team
+License: see http://qelectrotech.org/wiki/doc/elements_license
+
+
+
+
+
+
+
+ label
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qttest/tst_resaveunchanged.cpp b/tests/qttest/tst_resaveunchanged.cpp
index 252457dd3..042a934d6 100644
--- a/tests/qttest/tst_resaveunchanged.cpp
+++ b/tests/qttest/tst_resaveunchanged.cpp
@@ -98,6 +98,26 @@ private slots:
QVERIFY2(read(first) == read(second), "the second save changed the file");
}
+ // %{machine_manufacturer_reference_auxiliary1..4} resolve like their
+ // neighbours: they were missing from AssignVariables::replaceVariable()
+ // and printed as literal text. The fixture has one terminal whose
+ // four texts are "[%{machine_..._auxiliaryN}|%{manufacturer_reference_auxiliaryN}]",
+ // saved by a build without the fix, so the literal text is in the file.
+ void auxiliaryMachineReferenceResolves()
+ {
+ const QString fixture = QFINDTESTDATA("fixtures/aux_machine_reference.qet");
+ QVERIFY(!fixture.isEmpty());
+ const QString saved = resave(fixture);
+ QVERIFY2(!saved.isEmpty(), "--resave failed");
+ const QString xml = QString::fromUtf8(read(saved));
+ for (int n = 1; n <= 4; ++n) {
+ const QString shown = QStringLiteral("[MMR-AUX%1|MR-AUX%1]").arg(n);
+ QVERIFY2(xml.contains(shown), qPrintable(shown + QStringLiteral(" not in the saved file")));
+ }
+ QVERIFY2(!xml.contains(QStringLiteral("[%{machine")),
+ "a machine manufacturer reference variable was left unresolved");
+ }
+
// A title-block value that is a single space is kept through two saves
// (#973), and a value with accents comes back as it went in.
void singleSpaceValueKept()