8.х не работает условие

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mhl, 19 янв 2008.

  1. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Написал такое условие:
    Код:
    ТипОперацияБух = ТипЗнч(Документы.ОперацияБух.ПустаяСсылка());
    ТипВыписка = ТипЗнч(Документы.Выписка.ПустаяСсылка());
    Если (ТипЗнч(ВыборкаДокумент2.Регистратор) <> ТипОперацияБух) или 
    (ТипЗнч(ВыборкаДокумент2.Регистратор) <> ТипВыписка) Тогда
    НоваяСтрока.Документ=СокрЛП(ВыборкаДокумент2.Регистратор.Приложение);
    КонецЕсли;
    
    Но при значении ВыборкаДокумент2.Регистратор = ТипВыписка условие выполняется.
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
    Если А <> 1 ИЛИ А <> 2 Тогда
    
    Если А = 1, что должно произойти? :unsure:
  3. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    программа не должна входить в условие. Или я не прав?
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Вызовет ошибку в нормальном случае.
    Условие некошерно, в твоем случае надо использовать И, зачем тебе ИЛИ?

    АПДЕЙТ: неправильно, читай ниже
  5. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Спасибо
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Ага, заинтересовался этим вопросом и вот что получил:

    Код:
    Если(Истина ИЛИ Ложь) Тогда
    // Всегда истина
    ...
    
    
    Т.е.
    Код:
    Если(А <> 1 ИЛИ А<>10) Тогда
    // при а = 1 всегда попадаем
    
    
    НО! Есть особенности в других языках, например в PHP и С:

    Код PHP:

    $e = false || true; // $e = true
    $f = false or true; // $f = false

    Почему? Все зависит от приоритетности операторов:
    Оператор || имеет более высокий приоритет, чем =, поэтому можно написать так:

    $e = (false || true), выражение в скобках будет true

    А вот оператор OR имеет более низкий приоритет по сравнению с =:

    ($f = false) or true, поэтому $f будет false

    ________________________________________________

    Вердикт:

    Условие в теме должно было выполняться правильно, если бы оно было написано правильно!

    Решение: Исправить сравнение, в данном случае сравнивать надо ССЫЛКИ ИЛИ ТИПЫ, а не ССЫЛКИ И ТИПЫ

Поделиться этой страницей