Как исправить ошибку «Исходный текст модуля отсутствует» при загрузке исходного кода в 1С?

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

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

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

Почему возникает блокировка модулей

Проанализируем механизм хранения метаданных платформой. Когда модуль поставляется без исходных текстов, во внутренних таблицах базы данных (Config, ConfigCAS) сохраняется скомпилированный бинарный образ вместо текстового потока. Если впоследствии конфигурация снимается с поддержки и поверх нее загружается новый файл .cf или выполняется неполное сравнение и объединение, платформа может сохранить старый внутренний идентификатор или ссылку на бинарный блок данных. В итоге текстовое представление модуля не создается, и конфигуратор блокирует его открытие.

Способ 1. Восстановление через выгрузку конфигурации в файлы и скрипт 1С

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

Разберем по шагам последовательность действий:

  1. Открываем информационную базу в режиме «Конфигуратор».
  2. В главном меню выбираем пункт Конфигурация → Выгрузить конфигурацию в файлы... и указываем пустой каталог на диске (например, C:\ConfigDump\).
  3. Создаем внешнюю обработку или выполняем во встроенном языке следующий программный код, который находит служебные бинарные файлы закрытых модулей (с расширением .bin), удаляет их и создает взамен пустые файлы исходных текстов с расширением .bsl в кодировке UTF-8:

Путь = "C:\ConfigDump\"; // Укажите путь к папке выгрузки
СписокФайлов = НайтиФайлы(Путь, "*.bin", Истина);    

Для Каждого текФайл Из СписокФайлов Цикл
    Размер = текФайл.Размер();
    // Проверяем размер бинарного файла-заглушки
    Если Размер <> 1285 Тогда
        Продолжить;
    КонецЕсли;
    
    // Создаем пустой BSL-файл модуля в кодировке UTF-8
    ЗаписьТекста = Новый ЗаписьТекста(текФайл.Путь + текФайл.ИмяБезРасширения + ".bsl", КодировкаТекста.UTF8);
    ЗаписьТекста.Закрыть();
    
    // Удаляем исходный бинарный файл
    УдалитьФайлы(текФайл.ПолноеИмя);
КонецЦикла;
  1. Возвращаемся в Конфигуратор и выбираем пункт меню Конфигурация → Загрузить конфигурацию из файлов..., указав путь к обработанному каталогу.
  2. Применяем изменения в структуре метаданных через Конфигурация → Обновить конфигурацию базы данных (клавиша F7).
  3. Теперь модули станут доступны как обычные пустые модули, и в конфигурацию можно корректно накатить полный файл .cf с исходным кодом разработчика через меню Сравнить, объединить с конфигурацией из файла... или Загрузить конфигурацию из файла....

Способ 2. Корректное обновление через механизм поддержки

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

Выполним следующие действия:

  1. Формируем у разработчика файл поставки .cf (или файл обновления .cfu) той же или более свежей версии, но с включенными исходными текстами всех модулей.
  2. В клиентской базе переходим в меню Конфигурация → Поддержка → Обновить конфигурацию....
  3. Выбираем вариант Выбор файла обновления и указываем подготовленный файл конфигурации с исходными кодами.
  4. В окне сравнения и объединения убеждаемся, что модули сопоставлены, и завершаем процесс обновления. При таком сценарии платформа штатно пересоздает метаданные и заменяет скомпилированные структуры на открытый текст.

Способ 3. Перенос данных в пустую базу эталонной конфигурации

Если в базе повреждена структура внутренних таблиц конфигурации и предыдущие способы не дали результата, наиболее надежным вариантом будет перенос пользовательских данных в чистую базу:

  1. Создаем новую информационную базу и полностью загружаем в нее рабочий файл .cf с открытыми исходными текстами.
  2. Обновляем конфигурацию базы данных.
  3. Выгружаем данные из клиентской базы с помощью стандартной обработки Выгрузка и загрузка данных XML (при условии полного совпадения структур метаданных) или настраиваем правила конвертации данных.
  4. Загружаем выгруженный XML-файл в новую базу.

Такой подход полностью исключает наличие скрытых или поврежденных бинарных блоков метаданных в таблицах базы данных.

← На главную