8.х Проверка уникальности

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем ILDARIAN, 25 июл 2013.

  1. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    Такой вопрос. База самодельная. В справочнике контрагенты прописана проверка уникальности реквизита "ЕДРПОУ" . При первом нажатии кнопки записать, программа записывает нормально, но при следующем нажатии выдает сообщение что контрагент с таким ЕДПОУ уже есть, т.е. проверяет даже этого контрагента, который сейчас открыт, где нажата кнопка записать, сравнивает его "самого с собой" . Что нужно изменить чтобы данный контрагент не проверялся на уникальность, а остальные все проверялись ?

    Вот код. Я плохо разбираюсь в программирование пока, учусь только, судите строго, учту все замечания.

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

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Если Контрагента не существует в базе, т.е. заводится новый, то запрос отработает так, как у вас есть сейчас, иначе выполнится условие-исключение на самого себя
    Код:
    Если ЗначениеЗаполнено(ЕДРПОУ) Тогда
    Если Контроль Тогда
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОбщиеКонтрагенты.ЕДРПОУ,
    | ОбщиеКонтрагенты.Наименование
    |ИЗ
    | Справочник.ОбщиеКонтрагенты КАК ОбщиеКонтрагенты
    |ГДЕ
    | ОбщиеКонтрагенты.ЕДРПОУ = &ЕДРПОУ
    | И ВЫБОР
    |        КОГДА &НеНовый
    |              ТОГДА ОбщиеКонтрагенты.Ссылка <> &Ссылка
    |КОНЕЦ";
    
    Запрос.УстановитьПараметр("ЕДРПОУ", ЕДРПОУ);
    Запрос.УстановитьПараметр("НеНовый ", Не ЭтоНовый());
    Запрос.УстановитьПараметр("Ссылка ", Ссылка);
    
    Результат = Запрос.Выполнить();
    
    Если НЕ Результат.Пустой() Тогда
    Результат.Выбрать();
    Если ЕДРПОУ <> "" ИЛИ  ИПН <> "" ИЛИ НомерСвидетельства <> "" Тогда
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
    
    
    Сообщить("Контрагент " + Выборка.Наименование + "имеет такой же ЕДРПОУ ");
    КонецЦикла;
    
    Отказ = Истина;
    
    КонецЕсли;
    КонецЕсли;
    
    КонецЕсли;	  
    
    КонецЕсли;
  3. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    спасибо большое, очень помогли !
  4. Гриша
    Offline

    Гриша Опытный в 1С

    Регистрация:
    4 май 2008
    Сообщения:
    286
    Симпатии:
    5
    Баллы:
    29
    лучше делать вот так
    в форме объекта перед записью проверить
    Код:
    Процедура ПередЗаписью()
    Если ЭтоНовый() Тогда
    //это означает что это новый справочник/документ
    //тут и пишем свою проверку !
    КонецЕсли;
    
    
    КонецПроцедуры;
    
    
    

Поделиться этой страницей