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

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

Что такое ошибка компиляции в 1С и как её исправить

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

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

Характерный признак — красный текст сообщения в окне служебных сообщений конфигуратора при сохранении модуля или обновлении конфигурации базы данных, либо окно с ошибкой при запуске режима «1С:Предприятие». Платформа указывает место проблемы: модуль, процедуру и номер строки, например: «МодульОбъекта(45,12): Процедура или функция с указанным именем не определена».

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

Что происходит при компиляции модуля в 1С

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

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

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

Типичные причины ошибок компиляции

Чаще всего ошибка возникает из-за обращения к процедуре или функции, которой не существует: опечатка в имени, процедура удалена при доработке, либо вызов идёт из другого модуля, а метод не объявлен с ключевым словом «Экспорт». Сообщение вида «Процедура или функция с указанным именем не определена» почти всегда означает именно это.

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

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

«Переменная не определена»Опечатка или пропущенное объявление

Имя переменной в указанной строке и её объявление выше по коду

«Процедура или функция не определена»Нет такого метода или он не экспортный

Наличие метода в модуле и ключевое слово «Экспорт»

«Ожидается символ...»Синтаксическая ошибка

Скобки, «КонецЕсли», «КонецЦикла» в указанной строке и выше

«Объект не обнаружен»Нет объекта метаданных

Существование справочника, документа или реквизита в дереве конфигурации

Как найти место ошибки в конфигураторе

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

Если ошибка появляется только в режиме «1С:Предприятие», запишите полный текст сообщения: в нём указано имя модуля (например, «МодульОбъекта» конкретного документа или «МодульМенеджера» справочника) и координаты строки. Затем откройте этот модуль в конфигураторе и перейдите к указанной строке через «Правка — Перейти к строке» или сочетание Ctrl+G.

Учитывайте, что реальная причина может находиться выше указанной строки. Если платформа сообщает «Ожидается символ ';'» в строке 120, а строка визуально корректна, ищите незакрытую скобку или незавершённый оператор в строках 100–119. Подсветка синтаксиса и автоматический отступ (команда форматирования текста модуля) помогают быстро увидеть сбитую структуру блоков «Если...КонецЕсли» и «Процедура...КонецПроцедуры».

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

Как исправить самые частые ошибки

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

Для ошибки «Процедура или функция не определена» найдите целевой метод через глобальный поиск (Ctrl+Shift+F) по всей конфигурации. Если метод существует в общем модуле, убедитесь, что в его объявлении есть слово «Экспорт», а в свойствах общего модуля корректно выставлены флажки «Сервер» и «Клиент» — иначе модуль недоступен в нужном контексте. Если метод удалён при обновлении, подберите его аналог в новой версии конфигурации по документации поставщика или по коду типовых вызовов.

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

bsl
// Типичная ошибка: вызов неэкспортной процедуры общего модуля
// В общем модуле:
Процедура РассчитатьИтог(Документ) Экспорт  // без "Экспорт" будет ошибка компиляции
    // ...
КонецПроцедуры

Ошибки после обновления конфигурации

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

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

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

Как не допустить ошибок в будущем

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

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

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

Типичные ошибки
01
Обновление конфигурации базы данных при наличии ошибок компиляции — доработки перестают работать, а разбор причин усложняется
02
Исправление кода прямо в продуктивной базе без копии — одна неверная правка может остановить работу пользователей
03
Правка только указанной строки без проверки строк выше — незакрытый блок остаётся и ошибка возвращается в другом виде
04
Копирование процедур между модулями без слова «Экспорт» — вызов извне снова даёт ошибку компиляции
Маршрут решения

Как выбрать действие

Ошибка в одном модуле, причина очевидна (опечатка, скобка)Исправьте строку, сохраните модуль и выполните проверку конфигурации
Ошибки появились после обновления типовой конфигурацииОткройте сравнение/объединение, разберите конфликтующие модули, проверьте переименованные объекты
Ошибок много и система продуктивнаяВосстановите резервную копию в тестовой базе и выполняйте исправления там
Ошибка только в конкретном клиенте (тонкий, веб)Проверьте директивы компиляции и контекст: перенесите серверную логику в процедуры «&НаСервере»

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

Ошибка компиляции может удалить данные из базы?

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

Почему ошибка видна у пользователя, но конфигуратор её не показывает?

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

Что означают числа в скобках в тексте ошибки, например (45,12)?

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

Можно ли обновить конфигурацию базы данных, если есть ошибки компиляции?

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

Ошибка появилась, хотя код никто не менял. Как такое возможно?

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

Итог

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

Ошибка компиляции — это отказ платформы выполнить модуль из-за синтаксиса или обращений к несуществующим объектам; данные она не портит. Место проблемы указано в сообщении, исправление делается в конфигураторе с последующей проверкой конфигурации. Любые правки и обновления — только после резервной копии, а массовые ошибки после обновления разбираются на тестовой базе.