Где используется объект 1С: поиск ссылок в конфигурации и в данных

· 10 мин

Содержание

Чтобы проверить ссылки на объект метаданных, в Конфигураторе щёлкните по нему правой кнопкой в дереве конфигурации и выберите Поиск ссылок на объект. Чтобы узнать, где используется конкретный элемент справочника или документ в данных, нужна платформенная функция НайтиПоСсылкам(): на ней работают удаление помеченных объектов в типовых конфигурациях и любая простая внешняя обработка поиска ссылок.

Это два разных вопроса. Первый звучит так: «какие реквизиты, формы и модули завязаны на справочник Контрагенты?». Второй: «в каких документах выбран контрагент ООО „Ромашка“?». Инструменты для них тоже разные. Ниже оба случая по порядку, плюс запросы, текстовый поиск по файлам конфигурации и особенности распределённой базы.

Что именно ищем: ссылки в конфигурации или в данных

Перед поиском определите, что вам нужно.

ЗадачаГде искатьИнструмент
Можно ли удалить реквизит, справочник, общий модульКонфигураторПоиск ссылок на объект
Где в коде вызывается процедура или упоминается объектКонфигуратор, файлыГлобальный поиск, выгрузка в файлы
В каких документах выбран конкретный элементРежим 1С:ПредприятиеУдаление помеченных, НайтиПоСсылкам()
Есть ли ссылка в одном конкретном документе или регистреРежим 1С:ПредприятиеЗапрос
Какие документы ссылаются на удалённые элементыРежим 1С:Предприятие, КонфигураторЗапрос на битые ссылки, тестирование и исправление

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

Поиск ссылок на объект метаданных в Конфигураторе

Это первый шаг перед удалением или переименованием реквизита, справочника, перечисления или общего модуля.

Как запустить поиск

  1. Откройте Конфигуратор и дерево конфигурации (Конфигурация → Открыть конфигурацию).
  2. Найдите объект. Быстрее всего — встать в дерево и начать набирать имя.
  3. Щёлкните по объекту правой кнопкой мыши.
  4. Выберите Поиск ссылок на объект.

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

Что попадает в результаты

  • 📌 реквизиты других объектов, у которых этот объект указан в типе;
  • 📌 составные типы и определяемые типы;
  • 📌 формы и их элементы, связанные с объектом;
  • 📌 подсистемы, в состав которых он входит;
  • 📌 роли, где на него заданы права;
  • 📌 планы обмена, критерии отбора, функциональные опции и другие объекты, которые ссылаются на него в свойствах.

Чего Конфигуратор не найдёт

Обращения из кода в виде строки поиск ссылок не видит. Если в модуле написано Метаданные.Справочники["Контрагенты"] или текст запроса собирается из кусков, связь не обнаружится.

Для кода используйте глобальный поиск: Правка → Глобальный поиск или Ctrl+Shift+F. Ищите имя объекта во всех модулях, текстах запросов и макетах. Запускайте оба поиска перед любым удалением.

Удаление реквизита из конфигурации — это удаление колонки из таблицы базы данных вместе со всеми значениями. Перед обновлением конфигурации базы данных сделайте выгрузку в .dt.

Как разобрать список найденных ссылок

Результаты поиска выводятся в отдельное окно со списком. Каждая строка — место, где объект упоминается.

Что с ним делать:

  1. Двойной щелчок по строке переводит к месту в дереве конфигурации или к свойству, где задана ссылка.
  2. Идите по списку сверху вниз и решайте по каждой строке: убрать тип из реквизита, удалить элемент формы, снять права в роли.
  3. После правок запустите поиск ещё раз. Пустой список — сигнал, что объект можно удалять.

Если объект на поддержке, правка чужих объектов потребует снять их с замка. Это усложнит следующие обновления типовой. Для доработанной типовой лучше пометить объект префиксом Удалить в имени и оставить его в покое, чем вычищать ссылки по всей конфигурации. Так делает и сама фирма 1С в типовых: устаревшие реквизиты получают имена вида УдалитьСклад.

Когда вы удаляете объект, на который ещё есть ссылки, Конфигуратор сам проверит их и выведет список мест использования. Удалить такой объект не получится, пока ссылки не убраны. Это та же проверка, просто запущенная автоматически.

Где используется элемент справочника: штатные средства в режиме 1С:Предприятие

Теперь задача про данные: найти все документы, где выбран конкретный контрагент, номенклатура или договор.

Удаление помеченных объектов

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11 и другие) обработка находится в разделе Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов.

Как использовать её для поиска ссылок:

  1. Поставьте пометку удаления на элемент (клавиша Del в списке).
  2. Откройте обработку удаления помеченных.
  3. Выберите режим, где можно отметить конкретные объекты, и отметьте только свой элемент.
  4. Запустите удаление. Если на объект есть ссылки, программа его не удалит и покажет места использования: документы, регистры, другие справочники.

Если ссылок нет, объект будет удалён окончательно. Используйте этот способ, только когда удаление вас и так устраивает. Если нужна просто проверка — берите обработку или запрос из разделов ниже.

В нетиповой конфигурации без БСП есть платформенная функция Все функции → Стандартные → Удаление помеченных объектов. Меню «Все функции» включается в Сервис и настройки → Параметры. Логика та же: объекты со ссылками остаются, по ним выводится список мест использования.

