| 
    
            
         
         | 
    
  | 
Условие в запросе работает не так, как ожидается. | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        prilforreal    
     11.10.17 
            ✎
    08:43 
 | 
         
        Доброго утречка! Помогите разобраться! Конфигурация самописная, 1с8.3. Пишу обработку для почтовой рассылки, устанавливаю условие для возможности отбора получателей по городу, группе в справочнике или по ответственному, но работает отбор только по группе.
 
        Вот текст запроса: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагент.Ссылка КАК Дилер, | Контрагент.ЭлПочта КАК ЭлПочта, | Контрагент.Город, | Контрагент.Ответственный |ИЗ | Справочник.Контрагент КАК Контрагент |ГДЕ | (Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер) | ИЛИ &ВыбДилер = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка) | И (Контрагент.Город В ИЕРАРХИИ (&ВыбГород) | ИЛИ &ВыбГород = ЗНАЧЕНИЕ(Справочник.Города.ПустаяСсылка)) | И (Контрагент.Ответственный В ИЕРАРХИИ (&ВыбОтветственный) | ИЛИ &ВыбОтветственный = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка))) | |УПОРЯДОЧИТЬ ПО | Контрагент.Наименование";  | 
|||
| 
    1
    
        DrShad    
     11.10.17 
            ✎
    08:46 
 | 
         
        скобки не там стоят     
         | 
|||
| 
    2
    
        catena    
     11.10.17 
            ✎
    08:46 
 | 
         
        Почему у вас все время "неверно работает", а не "я фигню какую-то написал"?
 
        Логические операции имеют приоритет выполнения, так же, как сложение и умножение. У оператора И приоритет выше, чем у оператора ИЛИ. Оператор НЕ выполняется в первую очередь... Скобки расставь, короче.  | 
|||
| 
    3
    
        prilforreal    
     11.10.17 
            ✎
    08:49 
 | 
         
        (2) Спасибо, у меня все неверно работает из-за того что я написал фигню из-за неведения, век живи-век учись!)     
         | 
|||
| 
    4
    
        Ненавижу 1С    
     гуру 
    11.10.17 
            ✎
    08:53 
 | 
         
        и еще в условии
 
        Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер) ИЛИ &ВыбДилер = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка) вторая часть явно лишняя, достаточно: Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер)  | 
|||
| 
    5
    
        VladZ    
     11.10.17 
            ✎
    08:55 
 | 
         
        Я в таких случаях использую конструкцию:
 
        Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагент.Ссылка КАК Дилер, | Контрагент.ЭлПочта КАК ЭлПочта, | Контрагент.Город, | Контрагент.Ответственный |ИЗ | Справочник.Контрагент КАК Контрагент |ГДЕ | 1 = 1 |и 2 = 2 |и 3 = 3 |УПОРЯДОЧИТЬ ПО | Контрагент.Наименование"; Если значениезаполнено(ВыбГород) Тогда Запрос.текст = СтрЗаменить(Запрос.Текст, "1 = 1", "Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер)") КонецЕсли; // по аналогии условие по городу (заменяем "2 = 2") и ответственному (заменяем "3 = 3"). В итоге получается, что условия накладываются только в случае если значение заполнено. И нет надобности со скобками разбираться.  | 
|||
| 
    6
    
        VladZ    
     11.10.17 
            ✎
    08:56 
 | 
         
        упс. Опечатка: Если значениезаполнено(ВыбДилер)...     
         | 
|||
| 
    7
    
        prilforreal    
     11.10.17 
            ✎
    08:59 
 | 
         
        (5) Расставил скобки правильно и все заработало при любом сочетании условий!
 
        "ВЫБРАТЬ | Контрагент.Ссылка КАК Дилер, | Контрагент.ЭлПочта КАК ЭлПочта, | Контрагент.Город, | Контрагент.Ответственный |ИЗ | Справочник.Контрагент КАК Контрагент |ГДЕ | (Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер) | ИЛИ &ВыбДилер = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка)) | И (Контрагент.Город В ИЕРАРХИИ (&ВыбГород) | ИЛИ &ВыбГород = ЗНАЧЕНИЕ(Справочник.Города.ПустаяСсылка)) | И (Контрагент.Ответственный В ИЕРАРХИИ (&ВыбОтветственный) | ИЛИ &ВыбОтветственный = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка)) | |УПОРЯДОЧИТЬ ПО | Контрагент.Наименование";  | 
|||
| 
    8
    
        DrShad    
     11.10.17 
            ✎
    09:00 
 | 
         
        (7) внезапно, да?     
         | 
|||
| 
    9
    
        Ненавижу 1С    
     гуру 
    11.10.17 
            ✎
    09:03 
 | 
         
        (5) почти также, но более осмысленно, например:
 
        ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты ГДЕ &УсловиеИерархии ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеИерархии",?(УсловиеЕсть,"Ссылка=&Тынц","ИСТИНА"));  | 
|||
| 
    10
    
        prilforreal    
     11.10.17 
            ✎
    09:06 
 | 
         
        (2) Особая благодарность catena за разъяснения с приоритетами операторов, все кристально ясно)     
         | 
|||
| 
    11
    
        catena    
     11.10.17 
            ✎
    09:06 
 | 
         
        +(9)И менее зависимо от изменения количества пробелов, например.     
         | 
|||
| 
    12
    
        catena    
     11.10.17 
            ✎
    09:07 
 | 
         
        (10)Ай, да не за что))     
         | 
|||
| 
    13
    
        h-sp    
     11.10.17 
            ✎
    09:34 
 | 
         
        ИЛИ &ВыбОтветственный = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка)
 
        вот тут хрень какая-то. Получается Ответственный из справочника Контрагенты  | 
|||
| 
    14
    
        prilforreal    
     11.10.17 
            ✎
    12:08 
 | 
         
        (13) Так и есть, ответственный из справочника Котнрагент     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |