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

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

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

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