Язык программирования 1С необычен не только тем, что код пишется на русском языке (хотя можно и на английском, существуют даже международные версии платформы). В 1С также есть конструкции, которые могут показаться странными тем, кто знаком с другими языками. Собрали несколько примеров таких конструкций и делимся с вами.
ВЫБОР и ВЫБРАТЬ
В 1С ВЫБОР по сути означает начало цикла по созданию выборки, а ВЫБРАТЬ служит оператором, который означает начало такого цикла. Чтобы было проще разобраться, приведём англоязычные примеры: ВЫБОР — это CASE, а ВЫБРАТЬ — SELECT.
Например, мы ведём учёт всех наших постов в 1С и хотим разметить наши статьи по языкам программирования. Для этого нужно отобрать статьи и проставить соответствующие теги. Часто язык указан в заголовке статьи, поэтому сортировку таких постов можно автоматизировать:
// отбираем все статьи с кириллическим написанием 1С в заголовке и присваиваем им тег «1С»
ВЫБРАТЬ Статьи,
ВЫБОР
КОГДА Заголовок.Статьи = "1С" ТОГДА "1С"
// проверяем, нет ли у нас статей с англоязычным написанием 1С в заголовке, и также присваиваем им тег «1С»
ВЫБРАТЬ Статьи,
ВЫБОР
КОГДА Заголовок.Статьи = "1C" ТОГДА "1С"
В данном случае ВЫБОР выступает вариантом логического оператора if.
ЕСТЬ NULL и ЕСТЬNULL()
Null означает пустое значение с незаданным типом в базе данных. Выражение ЕСТЬ NULL используется для проверки, является ли выбранное значение таким.
Например, у нас по средам выходит «Пояснительная бригада», где мы публикуем разные меметичные картинки и объясняем, почему они смешные. Если бы мы вели учёт постов в системе 1С, проверка запаса мемов выглядела бы так:
// Проверяем, что на среду есть мем для наших любимых читателей. Если поле пустое, то присваиваем ему значение 0
ВЫБРАТЬ
КОГДА ГотовыйМемНаСреду ЕСТЬ NULL ТОГДА 0
// Если мемы на среду ещё есть, передаём их количество в поле
ИНАЧЕ УчетМемовОстатки.КоличествоОстаток КАК КоличествоОстаток
А теперь необычное: кроме выражения ЕСТЬ NULL, существует функция ЕСТЬNULL(). Её используют, если нужно изменить значение Null на нужное нам. Например, вот так мы бы видели, что нужно подготовить очередной мем:
// Берём мем для любимых читателей из поля Мемы.Ссылка
ВЫБРАТЬ
Мемы.Ссылка КАК Мем,
// Если готового мема на среду нет
ЕСТЬNULL(ГотовыеМемы.Ссылка, "Мема нет") КАК Подготовить
Не перепутайте.
КонецЕсли
Выражение if-then-else — классика условного оператора. Эта конструкция есть почти в каждом языке программирования, и чаще всего она выглядит именно так. На всякий случай напомним, как она работает:
- Программа проверяет условие, которое идёт после if.
- Если условие выполняется — программа делает то, что написано после then.
- Если условие не выполняется — идёт то, что написано после else. Иногда else не нужен, поэтому условие может состоять только из if-then.
А вот в 1С обязательно нужно после оператора Если написать в конце условия КонецЕсли. Например:
// проверяем, что сегодня среда
Если ДеньНедели(ТекущаяДата()) = 3 Тогда
// напоминаем, что нужно опубликовать мем для наших читателей
Сообщить("Сегодня среда, день Пояснительной бригады в Коде!");
// проверяем, что сегодня пятница
ИначеЕсли ДеньНедели(ТекущаяДата()) = 5 Тогда
// напоминаем о рассылке
Сообщить("Готовим рассылку для наших любимых читателей!");
// указываем, что в другие дни готовить мем и рассылку не нужно
Иначе
Сообщить("Не время для ПБ и рассылки.");
// завершаем логический оператор
КонецЕсли;
А вот как выглядит условный оператор без Иначе:
// назначаем переменную
Перем ЖурналКод;
// проверяем условие
Если Перем = ЖурналКод
// выводим девиз журнала
Сообщить ("Код — программирование без снобизма");
// завершаем логический оператор
КонецЕсли;
Впрочем, использовать if без else можно не только в 1С. Если нам нужно выполнить действие, только когда условие верно, без else можно обойтись, например в коде на C++, Go, Java, JavaScript, Kotlin, Pascal и R. Но в этих случаях просто не пишут else, а в 1С условие всегда заканчивается ключевым словом КонецЕсли. А цикл всегда нужно заканчивать ключевым словом КонецЦикла. Также в 1С обязательны ключевые слова КонецПроцедуры или КонецФункции.
Оператор «=» и операция «=»
❌ Это может сломать мозг, мы предупредили.
В 1С символ «=» используется как в значении оператора присваивания, так и для операции сравнения. Это может поставить в тупик, но опытных программистов 1С этим не испугать.
Например, присваивание выглядит так:
А = 4;
Б = 4;
Здесь мы указываем, что в переменных А и Б хранится число 4.
Теперь пример посложнее:
А = 2*2 = Б
В первом случае мы с помощью знака равенства устанавливаем значение переменной А, во втором — сравниваем сумму произведения 2×2 с переменной Б. Результат выполнения строки зависит от значения переменной Б. Если она равна 4, то в переменной А получится значение «Истина», если нет — «Ложь».
При этом 1С сам понимает, когда имеется в виду присваивание, а когда — сравнение. Например:
А = 4;
Если А = 4 Тогда // выполняем что-то
КонецЕсли;
Если похожая конструкция будет в другом языке, код споткнётся о синтаксическую ошибку в if a = 4, и выполнение дальше не пойдёт.
ПОДОБНО
Если нужно убедиться, что что-то соответствует указанным критериям, проводится сравнение, например на равенство или неравенство. Но бывает, что нужно провести более хитрое сравнение — есть ли у чего-то подобие указанному шаблону. Для этого в 1С используют оператор ПОДОБНО — что-то вроде LIKE в запросах SQL.
Например, на момент написания этой статьи наши мемы по средам выходят в рубрике «Что как», но не имеют отдельной категории. Если бы мы хотели отобрать из всех постов рубрики только мемы, запрос в базу выглядел бы так:
// Указываем, что будем искать посты с заголовком «Пояснительная бригада» среди постов рубрики «Что как» во всех опубликованных
ВЫБРАТЬ ЧтоКак КАК Колонка1
ИЗ БазаПостов КАК Опубликованное
ГДЕ Опубликованное.Заголовок ПОДОБНО "Пояснительная бригада”
ПОДСТРОКА
Строка в программировании — это какой-то набор произвольных символов. Со строками можно совершать различные операции: складывать, вычитать и так далее. Но в 1С можно ещё и выделить часть строки. Это опять же возможно за счёт работы 1С с базой данных на SQL-сервере (функция SUBSTRING() в SQL позволяет выбрать часть значения поля).
Это как регулярные выражения на минималках, но встроенные сразу в язык программирования. Если не помните, что такое регулярные выражения и чем они полезны, — вам сюда:
Как использовать регулярные выражения и зачем они нужны
Например, мы знаем, что посты с мемами содержат слова «Пояснительная бригада» в начале заголовка и хотим выбрать часть слова «бриг»:
// Указываем, что хотим выбрать «бриг» в заголовке «Пояснительная бригада» среди всех опубликованных постов — это 4 символа начиная с 14-го
Запрос.Текст =
"ВЫБРАТЬ Опубликованное.БазаПостов, Опубликованное.Заголовок, ПОДСТРОКА (Опубликованное.Заголовок, 13, 4) КАК ПодСтрока ИЗ БазаПостов КАК Посты";
Что дальше
А дальше мы под прищуром посмотрим на другие языки программирования и тоже поищем в них свои необычные конструкции. Самые интересные соберём в статьи и принесём вам. Подпишитесь, чтобы не пропустить продолжение.