Как исправить ошибку «Тип не определен» с GUID в 1С:Предприятие

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

Каждый администратор или разработчик 1С хотя бы раз сталкивался с ситуацией, когда стабильно работающая база данных внезапно начинает давать критические сбои. Одним из самых неприятных и загадочных симптомов является системная ошибка вида «Тип не определен '0819244e-3ff8-40b9-bfc4-091f5f4763a0'» (конкретный GUID может отличаться). Ошибка может лавинообразно возникать при открытии любых печатных форм, проведении документов или даже при попытке запустить систему в режиме «1С:Предприятие».

При этом стандартная утилита тестирования физической целостности chdbfl.exe рапортует об отсутствии ошибок, а запуск тестирования и исправления (ТиИ) в локальном режиме приводит к аварийному завершению работы платформы без каких-либо объяснений. В этой статье мы подробно разберем причины возникновения этой проблемы и рассмотрим проверенные практические способы её решения.

Выясняем причину: откуда берется неизвестный GUID?

Любой объект в конфигурации 1С (справочник, документ, константа, реквизит или общий модуль) на уровне базы данных идентифицируется уникальным набором символов — GUID (UUID). Ошибка «Тип не определен» означает, что платформа пытается обратиться к описанию типа данных по его уникальному идентификатору, но физически этого описания в конфигурации базы данных (в системных таблицах СУБД) уже нет или оно повреждено.

Проанализируем основные причины, приводящие к этому состоянию:

  1. Некорректное динамическое («демоническое») обновление. Это самая частая причина. Когда разработчик обновляет конфигурацию «на лету» при работающих пользователях, платформа создает временные версии метаданных. При сетевых сбоях, зависании процессов или экстренном отключении клиентов структура таблиц в СУБД рассинхронизируется с актуальной версией конфигурации.
  2. Повреждение кэша метаданных. Платформа активно кэширует структуру конфигурации на стороне сервера 1С и на локальных компьютерах пользователей. Если кэш поврежден, клиентское приложение пытается вызвать старый тип данных, которого физически больше нет в обновленной базе.
  3. Аварийное завершение транзакций СУБД. Внезапное отключение питания, сбой сетевого оборудования или отключение внешнего накопителя (если база временная или тестовая) в момент реструктуризации таблиц оставляет базу данных в промежуточном, несогласованном состоянии.

Рассмотрим подробнее эффективные методы исправления этой ситуации, начиная от самых простых и безопасных и заканчивая низкоуровневой работой с СУБД.

---

Решение 1. Принудительная реструктуризация (метод «фиктивной константы»)

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

Разберем этот процесс по шагам:

  1. Запустите информационную базу в режиме «Конфигуратор».
  2. Откройте дерево метаданных и найдите ветку Константы (или любой другой простой объект, например, справочник, но с константами работать безопаснее всего).
  3. Добавьте новую фиктивную константу. Назовите её, например, ВременнаяКонстантаДляРеструктуризации. Тип данных можно оставить по умолчанию (например, Строка).
  4. Нажмите клавишу F7 (или выберите меню «Конфигурация» — «Обновить конфигурацию базы данных»). Платформа обнаружит изменение структуры и запустит процесс реструктуризации таблиц. В этот момент заново сформируются все внутренние индексы и таблицы типов.
  5. Запустите базу данных в режиме «1С:Предприятие» под учетной записью администратора, чтобы применились все отложенные обработчики обновления конфигурации.
  6. Вернитесь в Конфигуратор, удалите созданную константу ВременнаяКонстантаДляРеструктуризации и снова выполните обновление конфигурации базы данных (F7).

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

---

Решение 2. Загрузка конфигурации из здорового файла конфигурации (*.cf)

Если добавление константы не помогает или Конфигуратор вылетает с ошибкой при попытке обновиться, можно прибегнуть к полной перезаписи таблиц конфигурации. Для этого нам понадобится заведомо исправный файл конфигурации. Его можно получить, выгрузив из резервной копии этой же базы (созданной до возникновения ошибки) или из аналогичной рабочей копии.

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

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

---

Решение 3. Полная очистка локального и серверного кэша

Часто база данных на самом деле исправна, но платформа продолжает хранить битые идентификаторы типов во временных файлах на компьютерах пользователей или на сервере приложений.

Проанализируем, как правильно очистить кэш на всех уровнях:

  1. Очистка кэша на стороне клиента: Самый надежный способ — удалить базу из списка запуска 1С и добавить её заново. При этом создается новая уникальная рабочая папка для кэширования. Если нужно очистить кэш вручную, удалите папки по адресу:
    %userprofile%\AppData\Local\1C\1Cv8
    %userprofile%\AppData\Roaming\1C\1Cv8
  2. Очистка кэша на стороне сервера приложений 1С:
    • Остановите службу «Агент сервера 1С:Предприятия» через консоль служб Windows (services.msc) или выполнив команду остановки в Linux.
    • Перейдите в каталог хранения данных сервера (по умолчанию для Windows это C:\Program Files\1cv8\srvinfo).
    • Найдите каталог нужной информационной базы (он называется так же, как её внутренний идентификатор на сервере).
    • Очистите внутри этой папки каталоги временных файлов: snccntry, DBNameCache и файлы кэша сеансов.
    • Запустите службу «Агент сервера 1С:Предприятия».

---

Решение 4. Низкоуровневая очистка «хвостов» обновления в СУБД

В случае клиент-серверного варианта работы (например, на MS SQL Server или PostgreSQL) незавершенное динамическое обновление оставляет записи в системных таблицах Config и ConfigSave. Платформа видит эти записи и считает, что обновление еще продолжается, из-за чего блокирует штатное чтение типов метаданных.

Для исправления ситуации на уровне СУБД мы можем выполнить специальные SQL-запросы, которые удалят маркеры незавершенных транзакций обновления конфигурации.

Выполним следующий SQL-скрипт в консоли администрирования вашей СУБД (например, через PGAdmin для PostgreSQL или SQL Server Management Studio для MS SQL):


-- Удаляем маркеры незавершенных динамических обновлений
DELETE FROM config WHERE FileName = 'commit';
DELETE FROM config WHERE FileName = 'dbStruFinal';

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

Важное примечание для пользователей PostgreSQL: Если вы используете PostgreSQL, убедитесь, что база данных развернута на специализированной сборке СУБД, адаптированной под требования 1С (например, от компании Postgres Professional). Стандартные сборки СУБД PostgreSQL без патчей 1С не поддерживают специфические типы данных (такие как mchar и mvarchar), что также может приводить к ошибкам неопределенности типов при переносе или восстановлении баз данных из резервных копий.

← На главную