Как восстановить связь элемента справочника с предопределенным объектом в режиме совместимости 8.2?

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

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

Почему происходит потеря связи в режиме 8.2

Для начала разберем техническую суть проблемы. В современных версиях платформы (8.3.3 и выше без режима совместимости) существует свойство ИмяПредопределенныхДанных, которое позволяет связывать объекты по строковому идентификатору. Однако в режиме совместимости 8.2 эта связь осуществляется исключительно по внутреннему идентификатору — GUID (UUID).

Если в процессе обновления или некорректного объединения конфигураций предопределенный элемент в метаданных был удален и создан заново, его УникальныйИдентификатор изменился. При запуске информационной базы платформа ищет в таблице справочника запись с конкретным GUID, прописанным в метаданных. Если не находит — создает новую запись. В итоге в базе данных оказывается два элемента: один «старый» (с накопленными ссылками в документах, но без признака предопределенности) и один «новый» (предопределенный, но без истории движений). Разберем, как исправить эту ситуацию.

Способ 1: Использование обработки «Поиск и замена значений»

Это наиболее безопасный и «штатный» путь, который подходит в большинстве случаев, когда данных в базе уже много. Рассмотрим этот алгоритм подробнее:

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

Способ 2: Программное восстановление через УстановитьСсылкуНового()

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

Сначала нам нужно узнать УникальныйИдентификатор, который ожидает конфигурация. Это можно сделать, выгрузив конфигурацию в файлы или воспользовавшись методом Справочники.ИмяСправочника.ПолучитьСсылку(). Проанализируем пример кода:


// Узнаем, какой GUID у предопределенного элемента в метаданных
ИскомыйGUID = Справочники.ВычетыПоНДФЛ.Код126.УникальныйИдентификатор();

// Проверим, есть ли объект с таким идентификатором в базе
СсылкаНаОбъект = Справочники.ВычетыПоНДФЛ.ПолучитьСсылку(ИскомыйGUID);
Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда
    // Создаем новый объект и принудительно назначаем ему нужный GUID
    НовыйЭлемент = Справочники.ВычетыПоНДФЛ.СоздатьЭлемент();
    НовыйЭлемент.УстановитьСсылкуНового(СсылкаНаОбъект);
    НовыйЭлемент.Наименование = "Вычет на ребенка (восстановленный)";
    НовыйЭлемент.Записать();
    Сообщить("Связь восстановлена успешно!");
КонецЕсли;

После выполнения этого кода система обнаружит, что GUID записи в базе совпал с GUID из метаданных, и свойство Предопределенный автоматически примет значение Истина.

Способ 3: Манипуляции через XML-сериализацию

Рассмотрим более «экзотический», но эффективный метод подмены идентификатора существующего элемента. Этот способ позволяет превратить обычный элемент в предопределенный без массовой замены ссылок в документах.

  1. Выгрузим «неправильный» (старый) элемент в XML-файл, используя стандартные средства 1С или простую обработку.
  2. Откроем полученный файл в текстовом редакторе. Найдем узел <Ref>...</Ref>.
  3. Заменим значение внутри этого узла на тот GUID, который принадлежит предопределенному элементу в текущей конфигурации.
  4. Загрузим XML обратно в базу. Платформа создаст объект с новым идентификатором, сохранив все значения реквизитов, и он автоматически свяжется с метаданными.
  5. Важно: после этой операции старый элемент (с прежним GUID) нужно удалить, а ссылки в базе данных все равно придется обновить один раз на новый идентификатор.

Настройка «Обновление предопределенных данных»

Иногда проблема кроется в настройках самого справочника в конфигураторе. Проанализируем свойство Обновление предопределенных данных. Оно может принимать три значения:

Рекомендация: Если элементы «отвалились», попробуйте временно установить значение «Обновлять», запустить базу монопольно, а затем вернуть значение «Авто».

Критическая важность исправления

Почему нельзя просто оставить «битый» элемент и создать новый? Выясним причину на примере НДФЛ, упомянутого в сообщениях форума. Программные модули типовых конфигураций (ЗУП, УПП) обращаются к вычетам через точку: Справочники.ВычетыПоНДФЛ.Код126. Если связь нарушена, этот вызов вернет ПустаяСсылка.

В результате:

Таким образом, использование обработки «Поиск и замена значений» является самым надежным методом для сохранения целостности учета, а программная установка GUID — самым быстрым способом «реанимации» связи предопределенных данных в условиях режима совместимости 8.2.

← На главную