diff --git a/CHANGELOG.md b/CHANGELOG.md
index d118f2a..7606341 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,24 @@
---
+## 1.3.0.43 (2026-07-21)
+
+### Серии номенклатуры — подбор по владельцу вида и сроку
+
+Модуль: `МенеджерОбменаЧерезУниверсальныйФормат`.
+
+- Для ПКО `Справочник_СерииНоменклатуры` добавлен подбор существующей серии с учетом
+ владельца серий вида номенклатуры в целевой ИБ:
+ - `ВладелецВида + Номер + ГоденДо`,
+ - `ВладелецВида + Номер`,
+ - при пустом номере: `ВладелецВида + ГоденДо`.
+- Поиск теперь опирается на маппинг видов номенклатуры на target (через
+ `РК_ВладелецСерийДляВидаНоменклатуры`), что снимает конфликт, когда вид в source и target различается.
+- При найденной серии с другим GUID создается предупреждение и запись из пакета пропускается
+ (без создания дубликата).
+
+---
+
## 1.3.0.42 (2026-07-15)
### Обмен — этапы графика оплаты ЗаказКлиента (Д1.2)
diff --git a/README.md b/README.md
index a782d5a..6c4512a 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@
| **Номенклатура** (новая) | заполнение учёта по виду номенклатуры **целевой** ИБ |
| **Виды номенклатуры** (существует) | пропуск обновления (сопоставление по GUID сохраняется) |
| **Склады** (существует) | пропуск перезаписи реквизитов |
-| **Серии номенклатуры** | проверка владельца серий по настройкам вида в целевой ИБ |
+| **Серии номенклатуры** | проверка владельца + подбор по `Номер/ГоденДо` в рамках владельца вида (v1.3.0.43+) |
| **Ставки НДС** | ПКПД: `НДС22`, `НДС22_122` |
Защищаемые реквизиты номенклатуры: `ВидНоменклатуры`, `ОсобенностьУчета`, `ТипНоменклатуры`, `ИспользованиеХарактеристик`, `ВладелецСерий`, `ВладелецХарактеристик`, `ГруппаФинансовогоУчета`, `СкладскаяГруппа`.
diff --git a/VERSION b/VERSION
index 6a61bcd..fdf3631 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.0.42
+1.3.0.43
diff --git a/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl b/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl
index 810c704..96fb7aa 100644
--- a/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl
+++ b/src/CommonModules/МенеджерОбменаЧерезУниверсальныйФормат/Ext/Module.bsl
@@ -329,6 +329,85 @@
КонецФункции
+// Подбор существующей серии в целевой ИБ по владельцу вида номенклатуры.
+// Приоритет:
+// 1) Вид + Номер + СрокГодности (если номер и срок заполнены)
+// 2) Вид + Номер (если номер заполнен)
+// 3) Вид + СрокГодности (если номер пустой и срок заполнен)
+//
+// Параметры:
+// ВладелецСерий - СправочникСсылка.ВидыНоменклатуры
+// НомерСерии - Строка
+// СрокГодности - Дата, Неопределено
+//
+// Возвращаемое значение:
+// СправочникСсылка.СерииНоменклатуры, Неопределено
+//
+Функция РК_НайтиСериюПоВладельцуНомерСроку(ВладелецСерий, НомерСерии, СрокГодности)
+
+ Если Не ЗначениеЗаполнено(ВладелецСерий) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ НомерСерии = СокрЛП(Строка(НомерСерии));
+ СрокЗаполнен = ЗначениеЗаполнено(СрокГодности) И СрокГодности <> '00010101';
+
+ Если Не ПустаяСтрока(НомерСерии) Тогда
+ Запрос = Новый Запрос;
+ Если СрокЗаполнен Тогда
+ Запрос.Текст =
+ "ВЫБРАТЬ ПЕРВЫЕ 1
+ | Серии.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.СерииНоменклатуры КАК Серии
+ |ГДЕ
+ | Серии.ВидНоменклатуры = &Владелец
+ | И НЕ Серии.ПометкаУдаления
+ | И Серии.Номер = &Номер
+ | И Серии.ГоденДо = &Срок";
+ Запрос.УстановитьПараметр("Срок", СрокГодности);
+ Иначе
+ Запрос.Текст =
+ "ВЫБРАТЬ ПЕРВЫЕ 1
+ | Серии.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.СерииНоменклатуры КАК Серии
+ |ГДЕ
+ | Серии.ВидНоменклатуры = &Владелец
+ | И НЕ Серии.ПометкаУдаления
+ | И Серии.Номер = &Номер";
+ КонецЕсли;
+ Запрос.УстановитьПараметр("Владелец", ВладелецСерий);
+ Запрос.УстановитьПараметр("Номер", НомерСерии);
+ Выборка = Запрос.Выполнить().Выбрать();
+ Если Выборка.Следующий() Тогда
+ Возврат Выборка.Ссылка;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если СрокЗаполнен Тогда
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ ПЕРВЫЕ 1
+ | Серии.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.СерииНоменклатуры КАК Серии
+ |ГДЕ
+ | Серии.ВидНоменклатуры = &Владелец
+ | И НЕ Серии.ПометкаУдаления
+ | И Серии.ГоденДо = &Срок";
+ Запрос.УстановитьПараметр("Владелец", ВладелецСерий);
+ Запрос.УстановитьПараметр("Срок", СрокГодности);
+ Выборка = Запрос.Выполнить().Выбрать();
+ Если Выборка.Следующий() Тогда
+ Возврат Выборка.Ссылка;
+ КонецЕсли;
+ КонецЕсли;
+
+ Возврат Неопределено;
+
+КонецФункции
+
// &После ДобавитьПКО_Справочник_СерииНоменклатуры.
// Подключает обработчик проверки владельца серии при получении из пакета обмена.
//
@@ -377,6 +456,8 @@
КонецЕсли;
СсылкаДляЖурнала = ?(ДанныеИБ = Неопределено, ПолученныеДанные.ПолучитьСсылкуНового(), ДанныеИБ.Ссылка);
+ НомерСерии = СокрЛП(Строка(ПолученныеДанные.Номер));
+ СрокГодности = ПолученныеДанные.ГоденДо;
Если ДанныеИБ <> Неопределено Тогда
@@ -406,33 +487,16 @@
Иначе
ПолученныеДанные.ВидНоменклатуры = КорректныйВладелец;
-
- Запрос = Новый Запрос;
- Запрос.Текст =
- "ВЫБРАТЬ ПЕРВЫЕ 1
- | Серии.Ссылка КАК Ссылка
- |ИЗ
- | Справочник.СерииНоменклатуры КАК Серии
- |ГДЕ
- | Серии.ВидНоменклатуры = &Владелец
- | И НЕ Серии.ПометкаУдаления
- | И (Серии.Наименование = &Наименование
- | ИЛИ Серии.Номер = &Номер
- | И &НомерЗаполнен)";
- Запрос.УстановитьПараметр("Владелец", КорректныйВладелец);
- Запрос.УстановитьПараметр("Наименование", ПолученныеДанные.Наименование);
- Запрос.УстановитьПараметр("Номер", ПолученныеДанные.Номер);
- Запрос.УстановитьПараметр("НомерЗаполнен", ЗначениеЗаполнено(ПолученныеДанные.Номер));
-
- Выборка = Запрос.Выполнить().Выбрать();
- Если Выборка.Следующий()
- И Выборка.Ссылка <> СсылкаДляЖурнала Тогда
+ СуществующаяСерия = РК_НайтиСериюПоВладельцуНомерСроку(КорректныйВладелец, НомерСерии, СрокГодности);
+ Если ЗначениеЗаполнено(СуществующаяСерия)
+ И СуществующаяСерия <> СсылкаДляЖурнала Тогда
ТекстОшибки = СтрШаблон(
- "Серия с наименованием ""%1"" уже существует у владельца %2 (%3), GUID отличается от пакета.",
- ПолученныеДанные.Наименование,
+ "Серия уже существует у владельца %1 (%2), GUID отличается от пакета. Номер=""%3"", годен до=""%4"".",
КорректныйВладелец,
- Выборка.Ссылка);
+ СуществующаяСерия,
+ НомерСерии,
+ ?(ЗначениеЗаполнено(СрокГодности), Формат(СрокГодности, "ДФ=yyyy-MM-dd"), ""));
ЗаписатьОшибкуВЖурналРегистрации(СсылкаДляЖурнала, ТекстОшибки, КомпонентыОбмена,
НСтр("ru = 'создать серию номенклатуры'"), УровеньЖурналаРегистрации.Предупреждение);
ПолученныеДанные = Неопределено;
diff --git a/src/Configuration.xml b/src/Configuration.xml
index b284caf..2b34eed 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -62,7 +62,7 @@
Role.РК_ОсновнаяРоль
- 1.3.0.42
+ 1.3.0.43
Language.Русский