При работе с конфигурациями 1С, особенно в отраслевых решениях (например, от компании РАРУС), пользователи могут столкнуться с критической ошибкой компиляции (поможет мониторинг критических ошибок в журнале регистрации): «{ОбщийМодуль.ИмяМодуля.Модуль(1,1)}: Обнаружено логическое завершение исходного текста модуля». Эта ситуация часто возникает в момент формирования печатных форм, отчетов или при запуске обработчиков обновления. Особенность ошибки в том, что она может проявляться на одной лицензии (например, Базовой) и полностью отсутствовать на другой (ПРОФ), даже если используется одна и та же информационная база.
В этой статье мы подробно разберем причины возникновения данной ошибки, проанализируем влияние типов лицензий на компиляцию кода и изучим пошаговый алгоритм решения проблемы.
Когда платформа выдает ошибку в позиции (1,1), это означает, что компилятор встроенного языка не смог начать чтение модуля. Вместо ожидаемых первых строк кода он сразу встретил «конец файла». Рассмотрим основные технические причины, почему это происходит:
#Если ... #КонецЕсли. Если в конфигурации используются механизмы защиты или расширения, код может динамически модифицироваться. Если условия препроцессора не выполняются для конкретной лицензии, текст модуля может «схлопнуться» или стать некорректным для парсера.Как показывает практика, в 90% случаев проблема кроется в «недочищенном» кэше. Пользователи часто ограничиваются удалением временных файлов в одной папке, забывая про вторую. Разберем правильный алгоритм очистки.
Для начала проанализируем структуру папок, где 1С хранит временные данные. Нам необходимо очистить два расположения:
%AppData%\1C\1cv8\ (Roaming) — здесь хранятся пользовательские настройки и списки баз.%LocalAppData%\1C\1cv8\ (Local) — именно здесь лежат скомпилированные образы модулей, которые чаще всего вызывают ошибку.Важно: Перед очисткой необходимо полностью завершить работу всех сеансов 1С и Конфигуратора. Чтобы упростить этот процесс и не удалять лишнего, рекомендуется использовать специальный Bat файл для очистки кеша 1С, который сохраняет настройки и журналы регистрации.
Самый надежный способ очистки кэша для конкретной базы — это ее удаление из списка и повторное добавление:
Если очистка кэша не помогла, проанализируем состояние конфигурации. Иногда при некорректном обновлении (например, если обновление прервалось или возник конфликт лицензий) основная конфигурация может начать отличаться от конфигурации поставщика в критических узлах. В диагностике структуры файлов вам поможет распаковщик конфигураций В8АнПак, который позволяет работать с форматами cf и cfe.
Выполним следующие шаги в Конфигураторе:
Конфигурация — Поддержка — Настройка поддержки.ОбщийМодуль.ИнтеграцияСатурн), находится на полной поддержке..cf) из официального дистрибутива именно вашей версии (Базовой или ПРОФ соответственно).Рассмотрим ситуацию, когда база запускалась под лицензией ПРОФ, в нее были установлены патчи или расширения, а затем базу перенесли на компьютер с Базовой лицензией. Даже если вы удалили расширения в списке, в системных таблицах могли остаться записи о них. Чтобы полностью вычистить систему от таких следов, используйте обработку для универсального удаления расширений и патчей.
Проанализируем дополнительные действия для очистки:
Конфигурация — Расширения конфигурации). Убедитесь, что список пуст. Также полезно провести анализ состава расширений на наличие ошибок в вызовах процедур — поможет инструментарий для глубокого анализа метаданных.chdbfl.exe (находится в папке bin платформы 1С) и выполните проверку физической целостности с установленной галочкой «Исправлять обнаруженные ошибки».В отраслевых решениях РАРУС часто используется сложная структура препроцессора для защиты программного продукта. Посмотрим на пример типичного кода, который может вызвать затруднения у компилятора при несоответствии лицензий:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Процедура вызывается при печати
Процедура СформироватьПечатнуюФорму(Параметры) Экспорт
// Здесь может быть вызов защищенного модуля
ИнтеграцияСатурнВызовСервера.ИнициализироватьДанные(Параметры);
КонецПроцедуры
#КонецОбласти
#КонецЕсли
Если платформа из-за старого кэша «считает», что модуль должен быть пустым для текущего режима запуска, а в коде присутствуют не закрытые области препроцессора, возникает ошибка (1,1). Поэтому при разработке или адаптации таких модулей важно следить за парностью директив #Если и #КонецЕсли.
Для окончательного устранения проблемы и предотвращения ее появления в будущем, мы рекомендуем:
Проанализировав ситуацию, можно сделать вывод: ошибка «логическое завершение текста» — это почти всегда признак того, что платформа «запуталась» в своих временных файлах или метаданных. Системный подход к очистке и проверке целостности конфигурации позволяет решить эту проблему без вмешательства в программный код модуля.