|
Условие И в запросе | ☑ | ||
---|---|---|---|---|
0
Интрудер
02.08.12
✎
13:59
|
Не получается объединить несколько условий И в запросе в один. То есть
(ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки <> ДАТАВРЕМЯ(1, 1, 1) И &ДатаПоступления <> ДАТАВРЕМЯ(1, 1, 1) И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления) И ЗаказПокупателяТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон предполагает два условия, первое объединение трех истин, второе одиночное. В конструкторе запроса вижу 4 независимых условия, запрос понятно не работает. Операторные скобки в первом тоже не помогают. Может кто нибудь помочь? |
|||
1
Ц_У
02.08.12
✎
14:00
|
Конструктор срезает скобки, причем глупо срезает чаще всего, попробуй ручками проставить скобки
|
|||
2
Pro-tone
модератор
02.08.12
✎
14:00
|
(0) а что такое "одиночное" условие ?
|
|||
3
DrShad
02.08.12
✎
14:01
|
И &ДатаПоступления <> ДАТАВРЕМЯ(1, 1, 1) что это!?
|
|||
4
SherifSP
02.08.12
✎
14:01
|
(2)Это когда 2 и более условий, суют в 1)
|
|||
5
Ц_У
02.08.12
✎
14:01
|
((условие1 и условие2 и условие3 ) и (условие4))
|
|||
6
Pro-tone
02.08.12
✎
14:01
|
(1) ничего там не срезает
|
|||
7
Ц_У
02.08.12
✎
14:02
|
(6) ога.. нисризаит..
|
|||
8
ssh2006
02.08.12
✎
14:03
|
(0) расстановка скобок на результат не повлияет
|
|||
9
Интрудер
02.08.12
✎
14:05
|
(5) после закрытия конструктора получаем
ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки <> ДАТАВРЕМЯ(1, 1, 1) И &ДатаПоступления <> ДАТАВРЕМЯ(1, 1, 1) И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления И ЗаказПокупателяТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон |
|||
10
ssh2006
02.08.12
✎
14:05
|
(9) потому что (8)
|
|||
11
Интрудер
02.08.12
✎
14:06
|
Что бы не дела, операторные скобки конструктору фиолетовы, срезает :(
|
|||
12
Интрудер
02.08.12
✎
14:07
|
нет способа?
|
|||
13
Ц_У
02.08.12
✎
14:07
|
(11) в твоем случае что должно быть то, может ты не правильно условия ставишь?
|
|||
14
ssh2006
02.08.12
✎
14:07
|
(12) расстановка скобок на результат не влияет
|
|||
15
Lex_Liven
02.08.12
✎
14:08
|
(ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки <> ДАТАВРЕМЯ(1, 1, 1)
И &ДатаПоступления <> ДАТАВРЕМЯ(1, 1, 1) И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления) И (ЗаказПокупателяТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон) всю жизнь заключаю МЕЖДУ в скобки - проблем не было. |
|||
16
Ц_У
02.08.12
✎
14:08
|
(12) руками поправить текст после конструктора не?
|
|||
17
Pro-tone
02.08.12
✎
14:08
|
>запрос понятно не работает
(0) что за формулировка? запрос не работает только в том, случае, когда система выдает ошибку при исполнении запроса! А у тебя некорректно заданы условия в запросе! Мы тут не можем понять что-то хочешь получить выборку чего в итоге. |
|||
18
Molinor
02.08.12
✎
14:08
|
Оператору И фиолетово на скобки. Все условия должны выполняться.
|
|||
19
sash-ml
02.08.12
✎
14:10
|
лучше так &ДатаПоступления > ДАТАВРЕМЯ(1973, 1, 1)
|
|||
20
Интрудер
02.08.12
✎
14:11
|
(17) почему не корректно? если есть и дата отгрузки и дата поступления то дата поступления должна быть раньше даты отгрузки
|
|||
21
Pro-tone
02.08.12
✎
14:12
|
(20)запрос отрабатывает те условия, которые ты в него задал, значит смотри сам почему записи в выборке им не удовлетворяют
|
|||
22
Lex_Liven
02.08.12
✎
14:13
|
"если есть и дата отгрузки и дата поступления то дата поступления должна быть раньше даты отгрузки" - а у вас в запросе - дата поступления БОЛЬШЕ отгрузки
|
|||
23
Интрудер
02.08.12
✎
14:13
|
(15) если посмотреть ваше предложение в конструкторе, увидим 4 условия. После его закрытия увидим (9)
|
|||
24
palpetrovich
02.08.12
✎
14:13
|
(19) а почему не ограничить выбор пользователем "ДатаПоступления" до запроса? короче (3)+1
|
|||
25
Интрудер
02.08.12
✎
14:16
|
(24) Если дата отгрузки или дата поступления отсутствуют то без разницы проверять дальше. Это объединенное условие. Похоже можно только переделать логику с И на ИЛИ. Не дружит конструктор с И.
|
|||
26
Интрудер
02.08.12
✎
14:17
|
(24) это не ограничения. Это отбор документов с этим условием.
|
|||
27
Pro-tone
02.08.12
✎
14:18
|
(25) это ты сам не понимаешь разницу между И и ИЛИ
|
|||
28
Интрудер
02.08.12
✎
14:19
|
(3) Это проверка на пустую дату. Есть проще способ? Хотя трабла не в этом. Логику с ИЛИ конструктоп объединяет, с И нет. Ни в одном языке не всречал такого.
|
|||
29
Molinor
02.08.12
✎
14:19
|
(25) Это ты не дружишь с И. :)
По твоему условия обе даты должны быть заполнены. |
|||
30
ssh2006
02.08.12
✎
14:20
|
(25) > Не дружит конструктор с И.
В цепочке из И скобки не могут повлиять на результат. Смысла в них там нет. Конструктор их и убирает. |
|||
31
Интрудер
02.08.12
✎
14:20
|
(27) правильно показана нужная логика. она не соблюдается, и что же я не понимаю?
|
|||
32
Sammo
02.08.12
✎
14:21
|
Была фишка, в некоторых филигилиизгибистых условия конструктор некорректно ставит скобки. Решение - руками править.
Но это не данный случай, имхо |
|||
33
sash-ml
02.08.12
✎
14:22
|
(31) все соблюдается, все условия накладываются на каждую строку выборки, тебе нужно ИЛИ на одиночное условие
|
|||
34
Pro-tone
02.08.12
✎
14:22
|
(31) для начала полностью сформулируй свое ТЗ
|
|||
35
Lex_Liven
02.08.12
✎
14:23
|
В каком плане "Запрос не работает"? Выдает ошибку? ничего не отбирает? отбирает не то?
пару примеров дай |
|||
36
Molinor
02.08.12
✎
14:23
|
wiki:Алгебра_логики
Почитай, много нового узнаешь. |
|||
37
Интрудер
02.08.12
✎
14:24
|
(30)Как я проверю условие
ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления) если одна из дат пустая? В коде Если ЗначениеЗаполнено(ЗаказПокупателя.ДатаОтгрузки) И ЗначениеЗаполнено(ДатаПоступления) И (ЗаказПокупателя.ДатаОтгрузки < ДатаПоступления) Тогда #Если Клиент Тогда Предупреждение("Отгрузку по заказу покупателя необходимо осуществить раньше даты поступления по данному документу!"); #Иначе ОбщегоНазначения.СообщитьОбОшибке("Отгрузку по заказу покупателя необходимо осуществить раньше даты поступления по данному документу!"); #КонецЕсли Возврат; КонецЕсли; прекрасно работает. (35) ничего не отбирает |
|||
38
palpetrovich
02.08.12
✎
14:25
|
(28) "Это проверка на пустую дату" - проверка ПАРАМЕТРА передаваемого в запрос! Зачем?
|
|||
39
Defender aka LINN
02.08.12
✎
14:25
|
(5) А теперь убираем скобки... И нихрена не меняется.
|
|||
40
Molinor
02.08.12
✎
14:25
|
Дату начала с датой конца периода не перепутал?
|
|||
41
Pro-tone
модератор
02.08.12
✎
14:26
|
(0) если не сформулируешь ТЗ - закрою ветку
|
|||
42
Lex_Liven
02.08.12
✎
14:26
|
Как я проверю условие
ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления) если одна из дат пустая? Прекрасно проверишь, если пустой будет ДатаПоступления - это условие вернет тебе ложь и все. С датой отгрузки - уже другой вопрос. Но необходимость проверки "ДатаПоступления.Пустая()" ставится под сомнение. |
|||
43
Интрудер
02.08.12
✎
14:28
|
(41) Заполнить ЗаказПоставщика номенклатурой из множества ЗаказовПокупателя.
|
|||
44
Lex_Liven
02.08.12
✎
14:28
|
(37) ничего не отбирает - смотри (22)
|
|||
45
Pro-tone
02.08.12
✎
14:30
|
(43) конфа какая? - от этого зависит название регистра откуда хватать заказы
|
|||
46
Pro-tone
02.08.12
✎
14:32
|
по ходу ТС перебирает все документы :(
|
|||
47
Интрудер
02.08.12
✎
14:32
|
(45) УТ
|
|||
48
Lex_Liven
02.08.12
✎
14:32
|
(45) он из табличных частей документов набирает явно: "ЗаказПокупателяТовары..."
(44) Больше всего похоже, что ты знаки "Больше" и "меньше" перепутал. |
|||
49
Интрудер
02.08.12
✎
14:35
|
(46) последнее условие МЕЖДУ. оно абсолютно. первое условие состоит из трех. Много хочу? В любом языке это будет работать. < или > не важно. Как условие И объединить.
|
|||
50
Pro-tone
модератор
02.08.12
✎
14:36
|
(48) ага
(43) вот тебе текст запроса для УТ "ВЫБРАТЬ РАЗЛИЧНЫЕ ЗаказыКлиентовОбороты.Номенклатура ИЗ РегистрНакопления.ЗаказыКлиентов.Обороты(&ДатаНач, &ДатаКон, , ) КАК ЗаказыКлиентовОбороты СГРУППИРОВАТЬ ПО ЗаказыКлиентовОбороты.Номенклатура"; |
|||
51
Pro-tone
модератор
02.08.12
✎
14:37
|
даже сгруппировать не надо
ВЫБРАТЬ РАЗЛИЧНЫЕ ЗаказыКлиентовОбороты.Номенклатура ИЗ РегистрНакопления.ЗаказыКлиентов.Обороты(&ДатаНач, &ДатаКон, , ) КАК ЗаказыКлиентовОбороты |
|||
52
Classic
02.08.12
✎
14:37
|
(49)
Напиши плиз словами, что ты хочешь от условий. Подозреваю, что тебе надо И ВЫБОР КОГДА &ДатаПоступления <> ДАТАВРЕМЯ(1, 1, 1) ТОГДА ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления) КОНЕЦ |
|||
53
ssh2006
02.08.12
✎
14:38
|
(49) ЗаказПокупателяТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон и
Выбор когда ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки <> ДАТАВРЕМЯ(1, 1, 1) И &ДатаПоступления <> ДАТАВРЕМЯ(1, 1, 1)Тогда И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления иначе истина конец |
|||
54
Lex_Liven
02.08.12
✎
14:38
|
(49) Тебе же объясняют - Если между четырьмя условиями стоит И - скобки не нужны. не важно, как их объединять - если в ЛЮБОМ из них ответ ложь - то вся конструкция равна Ложь.
Проверь свое условие И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления оно вернет истину, если отгрузка стоит РАНЬШЕ поступления. Поменяй там знак на Больше И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки > &ДатаПоступления и проверь свой запрос. |
|||
55
Интрудер
02.08.12
✎
14:42
|
(33) Признаться не понял
(51) Не пойдет, нужно учесть только заказы с установленной ДатаОтгрузки. Отгружают не всем. (54) Кажется въехал, большое спасибо. Всем спасибо. |
|||
56
Интрудер
02.08.12
✎
14:47
|
(54) Только не верно одно.
ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаПоступления нужно учесть только заказы которые запланировали отгрузить раньше предполагаемого поступления по заказу поставщику. те что мы обязались отгрузить в будущем, не интересуют, для них и заказ в будущем создадут. |
|||
57
Bober
02.08.12
✎
14:48
|
(55) в (54) говорит про
|
|||
58
Bober
02.08.12
✎
14:48
|
||||
59
Интрудер
02.08.12
✎
14:50
|
(58) Это я понял
|
|||
60
Lex_Liven
02.08.12
✎
14:52
|
(56) значит в (20) ты неверно озвучил задачу.
Попробуй для начала повыключать по одному условия, найти, какое именно всегда возвращает ложь и уже с ним работать. И еще бывает - проверь, что в твоем периоде ДатаНач-ДатаКон действительно выполняются все три условия выше. Может ты сам опять запутался, какие даты должны быть больше. |
|||
61
Pro-tone
модератор
02.08.12
✎
14:52
|
(55) лови =)
ВЫБРАТЬ РАЗЛИЧНЫЕ ЗаказыКлиентовОбороты.Номенклатура ИЗ РегистрНакопления.ЗаказыКлиентов.Обороты(НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ), КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), , ) КАК ЗаказыКлиентовОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары ПО ЗаказыКлиентовОбороты.Номенклатура = ЗаказКлиентаТовары.Номенклатура И ЗаказыКлиентовОбороты.ЗаказКлиента = ЗаказКлиентаТовары.Ссылка.Ссылка ГДЕ ЗаказКлиентаТовары.ДатаОтгрузки <> ДАТАВРЕМЯ(1, 1, 1) СГРУППИРОВАТЬ ПО ЗаказыКлиентовОбороты.Номенклатура |
|||
62
Интрудер
02.08.12
✎
14:54
|
(61) Спасибо. =) только группировать кажется не надо.
|
|||
63
Лефмихалыч
02.08.12
✎
14:55
|
(0) А+В+С+Д - как скобки ни расставляй, будет одно и то же. У тебя то же самое в запросе.
Если любое из первых трех условие = ложь, то все условие ложно. Истинно оно будет только, если все 4 условия сразу истинны. Это справедливо вне зависимости от того, есть у тебя скобки или нет |
|||
64
Pro-tone
модератор
02.08.12
✎
14:57
|
(62) да что ты говоришь? ты соединяешь 2 таблицы - свернутую уже - обороты с табличной частью дока. Одна позиция номенклатуры даст 2 строки как минимум, а если в табл части товары более 2х строк с одной номенклатурой, то больше будет
|
|||
65
Lex_Liven
02.08.12
✎
14:58
|
(63) Для "И" больше подходит пример с умножением
A*B*C*D. Оно так и называется "логическое умножение". 1*1*1*1 = 1 1*1*1*0 = 0 Сложение - это "ИЛИ" 1+1+1+1 >1 ~1 1+1+1+0 >1 ~1 0+0+0+0 = 0 |
|||
66
Ненавижу 1С
гуру
02.08.12
✎
14:59
|
(65) И(а,б) = а*б
ИЛИ(а,б) = а+б-а*б |
|||
67
ssh2006
02.08.12
✎
15:00
|
(64) он заметил что в запросе уже есть РАЗЛИЧНЫЕ :)
|
|||
68
Ненавижу 1С
гуру
02.08.12
✎
15:01
|
(0) какое может быть тут ООП? боже, люди...
|
|||
69
Pro-tone
02.08.12
✎
15:07
|
(68) ну это же не он про ООП тему создавал ;)
|
|||
70
Лефмихалыч
02.08.12
✎
15:26
|
(65) как раз умножение вещественных чисел здесь неправильный пример, по скольку для этой операции скобки меняют результат
|
|||
71
Лефмихалыч
02.08.12
✎
15:27
|
(68) а прямые update/insert/delete?
вот я о том и говорил. А ты - "это тоже естественный отбо-о-о-ор", да "ни чо стра-а-а-ашного" :) |
|||
72
Lex_Liven
02.08.12
✎
15:27
|
(70)
1*2*3*4 = 24 (1*2)*(3*4) = 24 (1*2*3)*4 = 24 Нет, не меняют. |
|||
73
Лефмихалыч
02.08.12
✎
15:30
|
хотя да, разницы тоже не будет - сложение и умножение ассоциативны оба. Ну, это мои слова исходные только доказывает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |