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

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

Что означает сообщение об ошибке

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

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

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

💡

Сообщение указывает место, где анализатор «споткнулся», а не обязательно место самой ошибки — проверяйте 2–3 строки выше.

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

Практика показывает, что набор причин достаточно ограничен. Ниже перечислены ситуации, которые стоит проверить в первую очередь.

  • 🔧 Незакрытая скобка или кавычка — пропущенный закрывающий символ смещает весь дальнейший разбор кода.
  • ✂️ Оборванный оператор — строка скопирована не полностью, потеряно окончание выражения.
  • 🔤 Опечатка в ключевом слове — например, Есл вместо Если или смешение русской и английской раскладки в идентификаторах.
  • Лишняя точка с запятой внутри выражения, где разделитель операторов не допустим.
  • 📋 Вставка кода из внешнего источника — неразрывные пробелы и «прилипшие» символы из браузера или Word.
  • 🧩 Потерянный КонецЕсли или КонецЦикла — нарушен баланс открывающих и закрывающих конструкций.

Отдельный частый случай — использование символа ~ или другого знака, который не является допустимым оператором встроенного языка, либо попытка применить синтаксис другого языка (например, фигурные скобки в стиле C или JavaScript).

Как локализовать проблемное место

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

Полезный приём — форматирование блока. Выделите фрагмент кода и нажмите Alt + Shift + F (в конфигураторе это стандартная команда форматирования, если комбинация не изменена в настройках). Если отступы «поехали» и блоки сместились не так, как ожидалось, это прямой признак потерянной или лишней закрывающей конструкции.

⚠️ Внимание: не исправляйте код «методом тыка», удаляя строки наугад. Каждая неудачная правка добавляет новые синтаксические ошибки, и исходное место сбоя теряется. Перед экспериментами сохраните копию текста модуля.
📊 Где чаще всего вы встречаете эту ошибку?
При копировании кода из интернета
При ручном наборе в конфигураторе
После объединения конфигураций
В запросах и текстовых шаблонах

Пошаговая инструкция по исправлению

Последовательность действий построена от простых проверок к более глубокому анализу. В большинстве ситуаций достаточно первых трёх шагов.

☑️ Проверка кода при ошибке лексемы

Выполнено: 0 / 5

Шаг 1. Осмотрите указанную строку: нет ли оборванного выражения, лишнего символа, незакрытой строковой константы. Строковый литерал должен начинаться и заканчиваться кавычкой; перенос строки внутри литерала оформляется символом |.

Шаг 2. Проверьте парность скобок. Поставьте курсор рядом со скобкой — конфигуратор подсвечивает парную. Если подсветки нет или она указывает не туда, скобка лишняя или потеряна.

Шаг 3. Если код вставлен из браузера, мессенджера или документа, удалите проблемный фрагмент и наберите его вручную. Невидимые символы вроде неразрывного пробела визуально неотличимы от обычных, но для анализатора это непредвиденная лексема.

Шаг 4. Проверьте, не используется ли синтаксис, недоступный в данном контексте. Например, директивы компиляции, объявления методов вне их допустимого места или конструкции, доступные только в тонком клиенте, но проверяемые для сервера.

// Типичная ошибка — потерянная закрывающая скобка:

Если ТипЗнч(Параметр = Тип("Строка") Тогда // непредвиденная лексема

КонецЕсли;

// Исправленный вариант:

Если ТипЗнч(Параметр) = Тип("Строка") Тогда

КонецЕсли;

💡

Включите автоматическую синтаксическую проверку при сохранении модуля (настройки конфигуратора, раздел «Модули») — ошибка будет обнаружена сразу, а не при обновлении конфигурации базы данных.

Ошибки в запросах и текстовых шаблонах

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

Типичные проблемы в текстах запросов: пропущенная запятая между полями выборки, незакрытая скобка в подзапросе, опечатка в ключевом слове ВЫБРАТЬ, ИЗ, ГДЕ. Для отладки удобно использовать конструктор запроса — он покажет ошибку визуально и позволит проверить текст без запуска кода.

Место ошибки Типичный признак Что проверить
Модуль объекта Ошибка при сохранении Скобки, КонецЕсли, опечатки
Текст запроса Ошибка при выполнении Запятые, ключевые слова запроса
Общий модуль Ошибка при проверке конфигурации Директивы компиляции, контекст
Код из внешнего источника Ошибка в «чистой» строке Невидимые символы, раскладка
⚠️ Внимание: после объединения конфигураций при обновлении ошибки лексем нередко появляются пакетно. Не правьте их по одной вслепую — сначала откройте каждый проблемный модуль и оцените, корректно ли сработало автоматическое объединение. Иногда надёжнее вручную перенести свои доработки в типовой код, чем чинить результат конфликта версий.

Профилактика: как не допускать таких ошибок

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

Во-вторых, используйте контекстную подсказку (Ctrl + Пробел) вместо ручного набора имён методов и свойств — это исключает опечатки. В-третьих, не вставляйте код из веб-страниц напрямую: сначала прогоните его через «Блокнот» или наберите заново, чтобы отсечь скрытые символы.

Почему ошибка появляется в «правильном» на вид коде

Синтаксический анализатор работает посимвольно и не «понимает» смысл. Неразрывный пробел (код 160 вместо 32), кириллическая «а» вместо латинской в имени переменной, перенос строки внутри оператора без символа продолжения — всё это визуально незаметно, но для компилятора является посторонней лексемой. Если строка выглядит корректно, а ошибка остаётся — перенаберите её полностью вручную.

💡

Самый быстрый способ диагностики «невидимой» ошибки — полностью перенабрать проблемную строку вручную в конфигураторе.

Часто задаваемые вопросы

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

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

Может ли ошибка появиться после копирования кода из интернета?

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

Ошибка возникает только при обновлении конфигурации базы данных. Что делать?

Выполните полную синтаксическую проверку: меню Конфигурация → Проверка конфигурации с отмеченным пунктом синтаксического контроля модулей. Сообщение покажет конкретный модуль и строку. Также проверьте контекст исполнения — код, допустимый на клиенте, может быть недопустим на сервере.

Как быстро проверить парность скобок в длинном выражении?

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

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

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