Ошибка булево значение в 1с. Примитивный тип булево. Переменные и операторы

Ошибка булево значение в 1с. Примитивный тип булево. Переменные и операторы

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

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

  • 101 > 1001 равно Ложь
  • 101 Истина
  • ‘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, где при складывании дат прибавлялось количество дней, а не секунд.

Как правило, изучение любого языка программирования начинается с примера написания первой простейшей программы (“Hello world!”). Делается это для того, чтобы наглядно показать работу с базовыми синтаксическими конструкциями. Мы не будем делать исключение из этого общепринятого способа подачи материала при изучении новой среды разработки и поэтому нашу первую статью следует рассматривать в этом же ключе. В ней мы подробно разберем ответы на следующие вопросы, касающиеся программирования на платформе «1С:Предприятие 8»:

  • Где и при помощи чего писать программный код на встроенном языке 1С?
  • Что такое программные модули, какие существуют правила работы с ними?
  • Что такое переменная, как с ней работать, как и где её объявлять?
  • Какие операторы сравнения, присваивания и условий существуют и как их применять?
  • Булевы операции – что это и как с ними работать?
  • Зачем нужны циклы и как их использовать?

Статья будет полезна всем тем, кто еще не знаком с разработкой на платформе «1С:Предприятие 8», но хочет научиться программировать на 1С.

Применимость

Материал актуален для платформы «1С:Предприятие 8» редакций 8.2. и 8.3.

Переменные и операторы

В этой статье мы приступаем к изучению встроенного языка 1С:Предприятие 8. Исполняемый код содержится в программных модулях.

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

Так, вход пользователя в систему обрабатывается в одном модуле, а обработка нажатия пользователя на некоторую кнопку – в совершенно другом.

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

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

Перем Склад, Подразделение, Кладовщик Экспорт;

После объявления переменных содержится раздел процедур и функций.

За ними располагается раздел основной программы, который будет выполняться в момент обращения к данному модулю.

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

Состояние=1;
НовоеВыражение=2;
Результат=3;

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

Разделителем операторов является символ «;» (точка с запятой). Этот знак является признаком окончания оператора. Т.е. оператор может быть записан в таком виде:

Результат=100Х200
+400
-600;

При этом не важно, на скольких строках располагается оператор.

Конечно, чаще удобнее и нагляднее располагать оператор в одной строке, но иногда операторы являются достаточно длинными (число строк обоснованно может достигать нескольких десятков).

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

Процедура ВычислениеЗначения()

ИсходноеЗначение = 100;
ПромежуточноеЗначение = ИсходноеЗначение/5;
ИтоговоеЗначение = ИсходноеЗначение+ПромежуточноеЗначение

КонецПроцедуры

Однако лучше использовать точку с запятой в завершающем операторе. Не исключено, что со временем конструкция будет продолжена, и завершающий оператор окажется уже не завершающим. Придется специально отслеживать эту ситуацию.

Переменные предназначены для того, чтобы хранить некоторые значения любого типа данных. Они используются для промежуточного хранения информации, для обработки.

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

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

Создан = Ложь;
Создан = Истина;
Создан =100;

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

  • неявный способ (упоминание в левой части оператора присваивания описывает данную переменную, нет предварительного описания переменной со словом Перем, т.е. нет специального раздела описания переменных);
  • явное описание переменных (Перем КонтрольныеДанные;). Явное описание переменных используется, например, если предполагается последующая передача этой переменной в функцию.

Для названия переменных используется классическое описание идентификатора. Идентификатор состоит из букв, цифр и знаков подчеркивания. Начинаться идентификатор должен либо с буквы, либо со знака подчеркивания.

При этом название переменной должно отображать смысл данной переменной. Названия переменных из одной буквы (типа А, В, С) являются плохими примерами. Они не отражают суть переменных.

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

В названии переменных нельзя использовать зарезервированные слова, такие как Процедура, Функция, Цикл, КонецЦикла и т.д. (эти конструкции выделяются в программном модуле красным цветом).

