В процессе эксплуатации или после масштабного обновления конфигураций 1С (особенно тех, что работают в режиме совместимости 8.2) пользователи и разработчики часто сталкиваются с неприятной ситуацией: элемент справочника, который всегда был предопределенным, вдруг «теряет» этот статус. В интерфейсе программы это выглядит как обычный элемент, часто помеченный на удаление, при этом в конфигураторе этот же предопределенный элемент существует, но система их «не видит» как одно целое. Проанализируем причины этой проблемы и разберем по шагам все доступные способы восстановления связи.
Для начала разберем техническую суть проблемы. В современных версиях платформы (8.3.3 и выше без режима совместимости) существует свойство ИмяПредопределенныхДанных, которое позволяет связывать объекты по строковому идентификатору. Однако в режиме совместимости 8.2 эта связь осуществляется исключительно по внутреннему идентификатору — GUID (UUID).
Если в процессе обновления или некорректного объединения конфигураций предопределенный элемент в метаданных был удален и создан заново, его УникальныйИдентификатор изменился. При запуске информационной базы платформа ищет в таблице справочника запись с конкретным GUID, прописанным в метаданных. Если не находит — создает новую запись. В итоге в базе данных оказывается два элемента: один «старый» (с накопленными ссылками в документах, но без признака предопределенности) и один «новый» (предопределенный, но без истории движений). Разберем, как исправить эту ситуацию.
Это наиболее безопасный и «штатный» путь, который подходит в большинстве случаев, когда данных в базе уже много. Рассмотрим этот алгоритм подробнее:
ВычетыПоНДФЛ) действительно два элемента. Один из них будет иметь значок предопределенного (с «шариком»), а второй — выглядеть как обычный пользовательский элемент.Поиск и замена значений (ее можно найти на ИТС или в составе БСП как Поиск и удаление дублей). Выберем «старый» элемент как заменяемый, а «новый» предопределенный — как правильный.НачислениеЗарплаты, РегистрыРасчета и других объектах. После нажатия кнопки «Заменить» все ссылки перейдут на новый предопределенный элемент.Если нам принципиально важно, чтобы «тот самый» элемент из базы стал предопределенным (например, если ссылок слишком много и замена идет крайне долго), мы можем пойти путем программного создания объекта с нужным GUID. Выясним, как это сделать.
Сначала нам нужно узнать УникальныйИдентификатор, который ожидает конфигурация. Это можно сделать, выгрузив конфигурацию в файлы или воспользовавшись методом Справочники.ИмяСправочника.ПолучитьСсылку(). Проанализируем пример кода:
// Узнаем, какой GUID у предопределенного элемента в метаданных
ИскомыйGUID = Справочники.ВычетыПоНДФЛ.Код126.УникальныйИдентификатор();
// Проверим, есть ли объект с таким идентификатором в базе
СсылкаНаОбъект = Справочники.ВычетыПоНДФЛ.ПолучитьСсылку(ИскомыйGUID);
Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда
// Создаем новый объект и принудительно назначаем ему нужный GUID
НовыйЭлемент = Справочники.ВычетыПоНДФЛ.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(СсылкаНаОбъект);
НовыйЭлемент.Наименование = "Вычет на ребенка (восстановленный)";
НовыйЭлемент.Записать();
Сообщить("Связь восстановлена успешно!");
КонецЕсли;
После выполнения этого кода система обнаружит, что GUID записи в базе совпал с GUID из метаданных, и свойство Предопределенный автоматически примет значение Истина.
Рассмотрим более «экзотический», но эффективный метод подмены идентификатора существующего элемента. Этот способ позволяет превратить обычный элемент в предопределенный без массовой замены ссылок в документах.
<Ref>...</Ref>.GUID, который принадлежит предопределенному элементу в текущей конфигурации.Иногда проблема кроется в настройках самого справочника в конфигураторе. Проанализируем свойство Обновление предопределенных данных. Оно может принимать три значения:
GUID в базе и метаданных совпадают.Рекомендация: Если элементы «отвалились», попробуйте временно установить значение «Обновлять», запустить базу монопольно, а затем вернуть значение «Авто».
Почему нельзя просто оставить «битый» элемент и создать новый? Выясним причину на примере НДФЛ, упомянутого в сообщениях форума. Программные модули типовых конфигураций (ЗУП, УПП) обращаются к вычетам через точку: Справочники.ВычетыПоНДФЛ.Код126. Если связь нарушена, этот вызов вернет ПустаяСсылка.
В результате:
Таким образом, использование обработки «Поиск и замена значений» является самым надежным методом для сохранения целостности учета, а программная установка GUID — самым быстрым способом «реанимации» связи предопределенных данных в условиях режима совместимости 8.2.