Как исправить ошибку «Обнаружено логическое завершение исходного текста модуля» в 1С

Программист 1С v8.3 (Управляемые формы) Сфера услуг, туризм и социальный сектор
← На главную

При работе с конфигурациями 1С, особенно в отраслевых решениях (например, от компании РАРУС), пользователи могут столкнуться с критической ошибкой компиляции (поможет мониторинг критических ошибок в журнале регистрации): «{ОбщийМодуль.ИмяМодуля.Модуль(1,1)}: Обнаружено логическое завершение исходного текста модуля». Эта ситуация часто возникает в момент формирования печатных форм, отчетов или при запуске обработчиков обновления. Особенность ошибки в том, что она может проявляться на одной лицензии (например, Базовой) и полностью отсутствовать на другой (ПРОФ), даже если используется одна и та же информационная база.

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

Разбор причины ошибки: почему «завершение» происходит в позиции (1,1)?

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

  1. Конфликт препроцессора: В модулях часто используются директивы #Если ... #КонецЕсли. Если в конфигурации используются механизмы защиты или расширения, код может динамически модифицироваться. Если условия препроцессора не выполняются для конкретной лицензии, текст модуля может «схлопнуться» или стать некорректным для парсера.
  2. Кэширование метаданных: Платформа 1С сохраняет скомпилированные образы модулей в локальный кэш на компьютере пользователя. Если кэш поврежден или содержит данные от предыдущей версии конфигурации (или версии, работавшей под другой лицензией), возникает программный конфликт.
  3. Различия между Базовой и ПРОФ версиями: Базовая лицензия накладывает жесткие ограничения на использование расширений и патчей. Если в базе остались «следы» расширений, которые ранее работали под ПРОФ-ключом, компилятор Базовой версии может выдать ошибку на ровном месте. Чтобы понять, какие ограничения наложены на текущую систему, можно использовать инструмент для просмотра программных лицензий.

Способ 1: Полная очистка кэша (Основное решение)

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

Для начала проанализируем структуру папок, где 1С хранит временные данные. Нам необходимо очистить два расположения:

  1. %AppData%\1C\1cv8\ (Roaming) — здесь хранятся пользовательские настройки и списки баз.
  2. %LocalAppData%\1C\1cv8\ (Local) — именно здесь лежат скомпилированные образы модулей, которые чаще всего вызывают ошибку.

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

Самый надежный способ очистки кэша для конкретной базы — это ее удаление из списка и повторное добавление:

  1. Запустите окно выбора информационных баз.
  2. Выделите проблемную базу и нажмите «Удалить» (самые данные в файле 1Cv8.1CD при этом не удаляются).
  3. Нажмите «Добавить» и пропишите путь к базе заново. При этом идентификатор базы (GUID) изменится, и платформа создаст для нее абсолютно новые, чистые папки кэша.

Способ 2: Восстановление конфигурации из поставщика

Если очистка кэша не помогла, проанализируем состояние конфигурации. Иногда при некорректном обновлении (например, если обновление прервалось или возник конфликт лицензий) основная конфигурация может начать отличаться от конфигурации поставщика в критических узлах. В диагностике структуры файлов вам поможет распаковщик конфигураций В8АнПак, который позволяет работать с форматами cf и cfe.

Выполним следующие шаги в Конфигураторе:

  1. Зайдем в меню Конфигурация — Поддержка — Настройка поддержки.
  2. Убедимся, что модуль, вызывающий ошибку (например, ОбщийМодуль.ИнтеграцияСатурн), находится на полной поддержке.
  3. Если изменения разрешены, попробуем выполнить «Сравнить, объединить с конфигурацией поставщика».
  4. В некоторых случаях помогает полная загрузка конфигурации (файл .cf) из официального дистрибутива именно вашей версии (Базовой или ПРОФ соответственно).

Способ 3: Проверка «фантомных» расширений и патчей

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

Проанализируем дополнительные действия для очистки:

  1. В Конфигураторе откройте список расширений (Конфигурация — Расширения конфигурации). Убедитесь, что список пуст. Также полезно провести анализ состава расширений на наличие ошибок в вызовах процедур — поможет инструментарий для глубокого анализа метаданных.
  2. Если база файловая, запустите утилиту chdbfl.exe (находится в папке bin платформы 1С) и выполните проверку физической целостности с установленной галочкой «Исправлять обнаруженные ошибки».
  3. Выполните «Тестирование и исправление» из Конфигуратора, обязательно выбрав пункты «Проверка логической целостности» и «Реиндексация таблиц».

Технические нюансы работы с кодом РАРУС

В отраслевых решениях РАРУС часто используется сложная структура препроцессора для защиты программного продукта. Посмотрим на пример типичного кода, который может вызвать затруднения у компилятора при несоответствии лицензий:


#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// Процедура вызывается при печати
Процедура СформироватьПечатнуюФорму(Параметры) Экспорт
    // Здесь может быть вызов защищенного модуля
    ИнтеграцияСатурнВызовСервера.ИнициализироватьДанные(Параметры);
КонецПроцедуры

#КонецОбласти

#КонецЕсли

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

Резюме и рекомендации

Для окончательного устранения проблемы и предотвращения ее появления в будущем, мы рекомендуем:

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

← На главную