Что означает булево в 1с
Логические операции в 1С
Логическая операция позволяет сравнить два значения. Результатом будет значение типа Булево: Истина или Ложь.
Операции сравнения
Сравнивает два операнда на равенство. Если равны, то вернет Истина, если не равны вернет Ложь.
Сравнивает два операнда. Если не равны, то вернет Истина, если равны вернет Ложь.
Если первый операнд больше второго, то вернет Истина, иначе Ложь.
Если первый операнд больше или равен второму, то вернет Истина, иначе Ложь.
На равенство, не равенство можно сравнивать любые типы данных. На больше, меньше можно сравнивать дату с датой, строку со строкой, число с числом и число с булево. При сравнении числа с булево сначала булево приводится к числу, а потом выполняется сравнение.
Все логические операции имеют одинаковый приоритет.
Булевы операции
Булевы операции выполняются над значениями типа Булево. Можно объединять несколько операций сравнения.
Логическое умножение, конъюнкция. Вернет Истина, если оба операнда равны Истина.
Логическое сложение, дизъюнкция. Вернет Истина, если хотя бы один операнд равен Истина.
Логическое отрицание. Вернет Истина, если операнд равен Ложь. Вернет Ложь, если операнд равен Истина.
Выполняются только необходимые части выражения.
Например, в выражении в = а = 1 И б = 1, если а не равно 1, то сравнение б не имеет смысла, так как первый операнд уже не равен Истина.
В выражении в = а = 1 ИЛИ б = 1, если а равно 1, то сравнение б не имеет смысла, так первый операнд уже равен Истина.
Приоритеты вычисления выражений в 1С
В порядке понижения приоритета. Операторы с одинаковым приоритетом выполняются слева направо:
., () | Разыменование, вызов метода и т. п. |
-,+ | Унарные плюс и минус |
*, /, % | Умножение, деление, остаток от деления |
+, — | Сложение, вычитание |
=, >, <> | Сравнение |
Not/Не | Логическое отрицание |
And/И | Логическое умножение |
Or/Или | Логическое сложение |
В примере булевых операций с ИЛИ ошибка
хочу уточнить, все таки есть ли приоритет в булевских операциях или нет в 1С, везде пишут что есть, но по факту его не наблюдаю.
Согласно и вашей же таблице приоритет отдается НЕ — далее И — и последним выполняется ИЛИ. Так?
Но если ввести в отладчике или в коде такую конструкцию:
Ложь ИЛИ Ложь И НЕ 1/0 — ошибки на деление не будет, т.к. проверка
просто не дойдет до деления, т.к. булевские операции на практике
получается НЕ ИМЕЮТ ПРИОРИТЕТА а идут ПО ПОРЯДКУ. Результат будет = ложь.
А в теории сначала должно было выполнится НЕ 1/0 и возникнуть ошибка…но этого не происходит 100%.
Либо еще пример
Истина ИЛИ Истина И НЕ 1/0, результат опять же без ошибок и равен Истина, тк дальше операнда ИЛИ проверка не идет. Приоритет не учелся, просто по порядку.
Поясните, очень нужно разобраться. Спасибо
Выполняются только необходимые части выражения.
1. Ложь ИЛИ Ложь И НЕ 1/0
Здесь выражение Ложь ИЛИ Ложь возвращает Ложь. Дальше идет И. Если хотя бы одна из частей выражения с И возвращает Ложь, то остальные части не имеет смысла выполнять, все равно все выражение будет равно Ложь.
2. Истина ИЛИ Истина И НЕ 1/0
Здесь первая же часть выражения возвращает Истина, соответственно остальную часть можно не выполнять, так как для ИЛИ достаточно чтобы хотя бы одна часть была истинной, чтобы все выражение тоже было истинным.
3. Выполните такой пример:
а = Истина;
б = Истина;
в = Ложь;
г = а ИЛИ б И в;
г будет равно Истина. Если бы приоритет не учитывался, то г было равно Ложь.
Значение и описание типов булево в 1С
Значение Булево в 1С – это значение Истина или Ложь. В числовом выражении Ложь обозначается числом «0», а Истина должна быть в виде числа, которое больше нуля, чаще всего это цифра «1».
Выражение Булево 1С считается математическим выражением, результатом чего является значение типа Булево 1С, например: a = 0+1; b = 2-1; x = (a = b); //x = Истина.
Что бы лучше понять данное значение, надо разобраться в условных операциях 1С, значениях и выражениях булево 1С.
Условная операция 1С ЕСЛИ выглядит следующим образом: Если ОПЕРАЦИЯ-БУЛЕВО Тогда //действия1… ИначеЕсли ОПЕРАЦИЯ-БУЛЕВО Тогда //действия2… Иначе //действия3… КонецЕсли;
Булево 1С – это итог вычисления со значениями Истина или Ложь, например: Массив1 = Новый СписокЗначений(); Если Массив1.Количество() > 0 Тогда //действия…
//другой вариант, полностью аналогичный Если НЕ Массив1.Количество() = 0 Тогда //действия… КонецЕсли;
Многие функции/методы объектов возвращают успешность выполнения операции как булево 1С, например: Запрос = Новый Запрос(); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда //действия… КонецЕсли;
В условной операции 1С можно объединять несколько условий с использованием И и ИЛИ: Массив1 = Новый СписокЗначений(); Если (Массив1.Количество() > 0 и Массив1.Количество() 100 Тогда //действия… КонецЕсли;
Условия булево 1С можно использовать непосредственно в коде программы: Переменная1 = 5; флгРезультат = (Переменная1 = 2 + 3); //флгРезультат будет равен ИСТИНА
В условной операции 1С оператор ЕСЛИ ИНАЧЕ ТОГДА можно заменить более кратким выражением. Следующие варианты равны:
Если затронуть описание типов булево в 1С, то начинающие программисты встречаются, прежде всего, с примитивным типом булево. Иначе он может называться «логический тип». Это название ему было дано в честь английского математика Джорджа Буля, который занимался изучением вопросов логики в математической науке.
Что бы лучше узнать о примитивном типе, надо сначала познакомиться с булевыми или логическими выражениями. Они представляют из себя вопросы, на которые должны быть короткие ответы «да» или «нет».
Так же могут быть вопросы посложнее:
Дверь открыта – нет.
Булевы выражения фигурируют во всех условных переходах:
В языке программирования 1С переменную с примитивным типом Булево можно задать явно:
Где Истина и Ложь единственные значения, которые может принимать примитивный тип Булево.
Истина значит, что какое-то утверждение соответствует действительности (Ответ – Да).
Ложь – значить, что какое-то утверждение, наоборот, не соответствует действительности (Ответ – Нет).
Так же переменные с типом булево могут быть заданы с помощью какого-либо логического выражения. Например:
В этом случае, в переменой А будет значение Истина, а в переменной типа Б – ложь;
В языке программирования 1С над переменными типа булево можно осуществлять различные операции.
Всего их три – И, ИЛИ и НЕ.
Понять функциональность этих операций помогут следующие таблицы
Операция НЕ
Операция И
С = А И Б | А | Б |
Истина | Истина | Истина |
Ложь | Ложь | Истина |
Ложь | Истина | Ложь |
Ложь | Ложь | Ложь |
Операция ИЛИ
С = А ИЛИ Б | А | Б |
Истина | Истина | Истина |
Истина | Ложь | Истина |
Истина | Истина | Ложь |
Ложь | Ложь | Ложь |
Данные операции можно выполнять подряд слева направо. Только они будут иметь следующий уровень старшинства:
Первый: в первую очередь выполняются операции в скобках
Второй: Операция НЕ
Четвертый: Операция ИЛИ.
Чтобы не путаться в операциях, необходимо использовать скобки, где только возможно.
В данном случае сначала будет работать операция И между А и С.
Согласно таблице А – Ложь, С – Ложь, результат А И С будет Ложь.
Следующим шагом будет выполнение операции ИЛИ между Ложью (Результат предыдущей операции) и значением Б, которое Истина.
Результат будет Истина.
А если нам надо, чтобы прошла сначала операция ИЛИ между С и Б, а потом только операция И между А и тем, что получилось, то для этого необходимо использовать скобки:
Результат будет диаметрально противоположный. Благодаря скобкам сначала выполняется операция и между С и Б, т.к. С — Ложь, а Б – Истина, результат будет Истина. Потом между значением А (которое Ложь) и значением Истина (результатом предыдущей операции) выполняется операция И. Результат будет Ложь.
Довольно часто возникает ошибка: булево значение в 1С «преобразование значения к типу булево\число не может быть выполнено», которая на самом деле может быть легко устранена. В первую очередь надо обновить конфигурацию до последнего релиза. Это одно из решений данной проблемы. Но в большинстве случаев возникновение такой ошибки говорит о попытке присвоить числовой переменной не численное значение, в результате внутренний конвертер типов не может преобразовать переменную в число и возникает ошибка.
Если присваивание переменной происходит из тела выборки результата запроса, следует проверить наличие в выборке значений типа NULL. Это значение нельзя использовать в операциях с числами. Значение NULL появляется в запросе при использовании соединений.
В этом случае ошибка может появиться, если в регистре со сведениями цен номенклатуры нет записи по ней.
Решить проблему можно следующим путем: во время обращения к полю выборки необходимо добавить проверку на равенство значению типа NULL. Либо использовать функцию ЕСТЬNULL(x1, x2). Она проверяет на NULL x1, и если Значение NULL обнаружено функция возвращает x2, в обратно случае возвращает x1. В первом случае равенства Выражения1 NULL, Выражение1 будет заменено в результате запроса на заданное Выражение2.
Примитивные типы данных Булево и Дата в 1С Предприятие 8
Здравствуйте, уважаемые читатели блога SoftMaker.kz! В прошлый раз мы обращали внимание на примитивный тип число во встроенном языке 1С:Предприятие 8. Сегодня мы продолжим и поговорим сразу о двух типах данных — Булево и Дата, а также рассмотрим, как работать с ними. Итак, начнем!
Что касается типа данных Булево, то здесь всё достаточно просто. Существует два значения Истина и Ложь, которые могут быть получены различными способами. Например, можно использовать операции сравнения:
Как видим, можно использовать различные операции сравнения чисел, строк, дат. В итоге будет получаться некоторое Булевское значение, которое часто используется в условных операторах и в операторах цикла.
Теперь рассмотрим примитивный тип данных Дата. Чтобы описать тип данных Дата обычно применяют два способа. Первый, использование литерала. Давайте объявим переменную, которая будет называться «ТекущаяДата». Например, она будет равна 2 октября 2014 года. В этом случае используется формат даты год/месяц/день.
Если есть необходимость, то мы можем указать время, потому что в системе 1С:Предприятие 8 любая дата содержит внутри себя и дату и время. Поэтому при необходимости можно указать, например такое время: 15 часов 5 минут и 50 секунд. Получится год/месяц/день/час/минута/секунда.
Если не указывать время, то по умолчанию оно будет равно нулю, причём дату можно описывать вот таким образом: ‘20141002’. Для ясности, можно использовать любой разделитель, например, точки «.». Поэтому дата может выглядеть так:
Это был первый способ описания даты. Обратите внимание, что используются одинарные кавычки, то есть литерал, который нельзя разорвать. Он пишется в одинарных кавычках. Второй способ определения даты, это использование функции глобального контекста Дата(). В этом случае мы передаем в качестве параметра этой функции то же самое: год/месяц/день. Параметры здесь нужно указывать через запятую.
Также можно указать время.
Если время не указывать, тогда оно будет равно началу дня. Также можно написать следующий вызов этой функции:
Здесь используется один параметры со строкой, которая должна содержать дату в формате: год/месяц/день/час/минута/секунда. Для того чтобы описать пустую дату в системе 1С:Предприятие 8 нужно сделать следующее:
Или используя описание через литерал:
Другой способ, используя уже знакомую нам функцию глобального контекста:
Использование этих способов вернет одинаковый результат и дата будет считаться пустой. Удобство функции Дата заключается в том, что мы можем передавать сюда не конкретные значения, а переменные. Иногда нужно получить дату, собирая разные переменные. Для этого очень хорошо помогает функция Дата. И еще хочется отметить, что для даты применима операция сложения. Если прибавить к дате число десять:
В результате мы получим дату на десять секунд больше:
Итак, операция сложения прибавляет к указанной дате определенное количество секунд. Это отличие от версии системы 1С:Предприятие 7.7, где при складывании дат прибавлялось количество дней, а не секунд.
Что означает булево в 1с
Значение Булево 1С — это значение Истина или Ложь. В числовом выражении Ложь это ноль, а Истина — число больше нуля (обычно единица).
Выражение (операция) Булево 1С — это математическое выражение, результатов которого является значение типа Булево 1С, например:
a = 0+1;
b = 2-1;
x = (a = b);
//x = Истина
Далее — подробнее о условных операциях 1С, значениях и выражениях булево 1С.
Условная операция 1С ЕСЛИ выглядит следующим образом:
Если ОПЕРАЦИЯ-БУЛЕВО Тогда
//действия1…
ИначеЕсли ОПЕРАЦИЯ-БУЛЕВО Тогда
//действия2…
Иначе
//действия3…
КонецЕсли;
Булево 1С — это результат вычисления со значениями Истина или Ложь, например:
Массив1 = Новый СписокЗначений();
Если Массив1.Количество() > 0 Тогда
//действия…
КонецЕсли;
//другой вариант, полностью аналогичный
Если НЕ Массив1.Количество() = 0 Тогда
//действия…
КонецЕсли;
Многие функции/методы объектов возвращают успешность выполнения операции как булево 1С, например:
Запрос = Новый Запрос();
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
//действия…
КонецЕсли;
В условной операции 1С можно объединять несколько условий с использованием И и ИЛИ:
Массив1 = Новый СписокЗначений();
Если (Массив1.Количество() > 0 и Массив1.Количество() 100 Тогда
//действия…
КонецЕсли;
Условия булево 1С можно использовать непосредственно в коде программы:
Переменная1 = 5;
флгРезультат = (Переменная1 = 2 + 3); //флгРезультат будет равен ИСТИНА
В условной операции 1С оператор ЕСЛИ ИНАЧЕ ТОГДА можно заменить более кратким выражением. Следующие два варианта равны:
У реквизитов объектов (справочников, документов и т.п.) есть возможность установить тип булево 1С. Также можно создать переменную булево 1С, например:
флгВыполнено = Истина;
Далее, в условиях ЕСЛИ, можно писать равнозначно двумя способами:
//вариант 1
Если флгВыполнено = Истина Тогда
//делаем что-то
КонецЕсли;
//вариант 2
Если флгВыполнено Тогда
//делаем что-то
КонецЕсли;
Второй вариант таит в себе следующую «неприятность»:
Преобразование значения к типу Булево не может быть выполнено в 1С
Статья рассчитана как на пользователей-непрограммистов, так и на тех, кто имеет желание попробовать свои силы в решении этой проблемы. Для последних в этом вопросе важно иметь представление о режиме «Конфигуратор». Однако начать стоит с малого – того, что может сделать даже не знакомый с тонкостями программирования пользователь.
1. Ошибка кэша
В зависимости от режима работы программы 1С Предприятие 8 можно попробовать перезагрузить компьютер, на котором расположена база, если режим файловый, или сервер – если программа работает в серверном режиме.
Узнать, в каком режиме работает Ваша 1С можно из окна «О программе», как показано на скриншоте ниже.
Делается это из-за возможных ошибок кэша, которые, в свою очередь, могут стать причиной появления сообщения об ошибке преобразования значения к типу Булево.
Очистив таким нехитрым образом кэш, можно избежать последующих проблем.
2. Исключение ошибки в настройках пользователя
Если ошибка повторяется только у одного пользователя, есть вариант просто исключить ее в настройках пользователя 1С.
Откроем настройки карточки данного пользователя 1С и отыщем в списке форму, на которой возникает ошибка. Если таковая в списке имеется, просто очищаем ее, путем нажатия на кнопку «Очистить» (показано на рисунке ниже).
3. Обновление типовой конфигурации 1С
Если вы работаете с типовой конфигурацией системы 1С — лучшее решение — обновить программу до версии последнего релиза. Возможно, это решит проблему.
Если описанные выше способы не стали решением проблемы, рекомендую неподкованным в программировании пользователям остановиться на этом, и обратиться за помощью к более компетентным коллегам. Далее последует информация для тех, кто уже имел опыт работы в 1С в режиме «Конфигуратор».
4. Исправление ошибки Булево в Конфигураторе 1С
Значения типа Булево в 1С имеют два значения в коде программы: Истина и Ложь (Да и Нет). Значения данного типа возвращаются в качестве результата вычисления логических выражений. То есть, если преобразование значения к типу Булево не может быть выполнено в 1С – у вас неверно сформулировано это самое логическое выражение. Ниже рассмотрим простой пример.
У вас может быть и свое условие, но его можно упростить до такого варианта: есть некоторое значение (переменная), которая имеет тип «Булево», но по какой-то причине ей присвоено значение «Неопределено». Вот условия, при которых будет возникать ошибка преобразования значения к типу Булево в 1С, и при которых она не возникнет:
Еще пример: есть переменные А и Б. Необходимо проверить, есть ли Б в некотором Списке. Ниже приведена часть кода, при котором воспроизводится и закомментированное верное условие, и ошибка не возникает:
Преобразовать в тип «булево» можно только тип «число»:
Такая ошибка может возникнуть при использовании внешней обработки или печатной формы. Вот пример реальной проблемы и ее решения из сети:
При внесении остатков склада через внешнюю обработку пользователь не указал «Вид номенклатуры» и не поставил признака «Не определена». Т.е. она просто не была заполнена.
Далее были определенные действия (использование механизма подбора в складских типах документов), при которых возникала ошибка преобразования значения к типу Булево в 1С. То есть, програмно, без проверок была создана Номенклатура со значением вида NULL.
Решение существующей проблемы: заполнить значение – простыми словами – указать соответствующий вид номенклатуры.
5. Как самостоятельно найти ошибку преобразования значения к типу Булево?
Если Вам требуется самостоятельно найти ошибку преобразования значения к типу Булево, поиск следует начать, открыв программу в режиме Конфигуратора.
Далее включаем отладку по ошибке:
Открываем программу 1С Предприятие 8 в режиме отладки:
Проверяем, запущена ли отладка (пример на файловом варианте работы системы «1С:Предприятие 8»):
В подключенных предметах отладки должно быть две строки с типом «Сервер» и «Тонкий клиент» (исключение, если режим отладки запущен в Толстом клиенте, тогда строка будет только одна – с этим типом):
Проверили. Закрыли. Теперь повторяем то же действие в режиме 1С:Предприятия, при котором возникает ошибка. В данном примере это внешняя обработка. Для выявления ошибки она открыта как в режиме Конфигуратора, так и в режиме 1С:Предприятие:
После выполнения действий, при которых возникает ошибка преобразования значения к типу Булево, появится следующая картина:
Программа в режиме отладки остановилась на шаге момента выполнения строки кода с нашей ошибкой. Далее мы видим, что во внешней обработке неверно составлено условие (см. пример выше), которое необходимо заменить на верное.
Каждая отдельная ситуация требует частного рассмотрения. Если вы имеете базовые представления об отладке, умеете читать код и обладаете весомым запасом энтузиазма и любопытства, то найдете причину и примете решение по ее устранению. Однако делать это лучше на резервной копии базы, дабы обезопасить данные.
А если у Вас недостаточно опыта, и первые три пункта из статьи не помогли исправить ошибку Булево, рекомендую поберечь время и нервы: мы в кратчайшие сроки решим ваш вопрос!