Проверка уникальности по наименованию в общей форме.

1. Xlophik 09.07.20 10:42 Сейчас в теме
Добрый день.
Начинаю изучать 1С.
И вопрос вот в чем.
Нужно составить функцию в общем модуле которая бы проверяла уникальность элемента по наименованию. А потом эту функцию вызывать в любом справочнике процедурой передЗаписью.

&НаСервере
Функция ПроверкаНаИменование();

Элемент = Справочники.(Наименование);
Если Не Элемент.Пустая() Тогда
Отказ= Истина;
Сообщить ("Уже существует");
КонецЕсли;


Вот так вот начал действовать....Но выдается ошибка.
Может ктонибудь намекнуть в какую сторону мне думать?

КонецФункции
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. areavel 09.07.20 10:51 Сейчас в теме
Подписку на событие ПередЗаписью. Передавай ТипСправочника и Значение, которое хочешь проверить и в запросе ищи по условию, если результат не пустой тогда отказ.
3. oleg-x 26 09.07.20 10:56 Сейчас в теме
Элемент = Справочники[НазваниеСправочникаСтрокой].НайтиПоНаименованию(Наименование,Истина);
Если ЗначениеЗаполнено(Элемент) Тогда
Отказ= Истина;
Сообщить ("Уже существует");
КонецЕсли;
Как советовали выше, делаешь подписку на событие и в общем модуле пишешь данный код.
Только подправить надо.
YannikAlx; +1 Ответить
4. YannikAlx 43 09.07.20 11:06 Сейчас в теме
Во-первых если выдается ошибка - вы должны показать обществу эту ошибку...
Во-вторых тут очевидный неверный текст функции...

для использования функции для любого справочника вы должны использовать примерный механизм

******************
ИмяСпр="Номенклатура"; 
СуществуетЭлементСправочникаСТакимНаименованием=ПроверкаНаИм­енование(ИмяСпр, "Мой любой товар");
************************

Функция ПроверкаНаИменование(ИмяСправочника, НаименованиеОбъектаСправочника); 
ТоварНайден=Справочники[ИмяСправочника].НайтиПоНаименованию( НаименованиеОбъектаСправочника,Истина);
Если НайденнаяСсылка = Справочники[ИмяСправочника].ПустаяСсылка() 
   Тогда  Результат=Ложь;
    Иначе  Результат=Истина;
КонецЕсли;
Возврат Результат;
КонецФункции 
Показать
6. Xlophik 09.07.20 11:20 Сейчас в теме
(4)
Я правильно понимаю что я этот код пишу в общем модуле?
7. YannikAlx 43 09.07.20 17:34 Сейчас в теме
(6) начинать нужно с достижения работоспособности кода. его можно поместить в обработку , в которой добавляются элементы справочников хоть для тестирования.
А в конце необходимо задействовать механизм подписок на события справочников ПередЗаписью.
То есть для каждого справочника должна быть подписка...
8. Xlophik 09.07.20 18:00 Сейчас в теме
(7) Пока не совсем понятно. Буду штудировать книжку. Подписки еще не проходил. Спасибо что откликнулись.)))
9. Xlophik 09.07.20 18:11 Сейчас в теме
(7) Мы походу еще и живем рядом ))) Я тоже из Домодедово.
5. Xlophik 09.07.20 11:18 Сейчас в теме
Вот такие ошибки выдает:


{ОбщийМодуль.Проверки.Модуль(4,24)}: Ожидается идентификатор
Элемент = Справочники.<<?>>(Наименование); (Проверка: Сервер)
{ОбщийМодуль.Проверки.Модуль(4,25)}: Ожидается символ ';'
Элемент = Справочники.(<<?>>Наименование); (Проверка: Сервер)
{ОбщийМодуль.Проверки.Модуль(4,37)}: Неопознанный оператор
Элемент = Справочники.(Наименование<<?>>); (Проверка: Сервер)
{ОбщийМодуль.Проверки.Модуль(4,24)}: Ожидается идентификатор
Элемент = Справочники.<<?>>(Наименование); (Проверка: Тонкий клиент)
{ОбщийМодуль.Проверки.Модуль(4,25)}: Ожидается символ ';'
Элемент = Справочники.(<<?>>Наименование); (Проверка: Тонкий клиент)
{ОбщийМодуль.Проверки.Модуль(4,37)}: Неопознанный оператор
Элемент = Справочники.(Наименование<<?>>); (Проверка: Тонкий клиент)
10. YannikAlx 43 13.07.20 10:18 Сейчас в теме
(5) чтения простого не достаточно...
По ходу вы читаете очень не внимательно.
Ибо я вам написал одно , а у вас ошибки совсеем про другое...
Так что штудируйте литературу долго и тщательно.
Когда придет просветление начинайте кодить...
11. Tolkin 15.04.23 11:10 Сейчас в теме
Что нужно сделать
Создайте общий модуль и напишите в нём функцию, возвращающую «Истина», если пользователь пытается создать элемент справочника (любого), который совпадает по наименованию с уже существующим. Функция должна подходить для любого справочника.
Примените написанную функцию из общего модуля хотя бы в двух справочниках («Номенклатура», «Контрагенты»), чтобы запретить запись элемента, если функция возвращает «Истина».
Подсказка: учтите, если пользователь перезаписывает уже существующий элемент, нужно в проверку добавить условие: проверку осуществляем, только если это новый элемент. Иначе такая проверка будет находить по наименованию редактируемый пользователем элемент и возвращать «Истина».






//НА МОДУЛЕ СПРАВОЧНИКА.
Процедура ПередЗаписью(Отказ)
	
	НазваниеСправочника = Ссылка.Метаданные().Имя;
	Отказ = ДубльЭлементСправочника.ПроверкаНовогоЭлемента(Наименование,НазваниеСправочника,ЭтоНовый());
	
КонецПроцедуры




//ОБЩИЙ МОДУЛЬ. Имя общего модуля: "ДубльЭлементСправочника"
//Проверяем свойства "ДубльЭлементСправочника", чтобы вызов был Клиент, Сервер 
&НаСервере
Функция ПроверкаНовогоЭлемента (Наименование,НазваниеСправочника,ЭтоНовый) Экспорт
	
	Отказ = Ложь;
	
	Если ЭтоНовый Тогда
		Элемент = Справочники[НазваниеСправочника].НайтиПоНаименованию(Наименование);
		Если НЕ Элемент.Пустая()Тогда
			Отказ=Истина;
			Сообщить("Уже существует элемент с таким наименованием!");
		КонецЕсли;	
	КонецЕсли;
	
	Возврат Отказ;
	
КонецФункции
Показать
12. Tolkin 15.04.23 11:13 Сейчас в теме
Решил так
Прикрепленные файлы:
13. Nata3004 04.12.23 18:17 Сейчас в теме
Добрый день! Тоже сейчас прохожу этот модуль, Ваше решение оказалось верным, и сейчас когда вы уже прошли обучение,вы так же бы решили данную задачу ?
14. Nata3004 04.12.23 18:42 Сейчас в теме
Добрый день! Тоже сейчас прохожу этот модуль, Ваше решение оказалось верным, и сейчас когда вы уже прошли обучение,вы так же бы решили данную задачу ?
Оставьте свое сообщение

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