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

Дублирование контрагентов

Автор giorgi wiklauri, 28 дек 2022, 23:31

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

giorgi wiklauri

Цитата: LexaK от 29 дек 2022, 16:28Максим75, но это не решает проверки дублей!
т.е. если не новый то проверка вообще не выполняется?
можно взять старого контрагента и изменить ему ИНН на уже существующий у другого?
и так как это не новый, проверки не будет!


да вы прав, Если уникальный код есть только у контрагента открытия, например 111111111, я не могу  потом исправить.  :( 
Что я могу сделать, чтобы исправить это?

LexaK

giorgi wiklauri, вставьте сюда всю процедуру ПередЗаписью()
(скопируйте код, не картинку)
если помогло нажмите: Спасибо!

giorgi wiklauri

Процедура ПередЗаписью(Отказ)
   
   мЭтоНовый = ЭтоНовый();
      ГлЗащищеннаяОбработка.HKAW_SSMB_UQHA_RHYH_CEVB();
      
       мИНН = Ссылка.ИНН;
       НайденнаяСсылка = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",  ИНН);
    Если НайденнаяСсылка <> Справочники.КОнтрагенты.ПустаяСсылка() Тогда
        Сообщить("Уже есть такой контрагент");
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;
      
КонецПроцедуры // ПередЗаписью()


Максим75

LexaK, вопрос стоял изначально при добавлении контрагентов.
я дал на него возможный вариант решения.
при проверке уже существующего делается аналогично. тема не стоит такого длительного обсуждения))

LexaK

giorgi wiklauri, попробуйте такой код
Процедура ПередЗаписью(Отказ)
   
    //мЭтоНовый = ЭтоНовый();//это зачем?
    ГлЗащищеннаяОбработка.HKAW_SSMB_UQHA_RHYH_CEVB();

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

если помогло нажмите: Спасибо!

giorgi wiklauri

Цитата: LexaK от 29 дек 2022, 17:00giorgi wiklauri, попробуйте такой код
Процедура ПередЗаписью(Отказ)
   
    //мЭтоНовый = ЭтоНовый();//это зачем?
    ГлЗащищеннаяОбработка.HKAW_SSMB_UQHA_RHYH_CEVB();

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


это хорошо.

LexaK,
Максим75,

спасибо ребята, наступающим с новым годом

giorgi wiklauri

Привет LexaK, У меня есть еще один вопрос:
у нас есть импортные контрагенты для  веб-сервисов  и местные контрагенты

В основной форме объекта у нас есть реквизит "НадписьWS"
когда контрагенты импортные, ("НадписьWS" = Истина,) о местных контрагентах ("НадписьWS" = ложь,)
Я хочу НайденнаяСсылка только для ("НадписьWS" = ложь,)
например, когда есть 2 контрагента, один импортные,и второй локальных, Я не должен быть в состоянии добавить это. 
Если только местные контрагенты, Я не должен быть в состоянии добавить это.
И Если есть только импортные, Я должен иметь возможность добавлять новые.

можна поставить такое ограничение?

текущее Процедура ПередЗаписью такие:

Процедура ПередЗаписью(Отказ)
                

  ГлЗащищеннаяОбработка.HKAW_SSMB_UQHA_RHYH_CEVB();     
   
    Если Не ПустаяСтрока(ИНН) Тогда       
        НайденнаяСсылка = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",  ИНН);
        Если  НайденнаяСсылка <> Справочники.КОнтрагенты.ПустаяСсылка()
            и НайденнаяСсылка <> Ссылка Тогда                         
            //сообщаем о контрагенте с такой же ИНН
            Сообщить("Контрагент уже существует! " + НайденнаяСсылка);
            Отказ = Истина;
      ИначеЕсли ПустаяСтрока(ИНН) Тогда
          Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;
   КонецЕсли;   
КонецПроцедуры // ПередЗаписью()



LexaK

giorgi wiklauri, попробуйте такой код (могут быть опечатки)
Процедура ПередЗаписью(Отказ)

  ГлЗащищеннаяОбработка.HKAW_SSMB_UQHA_RHYH_CEVB();     
   
    Если Не ПустаяСтрока(ИНН) Тогда       
лкОтбор = Новый Структура("ИНН",ИНН);
лкВыборка = Справочники.Контрагенты.Выбрать(,,лкОтбор);
Пока лкВыборка.Следующий()
//набор проверок
Если лкВыборка.ПометкаУдаления = Ложь
//и лкВыборка.НадписьWS = Ложь  //почему только Ложь? а интернетовских может быть несколько?
и лкВыборка.НадписьWS = НадписьWS //так проверяем любых двойников
и лкВыборка.Ссылка <> Ссылка Тогда
Отказ = Истина;                   
Сообщить("Уже есть такой контрагент: " + лкВыборка.Ссылка);
Возврат;
КонецЕсли;
КонецЦикла;
КонецЕсли;   

КонецПроцедуры // ПередЗаписью()
если помогло нажмите: Спасибо!

giorgi wiklauri

Цитата: LexaK от 21 фев 2023, 11:38giorgi wiklauri, попробуйте такой код (могут быть опечатки)
Процедура ПередЗаписью(Отказ)

  ГлЗащищеннаяОбработка.HKAW_SSMB_UQHA_RHYH_CEVB();     
   
    Если Не ПустаяСтрока(ИНН) Тогда       
лкОтбор = Новый Структура("ИНН",ИНН);
лкВыборка = Справочники.Контрагенты.Выбрать(,,лкОтбор);
Пока лкВыборка.Следующий() *
//набор проверок
Если лкВыборка.ПометкаУдаления = Ложь
//и лкВыборка.НадписьWS = Ложь  //почему только Ложь? а интернетовских может быть несколько?
и лкВыборка.НадписьWS = НадписьWS //так проверяем любых двойников
и лкВыборка.Ссылка <> Ссылка Тогда
Отказ = Истина;                   
Сообщить("Уже есть такой контрагент: " + лкВыборка.Ссылка);
Возврат;
КонецЕсли;
КонецЦикла;
КонецЕсли;   

КонецПроцедуры // ПередЗаписью()


 * Пока лкВыборка.Следующий() Do; это нужно да?

Спасибо

LexaK

giorgi wiklauri, да, пропустил, так надо
Пока лкВыборка.Следующий() Цикл
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск