К статье
Практический материал

Разработка и Конфигурация · 11 мин

Синтаксис 1С: что это и как устроен язык платформы

Синтаксис 1С: что это такое, из чего состоит встроенный язык платформы, основные конструкции, примеры кода, типичные ошибки новичков и ответы на вопросы.

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

Особенность встроенного языка 1С в том, что он изначально проектировался для бизнес-задач, а не для системного программирования. Поэтому его синтаксис допускает запись ключевых слов как на русском, так и на английском языке, опирается на типовые объекты предметной области (документы, справочники, регистры) и не требует ручного управления памятью или строгой типизации переменных.

Для разработчика, который переходит в 1С из другой среды, синтаксис может показаться непривычным: вместо фигурных скобок здесь используются служебные слова «Если…Тогда…КонецЕсли», а вместо точки с запятой как разделителя блоков — обязательное завершение каждого оператора символом «;». Ниже разберём устройство языка по частям: от базовых конструкций до запросов и типичных ошибок.

Что такое синтаксис в контексте платформы 1С

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

Важно различать два уровня. Первый — синтаксис встроенного языка (операторы, выражения, обращения к объектам). Второй — синтаксис языка запросов 1С, который используется для выборки данных из базы и по структуре напоминает SQL, но с собственными расширениями. Оба уровня изучаются вместе, потому что реальный код почти всегда комбинирует их: запрос извлекает данные, а встроенный язык их обрабатывает.

Платформа проверяет синтаксис автоматически. В конфигураторе есть команда «Проверка конфигурации», а редактор модуля подсвечивает ошибки ещё до запуска. Это снижает порог входа: большинство опечаток обнаруживается до того, как код попадёт в рабочую базу.

Двуязычие: русский и английский варианты записи

Уникальная черта 1С — полноценная поддержка двух вариантов ключевых слов. Один и тот же оператор можно записать как «Если Условие Тогда», так и «If Условие Then». Платформа воспринимает оба варианта одинаково, более того — допускает смешение языков в одном модуле, хотя на практике так делать не принято.

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

Имена переменных, процедур и функций также могут содержать кириллицу. Идентификатор не должен начинаться с цифры и содержать пробелов; регистр букв не имеет значения — «СуммаДокумента» и «суммадокумента» для платформы одно и то же. Тем не менее принято соблюдать единый регистр для читаемости.

Базовые конструкции: переменные, операторы, ветвления и циклы

Переменные в 1С объявляются ключевым словом «Перем» либо создаются неявно при первом присваивании. Тип переменной не фиксируется: одна и та же переменная может последовательно хранить число, строку или ссылку на объект. Это удобно для быстрого прототипирования, но требует внимательности — ошибка типа всплывёт только в момент выполнения.

Каждый оператор завершается точкой с запятой. Пропуск «;» — самая частая синтаксическая ошибка новичков. Комментарии пишутся после двойного слэша «//» и действуют до конца строки; блочных комментариев в языке нет.

Условный оператор имеет вид: «Если Условие Тогда … ИначеЕсли ДругоеУсловие Тогда … Иначе … КонецЕсли;». Обратите внимание на обязательное закрывающее слово «КонецЕсли» и точку с запятой после него. Циклы записываются конструкциями «Пока Условие Цикл … КонецЦикла;» и «Для Счетчик = 1 По 10 Цикл … КонецЦикла;», а для обхода коллекций используется «Для Каждого Элемент Из Коллекция Цикл».

bsl
Перем СуммаДокумента;
СуммаДокумента = 0;

Для Каждого СтрокаТовара Из Товары Цикл
    СуммаДокумента = СуммаДокумента + СтрокаТовара.Сумма;
КонецЦикла;

Если СуммаДокумента > 100000 Тогда
    Сообщить("Требуется согласование");
КонецЕсли;

Процедуры и функции: как структурируется код

Код в модуле организуется в процедуры и функции. Разница между ними стандартная: функция возвращает значение через оператор «Возврат», процедура — нет. Объявление выглядит как «Процедура РассчитатьСкидку(Сумма) … КонецПроцедуры» и «Функция ПолучитьКурс(Валюта) … КонецФункции». Параметры перечисляются в скобках через запятую, перед параметром можно указать «Знач», чтобы передать его по значению, а не по ссылке.

Директивы компиляции — обязательный элемент современного синтаксиса. Перед процедурой указывается контекст выполнения: «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» или «&НаКлиентеНаСервереБезКонтекста». Директива определяет, где будет выполняться код, и ошибка в её выборе приводит к недоступности нужных объектов — например, прямые запросы к базе невозможны на клиенте.

Экспортные процедуры и функции объявляются с ключевым словом «Экспорт» после списка параметров. Только они видны из других модулей. Это основной механизм инкапсуляции в 1С: внутренняя логика общего модуля скрыта, наружу торчит лишь согласованный программный интерфейс.

