Разработка и Конфигурация · 10 мин
Компилятор 1С: что это и как он работает
Что такое компилятор 1С, как платформа преобразует встроенный язык в байт-код, где искать ошибки компиляции и как проверить модуль перед обновлением конфигурации.
Компилятор 1С — это встроенный в платформу «1С:Предприятие» механизм, который преобразует код на встроенном языке в промежуточное представление (байт-код), исполняемое системой. Разработчик не устанавливает его отдельно: компиляция происходит автоматически при сохранении модуля, обновлении конфигурации базы данных и при запуске проверки конфигурации.
Понимание того, как работает компилятор, важно на практике: от него зависят сообщения об ошибках в модулях, поведение директив компиляции, скорость выполнения кода и совместимость тонкого, толстого и веб-клиента. Многие ошибки, которые новички считают «глюками платформы», на самом деле — штатные сообщения компилятора о нарушении синтаксиса или контекста.
Материал рассчитан на разработчиков и администраторов, которые работают с конфигуратором: объясним, что именно компилируется, где искать ошибки, как выполнить проверку модулей и чем компиляция отличается от выполнения кода.
Что такое компилятор в контексте 1С
В классическом программировании компилятор преобразует исходный код в машинный код или исполняемый файл. В 1С схема другая: встроенный язык компилируется не в машинные инструкции процессора, а в байт-код — промежуточное представление, которое затем исполняется виртуальной машиной платформы. Такой подход делает код переносимым между операционными системами, на которых работает платформа.
Отдельной программы «компилятор 1С» не существует. Компиляция выполняется внутри конфигуратора и сервера 1С в нескольких ситуациях: при записи изменённого модуля, при обновлении конфигурации базы данных, при явной проверке конфигурации и при первом обращении к модулю в сеансе, если он ещё не скомпилирован в нужном контексте.
Какие модули компилируются и в каких контекстах
Конфигурация 1С состоит из модулей разных типов: общие модули, модули объектов, модули форм, модули менеджеров, модуль приложения, модуль сеанса и другие. Каждый из них компилируется отдельно, причём один и тот же модуль может компилироваться несколько раз — для разных контекстов исполнения.
Ключевые контексты компиляции: сервер, толстый клиент (обычное и управляемое приложение), тонкий клиент и веб-клиент. Именно поэтому в общих модулях используются флаги «Сервер», «Тонкий клиент», «Веб-клиент» и директивы компиляции — они определяют, для каких контекстов код будет скомпилирован и доступен.
Директивы компиляции
Директивы &НаКлиенте, &НаСервере, &НаСервереБезКонтекста и &НаКлиентеНаСервереБезКонтекста в модулях форм указывают компилятору, в каком контексте должна существовать процедура или функция. Ошибка в выборе директивы — частая причина сообщений вида «Процедура или функция с указанным именем не определена».
Как происходит компиляция при работе в конфигураторе
При редактировании модуля конфигуратор выполняет синтаксический контроль на лету или по команде. Когда разработчик сохраняет конфигурацию и обновляет конфигурацию базы данных, платформа компилирует изменённые модули для всех задействованных контекстов. Если хотя бы один модуль содержит ошибку, обновление может завершиться с предупреждениями или отказом.
Полную проверку всех модулей запускают вручную через меню «Конфигурация — Проверка конфигурации». В диалоге можно выбрать режимы проверки: синтаксический контроль модулей, проверку логической целостности, поиск некорректных ссылок, а также контроль для конкретных режимов запуска — тонкого клиента, веб-клиента, сервера.
- 1Откройте конфигуратор и выполните «Конфигурация — Проверка конфигурации»
- 2Отметьте пункт «Синтаксический контроль модулей» и нужные режимы запуска (тонкий клиент, веб-клиент, сервер)
- 3Дождитесь окончания проверки и разберите все сообщения в окне служебных сообщений
- 4Исправьте ошибки, начиная с первой — последующие могут быть её следствием
- 5Повторите проверку: окно сообщений должно остаться пустым
Как читать ошибки компилятора
Сообщения компилятора выводятся в окно служебных сообщений с указанием модуля, номера строки и описания проблемы. Двойной щелчок по сообщению открывает модуль на нужной строке. Типичные сообщения: «Переменная не определена», «Процедура или функция с указанным именем не определена», «Ожидается символ», «Слишком много фактических параметров».
Важно понимать разницу между ошибками компиляции и ошибками времени выполнения. Ошибка компиляции означает, что код вообще не может быть преобразован в байт-код — модуль не будет работать ни при каких условиях. Ошибка времени выполнения возникает уже в работающем коде, например при обращении к реквизиту, которого нет у конкретного объекта.
Компиляция на сервере и в клиентских приложениях
В клиент-серверном режиме компиляция модулей для серверного контекста выполняется на сервере 1С, а для клиентских контекстов — на клиентских приложениях. Платформа кэширует скомпилированные модули, поэтому повторные обращения выполняются быстрее. После обновления конфигурации кэш становится неактуальным, и первые сеансы могут работать медленнее — это нормальное поведение.
Если после обновления у пользователей возникают странные ошибки в модулях, хотя в конфигураторе проверка проходит чисто, часто помогает очистка кэша метаданных на клиенте или перезапуск сервера 1С. Устаревший кэш — типичная причина расхождения между «проверено в конфигураторе» и «не работает у пользователя».
Как выбрать действие
Чем компилятор 1С отличается от внешних инструментов
Иногда под «компилятором 1С» ошибочно понимают внешние средства разработки или утилиты сборки. Платформа 1С самодостаточна: весь цикл от редактирования кода до исполнения происходит внутри неё. Внешние инструменты — например, EDT (1C:Enterprise Development Tools) — используют собственные механизмы проверки и сборки, но в итоге конфигурация всё равно загружается в платформу и компилируется её штатным компилятором.
Также не стоит путать компиляцию с поставкой конфигурации. При настройке поставки можно скрыть исходный текст модулей — тогда в информационной базе остаётся только скомпилированное представление без возможности просмотра кода. Это способ защиты интеллектуальной собственности, а не отдельный вид компиляции.
Практические рекомендации по работе с компилятором
Включите привычку запускать синтаксический контроль модуля после каждого значимого изменения, а не перед самым обновлением. Так ошибки локализуются быстрее: проще найти проблему в десяти свежих строках, чем в тысяче строк дневной работы.
При разработке общих модулей осознанно выбирайте флаги контекстов. Лишний флаг «Толстый клиент» или «Веб-клиент» заставляет компилятор проверять модуль в контекстах, где он не нужен, и увеличивает объём компиляции. Минимально необходимый набор контекстов — признак аккуратной архитектуры.
Для крупных доработок полезно проверять конфигурацию во всех режимах запуска, которые реально используются в организации. Если часть пользователей работает через веб-клиент, проверка только для тонкого клиента оставляет риск ошибок у этой группы.
Что важно запомнить
Компилятор 1С встроен в платформу и переводит код модулей в байт-код для разных контекстов исполнения. Ошибки компиляции видны при проверке конфигурации и должны быть устранены до обновления рабочей базы. Расхождение поведения между клиентами чаще всего связано с контекстами компиляции или устаревшим кэшем.
Частые вопросы
Можно ли скачать компилятор 1С отдельно от платформы?
Нет. Компилятор — неотъемлемая часть платформы «1С:Предприятие» и не распространяется отдельным продуктом. Для компиляции модулей достаточно установленной платформы с конфигуратором.
Почему модуль работает в тонком клиенте, но не в веб-клиенте?
Веб-клиент поддерживает ограниченный набор типов и методов платформы. Если модуль использует недоступные в веб-клиенте объекты, компиляция для этого контекста завершится ошибкой. Проверьте конфигурацию с отметкой режима веб-клиента и уберите неподдерживаемые вызовы.
Что означает «Переменная не определена» при проверке?
Компилятор встретил имя, которое не объявлено как переменная, параметр или экспортная процедура доступного модуля. Причины: опечатка в имени, отсутствие объявления через «Перем» или обращение к переменной другого контекста.
Влияет ли компиляция на скорость работы программы?
Сама компиляция выполняется один раз и кэшируется, поэтому на постоянную скорость работы она влияет мало. Замедление заметно только в первых сеансах после обновления конфигурации, пока формируется новый кэш скомпилированных модулей.
Можно ли скрыть исходный код модулей от пользователей?
Да. При создании поставки конфигурации можно указать модули, которые поставляются без исходного текста. В информационной базе останется только скомпилированное представление, и просмотреть код в конфигураторе будет нельзя.
Чем отличается синтаксический контроль от проверки конфигурации?
Синтаксический контроль проверяет один открытый модуль и выполняется быстро. Проверка конфигурации — комплексная операция: контроль всех модулей в выбранных контекстах, логическая целостность метаданных, поиск битых ссылок. Перед обновлением рабочей базы нужна именно полная проверка.