Где используется объект 1С: поиск ссылок в конфигурации и в данных
Содержание
Чтобы проверить ссылки на объект метаданных, в Конфигураторе щёлкните по нему правой кнопкой в дереве конфигурации и выберите Поиск ссылок на объект. Чтобы узнать, где используется конкретный элемент справочника или документ в данных, нужна платформенная функция НайтиПоСсылкам(): на ней работают удаление помеченных объектов в типовых конфигурациях и любая простая внешняя обработка поиска ссылок.
Это два разных вопроса. Первый звучит так: «какие реквизиты, формы и модули завязаны на справочник Контрагенты?». Второй: «в каких документах выбран контрагент ООО „Ромашка“?». Инструменты для них тоже разные. Ниже оба случая по порядку, плюс запросы, текстовый поиск по файлам конфигурации и особенности распределённой базы.
Что именно ищем: ссылки в конфигурации или в данных
Перед поиском определите, что вам нужно.
| Задача | Где искать | Инструмент |
|---|---|---|
| Можно ли удалить реквизит, справочник, общий модуль | Конфигуратор | Поиск ссылок на объект |
| Где в коде вызывается процедура или упоминается объект | Конфигуратор, файлы | Глобальный поиск, выгрузка в файлы |
| В каких документах выбран конкретный элемент | Режим 1С:Предприятие | Удаление помеченных, НайтиПоСсылкам() |
| Есть ли ссылка в одном конкретном документе или регистре | Режим 1С:Предприятие | Запрос |
| Какие документы ссылаются на удалённые элементы | Режим 1С:Предприятие, Конфигуратор | Запрос на битые ссылки, тестирование и исправление |
💡 Конфигуратор ничего не знает о ваших данных. Он видит только метаданные: типы реквизитов, формы, права, код. Поиск ссылок в Конфигураторе никогда не покажет, в каком документе выбран контрагент.
Поиск ссылок на объект метаданных в Конфигураторе
Это первый шаг перед удалением или переименованием реквизита, справочника, перечисления или общего модуля.
Как запустить поиск
- Откройте Конфигуратор и дерево конфигурации (
Конфигурация → Открыть конфигурацию). - Найдите объект. Быстрее всего — встать в дерево и начать набирать имя.
- Щёлкните по объекту правой кнопкой мыши.
- Выберите
Поиск ссылок на объект.
Поиск работает не только по объектам верхнего уровня. Его можно запустить для отдельного реквизита документа, реквизита табличной части, значения перечисления, макета, общей формы.
Что попадает в результаты
- 📌 реквизиты других объектов, у которых этот объект указан в типе;
- 📌 составные типы и определяемые типы;
- 📌 формы и их элементы, связанные с объектом;
- 📌 подсистемы, в состав которых он входит;
- 📌 роли, где на него заданы права;
- 📌 планы обмена, критерии отбора, функциональные опции и другие объекты, которые ссылаются на него в свойствах.
Чего Конфигуратор не найдёт
Обращения из кода в виде строки поиск ссылок не видит. Если в модуле написано Метаданные.Справочники["Контрагенты"] или текст запроса собирается из кусков, связь не обнаружится.
Для кода используйте глобальный поиск: Правка → Глобальный поиск или Ctrl+Shift+F. Ищите имя объекта во всех модулях, текстах запросов и макетах. Запускайте оба поиска перед любым удалением.
Удаление реквизита из конфигурации — это удаление колонки из таблицы базы данных вместе со всеми значениями. Перед обновлением конфигурации базы данных сделайте выгрузку в .dt.
Как разобрать список найденных ссылок
Результаты поиска выводятся в отдельное окно со списком. Каждая строка — место, где объект упоминается.
Что с ним делать:
- Двойной щелчок по строке переводит к месту в дереве конфигурации или к свойству, где задана ссылка.
- Идите по списку сверху вниз и решайте по каждой строке: убрать тип из реквизита, удалить элемент формы, снять права в роли.
- После правок запустите поиск ещё раз. Пустой список — сигнал, что объект можно удалять.
Если объект на поддержке, правка чужих объектов потребует снять их с замка. Это усложнит следующие обновления типовой. Для доработанной типовой лучше пометить объект префиксом Удалить в имени и оставить его в покое, чем вычищать ссылки по всей конфигурации. Так делает и сама фирма 1С в типовых: устаревшие реквизиты получают имена вида УдалитьСклад.
Когда вы удаляете объект, на который ещё есть ссылки, Конфигуратор сам проверит их и выведет список мест использования. Удалить такой объект не получится, пока ссылки не убраны. Это та же проверка, просто запущенная автоматически.
Где используется элемент справочника: штатные средства в режиме 1С:Предприятие
Теперь задача про данные: найти все документы, где выбран конкретный контрагент, номенклатура или договор.
Удаление помеченных объектов
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11 и другие) обработка находится в разделе Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов.
Как использовать её для поиска ссылок:
- Поставьте пометку удаления на элемент (клавиша
Delв списке). - Откройте обработку удаления помеченных.
- Выберите режим, где можно отметить конкретные объекты, и отметьте только свой элемент.
- Запустите удаление. Если на объект есть ссылки, программа его не удалит и покажет места использования: документы, регистры, другие справочники.
Если ссылок нет, объект будет удалён окончательно. Используйте этот способ, только когда удаление вас и так устраивает. Если нужна просто проверка — берите обработку или запрос из разделов ниже.
В нетиповой конфигурации без БСП есть платформенная функция Все функции → Стандартные → Удаление помеченных объектов. Меню «Все функции» включается в Сервис и настройки → Параметры. Логика та же: объекты со ссылками остаются, по ним выводится список мест использования.
Структура подчинённости
Для документов есть ещё один инструмент: структура подчинённости. Она показывает документы, введённые на основании текущего, и его основание. Это удобно для цепочек «заказ → реализация → счёт-фактура», но это не полный поиск ссылок. Документ, в котором ваш документ указан в обычном реквизите (без ввода на основании), в структуре может не появиться.
Внешняя обработка на функции НайтиПоСсылкам
Самый надёжный способ проверить, есть ли ссылки на объект в данных, ничего не удаляя. Функция НайтиПоСсылкам() принимает массив ссылок и возвращает таблицу значений с колонками:
Ссылка— что искали;Данные— где нашли (ссылка на документ или ключ записи регистра);Метаданные— объект метаданных, где нашли.
Функция доступна на сервере, в толстом клиенте и во внешнем соединении. Запускайте её под пользователем с полными правами, иначе часть таблиц может не проверяться.
Код серверной части
Создайте внешнюю обработку
в Конфигураторе (Файл → Новый → Внешняя обработка). Добавьте реквизит формы ИскомаяСсылка с составным типом, включив нужные справочники и документы. В модуль формы вставьте:
&НаКлиенте
Процедура НайтиСсылки(Команда)
Если Не ЗначениеЗаполнено(ИскомаяСсылка) Тогда
Сообщить("Выберите объект для поиска.");
Возврат;
КонецЕсли;
Найдено = НайтиСсылкиНаСервере(ИскомаяСсылка);
Если Найдено.Количество() = 0 Тогда
Сообщить("Ссылок не найдено.");
КонецЕсли;
Для Каждого Описание Из Найдено Цикл
Сообщить(Описание);
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция НайтиСсылкиНаСервере(Ссылка)
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Ссылка);
ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);
Результат = Новый Массив;
Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл
Результат.Добавить(СтрокаТаблицы.Метаданные.ПолноеИмя() + ": "
+ Строка(СтрокаТаблицы.Данные));
КонецЦикла;
Возврат Результат;
КонецФункции
Создайте команду формы НайтиСсылки, привяжите её к процедуре и вынесите кнопку на форму. Сохраните обработку и откройте её в режиме 1С:Предприятие через Файл → Открыть.
Что важно знать о НайтиПоСсылкам
- ⏱ Функция обходит все таблицы, где тип реквизита допускает искомую ссылку. На большой базе поиск по популярному контрагенту идёт минутами.
- 📦 Передавайте сразу массив из нескольких ссылок, если проверяете группу объектов. Это один проход вместо десяти.
- 🔁 Объект сам на себя тоже может ссылаться (например, реквизит
Родительу подчинённых элементов). Такие строки отфильтруйте, сравнивДанныеиСсылка. - 📋 Записи регистров приходят как ключи записей. Для регистров накопления в строке будет регистратор, это обычно и есть нужный документ.
Поиск ссылок на объект по объекту плюс глобальный поиск по коду (Ctrl+Shift+F).НайтиПоСсылкам(). Ничего не меняет в базе.ВЫБРАТЬ ПЕРВЫЕ 1 — самый быстрый вариант.Проверка ссылок запросом: точечно и на битые ссылки
Запрос выгоднее НайтиПоСсылкам(), когда вы знаете, где искать. Проверить один вид документа можно за секунды даже на крупной базе. Запросы удобно выполнять в консоли запросов (внешняя обработка, которая есть почти у каждого специалиста по 1С).
Есть ли ссылка в шапке документа
ВЫБРАТЬ ПЕРВЫЕ 1
Реализация.Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Контрагент = &Контрагент
ПЕРВЫЕ 1 нужен, чтобы СУБД остановилась на первой найденной записи. Для ответа «есть или нет» больше не нужно.
Есть ли ссылка в табличной части
ВЫБРАТЬ РАЗЛИЧНЫЕ
Товары.Ссылка КАК Документ
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Номенклатура = &Номенклатура
Табличная часть — отдельная таблица в базе. Поиск по шапке её не захватывает, проверяйте её отдельным запросом.
Поиск битых ссылок
Битая ссылка — реквизит хранит ссылку на объект, которого в базе уже нет. В форме документа такое поле показывает <Объект не найден> и внутренний идентификатор. Обычно это следствие непосредственного удаления, неудачного обмена или загрузки данных.
ВЫБРАТЬ
Реализация.Ссылка,
Реализация.Контрагент
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
И Реализация.Контрагент.Ссылка ЕСТЬ NULL
Логика простая: поле заполнено, но при обращении к самому объекту соединение ничего не находит.
Массово по всей базе битые ссылки проверяет Тестирование и исправление в Конфигураторе (Администрирование → Тестирование и исправление). Включите пункт проверки ссылочной целостности и выберите действие для ссылок на несуществующие объекты: создавать объекты, очищать ссылки или не изменять.
Тестирование с исправлением требует монопольного доступа: все пользователи должны выйти из базы. Запускайте его вечером или в выходной и только после резервной копии.
💡 Режим «Создавать объекты» безопаснее, чем «Очищать ссылки». Появятся элементы-заглушки, и вы потом сами решите, на что их заменить. Очищенную ссылку восстановить можно уже только из копии.
Текстовый поиск по файлам конфигурации
Когда встроенных поисков мало (строковые обращения к метаданным, сравнение двух баз, поиск по сотне объектов сразу), выгрузите конфигурацию в файлы и ищите обычными средствами.
Выгрузка
В Конфигураторе: Конфигурация → Выгрузить конфигурацию в файлы. Укажите пустую папку. Получится набор XML-файлов и модулей .bsl.
То же из командной строки, без открытия интерфейса:
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /DumpConfigToFiles "D:\Dump\Buh"
Путь к 1cv8.exe и номер платформы подставьте свои. Для серверной базы вместо /F используется /S "сервер\имябазы".
Как искать
В XML-описаниях типы реквизитов записаны по-английски: ссылка на справочник Контрагенты выглядит как cfg:CatalogRef.Контрагенты, на документ — cfg:DocumentRef.ИмяДокумента. В коде и текстах запросов — привычное Справочник.Контрагенты.
Поиск в Windows через PowerShell:
Get-ChildItem -Path "D:\Dump\Buh" -Recurse -Include *.xml,*.bsl |
Select-String -Pattern "Контрагенты" |
Select-Object Path, LineNumber -Unique
В Linux или WSL то же самое делает grep -rn "Контрагенты" /mnt/d/Dump/Buh. Удобнее всего открыть папку в редакторе кода с поиском по проекту: видно контекст каждой находки.
💡 Есть и более лёгкий вариант без выгрузки: Конфигурация → Отчет по конфигурации. Он сохраняет структуру метаданных в один текстовый файл, где удобно искать типы реквизитов. Код модулей в него по умолчанию не попадает.
Особенности поиска в распределённой информационной базе
В РИБ данные живут в нескольких базах сразу: центральный узел и периферийные. Поиск ссылок везде одинаковый, но картина неполная.
Что учесть:
- 🌐
НайтиПоСсылкам(), запросы и удаление помеченных видят только текущую базу. Документы, созданные в магазине или филиале и ещё не пришедшие в центр, в результат не попадут. - 🔄 Перед поиском проведите полный цикл обмена со всеми узлами: выгрузка и загрузка в обе стороны. Только после этого результату в центральном узле можно доверять.
- 🗑 Удалять объекты лучше в одном месте, обычно в центральном узле, и после обмена. Если удалить элемент в центре, пока на периферии на него ссылаются ещё не выгруженные документы, после загрузки в центре появятся битые ссылки.
- 🧩 Конфигурация в РИБ меняется только в центральном узле, периферия получает её с обменом. Поиск ссылок на объект метаданных делайте там же.
Если битые ссылки после обмена уже появились, ищите их запросом из предыдущего раздела в узле, куда пришли данные. Затем выясните, в каком узле объект ещё существует. Повторная регистрация этого объекта к обмену в исходном узле обычно возвращает его в остальные базы.
Частые вопросы
Почему поиск ссылок в Конфигураторе пустой, а объект при удалении не удаляется?
НайтиПоСсылкам() или обработку удаления помеченных.Найдёт ли НайтиПоСсылкам ссылку в реквизите типа «Строка»?
Можно ли запустить поиск ссылок в базе, к которой есть только тонкий клиент?
НайтиПоСсылкам() в серверной процедуре, а тонкий клиент лишь показывает результат. Нужны права на открытие внешних обработок.