Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 06:34

1C дубликаты

Автор Shaman_blr, 26 янв 2023, 10:28

0 Пользователей и 1 гость просматривают эту тему.

Shaman_blr

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

Запрос.УстановитьПараметр("СотрудникОрганизации", СотрудникОрганизации);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить().Выбрать();

Если НЕ Запрос.Выполнить().Пустой() Тогда
РезультатЗапроса.Следующий();
Сообщить("Сотрудник " + СотрудникОрганизации + " уже существует: КодЭлемента " + РезультатЗапроса.Код);
Отказ = Истина;
КонецЕсли

LexaK

Shaman_blr, а где этот кусок кода находится? в модуле справочника? в какой процедуре?
если помогло нажмите: Спасибо!

Shaman_blr

LexaK, справочники, модуль объекта > Процедура ПередЗаписью()

LexaK

Shaman_blr, наверно пары проверок не хватает, попробуйте такой код
Если СотрудникОрганизации.Пустая() или ПометкаУдаления Тогда
//Сотрудник не задан или помечен на Удаление, проверку не выполняем
Возврат;
КонецЕсли;

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

    Если РезультатЗапроса.Следующий() Тогда
        Сообщить("Сотрудник " + СотрудникОрганизации + " уже существует: КодЭлемента " + РезультатЗапроса.Код);
        Отказ = Истина;
    КонецЕсли
если помогло нажмите: Спасибо!

Максим75

ПриЗаписи (или ПередЗаписью) используйте свойство ЭтоНовый().
т.е. создали новый элемент, у него флаг ЭтоНовый() ИСТИНА.
проверьте, есть ли в справочнике уже элемент со ссылкой на такого сотра (вот таким запросом, как показали, только ссылки еще не будет, элемент то не записан).
если есть - все, отказ в записи. Если нет - спокойно записываем.
Раз у Вас в запросе в параметры передается ссылка, то элемент уже записан в базу.

Shaman_blr

LexaK, чуть не так) я попробовал все ок, но если я копираю элемент и стираю поле физ.лицо он не пропускает все ок.
Но если я копирую элемент и стираю поле сотрудникОрганизации он дает создать дубль, а так нельзя) но при этом удаление нормально работает, только вот проблема что он дубль создает при пустом поле сотрудникОрганизации

LexaK

Shaman_blr, у вас, четко не прописано что считается дублем!

по первому сообщению, показалось что дублем считаются элементы справочника с одинаковым значением СотрудникОрганизаии!
по этому условию и построена проверка!

элементы справочника с пустыми значениями СотрудникОрганизаии - дублем не являются!

но, у вас уже есть пример проверки, и вы легко сможете изменить/доработать, проверку на дублирование, по другому условию!
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск