Перейти к основному содержимому

Синтаксис и пунктуация 1С

Разработчику Архитектору

Синтаксис и пунктуация 1С

Синтаксис языка программирования 1С:Предприятие — это строгий набор правил, определяющих структуру допустимых конструкций кода. Эти правила регулируют порядок написания ключевых слов, операторов, переменных, функций и разделителей. Соблюдение синтаксических норм является обязательным условием для успешной компиляции конфигурации. Ошибки в синтаксисе приводят к невозможности запуска программы или возникновению Runtime-ошибок во время выполнения. Язык 1С сочетает в себе элементы процедурного стиля с объектно-ориентированными возможностями, используя понятный человеческому восприятию синтаксис на русском языке.


Ключевые слова и зарезервированные имена

Ключевые слова — это служебные термины, имеющие строго определенное значение в языке 1С. Они используются для построения управляющих конструкций, объявления типов данных, работы с памятью и управления потоком выполнения программы. Компилятор распознает эти слова и отводит им специальную роль в структуре кода. Использование ключевых слов в качестве имен переменных, процедур или функций запрещено. Попытка переопределить имя ключевого слова приведет к ошибке компиляции.

Язык 1С имеет обширный набор ключевых слов, охватывающий все аспекты разработки бизнес-приложений. Некоторые из них имеют аналоги в классическом программировании, другие уникальны для платформы.


Основные управляющие конструкции

Конструкции управления потоком определяют последовательность выполнения команд. Они позволяют создавать ветвления логики и циклы повторений.

Если...То...Иначе... — оператор условного перехода. Конструкция проверяет условие и выполняет один из блоков кода в зависимости от результата проверки.

Если Число > 0 Тогда
Сообщить("Число положительное");
ИначеЕсли Число < 0 Тогда
Сообщить("Число отрицательное");
Иначе
Сообщить("Число равно нулю");
КонецЕсли;

В данном примере система вычисляет логическое выражение Число > 0. Если результат истинен, выполняется блок после слова Тогда. Если ложно, система переходит к проверке следующего условия после ИначеЕсли. Если ни одно условие не истинно, выполняется блок после Иначе. Завершение конструкции обозначается словом КонецЕсли.

Для...Цикл... — оператор цикла с фиксированным количеством итераций. Используется для перебора элементов коллекции или выполнения действия заданное число раз.

Для Сч = 1 По 10 Цикл
Сообщить("Номер итерации: " + Стр(Сч));
КонецЦикла;

Слово Для инициирует цикл. Переменная Сч принимает значения от начального (1) до конечного (10). Тело цикла находится между словами Цикл и КонецЦикла. После каждой итерации значение счетчика увеличивается на единицу.

Пока...Цикл... — оператор цикла с предусловием. Выполняет тело цикла, пока указанное условие остается истинным.

Пока ТекущееЗначение < Максимум Цикл
ТекущееЗначение = ТекущееЗначение + 1;
КонецЦикла;

Условие проверяется перед каждой итерацией. Если условие ложно сразу при входе, тело цикла не выполнится ни разу.

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

Цикл
Значение = ПолучитьДанные();
Если Значение <> Неопределено Тогда
Обработать(Значение);
Прервать;
КонецЕсли;
КонецЦикла;

Слово Прервать немедленно завершает выполнение цикла и передает управление следующей инструкции после КонецЦикла.

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

Выбрать
Когда ТипОперации = "Продажа" Тогда
ОбработатьПродажу();
Когда ТипОперации = "Покупка" Тогда
ОбработатьПокупку();
Иначе
Сообщить("Неизвестный тип операции");
КонецВыбора;

Конструкция Выбрать анализирует значение выражения после себя. Блок Когда проверяет совпадение со значением. Блок Иначе выполняется, если ни одно условие не совпало.


Работа с исключениями

Попытка...Исключение...Выполнить... — механизм обработки ошибок. Позволяет перехватывать исключения, возникающие во время выполнения кода, и предотвращать аварийное завершение программы.

Попытка
Результат = ВызватьВнешнююПроцедуру();
Исключение
Сообщить("Ошибка вызова: " + ОписаниеОшибки());
ЗаписатьВЖурналРегистрации(ОписаниеОшибки(), РежимЗаписиЖурналаРегистрации.Ошибка);
КонецПопытки;

Блок Попытка содержит код, который может вызвать ошибку. Если возникает исключение, управление мгновенно передается в блок Исключение. Там можно обработать ошибку, вывести сообщение или выполнить альтернативную логику. Блок Выполнить позволяет выполнить код только если ошибка не возникла.

ВызватьИсключение — команда принудительного создания исключения. Используется для явной остановки выполнения кода при обнаружении критической ошибки.

Если Количество <= 0 Тогда
ВызватьИсключение("Количество товара должно быть больше нуля"; 1001);
КонецЕсли;

Первый аргумент — текст сообщения об ошибке. Второй аргумент — код ошибки (целое число), используемый для идентификации типа проблемы.


Управление памятью и типами данных

Новый — ключевое слово для создания экземпляра объекта. Инициализирует память под новый объект и вызывает конструктор класса.

СправочникЭлемент = Новый Справочники.Номенклатура.Элемент;
МассивСтрок = Новый Массив;

Слово Новый всегда следует за именем типа данных или класса. Система автоматически выделяет необходимую память.

Тип, ЗначениеВид, Вид — ключевые слова для определения типов данных и проверки их принадлежности.

Если ТипЗнч(Значение) = Тип("Строка") Тогда
// Обработка строки
КонецЕсли;

Функция ТипЗнч возвращает объект типа данных. Сравнение с Тип("НазваниеТипа") позволяет точно определить природу переменной.

Неопределено — специальное значение, обозначающее отсутствие данных. Используется для проверки инициализации переменных.

Если Значение = Неопределено Тогда
// Значение не присвоено
КонецЕсли;

Переменные, не имеющие явного значения, содержат именно этот специфический тип.


Специальные конструкции и сервисы

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

ВызовВнешнегоОбработчика("ОбработатьДокумент", Аргумент1, Аргумент2);

Первый параметр — имя процедуры как строка. Последующие параметры передаются в вызываемую процедуру.

Возврат — ключевое слово для завершения функции и возврата результата. В процедурах используется для немедленного выхода без возврата значения.

Функция Сумма(А, Б) Возврат
А + Б;
КонецФункции()

Слово Возврат ставится перед значением, которое должно быть передано вызывающему коду.

Есть, Нет — логические константы, часто используемые в условиях.

Если ЕстьДоступ Тогда
// Действие
КонецЕсли;

В контексте условий могут использоваться слова Истина и Ложь.


Знаки препинания и разделители

Знаки препинания в языке 1С выполняют функцию разделения элементов кода, указания границ блоков и уточнения структуры выражений. Их правильное использование критически важно для корректной работы компилятора.

Точки и точки с запятой

Точка (.) — основной разделитель для доступа к свойствам и методам объектов. Отделяет имя объекта от имени его атрибута или метода.

Счетчик = Объект.Значение;
Объект.Метод();

В выражениях точка также используется для разделения имен пространств имен и имен классов.

Точка с запятой (;) — разделитель инструкций. Ставится в конце каждой команды, если она расположена на отдельной строке. В некоторых случаях допускается опускание точки с запятой, если инструкция является последней в блоке или если следующая инструкция начинается с ключевого слова.

A = 1;
B = 2;
C = A + B;

В операторах условного перехода точка с запятой не требуется, так как границы блоков задаются ключевыми словами.


Скобки и круглые скобки

Круглые скобки (() ) — используются для группировки выражений, передачи аргументов в функции и методы, а также для изменения приоритета операций.

Результат = (A + B) * C;
Сообщить("Значение: " + Стр(A));

Приоритет вычислений внутри скобок выше, чем снаружи. Это позволяет явно задать порядок действий.

Фигурные скобки ( ) — в языке 1С не используются для выделения блоков кода (как в C++ или Java). Вместо них применяются ключевые слова Начало и Конец или Если/КонецЕсли. Однако фигурные скобки могут встречаться в комментариях или в строковых литералах.

Квадратные скобки ([ ] ) — используются для обращения к элементам массивов, таблиц значений и коллекций по индексу. Также применяются в определении диапазонов значений.

Элемент = Массив[0];
ТаблицаЗначений = Таблица.НоваяСтрока();

Индексация начинается с нуля. Выражение в квадратных скобках вычисляется перед обращением к элементу.


Двоеточие и двоеточие с точкой

Двоеточие (:) — используется в объявлениях типов,特别是在 в описании параметров процедур и функций. Разделяет имя параметра и его тип.

Процедура Посчитать(Знач Число : Число)
Возврат Число * 2;
КонецПроцедуры

Также двоеточие применяется в операторах присваивания в некоторых специфических конструкциях макросов или в описании свойств метаданных.

Двоеточие с точкой (:. ) — используется для ссылки на глобальные объекты или специальные ресурсы. Например, доступ к системным функциям через пространство имен.


Ударение и тире

Дефис (-) — используется как знак минус (арифметическая операция вычитания) и в составных именах переменных (хотя в 1С лучше использовать нижнее подчеркивание).

Разница = A - B;

В именах переменных дефис запрещен, так как интерпретируется как операция вычитания.

Подчеркивание (_) — основной символ для объединения слов в именах переменных, процедур и функций. Позволяет создавать читаемые идентификаторы.

СуммаТоваров = 0;
ПроверитьДоступПользователя();

Имя не должно начинаться с цифры или содержать пробелы. Подчеркивание делает код более понятным.


Квадратные кавычки и одинарные кавычки

Одинарные кавычки (' ' ) — используются для заключения строковых литералов. Внутри строки двойная кавычка экранируется одной двойной кавычкой.

Сообщить('Привет, мир!');
Сообщить('Сказка "Колобок"');

Если строка содержит одинарную кавычку, её нужно удвоить.

Двойные кавычки (" ") — также используются для строковых литералов, но чаще применяются в текстах сообщений или при работе с HTML/XML. В 1С допускается использование обоих типов, но важно соблюдать согласованность.


Вертикальная черта и другие символы

Вертикальная черта (|) — используется для отделения комментариев или в специфических конструкциях шаблонов. В стандартном коде встречается редко.

Звездочка (*) — используется для умножения и в комментариях (многострочные комментарии начинаются с *).

Результат = A * B;
// Комментарий

Символы сравнения:

  • = — присваивание или равенство.
  • <, > — меньше, больше.
  • <=, >= — меньше или равно, больше или равно.
  • <> — неравенство.
  • ^ — возведение в степень.

Комментарии и документация кода

Комментарии — текст, игнорируемый компилятором, предназначенный для пояснения логики кода другим разработчикам или самому автору в будущем. В языке 1С существуют два основных вида комментариев.

Однострочные комментарии

Однострочные комментарии начинаются с двух символов апострофа ('') или знака восклицания (!). Текст после этих символов до конца строки игнорируется.

'' Это комментарий
! Еще один комментарий
A = 10; // Это тоже комментарий (не поддерживается в старых версиях, но работает в новых)

Использование апострофов является стандартом для языка 1С. Знак восклицания также широко распространен. Комментарии помогают объяснить сложные алгоритмы или причины принятия определенных решений.


Многострочные комментарии

Многострочные комментарии заключаются между парой апострофов или звездочек. Они могут занимать несколько строк.

/*
Это многострочный комментарий.
Он может содержать много текста.
Используется для описания больших блоков кода.
*/

В некоторых средах разработки также поддерживаются комментарии, начинающиеся с // и заканчивающиеся переносом строки, но основной стандарт — использование апострофов или звездочек.


Документирование процедур и функций

Каждая процедура и функция должна иметь описание. Описание включает назначение, параметры, возвращаемое значение и возможные исключения.

/**
* Процедура рассчитывает итоговую сумму заказа.
*
* Параметры:
* СуммаБазовая - базовая стоимость товаров
* Скидка - размер скидки в процентах
*
* Возвращает:
* Итоговая сумма после применения скидки
*/
Процедура РассчитатьИтог(Знач СуммаБазовая, Знач Скидка)
// Логика расчета
КонецПроцедуры

Описание помогает быстро понять функциональность модуля без чтения всего кода. В среде 1С такие комментарии часто отображаются в подсказках IDE.


Структура выражений и операторов

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

Арифметические операторы

Арифметические операторы работают с числами.

  • + — сложение.
  • - — вычитание.
  • * — умножение.
  • / — деление (возвращает дробное число).
  • \ — целочисленное деление (отбрасывает дробную часть).
  • ^ — возведение в степень.
  • Mod — остаток от деления.
