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

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

Компиляция в 1С: что это и как она работает

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

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

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

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

Что именно компилируется в 1С

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

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

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

Когда происходит компиляция

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

Второй сценарий — обновление конфигурации базы данных. При выполнении команды «Конфигурация → Обновить конфигурацию базы данных» платформа не только применяет изменения структуры, но и компилирует модули. Если в коде есть ошибки, обновление завершится с предупреждениями или не выполнится.

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

Фоновая компиляция в конфигураторе

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

Как запустить проверку и компиляцию вручную

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

Порядок действий
  1. 1
    Откройте конфигуратор и сделайте выгрузку информационной базы или копию конфигурации перед масштабными правками
  2. 2
    Внесите изменения в код модулей
  3. 3
    Откройте «Конфигурация → Проверка конфигурации» и отметьте режимы: тонкий клиент, веб-клиент, сервер
  4. 4
    Запустите проверку и дождитесь завершения — окно сообщений покажет ошибки и предупреждения
  5. 5
    Двойным щелчком по каждой ошибке перейдите к строке кода и исправьте её
  6. 6
    Повторите проверку до отсутствия ошибок, затем обновите конфигурацию базы данных

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

Дополнительно доступна проверка синтаксиса отдельного модуля: в редакторе модуля команда «Текст → Проверка синтаксиса модуля» (или соответствующая кнопка на панели) компилирует только текущий модуль. Это быстрый способ проверить правку без полной проверки конфигурации.

Типичные ошибки компиляции и как их читать

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

  • Синтаксические ошибки — незакрытые скобки, пропущенные «КонецЕсли» или «КонецПроцедуры», лишние символы. Платформа указывает строку, где обнаружила проблему; реальная причина иногда находится выше.
  • Переменная не определена — обращение к имени, которое не объявлено и не является методом платформы. Типичные причины: опечатка, забытый экспорт процедуры в общем модуле, обращение к объекту, недоступному в данном контексте.
  • Процедура или функция не обнаружена — вызов несуществующего метода. Проверьте, что общий модуль существует, процедура помечена словом «Экспорт», а флаги контекста модуля включают нужный режим исполнения.
  • Ошибки контекста — код корректен синтаксически, но недоступен в текущем режиме. Например, использование модального диалога в режиме без модальности или работа с файлами на тонком клиенте без расширения работы с файлами.
Типичные ошибки
01
Проверка только в режиме тонкого клиента — ошибки сервера и веб-клиента доходят до пользователей
02
Забытый «Экспорт» у процедуры общего модуля — вызовы из других модулей падают с «процедура не обнаружена»
03
Правка кода без повторной проверки — старые ошибки маскируют новые, разобраться становится сложнее
04
Игнорирование предупреждений — часть из них (например, неиспользуемые переменные) указывает на логические ошибки в алгоритме

Компиляция на клиенте и на сервере: в чём разница

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

Директивы компиляции позволяют включать фрагменты кода только для определённой среды: #Если Сервер Тогда, #Если Клиент Тогда, #Если ТонкийКлиент Тогда, #Если ВебКлиент Тогда. Код внутри такой директивы компилируется только в указанном контексте. Это штатный способ разместить в одном модуле разные реализации для разных сред.

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

Ошибки компиляции и ошибки выполнения: как различать

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

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

Контрольные точки

Как проверить результат

Проверка конфигурации во всех используемых режимах
Норма

Нет сообщений об ошибках компиляции

Тревожный признак

Ошибки в режимах сервера или веб-клиента

Запуск изменённого сценария у пользователя или на тестовой базе
Норма

Форма открывается, код выполняется без сообщений платформы

Тревожный признак

Ошибка при первом обращении к модулю

Окно сообщений после обновления конфигурации БД
Норма

Обновление завершено без предупреждений о модулях

Тревожный признак

Предупреждения о невозможности компиляции

Риски и меры предосторожности

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

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

Итог

Итог

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

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

Частые вопросы

Компилируется ли вся конфигурация при запуске 1С?

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

Чем проверка конфигурации отличается от обновления конфигурации БД?

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

Почему код работает на тонком клиенте, но падает на сервере?

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

Что делать с ошибкой «Процедура или функция не обнаружена»?

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

Замедляет ли компиляция работу пользователей?

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

Можно ли найти ошибки компиляции без конфигуратора?

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