Разработка и Конфигурация · 11 мин
Синтаксис 1С: что это и как устроен язык платформы
Синтаксис 1С: что это такое, из чего состоит встроенный язык платформы, основные конструкции, примеры кода, типичные ошибки новичков и ответы на вопросы.
Синтаксис 1С — это набор правил, по которым записываются команды и выражения на встроенном языке платформы «1С:Предприятие». Он определяет, как объявлять переменные, вызывать процедуры и функции, писать условия и циклы, обращаться к объектам конфигурации. Без понимания синтаксиса невозможно ни изменить типовую конфигурацию, ни написать собственную обработку, ни просто прочитать чужой код в модуле документа.
Особенность встроенного языка 1С в том, что он изначально проектировался для бизнес-задач, а не для системного программирования. Поэтому его синтаксис допускает запись ключевых слов как на русском, так и на английском языке, опирается на типовые объекты предметной области (документы, справочники, регистры) и не требует ручного управления памятью или строгой типизации переменных.
Для разработчика, который переходит в 1С из другой среды, синтаксис может показаться непривычным: вместо фигурных скобок здесь используются служебные слова «Если…Тогда…КонецЕсли», а вместо точки с запятой как разделителя блоков — обязательное завершение каждого оператора символом «;». Ниже разберём устройство языка по частям: от базовых конструкций до запросов и типичных ошибок.
Что такое синтаксис в контексте платформы 1С
В любом языке программирования синтаксис — это грамматика: допустимый порядок слов, символов и конструкций. В 1С синтаксис описывает, как правильно записывать инструкции во встроенном языке, чтобы платформа могла их распознать и выполнить. Код пишется в модулях: модулях объектов, форм, общих модулях, модуле приложения и других.
Важно различать два уровня. Первый — синтаксис встроенного языка (операторы, выражения, обращения к объектам). Второй — синтаксис языка запросов 1С, который используется для выборки данных из базы и по структуре напоминает SQL, но с собственными расширениями. Оба уровня изучаются вместе, потому что реальный код почти всегда комбинирует их: запрос извлекает данные, а встроенный язык их обрабатывает.
Платформа проверяет синтаксис автоматически. В конфигураторе есть команда «Проверка конфигурации», а редактор модуля подсвечивает ошибки ещё до запуска. Это снижает порог входа: большинство опечаток обнаруживается до того, как код попадёт в рабочую базу.
Двуязычие: русский и английский варианты записи
Уникальная черта 1С — полноценная поддержка двух вариантов ключевых слов. Один и тот же оператор можно записать как «Если Условие Тогда», так и «If Условие Then». Платформа воспринимает оба варианта одинаково, более того — допускает смешение языков в одном модуле, хотя на практике так делать не принято.
В российских типовых конфигурациях код традиционно пишется на русском. Английский вариант чаще встречается в международных проектах и у разработчиков, пришедших из других языков. При выборе важно единообразие: вся команда должна придерживаться одного стиля, иначе чтение кода замедляется, а поиск по модулю усложняется.
Имена переменных, процедур и функций также могут содержать кириллицу. Идентификатор не должен начинаться с цифры и содержать пробелов; регистр букв не имеет значения — «СуммаДокумента» и «суммадокумента» для платформы одно и то же. Тем не менее принято соблюдать единый регистр для читаемости.
Базовые конструкции: переменные, операторы, ветвления и циклы
Переменные в 1С объявляются ключевым словом «Перем» либо создаются неявно при первом присваивании. Тип переменной не фиксируется: одна и та же переменная может последовательно хранить число, строку или ссылку на объект. Это удобно для быстрого прототипирования, но требует внимательности — ошибка типа всплывёт только в момент выполнения.
Каждый оператор завершается точкой с запятой. Пропуск «;» — самая частая синтаксическая ошибка новичков. Комментарии пишутся после двойного слэша «//» и действуют до конца строки; блочных комментариев в языке нет.
Условный оператор имеет вид: «Если Условие Тогда … ИначеЕсли ДругоеУсловие Тогда … Иначе … КонецЕсли;». Обратите внимание на обязательное закрывающее слово «КонецЕсли» и точку с запятой после него. Циклы записываются конструкциями «Пока Условие Цикл … КонецЦикла;» и «Для Счетчик = 1 По 10 Цикл … КонецЦикла;», а для обхода коллекций используется «Для Каждого Элемент Из Коллекция Цикл».
Перем СуммаДокумента;
СуммаДокумента = 0;
Для Каждого СтрокаТовара Из Товары Цикл
СуммаДокумента = СуммаДокумента + СтрокаТовара.Сумма;
КонецЦикла;
Если СуммаДокумента > 100000 Тогда
Сообщить("Требуется согласование");
КонецЕсли;Процедуры и функции: как структурируется код
Код в модуле организуется в процедуры и функции. Разница между ними стандартная: функция возвращает значение через оператор «Возврат», процедура — нет. Объявление выглядит как «Процедура РассчитатьСкидку(Сумма) … КонецПроцедуры» и «Функция ПолучитьКурс(Валюта) … КонецФункции». Параметры перечисляются в скобках через запятую, перед параметром можно указать «Знач», чтобы передать его по значению, а не по ссылке.
Директивы компиляции — обязательный элемент современного синтаксиса. Перед процедурой указывается контекст выполнения: «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» или «&НаКлиентеНаСервереБезКонтекста». Директива определяет, где будет выполняться код, и ошибка в её выборе приводит к недоступности нужных объектов — например, прямые запросы к базе невозможны на клиенте.
Экспортные процедуры и функции объявляются с ключевым словом «Экспорт» после списка параметров. Только они видны из других модулей. Это основной механизм инкапсуляции в 1С: внутренняя логика общего модуля скрыта, наружу торчит лишь согласованный программный интерфейс.
Работа с объектами конфигурации и обращение к данным
Обращение к прикладным объектам идёт через менеджеры объектов: «Справочники.Номенклатура», «Документы.РеализацияТоваров», «РегистрыСведений.КурсыВалют». Типичная цепочка выглядит так: получить ссылку, затем через «ПолучитьОбъект()» — изменяемый объект, внести изменения и вызвать «Записать()». Пропуск «Записать()» — частая причина «пропадающих» изменений: объект менялся только в памяти.
Синтаксис различает работу со ссылкой и с объектом. Ссылка — лёгкий идентификатор записи в базе, доступ к её реквизитам идёт через точку, но платформа при этом неявно читает данные из базы. Объект — полная редактируемая копия данных в памяти. Массовые обращения к реквизитам через точку в цикле порождают множество скрытых запросов и являются классической причиной медленного кода.
Для чтения больших наборов данных предназначен язык запросов. Текст запроса записывается как строка внутри кода, передаётся объекту «Запрос», после чего выполняется метод «Выполнить()» и обходится выборка. В запросах используются конструкции «ВЫБРАТЬ … ИЗ … ГДЕ …», параметры передаются с префиксом «&», а виртуальные таблицы регистров — с указанием параметров в скобках.
- 1Получите ссылку на объект: поиск по коду, наименованию или через запрос
- 2Вызовите Ссылка.ПолучитьОбъект() для получения редактируемой копии
- 3Измените нужные реквизиты или табличные части
- 4Вызовите Объект.Записать() и при необходимости обработайте исключение
- 5Проверьте результат в пользовательском режиме: откройте объект и убедитесь, что изменения сохранились
Директивы препроцессора, аннотации и обработка ошибок
Помимо директив компиляции, в синтаксисе есть инструкции препроцессора: «#Если Сервер Тогда … #КонецЕсли». Они позволяют включать или исключать фрагменты кода в зависимости от среды выполнения ещё на этапе компиляции модуля. Это полезно в общих модулях, исполняемых в разных контекстах.
Обработка ошибок реализована конструкцией «Попытка … Исключение … КонецПопытки;». Внутри блока «Исключение» доступна функция «ОписаниеОшибки()», возвращающая текст причины сбоя. Правильный приём — логировать ошибку и либо пробрасывать её выше через «ВызватьИсключение», либо корректно завершать операцию, а не «проглатывать» исключение пустым блоком.
Отдельного внимания заслуживает оператор «?» — тернарное условие вида «?(Условие, ЗначениеИстина, ЗначениеЛожь)». Он сокращает простые присваивания, но злоупотребление вложенными тернарными операторами резко ухудшает читаемость и считается дурным тоном при ревью кода.
Как проверять синтаксис и где искать справку
Первый уровень контроля — встроенная проверка модуля в конфигураторе: меню «Конфигурация — Проверка конфигурации» либо проверка текущего модуля. Платформа укажет строку и характер ошибки: незакрытый блок, неизвестный идентификатор, несоответствие типов в очевидных случаях. Перед обновлением рабочей базы проверку стоит выполнять в полном объёме, включая проверку логической целостности.
Основной справочный инструмент — синтакс-помощник, встроенный в конфигуратор. Он содержит описание всех операторов, методов, свойств и событий платформы с примерами. Быстрый переход к описанию метода выполняется через контекстное меню или сочетание клавиш прямо из текста модуля. Дополнительно полезен стандарт оформления кода, принятый в типовых конфигурациях: он регламентирует отступы, именование и структуру модулей.
Граница безопасной самостоятельной работы проходит по линии тестовой базы. Любые эксперименты с синтаксисом, обработками и изменением модулей выполняйте на копии рабочей базы. Правка кода непосредственно в продуктивной конфигурации — особенно в модулях проведения документов — способна остановить работу пользователей и повредить учётные данные.
Что важно запомнить
Синтаксис 1С — это правила встроенного языка платформы: русские или английские ключевые слова, обязательная точка с запятой, блочные конструкции с закрывающими словами, директивы компиляции и отдельный язык запросов. Проверяйте код штатными средствами конфигуратора и работайте только на тестовой базе.
Частые вопросы о синтаксисе 1С
Чем синтаксис 1С отличается от синтаксиса SQL?
Встроенный язык 1С — императивный: он описывает последовательность действий (присвоить, вызвать, обойти коллекцию). Язык запросов 1С декларативен и близок к SQL: он описывает, какие данные нужны, а не как их получать. Запросы 1С не поддерживают изменение данных — только чтение, для записи используются методы объектов встроенного языка.
Можно ли писать код 1С полностью на английском?
Да, платформа полностью поддерживает английский вариант всех ключевых слов и встроенных функций. Ограничение одно: имена объектов конфигурации (справочников, документов, реквизитов) используются так, как они заданы в метаданных, и в типовых российских конфигурациях они русские.
Нужно ли объявлять тип переменной в 1С?
Нет, встроенный язык использует нестрогую типизацию: тип определяется значением в момент присваивания и может меняться. Проверить фактический тип помогает функция «ТипЗнч()», а сравнение с нужным типом выполняется через «Тип()». Явная проверка типов особенно важна в функциях, принимающих параметры извне.
Что означают символы «&» перед именем процедуры?
Это не часть имени, а директива компиляции, например «&НаСервере». Она указывает платформе, в каком контексте компилировать и выполнять процедуру. Директив ставится перед объявлением и действует только на следующую за ней процедуру или функцию.
Как быстро найти описание незнакомого метода?
Установите курсор на имя метода в модуле и откройте синтакс-помощник через контекстное меню — платформа покажет описание именно этого метода с параметрами и примером. Альтернатива — поиск по дереву синтакс-помощника, где методы сгруппированы по объектам платформы.
Почему код с ошибкой иногда всё равно запускается?
Проверка модуля при сохранении может быть неполной: часть ошибок, связанных с типами и обращениями к данным, проявляется только в момент выполнения конкретной ветки кода. Поэтому синтаксическая проверка не заменяет тестирование — после правок нужно выполнить тот сценарий, который затрагивает изменённый код.