diff --git a/CHANGELOG.md b/CHANGELOG.md
index 33ff822..826d76e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,29 @@
---
+## 1.3.0.39 (2026-07-06)
+
+### Контрагенты — уникальность ИНН/КПП
+
+Модуль: `ПартнерыИКонтрагентыЛокализация` (заимствован).
+
+В целевой конфигурации (crm3-26) проверка уникальности ИНН/КПП реализована в модуле локализации, а не в `ПартнерыИКонтрагенты` (как в crm3-dev). Функция возвращает структуру `НайденныеСовпадения` / `ДоступноСоздание` и учитывает `ЮрФизЛицо` (различение ИП и физлица).
+
+| Процедура/функция | Изменение |
+|-------------------|-----------|
+| `ИННКППУжеИспользуетсяВИнформационнойБазе` | при поиске дублей исключаются контрагенты с `ПометкаУдаления = Истина` |
+| `ПроверитьКорректностьЗаполненияКонтрагента` | для записываемого контрагента с `ПометкаУдаления` проверка уникальности ИНН/КПП **не выполняется** |
+
+**Поведение** — аналогично `crm3-dev.rhana` v1.0.1.333:
+
+- обычная запись — уникальность среди непомеченных на удаление;
+- запись с пометкой удаления — проверка уникальности ИНН/КПП пропускается;
+- дубль только у помеченного контрагента не блокирует активную карточку.
+
+**Примечание:** отдельная CRM-функция `CRM_КлиентыСервер.ИННКППУжеИспользуетсяВИнформационнойБазе` (поиск по `Партнеры.CRM_ИНН`) не затронута — она относится к сценариям CRM, не к типовой записи справочника `Контрагенты`.
+
+---
+
## 1.3.0.38 (2026-07-06)
### Обмен — фильтр узла «Рабочая CRM3»
diff --git a/VERSION b/VERSION
index 913e646..122b2b5 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.0.38
+1.3.0.39
diff --git a/src/CommonModules/ПартнерыИКонтрагентыЛокализация.xml b/src/CommonModules/ПартнерыИКонтрагентыЛокализация.xml
new file mode 100644
index 0000000..bf64c56
--- /dev/null
+++ b/src/CommonModules/ПартнерыИКонтрагентыЛокализация.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+ Module
+ Extended
+
+
+
+ Adopted
+ ПартнерыИКонтрагентыЛокализация
+
+ c7ca240a-541d-4f86-8e30-0e63aafcd5fa
+ false
+ false
+ true
+ true
+ true
+ false
+
+
+
diff --git a/src/CommonModules/ПартнерыИКонтрагентыЛокализация/Ext/Module.bsl b/src/CommonModules/ПартнерыИКонтрагентыЛокализация/Ext/Module.bsl
new file mode 100644
index 0000000..cbc32d6
--- /dev/null
+++ b/src/CommonModules/ПартнерыИКонтрагентыЛокализация/Ext/Module.bsl
@@ -0,0 +1,175 @@
+
+&ИзменениеИКонтроль("ИННКППУжеИспользуетсяВИнформационнойБазе")
+Функция РК_ИННКППУжеИспользуетсяВИнформационнойБазе(ИНН, КПП, ИсключаяСсылку = Неопределено, ЮрФизЛицо = Неопределено) Экспорт
+
+ РезультатПоиска = Новый Структура;
+ РезультатПоиска.Вставить("НайденныеСовпадения", Новый Массив);
+ РезультатПоиска.Вставить("ДоступноСоздание", Истина);
+
+ УстановитьПривилегированныйРежим(Истина);
+
+ Запрос = Новый Запрос;
+ #Удаление
+ Запрос.Текст = "
+ |ВЫБРАТЬ
+ | Контрагенты.Ссылка КАК Ссылка,
+ | Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
+ | Партнеры.Ссылка КАК Партнер,
+ | Партнеры.Код КАК Код,
+ | ПРЕДСТАВЛЕНИЕ(Партнеры.ОсновнойМенеджер) КАК ОсновнойМенеджер
+ |ИЗ
+ | Справочник.Контрагенты КАК Контрагенты
+ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
+ | ПО Контрагенты.Партнер = Партнеры.Ссылка
+ |ГДЕ
+ | Контрагенты.ИНН = &ИНН
+ | И Контрагенты.КПП = &КПП
+ | И Контрагенты.Ссылка <> &Ссылка";
+ #КонецУдаления
+ #Вставка
+ // {{ [+] (фрагмент ДОБАВЛЕН), уникальность ИНН/КПП только среди непомеченных на удаление контрагентов
+ Запрос.Текст = "
+ |ВЫБРАТЬ
+ | Контрагенты.Ссылка КАК Ссылка,
+ | Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
+ | Партнеры.Ссылка КАК Партнер,
+ | Партнеры.Код КАК Код,
+ | ПРЕДСТАВЛЕНИЕ(Партнеры.ОсновнойМенеджер) КАК ОсновнойМенеджер
+ |ИЗ
+ | Справочник.Контрагенты КАК Контрагенты
+ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
+ | ПО Контрагенты.Партнер = Партнеры.Ссылка
+ |ГДЕ
+ | Контрагенты.ИНН = &ИНН
+ | И Контрагенты.КПП = &КПП
+ | И Контрагенты.Ссылка <> &Ссылка
+ | И НЕ Контрагенты.ПометкаУдаления";
+ // }}
+ #КонецВставки
+
+ Запрос.УстановитьПараметр("ИНН",ИНН);
+ Запрос.УстановитьПараметр("КПП",КПП);
+ Запрос.УстановитьПараметр("Ссылка",ИсключаяСсылку);
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Если Выборка.Количество() = 1 Тогда
+
+ Выборка.Следующий();
+
+ Если ЗначениеЗаполнено(ИсключаяСсылку)
+ И Выборка.Ссылка = ИсключаяСсылку Тогда
+
+ Возврат РезультатПоиска;
+
+ ИначеЕсли ЗначениеЗаполнено(ЮрФизЛицо) Тогда
+
+ Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
+ И Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
+
+ ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
+
+ ИначеЕсли ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
+ И Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
+
+ ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
+
+ Иначе
+
+ ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
+ РезультатПоиска.ДоступноСоздание = Ложь;
+
+ КонецЕсли;
+
+ Иначе
+
+ ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
+ РезультатПоиска.ДоступноСоздание = Ложь;
+
+ КонецЕсли;
+
+ ИначеЕсли Выборка.Количество() > 1 Тогда
+
+ РезультатПоиска.ДоступноСоздание = Ложь;
+
+ Пока Выборка.Следующий() Цикл
+
+ ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
+
+ КонецЦикла;
+
+ КонецЕсли;
+
+ Возврат РезультатПоиска;
+
+КонецФункции
+
+&ИзменениеИКонтроль("ПроверитьКорректностьЗаполненияКонтрагента")
+Процедура РК_ПроверитьКорректностьЗаполненияКонтрагента(Объект, Контрагент, Отказ) Экспорт
+ //++ Локализация
+ КлючДанных = ?(ТипЗнч(Объект) = Тип("ФормаКлиентскогоПриложения"), Неопределено, Объект);
+ Если Объект.ОбособленноеПодразделение И ЗначениеЗаполнено(Объект.ГоловнойКонтрагент) Тогда
+
+ Если Объект.ГоловнойКонтрагент <> Контрагент Тогда
+
+ СвойстваГоловногоКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
+ Объект.ГоловнойКонтрагент, "Наименование, ИНН");
+
+ Если ЗначениеЗаполнено(СвойстваГоловногоКонтрагента.ИНН) И СвойстваГоловногоКонтрагента.ИНН <> Объект.ИНН Тогда
+ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'ИНН контрагента не равен указанному в головном подразделении'"),
+ СвойстваГоловногоКонтрагента.Наименование);
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, КлючДанных, "ИНН", , Отказ);
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(Объект.ИНН) Тогда
+
+ #Вставка
+ // {{ [+] (фрагмент ДОБАВЛЕН), для помеченных на удаление уникальность ИНН/КПП не проверяется
+ Если НЕ Объект.ПометкаУдаления Тогда
+ // }}
+ #КонецВставки
+
+ РезультатПоиска = ИННКППУжеИспользуетсяВИнформационнойБазе(Объект.ИНН, Объект.КПП, Контрагент, Объект.ЮрФизЛицо) ;
+
+ Если Не РезультатПоиска.ДоступноСоздание Тогда
+
+ ДанныеКонтрагента = РезультатПоиска.НайденныеСовпадения[0];
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru='Данные ИНН и КПП уже указаны для другого контрагента, ответственный - %1.'"),
+ ДанныеКонтрагента.ОсновнойМенеджер),
+ КлючДанных,
+ "ИНН",
+ ,
+ Отказ);
+
+ КонецЕсли;
+
+ #Вставка
+ КонецЕсли;
+ // }}
+ #КонецВставки
+
+ Иначе
+
+ Если НЕ ПартнерыИКонтрагенты.УпрощенныйВводДоступен() Тогда
+
+ Если (Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
+ ИЛИ Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо) Тогда
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+ НСтр("ru = 'Не указан ИНН'"),
+ КлючДанных,
+ "ИНН",
+ ,
+ Отказ);
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЕсли;
+ //-- Локализация
+КонецПроцедуры
diff --git a/src/ConfigDumpInfo.xml b/src/ConfigDumpInfo.xml
index 1455694..8796662 100644
--- a/src/ConfigDumpInfo.xml
+++ b/src/ConfigDumpInfo.xml
@@ -9,6 +9,8 @@
+
+
diff --git a/src/Configuration.xml b/src/Configuration.xml
index e426823..84a7293 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -62,7 +62,7 @@
Role.РК_ОсновнаяРоль
- 1.3.0.38
+ 1.3.0.39
Language.Русский
@@ -97,6 +97,7 @@
РК_ОбщегоНазначенияВызовСервера
ОбщегоНазначенияКлиентСервер
МенеджерОбменаЧерезУниверсальныйФормат
+ ПартнерыИКонтрагентыЛокализация
EnterpriseData_1_8_7
EnterpriseData_1_8_6
РК_ФункциональнаяОпцияРежимаОтладки