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