6 необычных конструкций в языке 1C, которые удивят остальных программистов
easy

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

Но тех, кто программирует на Ассемблере, — не удивят

Язык программирования 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 — классика условного оператора. Эта конструкция есть почти в каждом языке программирования, и чаще всего она выглядит именно так. На всякий случай напомним, как она работает:

  1. Программа проверяет условие, которое идёт после if.
  2. Если условие выполняется — программа делает то, что написано после then.
  3. Если условие не выполняется — идёт то, что написано после 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) КАК ПодСтрока ИЗ БазаПостов КАК Посты";

Что дальше

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

Текст:

Инна Долога

Редактор:

Михаил Полянин

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Юлия Зубарева

Программирование на 1С — это стабильность
Российские космонавты уже высадятся на Марс, а зарплату им всё ещё будут считать через 1С. И кто-то должен будет подкрутить там модуль межпланетных начислений. Подкрутите?
Начать бесплатно
Программирование на 1С — это стабильность Программирование на 1С — это стабильность Программирование на 1С — это стабильность Программирование на 1С — это стабильность
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy