|   |   | 
| 
 | Условие в запросе работает не так, как ожидается. | ☑ | ||
|---|---|---|---|---|
| 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) Так и есть, ответственный из справочника Котнрагент     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |