Інтернет Windows Android

Примітивний тип булева. Примітивний тип Булева Помилка Булева значення в 1с

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

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

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

2. Тепер потрібно завантажити можливі значення. У нашому випадку воно буде лише одне: "Так" з ідентифікатором "YES". Додамо додаткову умову трохи нижче у тій самій процедурі:

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

4. Тепер можна зберегти зміни та запустити обмін даними з сайтом. Про всяк випадок зайдемо в меню «Контент – Властивості інфоблоків – Каталоги – Каталог товару» та перевіримо налаштування Властивостей елементів з типом Бульово. Зовнішній вигляд у них має бути встановлений як «Прапорці»:

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

Багато хто, хто тільки починає вивчати програмування, вперше стикається з новим для себе примітивним типом бульово. Ще його по-іншому називають логічний тип. Цей тип названий на честь англійського математика Джорджа Буля, який вивчав питання математичної логіки.

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

Булеві вирази це щось типу питання, на яке має бути однозначна відповідь чи так, чи ні.

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

Вступайте до моїх груп.

Як правило, вивчення будь-якої мови програмування починається з прикладу написання першої найпростішої програми (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? Ми ж його ще не написали? Так, але ніщо не заважає зробити це самостійно, т.к. знань ВЖЕ достатньо. А якщо не виходить, то можете підглянути сюди.

Здрастуйте, шановні читачі блогу сайт! Минулого разу ми звертали увагу на вбудовану мову 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, де при складанні дат додавалася кількість днів, а не секунд.