A = 10 / 3; // 3.333...
B = 10 \ 3; // 3
C = 10 Mod 3; // 1
D = 2 ^ 3; // 8

Логические операторы

Логические операторы работают с булевыми значениями (Истина, Ложь).

  • И — логическое «и» (AND). Истинно, если оба операнда истинны.
  • ИЛИ — логическое «или» (OR). Истинно, если хотя бы один операнд истинен.
  • НЕ — логическое «не» (NOT). Инвертирует значение.
  • XOR — исключающее «или». Истинно, если операнды различны.
Если (A > 5) И (B < 10) Тогда
// Оба условия истинны
КонецЕсли;

Если (A > 5) ИЛИ (B < 10) Тогда
// Достаточно одного истинного условия
КонецЕсли;

Если НЕ (A > 5) Тогда
// A меньше или равно 5
КонецЕсли;

Операторы сравнения

Операторы сравнения возвращают логическое значение.

  • = — равно.
  • <> — не равно.
  • < — меньше.
  • > — больше.
  • <= — меньше или равно.
  • >= — больше или равно.
Если Дата >= НачалоГода Тогда
// Дата входит в текущий год
КонецЕсли;

При сравнении строк учитывается лексикографический порядок. При сравнении дат учитывается временная метка.


Операторы работы со строками

  • & — конкатенация строк. Объединяет две строки в одну.
  • ~ — преобразование к верхнему регистру.
  • ~ (в другом контексте) — преобразование к нижнему регистру (зависит от версии).
Имя = "Иван" & " " & "Петров"; // "Иван Петров"
Текст = ~"пример"; // "ПРИМЕР"

Оператор & автоматически преобразует числа и даты в строковое представление.


Порядок выполнения операций

Приоритет операций определяет последовательность вычисления частей выражения. Операторы с более высоким приоритетом выполняются первыми.

  1. Скобки — выражения в скобках вычисляются в первую очередь.
  2. Унарные операторы — отрицание, логическое НЕ.
  3. Умножение, деление, целочисленное деление, остаток*, /, \, Mod.
  4. Сложение, вычитание+, -.
  5. Сравнение=, <>, <, >, <=, >=.
  6. Логические операторыНЕ, И, ИЛИ, XOR.
Результат = 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;
Текст = "Привет";
КонецПроцедуры

В модулях и процедурах можно указывать типы переменных в начале блока.


Константы

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

Константа МаксимальноеКоличество = 100;

Изменение значения константы в коде вызовет ошибку компиляции.


Особенности синтаксиса в разных контекстах

Модули объектов

В модулях объектов (справочников, документов) синтаксис имеет свои особенности. Доступ к реквизитам осуществляется через точку.

Элемент.Номенклатура = "Товар";

Обработчики событий пишутся в виде процедур с особым названием.

Процедура ПередЗаписью(Отказ)
Если Отказ Тогда
Возврат;
КонецЕсли;
КонецПроцедуры

Формы документов

В формах документов синтаксис отличается использованием методов формы.

Форма.Поле1.Значение = "Значение";

События форм вызываются автоматически при действиях пользователя.


Внешние обработки

Внешние обработки используют глобальный контекст.

Процедура Обработка()
// Код обработки
КонецПроцедуры

Вызов внешних обработок осуществляется через ВызовВнешнегоОбработчика.


Типичные ошибки синтаксиса

Пропущенные ключевые слова — частая ошибка, когда забывают написать Тогда, КонецЦикла или КонецПроцедуры.

Если A > 0
Сообщить("Положительное");
КонецЕсли; // Ошибка: пропущено "Тогда"

Неправильные кавычки — использование одинарных кавычек вместо двойных или наоборот в строковых литералах.

Сообщить('Ошибка "Текст"'); // Правильно
Сообщить("Ошибка "Текст""); // Ошибка: внутренние кавычки должны быть экранированы

Неверные имена переменных — использование пробелов или специальных символов.

Моё_Имя = 10; // Правильно
Моё Имя = 10; // Ошибка: пробел

Неправильный порядок операторов — нарушение приоритета операций без скобок.

A = 10 + 5 * 2; // 20, а не 30

Отсутствие точек с запятой — в некоторых случаях компилятор требует точку с запятой.

A = 10; B = 20; // Обязательно

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).

Освоение главы0%