Контрагенты: уникальность ИНН/КПП без помеченных на удаление (1.3.0.39).

Переопределение ПартнерыИКонтрагентыЛокализация — аналог crm3-dev.rhana v1.0.1.333.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
6 changed files with 226 additions and 2 deletions
@@ -0,0 +1,175 @@
&ИзменениеИКонтроль("ИННКППУжеИспользуетсяВИнформационнойБазе")
Функция РК_ИННКППУжеИспользуетсяВИнформационнойБазе(ИНН, КПП, ИсключаяСсылку = Неопределено, ЮрФизЛицо = Неопределено) Экспорт
РезультатПоиска = Новый Структура;
РезультатПоиска.Вставить("НайденныеСовпадения", Новый Массив);
РезультатПоиска.Вставить("ДоступноСоздание", Истина);
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
#Удаление
Запрос.Текст = "
|ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
| Партнеры.Ссылка КАК Партнер,
| Партнеры.Код КАК Код,
| ПРЕДСТАВЛЕНИЕ(Партнеры.ОсновнойМенеджер) КАК ОсновнойМенеджер
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
| ПО Контрагенты.Партнер = Партнеры.Ссылка
|ГДЕ
| Контрагенты.ИНН = &ИНН
| И Контрагенты.КПП = &КПП
| И Контрагенты.Ссылка <> &Ссылка";
#КонецУдаления
#Вставка
// {{ [+] (фрагмент ДОБАВЛЕН), уникальность ИНН/КПП только среди непомеченных на удаление контрагентов
Запрос.Текст = "
|ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
| Партнеры.Ссылка КАК Партнер,
| Партнеры.Код КАК Код,
| ПРЕДСТАВЛЕНИЕ(Партнеры.ОсновнойМенеджер) КАК ОсновнойМенеджер
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
| ПО Контрагенты.Партнер = Партнеры.Ссылка
|ГДЕ
| Контрагенты.ИНН = &ИНН
| И Контрагенты.КПП = &КПП
| И Контрагенты.Ссылка <> &Ссылка
| И НЕ Контрагенты.ПометкаУдаления";
// }}
#КонецВставки
Запрос.УстановитьПараметр("ИНН",ИНН);
Запрос.УстановитьПараметр("КПП",КПП);
Запрос.УстановитьПараметр("Ссылка",ИсключаяСсылку);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() = 1 Тогда
Выборка.Следующий();
Если ЗначениеЗаполнено(ИсключаяСсылку)
И Выборка.Ссылка = ИсключаяСсылку Тогда
Возврат РезультатПоиска;
ИначеЕсли ЗначениеЗаполнено(ЮрФизЛицо) Тогда
Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
И Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
ИначеЕсли ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
И Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель Тогда
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
Иначе
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
РезультатПоиска.ДоступноСоздание = Ложь;
КонецЕсли;
Иначе
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
РезультатПоиска.ДоступноСоздание = Ложь;
КонецЕсли;
ИначеЕсли Выборка.Количество() > 1 Тогда
РезультатПоиска.ДоступноСоздание = Ложь;
Пока Выборка.Следующий() Цикл
ДобавитьДанныеНайденногоКонтрагента(Выборка, РезультатПоиска.НайденныеСовпадения);
КонецЦикла;
КонецЕсли;
Возврат РезультатПоиска;
КонецФункции
&ИзменениеИКонтроль("ПроверитьКорректностьЗаполненияКонтрагента")
Процедура РК_ПроверитьКорректностьЗаполненияКонтрагента(Объект, Контрагент, Отказ) Экспорт
//++ Локализация
КлючДанных = ?(ТипЗнч(Объект) = Тип("ФормаКлиентскогоПриложения"), Неопределено, Объект);
Если Объект.ОбособленноеПодразделение И ЗначениеЗаполнено(Объект.ГоловнойКонтрагент) Тогда
Если Объект.ГоловнойКонтрагент <> Контрагент Тогда
СвойстваГоловногоКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
Объект.ГоловнойКонтрагент, "Наименование, ИНН");
Если ЗначениеЗаполнено(СвойстваГоловногоКонтрагента.ИНН) И СвойстваГоловногоКонтрагента.ИНН <> Объект.ИНН Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'ИНН контрагента не равен указанному в головном подразделении'"),
СвойстваГоловногоКонтрагента.Наименование);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, КлючДанных, "ИНН", , Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ИНН) Тогда
#Вставка
// {{ [+] (фрагмент ДОБАВЛЕН), для помеченных на удаление уникальность ИНН/КПП не проверяется
Если НЕ Объект.ПометкаУдаления Тогда
// }}
#КонецВставки
РезультатПоиска = ИННКППУжеИспользуетсяВИнформационнойБазе(Объект.ИНН, Объект.КПП, Контрагент, Объект.ЮрФизЛицо) ;
Если Не РезультатПоиска.ДоступноСоздание Тогда
ДанныеКонтрагента = РезультатПоиска.НайденныеСовпадения[0];
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Данные ИНН и КПП уже указаны для другого контрагента, ответственный - %1.'"),
ДанныеКонтрагента.ОсновнойМенеджер),
КлючДанных,
"ИНН",
,
Отказ);
КонецЕсли;
#Вставка
КонецЕсли;
// }}
#КонецВставки
Иначе
Если НЕ ПартнерыИКонтрагенты.УпрощенныйВводДоступен() Тогда
Если (Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
ИЛИ Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Не указан ИНН'"),
КлючДанных,
"ИНН",
,
Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
//-- Локализация
КонецПроцедуры