Булево

Здравствуйте, уважаемые читатели блога SoftMaker.kz! В прошлый раз мы обращали внимание на примитивный тип число во встроенном языке 1С:Предприятие 8. Сегодня мы продолжим и поговорим сразу о двух типах данных — Булево и Дата, а также рассмотрим, как работать с ними. Итак, начнем!

Что касается типа данных Булево, то здесь всё достаточно просто. Существует два значения Истина и Ложь, которые могут быть получены различными способами. Например, можно использовать операции сравнения:

  • 101 > 1001 равно Ложь
  • 101 < 1001 равно Истина
  • ‘20000101’= ‘20000102’ равно Ложь
  • ‘Отрыто’ <> ‘Открыто’ равно Истина

Как видим, можно использовать различные операции сравнения чисел, строк, дат. В итоге будет получаться некоторое Булевское значение, которое часто используется в условных операторах и в операторах цикла.

Теперь рассмотрим примитивный тип данных Дата. Чтобы описать тип данных Дата обычно применяют два способа. Первый, использование литерала. Давайте объявим переменную, которая будет называться «ТекущаяДата». Например, она будет равна 2 октября 2014 года. В этом случае используется формат даты год/месяц/день.

ТекущаяДата = ‘20141002’; // 02.10.2014

Если есть необходимость, то мы можем указать время, потому что в системе 1С:Предприятие 8 любая дата содержит внутри себя и дату и время. Поэтому при необходимости можно указать, например такое время: 15 часов 5 минут и 50 секунд. Получится год/месяц/день/час/минута/секунда.

ТекущаяДата = ‘20141002150550’; // 02.10.2014 15:05:50

Если не указывать время, то по умолчанию оно будет равно нулю, причём дату можно описывать вот таким образом: ‘20141002’. Для ясности, можно использовать любой разделитель, например, точки «.». Поэтому дата может выглядеть так:

‘2014.10.02’

Это был первый способ описания даты. Обратите внимание, что используются одинарные кавычки, то есть литерал, который нельзя разорвать. Он пишется в одинарных кавычках. Второй способ определения даты, это использование функции глобального контекста Дата(). В этом случае мы передаем в качестве параметра этой функции то же самое: год/месяц/день. Параметры здесь нужно указывать через запятую.

ТекущаяДата = Дата(2014, 10, 02); // 02.10.2014 00:00:00

Также можно указать время.

ТекущаяДата = Дата(2014, 10, 02, 15, 05, 50); // 02.10.2014 15:05:50

Если время не указывать, тогда оно будет равно началу дня. Также можно написать следующий вызов этой функции:

ТекущаяДата = Дата(«20141002150550»); // 02.10.2014 15:05:50

Здесь используется один параметры со строкой, которая должна содержать дату в формате: год/месяц/день/час/минута/секунда. Для того чтобы описать пустую дату в системе 1С:Предприятие 8 нужно сделать следующее:

ПустаяДата = »; // 01.01.0001 00:00:00

Или используя описание через литерал:

ПустаяДата = ‘00010101’; // 01.01.0001 00:00:00

Другой способ, используя уже знакомую нам функцию глобального контекста:

Пустая дата = Дата (1, 1, 1 ); // 01.01.0001 00:00:00

Использование этих способов вернет одинаковый результат и дата будет считаться пустой. Удобство функции Дата заключается в том, что мы можем передавать сюда не конкретные значения, а переменные. Иногда нужно получить дату, собирая разные переменные. Для этого очень хорошо помогает функция Дата. И еще хочется отметить, что для даты применима операция сложения. Если прибавить к дате число десять:

ТекущаяДата = Дата(2014, 10, 02, 15, 05, 50); // 02.10.2014 15:05:50 ТекущаяДата = ТекущаяДата + 10;

В результате мы получим дату на десять секунд больше:

02.10.2014 15:06:00

Итак, операция сложения прибавляет к указанной дате определенное количество секунд. Это отличие от версии системы 1С:Предприятие 7.7, где при складывании дат прибавлялось количество дней, а не секунд.

Уважаемый посетитель! Как вы, может быть, заметили все материалы с нашего сайта предоставляются бесплатно. Вы можете поддержать наш сайт, сняв c него блокировку рекламы, то есть добавив его в исключения вашего блокировщика.

Этот блог читают уже более 3000 человек — читай и ТЫ!

Значение Булево 1С — это значение Истина или Ложь. В числовом выражении Ложь это ноль, а Истина — число больше нуля (обычно единица).

Далее — подробнее о условных операциях 1С, значениях и выражениях булево 1С.

Условная операция 1С ЕСЛИ выглядит следующим образом:
Если ОПЕРАЦИЯ-БУЛЕВО Тогда
//действия1…
ИначеЕсли ОПЕРАЦИЯ-БУЛЕВО Тогда
//действия2…
Иначе
//действия3…
КонецЕсли;

Булево 1С — это результат вычисления со значениями Истина или Ложь, например:
Массив1 = Новый СписокЗначений();
Если Массив1.Количество() > 0 Тогда
//действия…
КонецЕсли;

//другой вариант, полностью аналогичный
Если НЕ Массив1.Количество() = 0 Тогда
//действия…
КонецЕсли;

В условной операции 1С можно объединять несколько условий с использованием И и ИЛИ:
Массив1 = Новый СписокЗначений();
Если (Массив1.Количество() > 0 и Массив1.Количество() 100 Тогда
//действия…
КонецЕсли;

Условия булево 1С можно использовать непосредственно в коде программы:
Переменная1 = 5;
флгРезультат = (Переменная1 = 2 + 3); //флгРезультат будет равен ИСТИНА

В условной операции 1С оператор ЕСЛИ ИНАЧЕ ТОГДА можно заменить более кратким выражением. Следующие два варианта равны:

У реквизитов объектов (справочников, документов и т.п.) есть возможность установить тип булево 1С. Также можно создать переменную булево 1С, например:
флгВыполнено = Истина;

Далее, в условиях ЕСЛИ, можно писать равнозначно двумя способами:
//вариант 1
Если флгВыполнено = Истина Тогда
//делаем что-то
КонецЕсли;

//вариант 2
Если флгВыполнено Тогда
//делаем что-то
КонецЕсли;

Второй вариант таит в себе следующую «неприятность»:

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Довольно часто возникающая ошибка «преобразование значения к типу булевочисло не может быть выполнено» на самом деле практически всегда легко поддается устранению.

Первое, что нужно сделать, если вы работаете с типовой конфигурацией системы 1С — это обновить конфигурацию до последнего релиза. Возможно, это решит проблему.

Но в большинстве случаев появление такой ошибки говорит попытке присвоить числовой переменной не численное значение, в результате внутренний конвертер типов не может преобразовать переменную в число и возникает ошибка.

Если присваивание переменной происходит из тела выборки результата запроса, следует проверить наличие в выборке значений типа NULL. Это значение недопустимо использовать в операциях с числами.

Значение NULL появляется в запросе при использовании соединений.

К примеру:
Сумма=КолВо*Выборка.Цена;

В этом случае ошибка возможна, если в регистре сведений цены номенклатуры нет записи по этой номенклатуре.

Решить проблему можно таким способом: во время обращения к полю выборки необходимо добавить проверку на равенство значению типа NULL. Либо использовать функцию ЕСТЬNULL(x1,x2). Она проверяет на NULL x1, и если Значение NULL обнаружено функция возвращает x2, в обратно случае возвращает x1.

В первом случае равенства Выражения1 NULL, Выражение1 будет заменено в результате запроса на заданное Выражение2.

Появление ошибки возможно в случае работы с Excel через COM соединение. Тогда необходимо проанализировать структуру книги Excel, на наличие значений NULL, и проверить, задан ли для искомых ячеек нужный тип данных. Либо значение ячейки присваивать числовой переменной через функцию преобразования типов «Число()» и после обращаться к ячейке внутри контейнера Попытка Исключение КонецПопытки.

В остальных случаях требуется работа с отладчиком для поиска ошибок, либо принудительное или непринудительное преобразование типов.

Булевы функции от n переменных

Булевы функции 1В отечественной литературе их также часто называют функциями алгебры логики. названы в честь английского математика ХIХ века Дж. Буля, который впервые применил алгебраические методы для решения логических задач. Они образуют самый простой нетривиальный класс дискретных функций — их аргументы и значения могут принимать всего два значения (если мощность множества значений функции равна 1, то это тривиальная функция — константа !). С другой стороны, этот класс достаточно богат и его функции имеют много интересных свойств. Булевы функции находят применение в логике, электротехнике, многих разделах информатики.

Обозначим через B двухэлементное множество {0,1}. Тогда

это множество всех двоичных последовательностей (наборов, векторов) длины n. Булевой функцией от n переменных (аргументов) называется любая функция f(x1, xn): Bn -> B . Каждый из ее аргументов xi, 1 <= i <= n , может принимать одно из двух значений 0 или 1 и значением функции на любом наборе из Bn также может быть 0 или 1. Обозначим черезмножество всех булевых функций от n переменных. Нетрудно подсчитать их число.

Теорема 3.1. .

Имеется несколько различных способов представления и интерпретации булевых функций. В этом разделе мы рассмотрим геометрическое и табличное представления, а также представление с помощью логических формул. В «Эквивалентность формул и нормальные формы» будет показано, как булевы функции можно представлять с помощью формул специального вида — дизъюнктивных и конъюнктивных нормальных форм и многочленов Жегалкина. Кроме того, в лекциях «Предварительные сведения» и «Индукция и комбинаторика» (курс «Введение в схемы, автоматы и алгоритмы») будет рассмотрено еще два способа представления булевых функций: логические схемы и упорядоченные бинарные диаграммы решений.

Геометрическое представление

Bn можно рассматривать как единичный n-мерный куб. Каждый набор из нулей и единиц длины n задает вершину этого куба. На рис. 3.1 представлены единичные кубы Bn при n=3,4.


Рис. 3.1.

При этом существует естественное взаимно однозначное соответствие между подмножествами вершин n-мерных единичных кубов и булевыми функциями от n переменных: подмножеству соответствует его характеристическая функция

Табличное представление

Таблица 3.1. Табличное представление функции f(x1, …, xn)

x1 . . . xn-1 xn f(x1, …, xn)
0 . . . 0 0 f(0, …, 0,0)
0 . . . 0 1 f(0, …, 0,1)
0 . . . 1 0 f(0, …, 1,0)
. . . . . .
1 . . . 1 1 f(1, …, 1,1)

Наборы аргументов в строках обычно располагаются в лексикографическом порядке:

существует такое , что при , а .

При больших n табличное представление становится громоздким, например, для функции от 10 переменных потребуется таблица с 1024 строками. Но для малых n оно достаточно наглядно.