Зарезервированные слова – это операторы встроенного языка и их достаточно небольшое количество. Все они представлены в Синтакс-помощнике .

Следует отметить, что типы данных к зарезервированным словам не относятся (например, Массив, Булево, Истина, Ложь). Система такие имена переменных воспримет корректно.

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

Для Платформы это не имеет никакого значения. Тем не менее, по правилам хорошего тона начало слова нужно писать с большой буквы, все остальные буквы маленькими.

По поводу языка. Можно использовать и русский язык, и английский, и комбинацию двух языков. Если кому-то удобно, можно спокойно использовать английский язык для написания программного кода, а также комбинировать русский и английский языки. Для Платформы это не важно.

Многие названия на английском языке довольно сложно помнить. При использовании комбинации двух языков ухудшается читаемость программного кода.

Булевы операции

В операторах сравнения очень часто используется булевская логика, которая возвращает значение Истина или Ложь.

Например, в условном операторе можно сравнивать: Если Событие = Продажа Тогда алгоритм пойдет по одной ветке (т.е. при значении Истина), по условию Ложь выполняется другая ветка алгоритма.

Условия могут быть достаточно сложными, они могут комбинироваться, при этом применяются следующие операторы: И, ИЛИ, и НЕ. Так, для оператора И:

Истина И Истина = Истина;
Истина И Ложь = Ложь;
Ложь И Истина = Ложь;
Ложь И Ложь = Ложь.

Для опрератора ИЛИ достаточно, чтобы один из операндов был равен Истина, тогда и значение комбинации будет Истина. Значение Ложь получается только в том случае, когда оба операнда Ложь.

Оператор НЕ просто инвертирует текущее значение (Ложь в Истину, Истину в Ложь).

С помощью комбинации данных операторов можно строить достаточно сложные условия. При составлении сложных условных операторов следует учитывать приоритеты.

Высший приоритет имеет оператор НЕ, следующим идет оператор И, а за ним оператор ИЛИ. То, что заключено в скобки, имеет самый высший приоритет и выполняется в первую очередь.

Например, расставим приоритеты (последовательность выполнения) для операций в приведенном выражении:

НЕ(Условие1 ИЛИ Условие2) И Условие3 ИЛИ Условие4
1. Результат1 = (Условие1 ИЛИ Условие2);
2. Результат2 = НЕ Результат1;
3. Результат3 = Результат2 И Условие1;
4. Результат = Результат3 ИЛИ Условие4;

Существует правило преобразования:

НЕ (Условие1 ИЛИ Условие2) = НЕ Условие1 И НЕ Условие2.

Однако не следует всегда стремиться упростить выражение, поскольку зачастую, по логике, проще читается выражение развернутое.

Оператор присваивания

Не следует путать оператор присваивания с равенством, не смотря на то, что у них одинаковое написание.

Принцип работы оператора присваивания таков, что левому значению (переменной с левой части) присваивается то значение, которое находится справа от знака равенства. Разберем пример:

Переменная1 = Переменная2 = Переменная3;

Переменной1 присваивается значение равенства из булевской логики, т.е. Истина, если Переменная2 = Переменная3, или Ложь в обратном случае.

При тестировании на должность начинающего программиста довольно часто используется задача: поменять значения двух переменных местами.

Данная задача решается с использованием оператора присваивания и имеет два решения.

Решение №1 с использованием временной переменной:
ВременнаяПеременная = Переменная1;
Переменная1 = Переменная2;
Переменная2 = ВременнаяПеременная;

Решение №2:
Переменная1 = Переменная1 + Переменная2;
Переменная2 = Переменная1 – Переменная2;
Переменная1 = Переменная1 – Переменная2;

Условный оператор

Есть такой оператор Если, после которого необходимо описать некоторое условие (само условие может быть достаточно большим). После условия следует слово Тогда и выполняемые операторы.

Далее может следовать ключевое слово Иначе и серия других операторов. Если разных условий несколько, можно использовать серию ключевых слов ИначеЕсли (см. пример ниже). Вся конструкция обязательно завершается ключевым словом КонецЕсли , после чего следует знак точки с запятой.

