На прошлых уроках программирования 1С мы изучили примитивные типы данных Число, Строка и Дата ознакомьтесь с этими материалами, прежде чем приступить к изучению этого.
Программирование 1С: примитивный тип данных Булево
Булево – один из базовых типов данных логических выражений.
Значения типа Булево имеют два значения Истина и Ложь, задаваемых соответствующими литералами. Часто применяется в различных логических вычислениях.
Для демонстрации работы с типом данных мы разработаем простой логический вычислитель Светофор.
Программирование 1С: логический вычислитель Светофор
Идея проста – мы имеем 3 реквизита типа «Булево»:
- Красный
- Желтый
- Зеленый
Соответственно каждый этот реквизит может быть либо «активен» (то есть иметь значение Истина), либо «отключен» (то есть иметь значение Ложь).
Перенесем реквизиты на форму обработки.
Обратите внимание ؘ– мы использовали инструменты оформления элементов. В данном случае мы изменили цвет текста в настройках поля.
Далее создадим реквизит типа Строка, который назовем Реакция пешехода и также перенесем его на форму. Задача нашей обработки – при вводе определенной комбинации «цветов светофора», выводить в стоке результат – ожидаемое действие пешехода.
Для чистоты процедуры мы создадим обработчик события, который будет обнулять булевы реквизиты при открытии обработки. Создаем обработчик &НаКлиенте, который запускается ПриОткрытии через контекстное меню по щелчку на форме.
Конфигуратор автоматически подставил часть кода, которая задает условие запуска обработчика..
Задаем содержимое обработчика:
Красный=Ложь;Желтый=Ложь;Зеленый=Ложь;
Обратите внимание, что значение булева реквизита «Ложь» нельзя брать в кавычки, иначе программа прочитает его как Строку.
Полный курс программиста 1С – с нуля до разработчика, способного решать практические учетные задачи в любой области.
Программирование 1С: составление кода
Далее определимся с логической частью нашей обработки, которую мы позднее преобразуем в код.
- Если горит Красный, а Зеленый и Желтый не горят - пешеход должен стоять.
- Если Вместе с Красным загорелся Желтый , а Зеленый не горит-пешеход должен приготовиться к движению.
- Если горит Зеленый, а Красный и Желтый не горят – пешеход должен переходить проезжую часть.
- Если горит Зеленый и Желтый, а Красный не горит - Пешеход должен поторопиться закончить движение.
Мы ранее ознакомились с универсальным хранилищем данных Массив, которая хранит данные и позволяет их вызвать по порядковому номеру. Попробуем реализовать хранение ситуаций через эту функцию. Создаем новую процедуру Ситуации (НомерСитуации), задача которой – возвращать порядковый номер ситуации из массива.
Другой вариант – использовать универсальное хранилище значений Соответствие, которое устанавливает связь между двумя данными – в данном случае Числом и Строкой. В данном примере мы используем синтаксис Вставить (записывает данные в хранилище) и Получить (получает из хранилища значение). Этот синтаксис также можно использовать с хранилищем Массив.
Далее мы приступаем к созданию логических выражений. Сначала смоделируем их обычным языком.
- Если включился Красный, то Желтый и Зеленый должны быть выключены, команда «Стой».
- Если включился Желтый, то возможно 2 варианта:
- Если включился Зеленый, то Желтый и Красный должны быть выключены, команда «Иди».
Теперь необходимо перевести логические выражения в код. Задача упрощается понятным синтаксисом: Команда Если открывает логическое выражение, КонецЕсли – закрывает. Команды И, Тогда и Иначе используются внутри обработчика Если.
Пишем первый обработчик «Если включился Красный, то Желтый и Зеленый должны быть выключены, команда «Стой»:
- «Если включился Красный» – создаем обработчик события ПриИзменении реквизита Красный. Внутри открываем логическое выражение Если, и задаем условие Красный=Истина
- «То Желтый и Зеленый должны быть выключены» – используем выражение Тогда и задаем условия Желтый=Ложь;Зеленый=Ложь;
- «Команда «Стой» – мы задаем номер ситуации и запускаем процедуру получения данных из массива НомерСитуации=0;Ситуации(НомерСитуации);
- Логическое выражение не может закончился без команды Иначе, поскольку процедура должна выполнить какое-либо действие и в том случае, когда условия не выполнены. Иначе РеакцияПешехода=Неопределено; КонецЕсли; КонецПроцедуры.
В итоге у нас получился вот такой код:
Следующий обработчик будет состоять из 2-х частей: когда с желтым работает красный, и когда с желтым работает зеленый. Создаем обработчик ПриИзменении реквизита Желтый. Код будем писать аналогично, за тем исключением, что внутри обработчика мы опишем процедуру Если 2 раза.
Последний обработчик для Зеленого сигнала светофора будет выглядеть аналогично.
Проверим работу Светофора в режиме 1С:Предприятие, включая последовательно флажки реквизитов Красный, Желтый, Зеленый, Желтый, Красный и получая в соответствии с ситуацией строковые значения реквизита РеакцияПешехода.
Освойте навыки разработчика 1С на очных специализированных курсах от крупнейшей компании-франчайзи 1С.