При разработке своей конфигурации возникла проблема, когда пользователи от лени не просматривая справочники начинают дублировать записи. Чистить после них справочники достаточно запарно, на двойные элементы задействованы ссылки. Поэтому попробовал ограничить их при вводе новых элементов. Немного помучился с логикой, забыл двоичную арифметику. Вот что получилось. После окончательной проверки в своей конфе вставлю это и в стандартные (уже вставил). Может кому еще пригодится. Сразу оговорюсь критерий, что является дублем определен тот который подходит мне. Это пример и каждый волен доработать его по своему. Проверено на 8.2. Зараннее прошу прощения за оформление поста.
Итак для обычного приложения
В ОбщиеМодули помещаете СвойМодуль РаботаСоСправочниками и внем прописываете процедуру
// Проверяет существует элемент в справочнике или нет
// Вызывается перед записью элемента
//
// Элемент - Объект Элемент
// Реквизит - Реквизит для поиска
// Отказ - Отказ от записи элемента
//
Процедура ПроверитьЭлемент(Элемент, Реквизит, Отказ) Экспорт
// Проверяем совпадение наименования
Отбор = Реквизит;
Найдено = Справочники[Элемент.Метаданные().Имя].НайтиПоНаименованию(Отбор, Истина);
Если Найдено = Справочники[Элемент.Метаданные().Имя].ПустаяСсылка() Тогда
// Такого элемента нет
// Перезаписываем элемент справочника
Отказ = Ложь;
ИначеЕсли Найдено.Код = Элемент.Код Тогда
// Это редактируемый элемент
// Перезаписываем элемент справочника
Отказ = Ложь;
Иначе
Предупреждение("Такой элемент есть в справочнике", 10);
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
После этого во все формы Элементов справочников, которые необходимо контролировать, помещаем процедуру для события Формы
Процедура ПередЗаписью(Отказ)
// Проверим существование элемента с таким Наименованием
РаботаСоСправочниками.ПроверитьЭлемент(ЭтотОбъект, Наименование, Отказ);
КонецПроцедуры
А теперь для управляемого приложения
В нем почти все также, но немного другое обращение к форме.
В ОбщиеМодули помещаем СвойМодуль РаботаСоСправочниками и в нем прописываем процедуру
// Проверяет существует элемент в справочнике или нет
// Вызывается перед записью элемента
//
// Наимен - Реквизит для поиска
// Элемент - Объект Элемент
// Отказ - Отказ от записи элемента
//
Процедура ПроверитьЭлемент(Наимен, Элемент, Отказ) Экспорт
// Проверяем совпадение наименования
Отбор = Наимен;
Найдено = Справочники[Элемент.Метаданные().Имя].НайтиПоНаименованию(Отбор, Истина);
Если Найдено = Справочники[Элемент.Метаданные().Имя].ПустаяСсылка() Тогда
// Сообщить("1-Такого элемента нет");
// Перезаписываем элемент справочника
Отказ = Ложь;
ИначеЕсли Найдено.Код = Элемент.Код Тогда
// Сообщить("2-Это редактируемый элемент");
// Перезаписываем элемент справочника
Отказ = Ложь;
Иначе
// Сообщить("3-Такой элемент уже есть в справочнике");
// Запрещаем запись этого элемента
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
После этого в формы Элементов справочников, которые необходимо контролировать, помещаем процедуру для события Формы
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
РаботаСоСправочниками.ПроверитьЭлемент(ЭтаФорма.Объект.Наименование, ЭтаФорма.Объект.Ссылка, Отказ);
Если Отказ Тогда
Предупреждение("Такой элемент есть в справочнике", 10);
КонецЕсли;
КонецПроцедуры
Вот и все. Переделывайте и используйте на свое усмотрение. Удачи.