Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Логическая функция при поиске

Логическая функция при поиске
Я
   Pavel55555
 
01.11.16 - 16:25
Доброго дня!
Платформа 8.3 Толстый клиент. УТ 10.3

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

Запрос выполняем поиск номенклатуры в справочнике по коду и наименованию номен контрагента.
Не могу сообразить как сделать что бы был логический выбор, то есть если код = 0 (его нет) то ищем по наименованию или наоборот.
 
 
   butterbean
 
1 - 01.11.16 - 16:26
что сегодня за день-то такой?
   Timon1405
 
2 - 01.11.16 - 16:28
(1) Международный день вегана
   h-sp
 
3 - 01.11.16 - 16:29
(0) сделайте 2 запроса. сначала поиск по коду, потом по наименованию.
   butterbean
 
4 - 01.11.16 - 16:35
(3) о, они объединяются в нейросеть
   Жан Пердежон
 
5 - 01.11.16 - 16:47
   НеПридумалаНик
 
6 - 01.11.16 - 16:51
(0)
    " ...
    |ГДЕ (&Код = 0 И НоменклатураКонтрагентов.Контрагент = &Контрагент)
    |    ИЛИ  
    |    (&Код <> 0 И НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО &НаименованиеНоменклатурыКонтрагента)
    |";  

используй в связке И то, что если первое условие &Код = 0 (или же &Код <> 0 во втором случае) не выполняется, то вторая часть И по идее даже не анализируется
   HardBall
 
7 - 01.11.16 - 17:04
Выбор Когда &Код =  0 Тогда НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО &НаименованиеНоменклатурыКонтрагента
Иначе 
НоменклатураКонтрагентов.Контрагент = &Контрагент
                И НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = &Код
Конец
   h-sp
 
8 - 01.11.16 - 17:13
(7) лучше при поиске не писать таких выражений. Они очень сильно тормозят запрос.
   Pavel55555
 
9 - 01.11.16 - 17:14
(6) Спасибо НеПридумалаНик Большое!
Отлично работает:
Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
    |    НоменклатураКонтрагентов.Номенклатура,
    |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры
    |ИЗ
    |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
    |ГДЕ (&Код = 0 И НоменклатураКонтрагентов.Контрагент = &Контрагент)
    |    ИЛИ  
    |    (&Код <> 0 И НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО &НаименованиеНоменклатурыКонтрагента)
    |";
   Pavel55555
 
10 - 01.11.16 - 17:14
Всем спасибо вопрос закрыт!
:)
 
 Рекламное место пустует
   HardBall
 
11 - 01.11.16 - 17:32
(8) Не верю.
ПОДОБНО это вообще алес.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует