Глиф Учебники

Урок 5. Встроенный язык: переменные, условия, циклы

Курс «1С:Предприятие» · урок 5 из 9 · 4 минуты чтения

Встроенный язык 1С — язык, на котором пишут код конфигураций. Ключевые слова в нём русские: Если, Тогда, Цикл, Процедура. Код живёт в модулях — у формы, у объекта, общие модули конфигурации — и выполняется, когда что-то происходит: пользователь нажал кнопку, документ проводится, форма открывается.

Где писать код для упражнений

Удобнее всего — во внешней обработке: это отдельный файл .epf, который открывается в любой базе и ничего в её конфигурации не меняет. Сделайте её один раз:

  1. В конфигураторе выберите меню Файл → Новый… → Внешняя обработка. Задайте имя Практика.
  2. На закладке Формы добавьте форму обработки и в конструкторе формы нажмите Готово.
  3. В редакторе формы откройте закладку Команды и добавьте команду с именем Пример.
  4. В свойстве команды Действие нажмите кнопку с лупой и выберите создание обработчика на клиенте — в модуле формы появится процедура Пример.
  5. Перетащите команду мышью в список элементов формы — на форме появится кнопка «Пример».
  6. Сохраните обработку: Файл → Сохранить, например в C:\1C\Practice.epf.

Откройте любую базу в режиме 1С:Предприятие, выберите в главном меню Файл → Открыть… и укажите файл. Нажмите кнопку «Пример» — выполнится код процедуры. После каждой правки сохраните обработку в конфигураторе, закройте её форму в 1С:Предприятии и откройте файл снова.

Подробнее о внешних обработках — в справке Как создать внешнюю обработку.

Первая программа

Впишите в процедуру Пример одну строку:

1С
&НаКлиенте
Процедура Пример(Команда)
    Сообщить("Привет, 1С!");
КонецПроцедуры
Вывод
Привет, 1С!

Сообщить выводит текст в окно сообщений внизу формы. Строка &НаКлиенте — директива: код выполняется на компьютере пользователя. Что это значит и чем отличается &НаСервере — в следующем уроке.

Правила записи:

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

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

1С
&НаКлиенте
Процедура Пример(Команда)
    Товар = "Карандаш";
    Количество = 12;
    Цена = 2;
    Сумма = Количество * Цена;
    Сообщить(Товар + ": " + Количество + " шт. на сумму " + Сумма);
КонецПроцедуры
Вывод
Карандаш: 12 шт. на сумму 24

Тип переменной определяется значением и может меняться. Основные типы:

ТипПример значенияПояснение
Число12, 2.5, -7в коде дробная часть — через точку
Строка"Карандаш"в двойных кавычках; кавычка внутри — две подряд: "Фирма ""Луч"""
Дата'20251231'в одинарных кавычках: год, месяц, день, можно и время '20251231235959'
БулевоИстина, Ложьда или нет
НеопределеноНеопределенозначения нет

Длинную строку можно разбить на несколько: перенесите строку внутри кавычек, а следующую начните с |:

1С
Текст = "Первая строка
    |Вторая строка";

Числа и строки

Арифметика обычная: +, -, *, /, а % — остаток от деления: 7 % 3 равно 1. Целую часть даёт функция Цел: Цел(7 / 2) равно 3.

Если сложить строку с числом, число превратится в строку. Но платформа делает это так же, как при показе пользователю: большие числа — с пробелами между разрядами, дробные — с запятой (при русских региональных настройках базы). Чтобы получить число без пробелов, используйте Формат с параметром ЧГ=0:

1С
&НаКлиенте
Процедура Пример(Команда)
    Сумма = 1500;
    Сообщить("Сумма: " + Сумма);
    Сообщить("Сумма: " + Формат(Сумма, "ЧГ=0"));
КонецПроцедуры
Вывод
Сумма: 1 500
Сумма: 1500

Пробел в 1 500 — неразрывный. Если такое число попадёт в имя файла, адрес или текст для другой программы, оно не распознается. Всегда, когда число нужно «как есть», пишите Формат(Число, "ЧГ=0").

Обратно строку в число превращает функция Число("12"), в строку число — Строка(12).

Условия

1С
&НаКлиенте
Процедура Пример(Команда)
    Остаток = 3;
    Если Остаток = 0 Тогда
        Сообщить("Товара нет");
    ИначеЕсли Остаток < 5 Тогда
        Сообщить("Товар заканчивается");
    Иначе
        Сообщить("Товара достаточно");
    КонецЕсли;
КонецПроцедуры
Вывод
Товар заканчивается
Остаток = 3; Если Остаток = 0 Тогда 3 = 0 — нет нет ИначеЕсли Остаток < 5 Тогда 3 < 5 — да нет Иначе не выполняется да да «Товара нет» «Товар заканчивается» «Товара достаточно» выполняется одна ветка
При Остаток = 3 условие Остаток = 0 ложно, а Остаток < 5 истинно: выполняется только ветка ИначеЕсли, и до Иначе дело не доходит.

Сравнения: =, <> (не равно), <, >, <=, >=. Знак = значит и присваивание, и сравнение — что именно, понятно по месту. Условия соединяются словами И, ИЛИ, НЕ: Если Остаток > 0 И Цена > 0 Тогда.

Короткое условие в одну строку — ?(условие, если да, если нет):

1С
Текст = ?(Остаток > 0, "в наличии", "нет в наличии");

Циклы

Цикл Для — по счётчику, шаг всегда 1:

1С
&НаКлиенте
Процедура Пример(Команда)
    Для Номер = 1 По 3 Цикл
        Сообщить("Шаг " + Номер);
    КонецЦикла;
КонецПроцедуры
Вывод
Шаг 1
Шаг 2
Шаг 3

Цикл Пока — пока условие верно:

1С
&НаКлиенте
Процедура Пример(Команда)
    Сумма = 0;
    Н = 1;
    Пока Сумма < 20 Цикл
        Сумма = Сумма + Н;
        Н = Н + 1;
    КонецЦикла;
    Сообщить("Сумма " + Сумма + ", следующее слагаемое " + Н);
КонецПроцедуры
Вывод
Сумма 21, следующее слагаемое 7

Прервать выходит из цикла, Продолжить переходит к следующему шагу:

1С
&НаКлиенте
Процедура Пример(Команда)
    Для Номер = 1 По 10 Цикл
        Если Номер % 2 = 0 Тогда
            Продолжить;
        КонецЕсли;
        Если Номер > 7 Тогда
            Прервать;
        КонецЕсли;
        Сообщить(Номер);
    КонецЦикла;
КонецПроцедуры
Вывод
1
3
5
7
Шаги цикла Для Номер = 1 По 10 Цикл 1 2 3 4 5 6 7 8 9 10 Сообщить Продолжить Сообщить Продолжить Сообщить Продолжить Сообщить Продолжить Прервать не дошло вывод: 1 3 5 7 8 чётное: Продолжить срабатывает раньше, чем проверка Номер > 7
Чётные шаги цикла пропускает Продолжить, нечётные выводятся, на 9 срабатывает Прервать, и до 10 цикл не доходит; 8 пропускается раньше проверки Номер > 7.

Массив и цикл Для Каждого

Массив — список значений с номерами от нуля. Перебирать его удобнее всего циклом Для Каждого:

1С
&НаКлиенте
Процедура Пример(Команда)
    Товары = Новый Массив;
    Товары.Добавить("Карандаш");
    Товары.Добавить("Ручка");
    Товары.Добавить("Тетрадь");
    Для Каждого Товар Из Товары Цикл
        Сообщить(Товар);
    КонецЦикла;
    Сообщить("Всего: " + Товары.Количество());
    Сообщить("Первый: " + Товары[0]);
КонецПроцедуры
Вывод
Карандаш
Ручка
Тетрадь
Всего: 3
Первый: Карандаш
Для Каждого Товар Из Товары Цикл номер Товары массив 012 "Карандаш""Ручка""Тетрадь" Товары[0] Товары.Количество() = 3
Массив Товары хранит три строки с номерами 0, 1 и 2: цикл Для Каждого проходит их по порядку, Количество() возвращает 3, а элемент с номером 0 — «Карандаш».

Тем же циклом перебирают строки таблиц, элементы выборок и другие коллекции — дальше в курсе он встретится часто.

Частые ошибки

Коротко

Проверьте себя

1. Что выведет Сообщить(7 % 3);?
2. Как получить из числа 25000 строку «25000» без пробела?
3. Как записать дату 31 декабря 2025 года прямо в коде?
4. Каким словом заканчивается любой цикл?