← На главную
При обновлении типовых конфигураций 1С (таких как 1С:Бухгалтерия 8 или 1С:Зарплата и управление персоналом) администраторы и программисты иногда сталкиваются с критической ошибкой реструктуризации базы данных. В журнале регистрации или в окне сообщений выводится исключение следующего вида:
Ошибка при обновлении конфигурации: {ОбщийМодуль.ОбменСообщениямиВнутренний.Модуль(370)}: Значение не является значением объектного типа (Код)
Одновременно с этим выводится список служебных сообщений вида: Справочник.ВидыОтправляемыхДокументов: Имя предопределенного элемента не уникально: .... Проблема может возникать как при обычном обновлении через файл .cfu, так и при попытке накатить полною конфигурацию .cf или при обновлении узлов РИБ (распределенной информационной базы).
Разберем подробно причины возникновения этой неисправности и рассмотрим проверенные алгоритмы её устранения.
Причины возникновения ошибки
Проанализируем техническую суть происходящего сбоя. В платформе 1С:Предприятие 8.3 механизм работы с предопределенными элементами справочников был существенно изменен: связи задаются не только по внутреннему имени метаданных, но и через уникальные идентификаторы (GUID), хранящиеся в специальных таблицах базы данных.
К возникновению коллизии приводят следующие факторы:
- Технологический баг реструктуризации в некоторых релизах платформы 8.3. При обновлении метаданных платформа некорректно обрабатывает таблицу предопределенных элементов, из-за чего создает дублирующие записи или разрушает ссылку на объект
ЭтаКонечнаяТочка в механизме обмена сообщениями.
- Пропуск промежуточных релизов. Если обновление выполняется через несколько версий сразу («через шаг»), а разработчик типового решения менял структуру предопределенных элементов или переносил их в архивные справочники (с префиксом
Удалить...), платформа не может корректно сопоставить данные.
- Рассинхронизация узлов РИБ. Редактирование состава предопределенных элементов в подчиненном узле до получения полного файла изменений из главного узла приводит к конфликту идентификаторов.
- Повреждение ссылочной целостности базы данных. Наличие битых ссылок в служебных таблицах подсистемы «Облачный документооборот» или «Обмен сообщениями».
Решение 1: Запуск процедуры «Тестирование и исправление» в Конфигураторе
Посмотрим на наиболее эффективный и простой способ решения проблемы, который помогает в большинстве случаев без ручного редактирования кода и метаданных.
Важно: Перед выполнением любых регламентных операций обязательно создайте полную резервную копию информационной базы (выгрузку .dt или копию файла 1Cv8.1CD).
Рассмотрим пошаговый порядок действий:
- Запустите информационную базу в режиме Конфигуратор.
- Перейдите в главное меню Администрирование — Тестирование и исправление....
- Настройте флаги тестирования следующим образом:
- Реиндексация таблиц информационной базы
- Проверка логической целостности информационной базы
- Проверка ссылочной целостности информационной базы
- Реструктуризация таблиц информационной базы
- В нижнем блоке настроек «При наличии ссылок на несуществующие объекты» выберите вариант Очищать ссылки.
- В блоке «При частичной утрате объектов» выберите вариант Удалять объекты.
- Нажмите кнопку Выполнить и дождитесь полного завершения процесса. На больших базах процесс может занять продолжительное время.
- После успешного завершения тестирования повторите попытку обновления конфигурации базы данных (нажатием клавиши
F7 или через меню Конфигурация -> Обновить конфигурацию базы данных).
При повторном обновлении реструктуризация на этапе 80–90% может задерживаться дольше обычного — это нормальное поведение platforms, выполняющей пересчет и очистку поврежденных предопределенных элементов.
Решение 2: Обновление через сравнение и объединение конфигураций
Если прямое обновление продолжает завершаться ошибкой даже после тестирования, разберем альтернативный метод с использованием эталонного файла конфигурации (.cf):
- Разверните пустую или вторую технологическую базу данных той же конфигурации.
- Обновите эту вторую базу штатным образом до целевого релиза, на который не удавалось обновиться ранее.
- Выгрузите из обновленной базы файл конфигурации через меню Конфигурация — Сохранить конфигурацию в файл... (получив файл
1Cv8.cf).
- Откройте основную проблемную базу в Конфигураторе и выполните меню Конфигурация — Сравнить, объединить с конфигурацией из файла..., указав сохраненный
.cf файл.
- Согласитесь на обновление и обновление конфигурации базы данных.
- После выполнения объединения запустите Тестирование и исправление с флагами очистки битых ссылок и реструктуризации, как описано в Первом решении.
- Запустите базу в режиме 1С:Предприятие для выполнения обработчиков обновления информационной базы.
Дополнительные рекомендации при работе с РИБ и файловыми базами
Проанализируем сопутствующие технические нюансы, которые помогут предотвратить повторное появление ошибки:
- Для файловых баз danych: Перед проведением реструктуризации рекомендуется закрыть все сеансы и проверить файл базы с помощью физической утилиты
chdbfl.exe, которая находится в каталоге bin установленной платформы 1С.
- Очистка кэша платформы: Ошибка
Значение не является значением объектного типа может быть вызвана закешированными схемами метаданных. Удалите базу из списка запуска 1С и добавьте ее заново, либо вручную очистите каталоги %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8.
- Соблюдение последовательности релизов: Не выполняйте обновление через несколько версий сразу. Если необходимо обновить конфигурацию с версии 3.0.40 до 3.0.44, накатывайте промежуточные дистрибутивы
.cfu строго по цепочке, рекомендованной производителем в файле UpdInfo.txt.
- Особенности распределенных баз (РИБ): Все манипуляции по устранению дублей предопределенных элементов и реструктуризации следует выполнять исключительно в главном узле РИБ. После успешного обновления в главном узле выгрузите изменения конфигурации в подчиненные узлы через штатный обмен данными.