Кроме простого и множественного условия существует сокращенная форма условного оператора: ?(Условие, Выражение1, Выражение2);

Если условие истинное, то будет выполняться Выражение1 , в противном случае – Выражение2 . Пример кода: ДорогойТовар = ?(Товар.Цена>100000, Истина, Ложь);

На практике вместо записей сравнения со значением Истина (Ложь ) типа:

Если Переменная = Истина Тогда
и
Если Переменная = Ложь Тогда

реально используются эквивалентные записи:

Если Переменная Тогда
и
Если НЕ Переменная Тогда

Циклические операторы

Для любого вида цикла обязательно явное указание окончания этого цикла с помощью ключевого слова КонецЦикла . Существует несколько типов циклов.

Цикл по счетчику – цикл с фиксированным количеством повторений. Условием выхода из цикла является превышение граничного значения. Пример использования для расчета значения А!

А = 5;
Факториал = 1;
Для Счетчик = 1 По А Цикл
Факториал = Факториал * Счетчик;
КонецЦикла;

Цикл по условию – выполняется пока истинно условие данного цикла. Пример:

ОстатокСуммы = 1000;
ЦенаДополнительногоТовара = 243;
Количество = 0;
Пока ОстатокСуммы>0 Цикл
Количество = Количество+1;
ОстатокСуммы = ОстатокСуммы – Количество*ЦенаДополнительногоТовара;
ЦенаДополнительногоТовара = ЦенаДополнительногоТовара * 0.8;
КонецЦикла
Количество = Количество-1;

Данный цикл вычисляет, сколько единиц товара можно купить на данную сумму (1000 рублей), если после покупки каждой единицы товара предыдущая его цена умножается на коэффициент 0,8. Изначальная цена товара – 243 рубля.

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

Цикл по коллекциям (другое название Для каждого).

В Платформе существует достаточно большое количество коллекций (это такие контейнеры, которые содержат элементы определенного типа).

Обойти элементы коллекции можно с помощью цикла специального вида.

Например, существует массив чисел, необходимо посчитать сумму всех элементов массива:

Сумма = 0;
Для каждого Элемент Из Массив Цикл
Сумма=Сумма+Элемент;
КонецЦикла;

Для циклов существуют специальные операторы: Продолжить и Прервать .

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

Оператор Прервать позволяет закончить выполнение цикла, даже если условие цикла истинно.

На этом мы завершаем наше первое знакомство с разработкой на внутреннем языке 1С.

А как же Hello World? Мы же его еще не написали, да? Да, но ничто не мешает вам сделать это самостоятельно, т.к. знаний УЖЕ достаточно. Ну а если не получается, то можете подглядеть сюда.

Многие, кто только начинает изучать программирование, впервые сталкиваются с новым для себя примитивным типом булево . Еще его по-другому называют логический тип . Данный тип назван в честь английского математика Джорджа Буля, который изучал вопросы математической логики.

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

Булевы выражения это что-то типа вопроса, на который должен быть однозначные ответ или да, или нет.

5 < 7 — Да;

5 = 8 – Нет;

4 > 9 – Нет.

Так же могу и быть более сложные вопросы:

Кнопка нажата – да;

Кнопка нажата – нет;

Булевы выражения используются во всех условных переходах:

Если < Булево выражение1> тогда

//операторы

ИначеЕсли < БулевоВыражение2 > тогда

//операторы

КонецЕсли;

В языке программирования 1С переменную с примитивным типом Булево можно задать явно:

А = Истина;

Б = Ложь;

Где Истина и Ложь единственные значения, которые может принимать примитивный тип Булево.

Истина – значит, что какое-то утверждение соответствует действительности (Ответ — Да).

Ложь – значить, что какое-то утверждение, наоборот, не соответствует действительности (Ответ –Нет).

Так же переменные с типом булево могут быть заданы с помощью какого-либо логического выражения.
Например:

А = 5 < 7 ;

Б = 6 > 9 ;

В этом случае, в переменой А будет значение Истина, а в переменной типа Б – ложь;

