Проверять название на дублирование в справочнике

1. Lllypuk 10.11.21 13:40 Сейчас в теме
Всем привет! Управляемые формы. Подскажите, есть справочник "Контактные лица", необходимо сделать проверку чтобы не заводились дубли контактных лиц. Может у кого-то есть готовое решение то поделитесь пожалуйста.
За ранее благодарен.
По теме из базы знаний
Найденные решения
2. acces969 349 10.11.21 13:45 Сейчас в теме
В модуле объекта справочника, в процедуре "ПередЗаписью()" наговнокодить:
Запрос = Новый Запрос("ВЫБРАТЬ С.Ссылка ИЗ Справочник.КонтактныеЛица КАК С ГДЕ С.Наименование = &Наименование И С.Ссылка <> &Ссылка";
Запрос.УстановитьПараметр();
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой Тогда
Отказ = Истина;
// Ругаемся
КонецЕсли;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. acces969 349 10.11.21 13:45 Сейчас в теме
В модуле объекта справочника, в процедуре "ПередЗаписью()" наговнокодить:
Запрос = Новый Запрос("ВЫБРАТЬ С.Ссылка ИЗ Справочник.КонтактныеЛица КАК С ГДЕ С.Наименование = &Наименование И С.Ссылка <> &Ссылка";
Запрос.УстановитьПараметр();
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой Тогда
Отказ = Истина;
// Ругаемся
КонецЕсли;
3. nomad_irk 76 10.11.21 13:46 Сейчас в теме
(2)в ПередЗаписью ссылки еще "нет".
4. acces969 349 10.11.21 13:57 Сейчас в теме
(3)Молодец что заметил. А теперь подумай
t.v.s.; starik-2005; +2 Ответить
5. starik-2005 3051 10.11.21 14:29 Сейчас в теме
(4)
А теперь подумай
Да ну нафиг )))
14. Lllypuk 12.11.21 10:40 Сейчас в теме
(2) Спасибо! Только
Отказ = Истина;

что-то не отрабатывал. Сделал вот так:
&НаСервере
Функция ПроверитьУникальностьПоНаименованию()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	КонтактныеЛицаПартнеров.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
	|ГДЕ
	|	КонтактныеЛицаПартнеров.Ссылка <> &Ссылка
	|	И КонтактныеЛицаПартнеров.Наименование = &Наименование";
	
	Запрос.УстановитьПараметр("Ссылка",       Объект.Ссылка);
	Запрос.УстановитьПараметр("Наименование", Объект.Наименование);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если Не РезультатЗапроса.Пустой() Тогда
			Возврат 1;
	КонецЕсли;
	
КонецФункции

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	
	Если ЗначениеЗаполнено(Объект.Наименование) Тогда
			Если ПроверитьУникальностьПоНаименованию() = 1 Тогда
				Сообщение = Новый СообщениеПользователю;
				Сообщение.Текст = "Контактное лицо не будет создано, так как уже есть похожая запись!";
				Сообщение.Поле  = "Объект.Наименование";
				Сообщение.Сообщить();
				Отказ = Истина;
			КонецЕсли;
	КонецЕсли;	
		
КонецПроцедуры

Показать
6. AnryMc 849 10.11.21 15:17 Сейчас в теме
Кусок ОбработкаПроверкиЗаполнения
моя проверка (без отказа) наименования справочника Контрагенты
"Плюсы" данного метода:
- нечёткое сравнение
- только 1С
"Минусы":
- ещё нужно дописать обновление индексов полнотекстового поиска после записи нового элемента... т.к. его обновление идёт фоновым по расписанию и можно попасть когда записали новый и делаете его копию - если индекс не обновлен - не будет ругаться на только что записанный

Перед вызовом проверка "Если ЭтоНовый() Тогда"

				//Ищем по наименованию
				Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() <> РежимПолнотекстовогоПоиска.Разрешить Тогда
					//Отказ = Истина;
					Сообщение = Новый СообщениеПользователю();
					Сообщение.Текст = "Использование полнотекстового поиска не разрешено. Вы можете включить его в диалоге ""Управление полнотекстовым поиском""'
					Сообщение.Сообщить();
				Иначе
					
					Стр = СокрЛП(НаименованиеПолное);
					//ДлинаСтрокиПоиска = СтрДлина(Стр);
					СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(Стр, 50);		
					СписокПоиска.ПолучатьОписание = Истина;
					СписокПоиска.ИспользованиеМетаданных = ИспользованиеМетаданныхПолнотекстовогоПоиска.НеИспользовать;
					//Если ДлинаСтрокиПоиска < 5 Тогда
					ПорогНечеткости = 35;
					//Иначе
					СписокПоиска.ПорогНечеткости = ПорогНечеткости;

					
					МассивОтбор = Новый Массив();
					МассивОтбор.Добавить(Метаданные.Справочники.Контрагенты);
					
					СписокПоиска.ОбластьПоиска = МассивОтбор;
					СписокПоиска.ПерваяЧасть(); 
					
					Для каждого текРезультат Из СписокПоиска Цикл
						
						Сообщение = Новый СообщениеПользователю;
						Сообщение.Текст = "ВНИМАНИЕ!!!
						|Есть похожие наименования"+СокрЛП(текРезультат.Значение);
						Сообщение.Поле = "Наименование";
						Сообщение.КлючДанных=текРезультат.Значение;
						Сообщение.Сообщить();
						
					КонецЦикла;
Показать
10. AnryMc 849 10.11.21 16:07 Сейчас в теме
(6)
//Если ДлинаСтрокиПоиска < 5 Тогда
ПорогНечеткости = 35;
//Иначе


Т.к. ПорогНечеткости - процент "несовпадений" и если длина строки 5 и ПорогНечеткости = 50, то попадут с несовпадениями до 3 знаков...
А если длина 100 - то несовпадение 50 знаков - очень много вариантов с "мусором",
т.е. при увеличении длины нужно уменьшать ПорогНечеткости... чтобы получить меньше вариантов...
7. soft_wind 10.11.21 15:43 Сейчас в теме
(3)
(2)в ПередЗаписью ссылки еще "нет".


Садись, ДВА!

ссылка есть, просто пока пустая. и для данного запроса все равно подходит
8. nomad_irk 76 10.11.21 15:54 Сейчас в теме
(7)смысла нет проверять на неравенство пустой ссылке.
9. AnryMc 849 10.11.21 16:01 Сейчас в теме
(8)

Если ссылка заполнена ("перезапись") - отбор всех из базы кроме неё с одинаковым наименованием
Если ссылка не заполнена ("запись нового") - отбор всех из базы с одинаковым наименованием

Нужный функционал работает...

А делать 2 запроса, или модифицировать по условию существующий... Зачем?

З.Ы. Хотя и выгладит "неправильно"
12. nomad_irk 76 10.11.21 16:09 Сейчас в теме
(9)Условия ТС звучат так:

"необходимо сделать проверку чтобы не заводились дубли контактных лиц".

Проверять дубли при обновлении существующих - чревато.

Обычно запрет на дубли включают когда уже вычистили от дублей и не хотят чистить от дублей еще раз.
11. soft_wind 10.11.21 16:08 Сейчас в теме
(8) хм, смыла нет - а результат есть!

ну ладно, вот вам подсказка,
зачастую потом, приходится редактировать элементы справочников, что-то кроме Наименования, телефоны, ИНН, дату рождения и др.

вот в этом случае без проверки по Ссылке, вы не запишите измененный элемент!!!
и получите сообщение что Наименование не уникально

а с такой проверкой получится сохранить измененных элемент
для самого себя
или для нового
13. nomad_irk 76 10.11.21 16:20 Сейчас в теме
(11), (9) Хорошо, уболтали языкастые :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот