8.х Процедура не работает

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем alexander4321, 24 июн 2016.

  1. TopicStarter Overlay
    alexander4321
    Offline

    alexander4321

    Регистрация:
    19 мар 2013
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    Добрый день! Вот текст процедуры:
    Код:
    &НаСервере
    Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
        Запрос = Новый Запрос("ВЫБРАТЬ
          |   Бренд.Наименование
          |ИЗ
          |   Справочник.Бренд КАК Бренд
          |ГДЕ
          |   Бренд.Наименование = &Наименование");
           ИсходнаяСтрока = Объект.Наименование;
           Запрос.УстановитьПараметр("Наименование", ИсходнаяСтрока);
           Результат = Запрос.Выполнить().Выбрать();
           Если Результат.Количество() > 0 Тогда
             Отказ = Истина;
             Сообщить("Бренд с таким названием уже существует");
           Иначе
             Отказ = Ложь;
             КонецЕсли;
    КонецПроцедуры
    
    
    Почему то всегда получается, что отказ Истина. Не дает записывать, независимо от того, есть запись с искомым наименованием или нет. Что тут неправильно? Спасибо!
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    А если вместо Объект.Наименование использовать ТекущийОбъект.Наименование?
  3. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    В событии "ПриЗаписи" элемент уже записан. Соответственно, элемент с таким наименованием уже есть в базе (собственно, это элемент, который записывается).
    Во-первых, поставьте условие, что Бренд.Ссылка <> текущему записываемому элементу.
    Во-вторых, лучше использовать событие "ПередЗаписью" или "ОбработкаПроверкиЗаполнения".
  4. TopicStarter Overlay
    alexander4321
    Offline

    alexander4321

    Регистрация:
    19 мар 2013
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое! Вставил код в "ОбработкаПроверкиЗаполнения"
    Код:
    &НаСервере
    Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
       Запрос = Новый Запрос("ВЫБРАТЬ
          |   Бренд.Наименование
          |ИЗ
          |   Справочник.Бренд КАК Бренд
          |ГДЕ
          |   Бренд.Наименование = &Наименование");
           ИсходнаяСтрока = Объект.Наименование;
           Запрос.УстановитьПараметр("Наименование", ИсходнаяСтрока);
           Результат = Запрос.Выполнить().Выбрать();
           Если Результат.Количество() > 0 Тогда
             Отказ = Истина;
             Сообщить("Бренд с таким названием уже существует");
           Иначе
             Отказ = Ложь;
             КонецЕсли;
    КонецПроцедуры
    
    
    Все нормально работает. А так в первоначальном варианте в строке
    Код:
    Если Результат.Количество() > 0 Тогда
    ноль заменил на единицу
    Код:
    Если Результат.Количество() > 1 Тогда
    . Так тоже нормально отрабатывало.
  5. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    А если открыть существующий элемент и перезаписать? )

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