В языке программирования 1С над переменными типа булево можно осуществлять различные операции.

Например:

А = 5 < 7 ;

Б = 6 > 9 ;

В = А И Б;

С = А ИЛИ Б;

Д = Не А;

Всего их три – И, ИЛИ и НЕ.

Понять функциональность этих операций помогут следующие таблицы

Операция НЕ

А Б
Истина Ложь
Ложь Истина

Операция И

С = А И Б А Б
Истина Истина Истина
Ложь Ложь Истина
Ложь Истина Ложь
Ложь Ложь Ложь

Операция ИЛИ

С = А ИЛИ Б А Б
Истина Истина Истина
Истина Ложь Истина
Истина Истина Ложь
Ложь Ложь Ложь

А можно ли выполнять данные операции подряд?

Да можно, данные операции будут выполняться слева направо. И иметь следующий уровень старшинства:

Первый: в первую очередь выполняются операции в скобках

Второй: Операция НЕ

Третий: Операция И

Четвертый: Операция ИЛИ.

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

Например:

А = Ложь;

Б = Истина;

С = Ложь;

Д = А и С или Б;

В данном случае сначала будет работать операция И между А и С.

Смотрим таблицу А – Ложь , С – Ложь , результат А И С будет Ложь .

Следующим шагом будет выполнение операции ИЛИ между Ложью (Результат предыдущей операции) и значением Б, которое Истина .

Результат будет Истина .

А если нам надо, чтобы прошла сначала операция ИЛИ между С и Б, а потом только операция И между А и тем, что получилось, то для этого необходимо использовать скобки.

А = Ложь;

Б = Истина;

С = Ложь;

Д = А и (С или Б);

Результат будет диаметрально противоположный. Почему? Сейчас разберем. Благодаря скобкам сначала выполняется операция и между С и Б, т.к. С — Ложь , а Б – Истина , результат будет Истина . Потом между значением А (которое Ложь ) и значением Истина (результатом предыдущей операции) выполняется операция И . Результат будет Ложь .

Многие начинающие программисты не совсем до конца понимают принципы взаимодействия между переменными типа Булево. Помочь в этом сможет только практика. А практики с переменными типа Булево достаточно в моем задачнике к книге

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: и «Основы разработки в 1С: Такси»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника;

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы.

Настраивая очередную интеграцию 1С:Управление торговлей 11 с сайтом, под управлением 1С-Битрикс, столкнулся с такой проблемой: реквизиты с типом «Булево» выгружались на сайт с типом «Строка» и со значением «Да». В результате стандартные реквизиты «Новинка», «Спецпредложение» и «Лидер продаж» перестали отображаться.

К сожалению, не нашел другого варианта, как исправить выгрузку на сайт в 1С:УТ. Доработки минимальны.

1. Все значения реквизитов свойств кроме Числа, Даты и Справочника выгружаются как универсальный тип Строка. Сделаем, чтобы Булево выгружалось не как строка, а как Справочник, для этого находим в Общем модуле конфигурации «ОбменССайтом» процедуру ВыгрузитьОсновныеРеквизитыСвойстваДляКлассификатора(). Добавляем в условие две строчки:

2. Теперь нужно выгрузить возможные значения. В нашем случае оно будет только одно: «Да» с идентификатором «YES». Добавим дополнительное условие чуть ниже в той же процедуре:

3. При выгрузке свойства номенклатуры нужно, чтобы при истинном значении Булево выгружалось «YES». Для этого находим в этом же модуле процедуру ВыгрузитьСвойстваНоменклатуры() и добавляем в ней пару строк:

4. Теперь можно сохранить изменения, и запустить обмен данными с сайтом. На всякий случай зайдем в меню «Контент - Свойства инфоблоков - Каталоги - Каталог товара» и проверим настройки Свойств элементов с типом Булево. Внешний вид у них должен быть установлен как «Флажки»:

Теперь «Новинка», «Спецпредложение» и «Лидер продаж» корректно передаются из 1С и отображаются флажками в карточке товара: