Синтаксис и пунктуация 1С
Перед чтением: Операторы — общие понятия оператора, операнда, приоритетов и типов операций без привязки к языку. Названия символов: Знаки препинания и символы в IT.
Синтаксис и пунктуация 1С
Play ITЗагрузка интерактивного демо…
Синтаксис языка программирования 1С:Предприятие — это строгий набор правил, определяющих структуру допустимых конструкций кода. Эти правила регулируют порядок написания ключевых слов, операторов, переменных, функций и разделителей. Соблюдение синтаксических норм является обязательным условием для успешной компиляции конфигурации. Ошибки в синтаксисе приводят к невозможности запуска программы или возникновению Runtime-ошибок во время выполнения. Язык 1С сочетает в себе элементы процедурного стиля с объектно-ориентированными возможностями, используя понятный человеческому восприятию синтаксис на русском языке.
Если смотреть максимально практично, синтаксис в 1С нужен не "сам по себе", а чтобы безопасно выражать бизнес-логику: проверки, расчеты, движения по регистрам, обмен с внешними системами. Поэтому изучайте конструкции вместе с контекстом, где они реально применяются.
Ключевые слова и зарезервированные имена
Ключевые слова — это служебные термины, имеющие строго определенное значение в языке 1С. Они используются для построения управляющих конструкций, объявления типов данных, работы с памятью и управления потоком выполнения программы. Компилятор распознает эти слова и отводит им специальную роль в структуре кода. Использование ключевых слов в качестве имен переменных, процедур или функций запрещено. Попытка переопределить имя ключевого слова приведет к ошибке компиляции.
Язык 1С имеет обширный набор ключевых слов, охватывающий все аспекты разработки бизнес-приложений. Некоторые из них имеют аналоги в классическом программировании, другие уникальны для платформы.
Основные управляющие конструкции
Конструкции управления потоком определяют последовательность выполнения команд. Они позволяют создавать ветвления логики и циклы повторений.
Если...То...Иначе... — оператор условного перехода. Конструкция проверяет условие и выполняет один из блоков кода в зависимости от результата проверки.
Если Число > 0 Тогда
Сообщить("Число положительное");
ИначеЕсли Число < 0 Тогда
Сообщить("Число отрицательное");
Иначе
Сообщить("Число равно нулю");
КонецЕсли;
В данном примере система вычисляет логическое выражение Число > 0. Если результат истинен, выполняется блок после слова Тогда. Если ложно, система переходит к проверке следующего условия после ИначеЕсли. Если ни одно условие не истинно, выполняется блок после Иначе. Завершение конструкции обозначается словом КонецЕсли.
Для...Цикл... — оператор цикла с фиксированным количеством итераций. Используется для перебора элементов коллекции или выполнения действия заданное число раз.
Для Сч = 1 По 10 Цикл
Сообщить("Номер итерации: " + Стр(Сч));
КонецЦикла;
Слово Для инициирует цикл. Переменная Сч принимает значения от начального (1) до конечного (10). Тело цикла находится между словами Цикл и КонецЦикла. После каждой итерации значение счетчика увеличивается на единицу.
Пока...Цикл... — оператор цикла с предусловием. Выполняет тело цикла, пока указанное условие остается истинным.
Пока ТекущееЗначение < Максимум Цикл
ТекущееЗначение = ТекущееЗначение + 1;
КонецЦикла;
Условие проверяется перед каждой итерацией. Если условие ложно сразу при входе, тело цикла не выполнится ни разу.
Цикл... — бесконечный цикл или цикл с постусловием. Требует явного выхода через команду Прервать.
Цикл
Значение = ПолучитьДанные();
Если Значение <> Неопределено Тогда
Обработать(Значение);
Прервать;
КонецЕсли;
КонецЦикла;
Слово Прервать немедленно завершает выполнение цикла и передает управление следующей инструкции после КонецЦикла.
Выбрать...Когда...Иначе... — конструкция выбора по значению. Позволяет выполнить разные блоки кода в зависимости от конкретного значения переменной или выражения.
Выбор
Когда ТипОперации = "Продажа" Тогда
ОбработатьПродажу();
Когда ТипОперации = "Покупка" Тогда
ОбработатьПокупку();
Иначе
Сообщить("Неизвестный тип операции");
КонецВыбора;
Конструкция Выбрать анализирует значение выражения после себя. Блок Когда проверяет совпадение со значением. Блок Иначе выполняется, если ни одно условие не совпало.
Работа с исключениями
Попытка...Исключение...КонецПопытки — механизм обработки ошибок. Позволяет перехватывать исключения во время выполнения кода и не обрывать весь сеанс.
Попытка
Результат = ВыполнитьОперацию();
Исключение
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Сообщить(ТекстОшибки);
ЗаписьЖурналаРегистрации("СинтаксисДемо", УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецПопытки;
Блок Попытка содержит код, который может вызвать ошибку. При исключении управление переходит в Исключение; после обработки выполнение продолжается после КонецПопытки (если ошибку не пробросили дальше через ВызватьИсключение).
ВызватьИсключение — команда принудительного создания исключения. Используется для явной остановки выполнения кода при обнаружении критической ошибки.
Если Количество <= 0 Тогда
ВызватьИсключение "Количество товара должно быть больше нуля";
КонецЕсли;
Обычно в ВызватьИсключение передают текст ошибки; дополнительный контекст сохраняют в журнале регистрации.
Управление памятью и типами данных
Новый — ключевое слово для создания экземпляра объекта. Инициализирует память под новый объект и вызывает конструктор класса.
МассивСтрок = Новый Массив;
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
Слово Новый всегда следует за именем типа данных или класса. Система автоматически выделяет необходимую память.
Тип, ЗначениеВид, Вид — ключевые слова для определения типов данных и проверки их принадлежности.
Если ТипЗнч(Значение) = Тип("Строка") Тогда
// Обработка строки
КонецЕсли;
Функция ТипЗнч возвращает объект типа данных. Сравнение с Тип("НазваниеТипа") позволяет точно определить природу переменной.
Неопределено — специальное значение, обозначающее отсутствие данных. Используется для проверки инициализации переменных.
Если Значение = Неопределено Тогда
// Значение не присвоено
КонецЕсли;
Переменные, не имеющие явного значения, содержат именно этот специфический тип.
Специальные конструкции
Возврат завершает функцию и передаёт результат; в процедуре — досрочный выход без значения.
Функция Сумма(А, Б) Экспорт
Возврат А + Б;
КонецФункции
Логические литералы — Истина и Ложь:
Если ДоступРазрешен Тогда
// действие
КонецЕсли;
Названия знаков по-английски и по-русски: Знаки препинания и символы в IT.
Знаки препинания и разделители
Знаки препинания в языке 1С выполняют функцию разделения элементов кода, указания границ блоков и уточнения структуры выражений. Их правильное использование критически важно для корректной работы компилятора.
Точки и точки с запятой
Точка (.) — основной разделитель для доступа к свойствам и методам объектов. Отделяет имя объекта от имени его атрибута или метода.
Счетчик = Объект.Значение;
Объект.Метод();
В выражениях точка также используется для разделения имен пространств имен и имен классов.
Точка с запятой (;) — разделитель инструкций. Ставится в конце каждой команды, если она расположена на отдельной строке. В некоторых случаях допускается опускание точки с запятой, если инструкция является последней в блоке или если следующая инструкция начинается с ключевого слова.
A = 1;
B = 2;
C = A + B;
В операторах условного перехода точка с запятой не требуется, так как границы блоков задаются ключевыми словами.
Скобки и круглые скобки
Круглые скобки (() ) — используются для группировки выражений, передачи аргументов в функции и методы, а также для изменения приоритета операций.
Результат = (A + B) * C;
Сообщить("Значение: " + Стр(A));
Приоритет вычислений внутри скобок выше, чем снаружи. Это позволяет явно задать порядок действий.
Фигурные скобки ( ) — в языке 1С не используются для выделения блоков кода (как в C++ или Java). Вместо них применяются ключевые слова Начало и Конец или Если/КонецЕсли. Однако фигурные скобки могут встречаться в комментариях или в строковых литералах.
Квадратные скобки ([ ] ) — используются для обращения к элементам массивов, таблиц значений и коллекций по индексу. Также применяются в определении диапазонов значений.
Элемент = Массив[0];
ТаблицаЗначений = Таблица.НоваяСтрока();
Индексация начинается с нуля. Выражение в квадратных скобках вычисляется перед обращением к элементу.
Двоеточие и двоеточие с точкой
Двоеточие (:) в 1С чаще встречается в текстах запросов, форматах, строковых шаблонах и служебных конструкциях, но не используется как обязательный разделитель типа параметра процедуры.
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Товары";
Параметры в процедурах и функциях обычно объявляют без такой аннотации типа; контроль типов выполняют через ТипЗнч()/Тип() и аккуратную валидацию входа.
Ударение и тире
Дефис (-) — используется как знак минус (арифметическая операция вычитания) и в составных именах переменных (хотя в 1С лучше использовать нижнее подчеркивание).
Разница = A - B;
В именах переменных дефис запрещен, так как интерпретируется как операция вычитания.
Подчеркивание (_) — основной символ для объединения слов в именах переменных, процедур и функций. Позволяет создавать читаемые идентификаторы.
СуммаТоваров = 0;
ПроверитьДоступПользователя();
Имя не должно начинаться с цифры или содержать пробелы. Подчеркивание делает код более понятным.
Квадратные кавычки и одинарные кавычки
Одинарные кавычки (' ' ) — используются для заключения строковых литералов. Внутри строки двойная кавычка экранируется одной двойной кавычкой.
Сообщить('Привет, мир!');
Сообщить('Сказка "Колобок"');
Если строка содержит одинарную кавычку, её нужно удвоить.
Двойные кавычки (" ") — также используются для строковых литералов, но чаще применяются в текстах сообщений или при работе с HTML/XML. В 1С допускается использование обоих типов, но важно соблюдать согласованность.
Вертикальная черта и другие символы
Вертикальная черта (|) — используется для отделения комментариев или в специфических конструкциях шаблонов. В стандартном коде встречается редко.
Звездочка (*) — используется для умножения и в комментариях (многострочные комментарии начинаются с *).
Результат = A * B;
// Комментарий
Символы сравнения:
=— присваивание или равенство.<,>— меньше, больше.<=,>=— меньше или равно, больше или равно.<>— неравенство.^— возведение в степень.
Комментарии и документация кода
Комментарии — текст, игнорируемый компилятором, предназначенный для пояснения логики кода другим разработчикам или самому автору в будущем. В языке 1С существуют два основных вида комментариев.
Однострочные комментарии
Однострочные комментарии начинаются с двух символов апострофа ('') или знака восклицания (!). Текст после этих символов до конца строки игнорируется.
'' Это комментарий
! Еще один комментарий
A = 10; // Это тоже комментарий (не поддерживается в старых версиях, но работает в новых)
Использование апострофов является стандартом для языка 1С. Знак восклицания также широко распространен. Комментарии помогают объяснить сложные алгоритмы или причины принятия определенных решений.
Многострочные комментарии
Многострочные комментарии заключаются между парой апострофов или звездочек. Они могут занимать несколько строк.
/*
Это многострочный комментарий.
Он может содержать много текста.
Используется для описания больших блоков кода.
*/
В некоторых средах разработки также поддерживаются комментарии, начинающиеся с // и заканчивающиеся переносом строки, но основной стандарт — использование апострофов или звездочек.
Документирование процедур и функций
Каждая процедура и функция должна иметь описание. Описание включает назначение, параметры, возвращаемое значение и возможные исключения.
/**
* Процедура рассчитывает итоговую сумму заказа.
*
* Параметры:
* СуммаБазовая - базовая стоимость товаров
* Скидка - размер скидки в процентах
*
* Возвращает:
* Итоговая сумма после применения скидки
*/
Процедура РассчитатьИтог(Знач СуммаБазовая, Знач Скидка)
// Логика расчета
КонецПроцедуры
Описание помогает быстро понять функциональность модуля без чтения всего кода. В среде 1С такие комментарии часто отображаются в подсказках IDE.
Структура выражений и операторов
Выражения — комбинации констант, переменных, операторов и функций, которые вычисляются и дают определенный результат. Операторы определяют действие над операндами.
Play ITЗагрузка интерактивного демо…
Арифметические операторы
Арифметические операторы работают с числами.
+— сложение.-— вычитание.*— умножение./— деление (возвращает дробное число).\— целочисленное деление (отбрасывает дробную часть).^— возведение в степень.%— остаток от деления (или функция остатка в выражениях запроса).
A = 10 / 3; // 3.333...
B = 10 \ 3; // 3
C = 10 % 3; // 1
D = 2 ^ 3; // 8
Логические операторы
Логические операторы работают с булевыми значениями (Истина, Ложь).
И— логическое "и" (AND). Истинно, если оба операнда истинны.ИЛИ— логическое "или" (OR). Истинно, если хотя бы один операнд истинен.НЕ— логическое "не" (NOT). Инвертирует значение.
Если (A > 5) И (B < 10) Тогда
// Оба условия истинны
КонецЕсли;
Если (A > 5) ИЛИ (B < 10) Тогда
// Достаточно одного истинного условия
КонецЕсли;
Если НЕ (A > 5) Тогда
// A меньше или равно 5
КонецЕсли;
Операторы сравнения
Операторы сравнения возвращают логическое значение.
=— равно.<>— не равно.<— меньше.>— больше.<=— меньше или равно.>=— больше или равно.
Если Дата >= НачалоГода Тогда
// Дата входит в текущий год
КонецЕсли;
При сравнении строк учитывается лексикографический порядок. При сравнении дат учитывается временная метка.
Операторы работы со строками
Сцепление выполняется оператором + (операнды при необходимости приводятся к строке):
Имя = "Иван" + " " + "Петров";
Сообщить("Сумма: " + Строка(Сумма));
Регистр меняют функции вроде ВРег(), НРег(), ТРег().
Порядок выполнения операций
Приоритет операций определяет последовательность вычисления частей выражения. Операторы с более высоким приоритетом выполняются первыми.
- Скобки — выражения в скобках вычисляются в первую очередь.
- Унарные операторы — отрицание, логическое НЕ.
- Умножение, деление, целочисленное деление, остаток —
*,/,\,Mod. - Сложение, вычитание —
+,-. - Сравнение —
=,<>,<,>,<=,>=. - Логические операторы —
НЕ,И,ИЛИ.
Результат = 5 + 3 * 2; // Сначала 3*2=6, потом 5+6=11
Результат = (5 + 3) * 2; // Сначала 5+3=8, потом 8*2=16
Использование скобок рекомендуется даже там, где приоритет очевиден, для повышения читаемости кода.
Объявление переменных и типов
Объявление переменных в языке 1С происходит неявно или явно. Явное объявление предпочтительно для улучшения читаемости и предотвращения ошибок.
Неявное объявление
Переменная создается при первом присваивании ей значения. Тип определяется автоматически.
A = 10; // A становится числом
B = "Текст"; // B становится строкой
Такой подход удобен для быстрых скриптов, но может привести к ошибкам, если тип переменной изменится непредвиденно.
Явное объявление
Использование ключевого слова Тип или явного указания типа в параметрах.
Процедура Пример()
Знач = 10;
Текст = "Привет";
Если ТипЗнч(Знач) = Тип("Число") Тогда
Сообщить("Тип корректен");
КонецЕсли;
КонецПроцедуры
В обычных модулях 1С тип переменной чаще определяется присваиванием; при необходимости тип проверяют явно через ТипЗнч().
Константы
Константы — значения, которые не изменяются во время выполнения программы. Объявляются в разделе констант конфигурации или через ключевое слово Константа.
МаксимальноеКоличество = 100;
Для реальных констант используют объект метаданных "Константы" в конфигураторе; в примере выше показано обычное присваивание локальной переменной.
Особенности синтаксиса в разных контекстах
Модули объектов
В модулях объектов (справочников, документов) синтаксис имеет свои особенности. Доступ к реквизитам осуществляется через точку.
Объект.Наименование = "Товар";
Обработчики событий пишутся в виде процедур с особым названием.
Процедура ПередЗаписью(Отказ)
Если Отказ Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
Формы документов
В формах документов синтаксис отличается использованием методов формы.
Элементы.Поле1.Значение = "Значение";
События форм вызываются автоматически при действиях пользователя.
Внешние обработки
Внешние обработки используют глобальный контекст.
Процедура ВыполнитьОбработку() Экспорт
// код внешней обработки
КонецПроцедуры
Внешние обработки подключаются из файла .epf / .erf через меню "Файл" в режиме "Предприятие" или из конфигурации.
Типичные ошибки синтаксиса
Пропущенные ключевые слова — частая ошибка, когда забывают написать Тогда, КонецЦикла или КонецПроцедуры.
Если A > 0
Сообщить("Положительное");
КонецЕсли; // Ошибка: пропущено "Тогда"
Неправильные кавычки — использование одинарных кавычек вместо двойных или наоборот в строковых литералах.
Сообщить('Ошибка "Текст"'); // Правильно
Сообщить("Ошибка "Текст""); // Ошибка: внутренние кавычки должны быть экранированы
Неверные имена переменных — использование пробелов или специальных символов.
Моё_Имя = 10; // Правильно
Моё Имя = 10; // Ошибка: пробел
Неправильный порядок операторов — нарушение приоритета операций без скобок.
A = 10 + 5 * 2; // 20, а не 30
Отсутствие точек с запятой — в некоторых случаях компилятор требует точку с запятой.
A = 10; B = 20; // Обязательно
Дальше по разделу
После синтаксиса закрепите материал на практических задачах. Для этого переходите дальше:
- Переменные и типы данных — как хранить значения без хаоса и потери типов.
- Управление потоком выполнения — как контролировать ветвления, циклы и ранний выход.
- Функции и процедуры — как оформлять переиспользуемую логику без дублирования.
- Обработка ошибок — как делать код устойчивым в реальных сценариях.
Быстрый self-check
Вы уверенно освоили эту статью, если можете:
- Написать
Если ... Тогда ... Иначе ... КонецЕслибез подсказок. - Объяснить разницу между
Для,ПокаиДля каждого. - Показать, где нужен
Возврат, а гдеПрервать. - Исправить ошибку в строке с кавычками без "подбора наугад".
Практика 15 минут
Соберите небольшой модуль:
- Процедура принимает число.
- Если число
<= 0, вызывается исключение. - Если число
> 0, циклДлясчитает сумму от 1 до числа. - Результат выводится через
Сообщить.
Это упражнение одновременно тренирует условия, циклы, исключения и структуру блока кода.