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

1С:Предприятие ::

Метки: 

Условие в запросе работает не так, как ожидается.

Я
   prilforreal
 
11.10.17 - 08:43
Доброго утречка! Помогите разобраться! Конфигурация самописная, 1с8.3. Пишу обработку для почтовой рассылки, устанавливаю условие для возможности отбора получателей по городу, группе в справочнике или по ответственному, но работает отбор только по группе.

Вот текст запроса:

Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Контрагент.Ссылка КАК Дилер,
        |    Контрагент.ЭлПочта КАК ЭлПочта,
        |    Контрагент.Город,
        |    Контрагент.Ответственный
        |ИЗ
        |    Справочник.Контрагент КАК Контрагент
        |ГДЕ
        |    (Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер)
        |            ИЛИ &ВыбДилер = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка)
        |                И (Контрагент.Город В ИЕРАРХИИ (&ВыбГород)
        |                    ИЛИ &ВыбГород = ЗНАЧЕНИЕ(Справочник.Города.ПустаяСсылка))
        |                И (Контрагент.Ответственный В ИЕРАРХИИ (&ВыбОтветственный)
        |                    ИЛИ &ВыбОтветственный = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка)))
        |
        |УПОРЯДОЧИТЬ ПО
        |    Контрагент.Наименование";
 
 
   DrShad
 
1 - 11.10.17 - 08:46
скобки не там стоят
   catena
 
2 - 11.10.17 - 08:46
Почему у вас все время "неверно работает", а не "я фигню какую-то написал"?
Логические операции имеют приоритет выполнения, так же, как сложение и умножение. У оператора И приоритет выше, чем у оператора ИЛИ. Оператор НЕ выполняется в первую очередь...

Скобки расставь, короче.
   prilforreal
 
3 - 11.10.17 - 08:49
(2) Спасибо, у меня все неверно работает из-за того что я написал фигню из-за неведения, век живи-век учись!)
   Ненавижу 1С
 
4 - 11.10.17 - 08:53
и еще в условии

Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер)
ИЛИ &ВыбДилер = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка)

вторая часть явно лишняя, достаточно:

Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер)
   VladZ
 
5 - 11.10.17 - 08:55
Я в таких случаях использую конструкцию:

Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Контрагент.Ссылка КАК Дилер,
        |    Контрагент.ЭлПочта КАК ЭлПочта,
        |    Контрагент.Город,
        |    Контрагент.Ответственный
        |ИЗ
        |    Справочник.Контрагент КАК Контрагент
        |ГДЕ
        |    1 = 1
        |и  2 = 2
        |и 3 = 3
        |УПОРЯДОЧИТЬ ПО
        |    Контрагент.Наименование";

Если значениезаполнено(ВыбГород) Тогда
Запрос.текст = СтрЗаменить(Запрос.Текст, "1 = 1", "Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер)")
КонецЕсли;

// по аналогии условие по городу (заменяем "2 = 2") и ответственному (заменяем "3 = 3").


В итоге получается, что условия накладываются только в случае если значение заполнено. И нет надобности со скобками разбираться.
   VladZ
 
6 - 11.10.17 - 08:56
упс. Опечатка: Если значениезаполнено(ВыбДилер)...
   prilforreal
 
7 - 11.10.17 - 08:59
(5) Расставил скобки правильно и все заработало при любом сочетании условий!


"ВЫБРАТЬ
        |    Контрагент.Ссылка КАК Дилер,
        |    Контрагент.ЭлПочта КАК ЭлПочта,
        |    Контрагент.Город,
        |    Контрагент.Ответственный
        |ИЗ
        |    Справочник.Контрагент КАК Контрагент
        |ГДЕ
        |    (Контрагент.Ссылка В ИЕРАРХИИ (&ВыбДилер)
        |            ИЛИ &ВыбДилер = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка))
        |                И (Контрагент.Город В ИЕРАРХИИ (&ВыбГород)
        |                    ИЛИ &ВыбГород = ЗНАЧЕНИЕ(Справочник.Города.ПустаяСсылка))
        |                И (Контрагент.Ответственный В ИЕРАРХИИ (&ВыбОтветственный)
        |                    ИЛИ &ВыбОтветственный = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка))
        |
        |УПОРЯДОЧИТЬ ПО
        |    Контрагент.Наименование";
   DrShad
 
8 - 11.10.17 - 09:00
(7) внезапно, да?
   Ненавижу 1С
 
9 - 11.10.17 - 09:03
(5) почти также, но более осмысленно, например:

ВЫБРАТЬ
  Ссылка
ИЗ Справочник.Контрагенты
ГДЕ &УсловиеИерархии


ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеИерархии",?(УсловиеЕсть,"Ссылка=&Тынц","ИСТИНА"));
   prilforreal
 
10 - 11.10.17 - 09:06
(2) Особая благодарность catena за разъяснения с приоритетами операторов, все кристально ясно)
 
 Рекламное место пустует
   catena
 
11 - 11.10.17 - 09:06
+(9)И менее зависимо от изменения количества пробелов, например.
   catena
 
12 - 11.10.17 - 09:07
(10)Ай, да не за что))
   h-sp
 
13 - 11.10.17 - 09:34
ИЛИ &ВыбОтветственный = ЗНАЧЕНИЕ(Справочник.Контрагент.ПустаяСсылка)

вот тут хрень какая-то. Получается Ответственный из справочника Контрагенты
   prilforreal
 
14 - 11.10.17 - 12:08
(13) Так и есть, ответственный из справочника Котнрагент


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