При разработке и сопровождении тиражных решений на платформе 1С:Предприятие разработчики нередко выпускают комплекты поставки с сокрытием части исходных текстов. В таких модулях платформа хранит только скомпилированный байт-код. Однако на практике часто возникает неприятная ситуация: когда разработчик берет информационную базу клиента (например, через выгрузку .dt), снимает конфигурацию с поддержки и загружает сверху полный файл конфигурации .cf с исходными кодами, некоторые модули остаются недоступными для редактирования с системным сообщением «Исходный текст модуля отсутствует».
Разберем причины возникновения этой ошибки и детально рассмотрим несколько способов ее устранения.
Проанализируем механизм хранения метаданных платформой. Когда модуль поставляется без исходных текстов, во внутренних таблицах базы данных (Config, ConfigCAS) сохраняется скомпилированный бинарный образ вместо текстового потока. Если впоследствии конфигурация снимается с поддержки и поверх нее загружается новый файл .cf или выполняется неполное сравнение и объединение, платформа может сохранить старый внутренний идентификатор или ссылку на бинарный блок данных. В итоге текстовое представление модуля не создается, и конфигуратор блокирует его открытие.
Рассмотрим самый быстрый способ восстановления доступа к исходному коду без потери пользовательских данных в базе. Для этого воспользуемся встроенным механизмом выгрузки конфигурации в файлы XML/BSL с последующей заменой бинарных заглушек.
Разберем по шагам последовательность действий:
C:\ConfigDump\)..bin), удаляет их и создает взамен пустые файлы исходных текстов с расширением .bsl в кодировке UTF-8:
Путь = "C:\ConfigDump\"; // Укажите путь к папке выгрузки
СписокФайлов = НайтиФайлы(Путь, "*.bin", Истина);
Для Каждого текФайл Из СписокФайлов Цикл
Размер = текФайл.Размер();
// Проверяем размер бинарного файла-заглушки
Если Размер <> 1285 Тогда
Продолжить;
КонецЕсли;
// Создаем пустой BSL-файл модуля в кодировке UTF-8
ЗаписьТекста = Новый ЗаписьТекста(текФайл.Путь + текФайл.ИмяБезРасширения + ".bsl", КодировкаТекста.UTF8);
ЗаписьТекста.Закрыть();
// Удаляем исходный бинарный файл
УдалитьФайлы(текФайл.ПолноеИмя);
КонецЦикла;
.cf с исходным кодом разработчика через меню Сравнить, объединить с конфигурацией из файла... или Загрузить конфигурацию из файла....Если клиентская база все еще находится на поддержке, не следует преждевременно снимать ее с замка. Платформа 1С корректно заменяет закрытые модули открытыми, если процедура выполняется штатным путем обновления, а не простой перезаписью файла конфигурации.
Выполним следующие действия:
.cf (или файл обновления .cfu) той же или более свежей версии, но с включенными исходными текстами всех модулей.Если в базе повреждена структура внутренних таблиц конфигурации и предыдущие способы не дали результата, наиболее надежным вариантом будет перенос пользовательских данных в чистую базу:
.cf с открытыми исходными текстами.Такой подход полностью исключает наличие скрытых или поврежденных бинарных блоков метаданных в таблицах базы данных.