Работа с объектами конфигурации и обращение к данным

Обращение к прикладным объектам идёт через менеджеры объектов: «Справочники.Номенклатура», «Документы.РеализацияТоваров», «РегистрыСведений.КурсыВалют». Типичная цепочка выглядит так: получить ссылку, затем через «ПолучитьОбъект()» — изменяемый объект, внести изменения и вызвать «Записать()». Пропуск «Записать()» — частая причина «пропадающих» изменений: объект менялся только в памяти.

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

Для чтения больших наборов данных предназначен язык запросов. Текст запроса записывается как строка внутри кода, передаётся объекту «Запрос», после чего выполняется метод «Выполнить()» и обходится выборка. В запросах используются конструкции «ВЫБРАТЬ … ИЗ … ГДЕ …», параметры передаются с префиксом «&», а виртуальные таблицы регистров — с указанием параметров в скобках.

Порядок изменения объекта в коде
  1. 1
    Получите ссылку на объект: поиск по коду, наименованию или через запрос
  2. 2
    Вызовите Ссылка.ПолучитьОбъект() для получения редактируемой копии
  3. 3
    Измените нужные реквизиты или табличные части
  4. 4
    Вызовите Объект.Записать() и при необходимости обработайте исключение
  5. 5
    Проверьте результат в пользовательском режиме: откройте объект и убедитесь, что изменения сохранились

Директивы препроцессора, аннотации и обработка ошибок

Помимо директив компиляции, в синтаксисе есть инструкции препроцессора: «#Если Сервер Тогда … #КонецЕсли». Они позволяют включать или исключать фрагменты кода в зависимости от среды выполнения ещё на этапе компиляции модуля. Это полезно в общих модулях, исполняемых в разных контекстах.

Обработка ошибок реализована конструкцией «Попытка … Исключение … КонецПопытки;». Внутри блока «Исключение» доступна функция «ОписаниеОшибки()», возвращающая текст причины сбоя. Правильный приём — логировать ошибку и либо пробрасывать её выше через «ВызватьИсключение», либо корректно завершать операцию, а не «проглатывать» исключение пустым блоком.

Отдельного внимания заслуживает оператор «?» — тернарное условие вида «?(Условие, ЗначениеИстина, ЗначениеЛожь)». Он сокращает простые присваивания, но злоупотребление вложенными тернарными операторами резко ухудшает читаемость и считается дурным тоном при ревью кода.

Типичные ошибки
01
Пропуск точки с запятой в конце оператора — модуль не проходит синтаксическую проверку
02
Обращение к реквизитам ссылки через точку внутри цикла — масса скрытых запросов и падение производительности
03
Изменение объекта без вызова Записать() — изменения теряются без сообщения об ошибке
04
Пустой блок Исключение — ошибки не видны ни пользователю, ни разработчику, расследование затягивается
05
Смешение русского и английского синтаксиса в одном модуле — затрудняет поиск и ревью кода

Как проверять синтаксис и где искать справку

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

Основной справочный инструмент — синтакс-помощник, встроенный в конфигуратор. Он содержит описание всех операторов, методов, свойств и событий платформы с примерами. Быстрый переход к описанию метода выполняется через контекстное меню или сочетание клавиш прямо из текста модуля. Дополнительно полезен стандарт оформления кода, принятый в типовых конфигурациях: он регламентирует отступы, именование и структуру модулей.

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

Итог

Что важно запомнить

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

Частые вопросы о синтаксисе 1С

Чем синтаксис 1С отличается от синтаксиса SQL?

Встроенный язык 1С — императивный: он описывает последовательность действий (присвоить, вызвать, обойти коллекцию). Язык запросов 1С декларативен и близок к SQL: он описывает, какие данные нужны, а не как их получать. Запросы 1С не поддерживают изменение данных — только чтение, для записи используются методы объектов встроенного языка.

Можно ли писать код 1С полностью на английском?

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

Нужно ли объявлять тип переменной в 1С?

Нет, встроенный язык использует нестрогую типизацию: тип определяется значением в момент присваивания и может меняться. Проверить фактический тип помогает функция «ТипЗнч()», а сравнение с нужным типом выполняется через «Тип()». Явная проверка типов особенно важна в функциях, принимающих параметры извне.

Что означают символы «&» перед именем процедуры?

Это не часть имени, а директива компиляции, например «&НаСервере». Она указывает платформе, в каком контексте компилировать и выполнять процедуру. Директив ставится перед объявлением и действует только на следующую за ней процедуру или функцию.

Как быстро найти описание незнакомого метода?

Установите курсор на имя метода в модуле и откройте синтакс-помощник через контекстное меню — платформа покажет описание именно этого метода с параметрами и примером. Альтернатива — поиск по дереву синтакс-помощника, где методы сгруппированы по объектам платформы.

Почему код с ошибкой иногда всё равно запускается?

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