Структура подчинённости

Для документов есть ещё один инструмент: структура подчинённости. Она показывает документы, введённые на основании текущего, и его основание. Это удобно для цепочек «заказ → реализация → счёт-фактура», но это не полный поиск ссылок. Документ, в котором ваш документ указан в обычном реквизите (без ввода на основании), в структуре может не появиться.

Внешняя обработка на функции НайтиПоСсылкам

Самый надёжный способ проверить, есть ли ссылки на объект в данных, ничего не удаляя. Функция НайтиПоСсылкам() принимает массив ссылок и возвращает таблицу значений с колонками:

  • Ссылка — что искали;
  • Данные — где нашли (ссылка на документ или ключ записи регистра);
  • Метаданные — объект метаданных, где нашли.

Функция доступна на сервере, в толстом клиенте и во внешнем соединении. Запускайте её под пользователем с полными правами, иначе часть таблиц может не проверяться.

Код серверной части

Создайте внешнюю обработку в Конфигураторе (Файл → Новый → Внешняя обработка). Добавьте реквизит формы ИскомаяСсылка с составным типом, включив нужные справочники и документы. В модуль формы вставьте:

&НаКлиенте
Процедура НайтиСсылки(Команда)
    Если Не ЗначениеЗаполнено(ИскомаяСсылка) Тогда
        Сообщить("Выберите объект для поиска.");
        Возврат;
    КонецЕсли;
    Найдено = НайтиСсылкиНаСервере(ИскомаяСсылка);
    Если Найдено.Количество() = 0 Тогда
        Сообщить("Ссылок не найдено.");
    КонецЕсли;
    Для Каждого Описание Из Найдено Цикл
        Сообщить(Описание);
    КонецЦикла;
КонецПроцедуры

&НаСервереБезКонтекста
Функция НайтиСсылкиНаСервере(Ссылка)
    МассивСсылок = Новый Массив;
    МассивСсылок.Добавить(Ссылка);
    ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);
    Результат = Новый Массив;
    Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл
        Результат.Добавить(СтрокаТаблицы.Метаданные.ПолноеИмя() + ": "
            + Строка(СтрокаТаблицы.Данные));
    КонецЦикла;
    Возврат Результат;
КонецФункции

Создайте команду формы НайтиСсылки, привяжите её к процедуре и вынесите кнопку на форму. Сохраните обработку и откройте её в режиме 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. Удобнее всего открыть папку в редакторе кода с поиском по проекту: видно контекст каждой находки.

💡 Есть и более лёгкий вариант без выгрузки: Конфигурация → Отчет по конфигурации. Он сохраняет структуру метаданных в один текстовый файл, где удобно искать типы реквизитов. Код модулей в него по умолчанию не попадает.

Особенности поиска в распределённой информационной базе

В РИБ данные живут в нескольких базах сразу: центральный узел и периферийные. Поиск ссылок везде одинаковый, но картина неполная.

Что учесть:

  • 🌐 НайтиПоСсылкам(), запросы и удаление помеченных видят только текущую базу. Документы, созданные в магазине или филиале и ещё не пришедшие в центр, в результат не попадут.
  • 🔄 Перед поиском проведите полный цикл обмена со всеми узлами: выгрузка и загрузка в обе стороны. Только после этого результату в центральном узле можно доверять.
  • 🗑 Удалять объекты лучше в одном месте, обычно в центральном узле, и после обмена. Если удалить элемент в центре, пока на периферии на него ссылаются ещё не выгруженные документы, после загрузки в центре появятся битые ссылки.
  • 🧩 Конфигурация в РИБ меняется только в центральном узле, периферия получает её с обменом. Поиск ссылок на объект метаданных делайте там же.

Если битые ссылки после обмена уже появились, ищите их запросом из предыдущего раздела в узле, куда пришли данные. Затем выясните, в каком узле объект ещё существует. Повторная регистрация этого объекта к обмену в исходном узле обычно возвращает его в остальные базы.

Частые вопросы

Почему поиск ссылок в Конфигураторе пустой, а объект при удалении не удаляется?
Конфигуратор ищет связи в метаданных, а мешают удалению ссылки в данных. Это разные проверки. Ищите места использования в режиме 1С:Предприятие через НайтиПоСсылкам() или обработку удаления помеченных.
Найдёт ли НайтиПоСсылкам ссылку в реквизите типа «Строка»?
Нет. Функция ищет только реквизиты ссылочного типа. Если идентификатор или наименование объекта хранится в строке или в хранилище значения, такую связь функция не увидит.
Можно ли запустить поиск ссылок в базе, к которой есть только тонкий клиент?
Да. Внешняя обработка выполняет НайтиПоСсылкам() в серверной процедуре, а тонкий клиент лишь показывает результат. Нужны права на открытие внешних обработок.
Ищет ли поиск ссылки в записях журнала регистрации?
Нет. Журнал регистрации хранится отдельно от таблиц базы. Найденная там ссылка не помешает удалению объекта.
Почему удаление помеченных идёт часами, а поиск по одному объекту — минуты?
Удаление помеченных проверяет ссылки сразу на все помеченные объекты, а сами удаляемые объекты тоже ссылаются друг на друга. Чем больше помечено, тем дольше. Отметьте в обработке только нужные элементы.