Каждый разработчик 1С рано или поздно сталкивается с ситуацией, когда стандартная проверка конфигурации (Конфигурация — Проверка конфигурации) выдает пугающее сообщение: Неразрешимые ссылки на объекты метаданных — для её решения есть инструментарий поиска скрытых ссылок и отладки объектов 1С. Особое недоумение вызывает случай, когда ошибка указывает на конкретную форму, но при её открытии мы не видим никаких проблемных элементов. Более того, даже полное удаление всех кнопок, реквизитов и команд иногда не избавляет от этой ошибки. Проанализируем, почему так происходит и как эффективно устранить эти «фантомные» ссылки.
Рассмотрим ситуацию, когда форма перегружена элементами. Найти битую ссылку визуально практически невозможно. В этом случае применим проверенный дедовский метод. Удалим половину элементов формы и запустим проверку. Если ошибка исчезла — значит, проблемный объект был в удаленной части. Если осталась — продолжаем делить оставшуюся часть пополам. Рассмотрим этот процесс по шагам:
Часто выясняется, что виновата обычная Кнопка, которая не имеет явных связей, но её внутренний идентификатор или скрытое свойство ссылается на удаленный объект метаданных.
Если мы очистили форму до состояния «чистого листа», а проверка всё равно ругается, значит, проблема скрыта в свойствах, которые не отображаются в дереве элементов. Чтобы увидеть полное дерево свойств, можно применить информер по метаданным. Разберем основные места залегания таких ссылок:
Конфигуратор будет выдавать ошибку.Состав командного интерфейса. Перейдем по ссылке «Открыть». Здесь могут стоять галочки видимости для команд, относящихся к объектам, которых больше нет в базе.Посмотрим на проблему под другим углом. Ошибка может указывать на форму, но на самом деле относиться к разделу справки (Help) этой формы. Справка в 1С — это HTML-документ. Если внутри текста справки была создана гиперссылка на объект (например, v8help://...), а сам объект был переименован или удален, проверка конфигурации выдаст ошибку Неразрешимые ссылки на объекты метаданных (в формах и в справке).
Для исправления достаточно открыть редактор справки формы и перепроверить все ссылки или просто очистить содержимое справки для теста.
Когда визуальные методы бессильны, воспользуемся «тяжелой артиллерией» — анализом исходного кода формы. Подобный принцип задействует выгрузка обычных форм в xml. Рассмотрим этот алгоритм подробнее:
Catalogs\ИмяСправочника\Forms\ИмяФормы\Ext\Form.xml.Проанализировав XML, мы увидим разделы, которые Конфигуратор скрывает от нас. Например, в блоке <CommandInterface> могут остаться записи о командах, которые физически не видны в интерфейсе разработчика. Удаление таких строк вручную в XML и последующая загрузка конфигурации из файлов — радикальный, но действенный способ очистки формы.
Если время поджимает и искать конкретную причину некогда, воспользуемся методом «перезагрузки». Выясним, как быстро восстановить работоспособность:
Как правило, при ручном создании новых элементов «мусорные» ссылки из старой структуры XML не переносятся.
Иногда ошибка является ложной и вызвана некорректным состоянием локального кэша разработчика. Выполним следующие действия:
.dt.%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8)..dt.Проверка логической целостности и Проверка ссылочной целостности — для этого пригодится обработка выявления и удаления битых ссылок в 1С.Рассмотрим пример кода, который часто забывают проверить при очистке формы. Речь идет об обработчиках, назначенных программно. Хотя ошибка в проверке конфигурации чаще касается метаданных, программные ссылки тоже могут наводить на ложный след. Проанализируем установку параметров выбора:
// Пример программной установки параметров, которая может привести к ошибкам
<code>
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Статус");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Справочники.СтатусыЗаказов.Новый; // Если объект удален, здесь будет ошибка
</code>
Важный момент: согласно документации ИТС, некоторые предупреждения о неразрешимых ссылках в формах и справке могут считаться несущественными для работоспособности, если они не мешают выполнению кода. Однако для поддержания качества кода и «чистоты» конфигурации рекомендуется исправлять их вышеописанными методами.