После аварийного завершения работы сервера, сбоев дисковой подсистемы или некорректного обновления разработчики нередко сталкиваются с ситуацией, когда конфигурация 1С повреждается на уровне отдельных объектов метаданных. При попытке открыть поврежденный модуль, сохранить изменения или выполнить сравнение и объединение конфигураций система падает с критической ошибкой вида «Файл не обнаружен 'C:\Users\...\AppData\Local\Temp\....tmp'».
При этом стандартные средства администрирования — тестирование и исправление, очистка локального кэша, выгрузка и загрузка файла .dt или проверка физической целостности базы данных в СУБД — не приносят результата. Разберем причины возникновения этой проблемы на низком уровне и подробно рассмотрим эффективные сценарии восстановления работоспособности конфигурации.
Выясним причину такого поведения платформы. Внутренняя структура конфигурации хранится в системных таблицах СУБД: Config (основная конфигурация), ConfigSave (редактируемая конфигурация с несохраненными изменениями) и PARAMS. Каждая часть метаданных (структура объектов, модули, формы, макеты) упакована алгоритмом Deflate в виде бинарных блоков (BLOB). Когда происходит сбой, данные внутри бинарного поля повреждаются или обнуляются. Платформа 1С пытается прочитать поток, распаковать его во временный файл операционной системы, но из-за повреждения архива или нулевого размера декомпрессия завершается сбоем, временный файл не формируется, и конфигуратор выдает ошибку отсутствия файла .tmp.
Проанализируем ситуацию: если ошибка возникает только при редактировании конфигурации, а рабочая база в режиме предприятия запускается штатно, повреждение, скорее всего, затронуло только таблицу несохраненных изменений ConfigSave.
Разберем по шагам, как очистить поврежденные временные данные:
-- Для Microsoft SQL Server:
DELETE FROM ConfigSave;
Если доступ к СУБД ограничен или требуется выполнить откат средствами платформы, воспользуемся пакетным запуском конфигуратора с ключом возврата к конфигурации базы данных:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "ServerName\BaseName" /RollbackCfg /N "Admin" /P "Password"
Параметр /RollbackCfg принудительно возвращает конфигурацию к последнему сохраненному состоянию конфигурации базы данных, очищая временные некорректные потоки.
Если повреждение находится в основной конфигурации (в таблице Config), платформа будет завершать работу аварийно при каждом обращении к проблемному объекту. Чтобы заменить поврежденную запись, необходимо точно определить ее идентификатор (GUID).
Рассмотрим, как локализовать и устранить сбой на уровне SQL:
EXCP и обращений к базе данных DBMSSQL / DBPOSTGRES.SELECT к таблице Config непосредственно перед ошибкой и фиксируем имя поля FileName.
UPDATE TargetDB.dbo.Config
SET TargetDB.dbo.Config.BinaryData = SourceDB.dbo.Config.BinaryData
FROM TargetDB.dbo.Config
INNER JOIN SourceDB.dbo.Config
ON TargetDB.dbo.Config.FileName = SourceDB.dbo.Config.FileName
WHERE TargetDB.dbo.Config.FileName = 'ИДЕНТИФИКАТОР_ПОВРЕЖДЕННОГО_ОБЪЕКТА';
Если конфигуратор позволяет выгрузить конфигурацию в файлы, мы можем заменить битый объект на уровне исходных кодов.
.cf в отдельную папку.ИнвентаризацияТоваров) и копируем соответствующий файл модуля или структуры из эталонной выгрузки с заменой.Когда интерактивное сравнение и объединение конфигураций падает из-за невозможности прочитать свойства поврежденного объекта, помогает полная перезагрузка конфигурации в обход интерактивного окна сравнения.
configuration.cf.
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "ServerName\BaseName" /LoadCfg "C:\Releases\configuration.cf" /UpdateDBCfg /N "Admin" /P "Password"
Параметр /LoadCfg полностью перезаписывает структуру метаданных, заменяя все поврежденные бинарные потоки в таблице Config без выполнения предварительного сравнения модулей.
Если повреждены несколько взаимосвязанных потоков метаданных и конфигурация не поддается автоматическому разбору, наиболее надежным решением является сборка новой рабочей конфигурации:
.cf..cf в рабочую базу целиком через режим Конфигурация → Загрузить конфигурацию из файла... (без использования режима сравнения и объединения).Важно: чтобы избежать подобных ситуаций в будущем, настройте автоматическое регулярное резервное копирование как на уровне СУБД (дампы транзакций и полные бэкапы), так и на уровне ежедневной выгрузки конфигурации в файл .cf перед внесением любых изменений.