Имя: Пароль:
1C
1С v8
Ошибка при конструкции ИЛИ
,
0 Janna26
 
03.02.16
16:51
Всем привет, ребята что то я походу замоталась. Не могу правильно составить условие.
Если (не ТипЗнч(Элемента) <> Тип("ДекорацияФормы")) ИЛИ (не ТипЗнч(Элемента) <> Тип("КнопкаФормы")) тогда
//Текст обработки
КонецЕсли;

Данное условие всегда отдает истина

Без скобок тоже пробовала.

Может я где то ошибаюсь
Если Ложь или Истина тогда
Должно давать ложь?
1 Nuobu
 
03.02.16
16:53
Ложь или Истина
даст Истину
2 Новиков
 
03.02.16
16:53
0 или 1 всегда дает 1
3 Лефмихалыч
 
03.02.16
16:53
Если (ТипЗнч(Элемента) = Тип("ДекорацияФормы")) ИЛИ (ТипЗнч(Элемента) = Тип("КнопкаФормы")) тогда

у тебя просто всегда тип элемента или кнопка, или декорация. Что не так?
4 lera01
 
03.02.16
16:53
Ложь ИЛИ Истина всегда Истина
5 shuhard
 
03.02.16
16:54
(0) второе правило Де Моргана

отрицание условие требует замены И на ИЛИ
6 Janna26
 
03.02.16
16:54
7 Janna26
 
03.02.16
16:57
Если не ТипЗнч(Элемента) = Тип("ДекорацияФормы") И не ТипЗнч(Элемента) =Тип("КнопкаФормы") тогда


Как мне из этого Ложь получить?
8 Janna26
 
03.02.16
16:57
Ошибочка выше
Если не ТипЗнч(Элемента) = Тип("ДекорацияФормы") ИЛИ не ТипЗнч(Элемента) =Тип("КнопкаФормы") тогда


Как мне из этого Ложь получить?
9 hhhh
 
03.02.16
16:59
(8) никак. ИЛИ всегда дает истину.
10 Timon1405
 
03.02.16
17:00
Если НЕ (ТипЗнч(Элемента) = Тип("ДекорацияФормы") ИЛИ  ТипЗнч(Элемента) = Тип("КнопкаФормы")) Тогда

//Если я правильно понял чего хочет ТС
11 Бледно Золотистый
 
03.02.16
17:02
(8) Напиши лучше русским языком что надо от условия этого.
12 Janna26
 
03.02.16
17:03
Нужно что бы если Элемент декарация формы или кнопкаформы условие не проходило.
13 hhhh
 
03.02.16
17:06
(12) ну (10) тогда
14 Janna26
 
03.02.16
17:07
Если ТипЗнч(Элемента) = Тип("ДекорацияФормы")
            ИЛИ ТипЗнч(Элемента) = Тип("КнопкаФормы")
            ИЛИ ТипЗнч(Элемента) = Тип("ДополнениеЭлементаФормы") Тогда
            
        Иначе
Вот так решилось
15 Janna26
 
03.02.16
17:08
10) Спасибо большое!!! Я походу заработалась....
16 Alexandr_U1982
 
03.02.16
18:07
Если ТипЗнч(Элемента) <> Тип("ДекорацияФормы")          И
     ТипЗнч(Элемента) <> Тип("КнопкаФормы")             И
     ТипЗнч(Элемента) <> Тип("ДополнениеЭлементаФормы") Тогда
    
КонецЕсли;
17 kosts
 
03.02.16
18:52
(16) Из опыта. По реже используй не равно и почаще равно.
18 Tateossian
 
03.02.16
19:49
(17) +100500, лучше операнды НЕ X = Y, чем X <> Y.
19 Cyberhawk
 
03.02.16
19:55
(18) Ты жертвуешь восприятием в угоду удобству внесения правок
20 Alexandr_U1982
 
03.02.16
20:17
(17) (18) Обоснуйте. Почему?
21 Defender aka LINN
 
03.02.16
21:24
(20) Это Тру программизды. На самом деле они даже пишут не "НЕ", а "NOT", но предпочитают этого не афишировать
22 kosts
 
04.02.16
09:06
(20) (21) Вообще-то не (18) имел ввиду.
Имел ввиду, что есть вероятность, что появится новое значение, не предусмотренное разработчиком. С элементами формы, это конечно маловероятно. Но в общем такие случаи могут случаться.
Например
Разработчик напишет (зная, что колонок всего три)

Если ИмяКолонки <> "Товар" Тогда
     Стр[ИмяКолонки] = Стр[ИмяКолонки] * 10;
КонецЕсли;

И при добавлении колонки на форме программа неожиданно станет падать.
По этому лучше изначально написать:

Если ИмяКолонки = "Сумма" или ИмяКолонки = "Цена" Тогда
     Стр[ИмяКолонки] = Стр[ИмяКолонки] * 10;
КонецЕсли;

По той же причине где-то видел рекомендацию не использовать "*" в выборке запроса.
23 Лефмихалыч
 
04.02.16
09:16
(12) НЕ надо за скобки вынести
Если НЕ (ОДНО ИЛИ ДРУГОЕ) ТОГДА
24 Alexandr_U1982
 
04.02.16
10:33
(22) Понял. Спасибо. В (12) и (14) автор темы указала, что условие не должно выполняться для элементов с типами "ДекорацияФормы", "КнопкаФормы" и "ДополнениеЭлементаФормы", поэтому и решил использовать "<>".
Согласен, что в данном случае лучше использовать "=" с перечислением типов элементов, для которых условие должно выполниться.