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