Битые ссылки. Поиск, удаление, восстановление.
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Поиск битых ссылок с выбором объектов метаданных, в таблице данных которых нужно найти битые ссылки.
Удобное представление результата поиска битых ссылок с настройкой группировки данных.
Вывод найденных битых ссылок в табличный документ (СКД).
Могут возникнуть ошибки при выполнении обработки на клиент-серверном варианте ИБ, связанные со сложностью запросов для поиска битых ссылок.
Обработка позволяет проводить некоторые манипуляции с битыми ссылками.
Функции:
1. восстановление объектов битых ссылок из резервной копии с возможностью выбора объектов для восстановления;
2. замена битых ссылок пустыми;
3. пометка на удаление ссылочных объектов с битыми ссылками;
4. удаление объектов с битыми ссылками.
Обработку можно использовать как источник полезных функций для поиска битых ссылок и некоторых манипуляций с ними.
Имеются следующие полезные экспортные функции:
// Возвращает таблицу битых ссылок
// МассивМетаданных - массив метаданных, в которых нужно искать битые ссылки
// ИсключитьМетаданные - массив метаданных для исключения
// Таблица - объект таблицы значений в который нужно поместить данные (таблица очищается полностью)
// ИсточникПодробно - (истина/ложь) расшифровка источника до ссылки или ключа записи
Функция ПолучитьТаблицуБитыхСсылок(ОбъектыМетаданных = Неопределено, ОбъектыМетаданныхИсключить = Неопределено, Таблица = Неопределено, ИсточникПодробно = Ложь, ПоказатьИндикатор = Истина) Экспорт
// Свойства (структура):
// Реквизиты - соответствие (ОбъектМетаданных - СтрокаРеквизитов)
// ПоказатьИндикатор (Булево)
// РежимЗагрузкиПриОбменеДанными (Булево),
// МетодыОчисткиРегистровСведений (Соответствие), Методы: "Перезапись", "УдалениеПоЗаписям"
// ОчищатьРегистрыПоРеквизитуРегистратор (Булево)
Функция ОчиститьДанныеОтБитыхСсылок(ОбъектыМетаданных = Неопределено, ОбъектыМетаданныхИсключить = Неопределено, ТаблицаБитыхСсылок = Неопределено, Свойства = Неопределено) Экспорт
// Восстанавливает битые ссылки в массиве из внешней информационной базы
// Свойства - структура:
// РежимЗагрузкиПриОбменеДанными (Булево)
Функция ВосстановитьБитыеСсылкиИзВнешнейИнформационнойБазы(МассивБитыхСсылок, Соединение, Свойства = Неопределено) Экспорт
Обработка проверена на конфигурациях: УПП, БП, ЗУП, УТ и проч.
Исправлены найденные ошибки. См. комментарии.
http://forum.infostart.ru/forum24/topic46716/message511514/#message511514
http://forum.infostart.ru/forum24/topic46716/message512103/#message512103
Оптимизированы запросы поиска битых ссылок.
06.04.2012. Исправлена ошибка с переменной "глОбщиеЗначения". Добавлена возможность установки владельца при создании элемента по битой ссылке с владельцем.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13388 115 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83249 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285622 1606 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16746 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44171 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 76844 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3708 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28731 103 46
В РИБе битые ссылки это нормальная ситуация и нужно обработать базу данных выборочно.
Обработка не претендует на уникальность.
что за отдельный вид битых ссылок "битые ссылки в РИБ"??
и что значит "выбираем объекты", когда поиск битых ссылок - это поиск по всей базе?
Смысл посика таких ссылок - это освободить базу от них, и очистить документы от несуществующих ссылок, а не ОБЪЕКТЫ.
А возникнуть они могут везде и всюду...
Я сам пользуюсь запросом, да и поиск так называемых "битых ссылок" - занятие нетривиальное: ссылки могут быть <12FG-1254-....>; могут быть необновлены (как в РИБ - ссылка по удаленной базе "жива", а на самом деле - уже не существует, ошибка такая, синхронизация баз не всегда верно обновляет ссылки; могут быть "<объект не найден>" и т.д....
Вы конкретный механизм поиска можете описать? что ищете, что удаляете..
а то опять все на новичков рачитано - "удаляем ссылки! спешите!"
ЧТО КОНКРЕТНО ДЕЛАЕТ ОБРАБОТКА?
что за отдельный вид битых ссылок "битые[IS-QUOTE]AlexO пишет:
ЧТО КОНКРЕТНО ДЕЛАЕТ ОБРАБОТКА?
Вроде я нигде не классифицировал битые ссылки.
В РИБ (распределенная информационная база) битые ссылки - вполне естественное явление, и если есть битая ссылка, то это ещё не значит, что возникла, какая-то ошибка.
что значит "выбираем объекты", когда поиск битых ссылок - это поиск по всей базе
Это значит:
1. если я знаю что в регистре сведений "ОДИН" есть битые ссылки, но мне они не интересны, то я могу исключить его из рассмотрения и не тратить на него времени.
2. если вдруг найдена битая ссылка с контрагентом в документе какого-то вида, я хочу посмотреть, а в каких ещё документах этого вида, есть битые ссылки.
3. я точно знаю, что в объектах какого-то вида нет битых ссылок или мне их наличие безразлично, то зачем тратить время на эти объекты.
Смысл посика таких ссылок - это освободить базу от них, и очистить документы от несуществующих ссылок
и это в том числе, решений может быть много, в обработке есть все механизмы для того чтобы решить эту задачу просто. Нужно добавить пару строк и использовать готовые фунцкии))).
Интересно как очистить поле "Регистратор" регистра сведений, если он является битой ссылкой, не удаляя при этом строку из регистра?
ЧТО КОНКРЕТНО ДЕЛАЕТ ОБРАБОТКА?
На этот вопрос отвечу в публикации.
1С-овцы лень было сделать что-то подобное, за что автору спасибо.
Кстати, у 1С много таких маленьких доработок можно сделать.
Вроде как уже есть типовой функционал, но у автора он удобнее, нагляднее.
ЗА что спасибо автору!
P.S. Лень программиста - двигатель прогресса...
Может уже есть что-то подобное, я просто не видел.
На самом деле идей куча, в основном касаемо интерфейса, удобства..
Большинство негативных реакций на неудобства быстро забываются пользователями, они привыкают к ним.
И ЭТО НЕХОРОШО.
Было бы полезно создать такую тему для того, чтобы люди скидывали туда свои идеи, а знающие люди могли бы их воплощать...
У меня иногда есть свободное время после работы, когда хочется что-нибудь полезное сделать, но когда начинаешь вспоминать, что-бы такое сделать, ничего на ум не приходит, хотя днем много просьб от пользователей поступает.
Причем просьбы от пользователей иногда очень неожиданные, даже странные, НА ПЕРВЫЙ ВЗГЛЯД.
Если их просьбы воплотить, то работать в 1С станет намного удобнее и быстрее
1С-овцы лень было сделать что-то подобное, за что автору спасибо.
Кстати, у 1С много таких маленьких доработок можно сделать.
Вроде как уже есть типовой функционал, но у автора он удобнее, нагляднее.
ЗА что спасибо автору!
{ВнешняяОбработка.ПоискБитыхСсылок.МодульОбъекта(1482)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
по причине:
{(37, 21)}: Поле не найдено "ТочкаМаршрута.ВерсияДанных"
ИЛИ (ТочкаМаршрута.<<?>>ВерсияДанных ЕСТЬ NULL
{Форма.Форма.Форма(905)}: Поле объекта не обнаружено (ШтатноеРасписаниеОрганизаций)
МетодыОчисткиРегистровСведений.Вставить(Метаданные.РегистрыСведений.ШтатноеРасписаниеОрганизаций, "Перезапись");
Обработка под конкретную конфигурацию?
{ВнешняяОбработка.ПоискБитыхСсылок.МодульОбъекта(1286)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
по причине:
{(1090, 6)}: Превышение допустимой вложенности операций
<<?>>ИЛИ СсылкаОбъекта = ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаПартий.ПустаяСсылка)
Лень была разбираться в ошибках, автору на заметку...
В нашей базе с аналитикой учета партий могут быть проблемы, связанные с тем, что аналитика сначала включалась, затем отключалась. Пока не знаю, че за фигня, буду разобраться в ситуации подробнее, когда будет время.
Автору просьба прокомментировать ошибку, которую я описал выше, возможно это натолкнет меня на то, где копать.
Заранее спасибо.
Автору на заметку - в ошибке ругалось на справочник Справочник.КлючиАналитикиУчетаПартий.
Попытался убрать галки в списке, чтобы обработка не проверяла его.
Не помогло, все равно выскакивает ошибка.
Таким образом, несмотря на то, что в списке проверке справочника нет, он в коде все равно проверяется.
Нехороший признак... Автору незачет!
Обработки, такого пошиба, как у вас (поиск чего-то в неизвестной базе) на мой взгляд, должны обладать по меньшей мере устойчивостью к незнакомой базе. Я имею ввиду, что если какого то справочника случайно не оказалось в подопытной базе, то обработка не должна спотыкаться, а должна продолжать работу.
Для этого 1С-ники специально придумали оператор "попытка...исключение...конецпопытки".
Этот оператор можно использовать вложенно, аналогично оператору "если...иначе...конецесли".
Кстати, тут интересная аналогия с боевыми действиями. На учениях сержант проверяет по списку людей(справочники)...
- Иванов?
- Я!
- Сидоров?
- Нету его, он в туалет пошел!
- меня не колебет, пока не будет в строю, все будут его ждать!
ТА-ЖЕ ситуация во время войны... (Обработка, устойчивая к незнакомой конфигурации)
Сержант проверяет по списку солдат:
- Иванов?
- Я!
- Сидоров?
- Нету его, он ПОГИБ СМЕРТЬЮ ХРАБРЫХ!
- Ну и фиг с ним, дальше по списку пойдем...
- Гаврилов?
{ВнешняяОбработка.ПоискБитыхСсылок.МодульОбъекта(1286)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
по причине:
{(1090, 6)}: Превышение допустимой вложенности операций
<<?>>ИЛИ СсылкаОбъекта = ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаПартий.ПустаяСсылка)
Спасибо за найденные ошибки, анекдот в кассу)))
Все исправил.
Проверил работу обработки на УПП. Все ОК.
База БУ8 оказалась сбойной "Файл базы данных поврежден...", такую ошибку выдает и при выгрузке базы и при тестировании,Короче в некоторых случаях вылетает и не хочет дальше ни работать, ни исправлять ошибки.
Ваша обработка отработала без вылетов, но и ошибок не обнаружила. А я так надеялась. Может нужно попробовать другую обработку-реаниматор?
База БУ8 оказалась сбойной "Файл базы данных поврежден..."
Маловероятно, что проблема вообще в битых ссылках.
Может Вам поможет утилита от 1С: "C:\Program Files\1cv82\8.2.14.528\bin\chdbfl.exe"(19) Oli29,
Обработка не работает в SQL-базе
.... не для всех объектов метаданных.
Остается только, выгрузить в файловую базу.
Моя история: необходимо почистить регистры накопления без регистраторов - отмечаю необходимые регистры, ищу битые ссылки, находит приблизительно 10000 записей, отмечаю объекты по реквизиту регистратор, удаляю. Со списка вродь как все удаляются но когда смотрю список регистров накопления битые записи всеже на месте. Обработкой "регистрация изменений" объектов для РИБ смотрю то в нужном регистре появляются 10000 записей измененных. Запускаю на обработке "поиск битых ссылок" вновь поиск опять находятся все теже 10000 записей. Вобщем чевойто то тут не все доделано.
В своей базе заменил кучу битых ссылок на пустые. Быстро и эффективно.
Но!
Автора прошу в модуле объекта добавить строку:
"
Перем глОбщиеЗначения;
"
Иначе ругань при открытии обработки.
А так все вроде работает.
Нет платформы 8.1 под рукой.
Но...
Вы можете попробовать сделать обратную конвертацию следующим путем:
- добавить обработку в конфигурацию на платформе 8.2,
- затем скопировать её в буфер (Ctrl+C),
- открыть любую конфигурацию на платформе 8.1
- выбрать ветку обработки и вставить обработку из буфера (Ctrl+V).
Должно получиться.
Сам не пробывал, но слышал о таком методе.
Подскажу: Открываете конфигуратор. Главное меню -> Отладка -> Начало отладки -> Толстый клиент (обычное приложение): начать отладку.
Откроется ваша УТ11 с обычным инетрфейсом. Без всяких интерфейсов и красивостей. Но зато можно запустить обработку с обычным интерфесом.
Главное меню -> Сервис -> Параметры... -> вкладка "Общие" -> выбрать "Управляемое приложение и управляемое приложение";
тогда будет доступен запуск отладки в режиме " Толстый клиент (обычное приложение)".
Безусловно полезная обработка. Однозначно плюс.
Возникла ошибка при обработке объекта: РегистрСведений.АналитикаУчетаПрочихЗатрат
{ВнешняяОбработка.ПоискБитыхСсылок.МодульОбъекта(1592)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
Ошибка выполнения запроса
по причине:
Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256.
Microsoft OLE DB Provider for SQL Server: Too many table names in the query. The maximum allowable is 256.
Это можно как-то обойти?
Конфигурация: УПП 1.3.40.1, платформа 8.2
НО, конечно, есть мелкие замечания - возможно, на будущее...
Запускал в конфигурации, где нет общей формы ХодВыполненияОбработкиДанных. Выборка, конечно, идет, но без всякой индикации, и (по-моему) постоянная обработка исключений в этом случае затянула цикл вдвое. Наверное, стоило бы индикацию процесса сделать через Состояние - скромненько, но и быстренько.
Стоило бы добавить еще возможность отбора типов битых ссылок для поиска - скажем, только ссылки на единицы измерения. При решении уже известных проблем время бы экономилось.
Ну и, конечно, то, что в (51) - поддерживаю.
Форма.Форма.Форма(864)}: Помилка при виклику методу контексту (Удалить)
НаборЗаписей.Удалить(ЗаписьДляУдаления);
через:
Неприпустиме значення параметру (параметр номер '1')
Ситуация была следующая
Суть проблемы - удалили участок на предприятии
идем в справочники-предприятие-подразделения
открывается хрень
слева - структура предприятия
справа - подразделения организаций
дак вот - то что слева я поднял встало вроде нормально
причем поднимал обработкой - GUID
А вот справа - GUID работает некорректно
орет что нужен "владелец"
ну дак вот давай я думать как обмануть адрес вроде есть а к чему привязать
Вопрос был вроде простой как по битой ссылке найти все записи -
хотя я и понимал что мне нужно восстановить только один обьект.
Поискал в Инете ну все не то - все не так работает.
подразделения организаций (когда созадется подразделение) - GUID работает некорректно
система 1С - орет что нужен "владелец"
Ваша обработка отработала корректно - восстановила все 168 документов
Но у меня вопрос автору -
1. хотелось бы обработку которая по <Объект не найден> (84:893f00215aecf30a11e0760ca6c900fd) искала бы все вхождения
чтобы можно было представлять какие документы справочники и т.д. были "задеты" (в архивах может другое количество записей)
2. Нетривиальная задача восстановления элемента номенклатуры вместе с единицами измерения (те хотелось бы вариант при воссстановлении элемента номенклатуры подвязывалась еденица измерения правильная - иначе придется бродить по множеству документов)
в ручную я вроде нашел вариант который работает а вот обработок подобного типа вообще не видел
Еще раз большое спасибо
Я удалил физически лишнюю номенклатуру, остались битые ссылки в документах "Установка цен".
Только я доработал, чтобы меняло не на пустую ссылку, а на один определенный элемент с указанным именем. Если его не находит, ссылку не обрабатывает, пропускает.
Выкладываю версию, автор, добавьте в свою, если посчитаете нужным.
И да, на самом деле не надо удалять эти строки, т.к. есть ещё и движения у этих битых документов.
Решение описал тут , три способа:
1. Берём ирПортативный, ищем все строки ТЧ, находим битые ссылки вида <Объект не найден> (196:8ca0d017c29aac7511e6e6bb9148a258), берём обработку GUID82_w1c.epf, создаём документ, записываем, лезем в его движения - оттуда пытаемся вычислить реквизиты документа (например дату, время, склад и т.п.), вносим их в документ - записываем.
2. В ТиИ обязательно выбираем режим "Создавать объекты". После исправления придётся редактировать эти добавленные элементы.
3. Если есть архив базы, возможно перенести переносом (ВыгрузкаЗагрузкаДанныхXML) - с применением обработки GUID82_w1c.epf можно в архиве найти нужные объекты по ссылкам.
1. Не помогло сделать что? Ты не описал задачу.
2. Зачем брать обработку GUID82_w1c.epf ? Прямо из списка строк для обработки можно открыть редактор объекта БД для битой ссылки и записать (создать новый) объект с идентификатором битой ссылки.
* Настройки СУБД
* Объем памяти ОС с СУБД
* Объем записей в таблице корректировок и связанных таблицах, которые участвуют в запросе
* Ограничен ли поиск битых ссылок по реквизитам
* Какие типы входят в состав типов реквизитов, в которых выполняется поиск битых ссылок
* Возможно запрос не оптимальный сформировался
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 98973
Создание 20.11.11 01:08
Обновление 06.04.12 21:49
Просмотры 80911
Загрузки 2074
Рейтинг
153
Комментарии 80
Код открыт Не указано
Рубрики Инструментарий разработчика
Кому
Системный администратор
,
Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)