Хотя я в заголовке указал, что база файловая - без sql сервера, чтобы исправить эту ошибку нам не обойтись.
Для решения этой проблемы я использовал сервер PostgreSQL, PgAdmin4, Excel и самописную обработку на 1С (находится во вложении к статье).
1. Первым делом требуется развернуть поврежденную базу на SQL сервере.
2. Нужно сопоставить имя таблиц базы на SQL с именами метаданных конфигурации 1С.
Делал я это с помощью своей обработки. Обработка тестировалась на платформе 8.3.12 и выше.
Принцип прост. Тестирование и исправление нам дает название метаданных, которые нужно исправить. Например:
Проверка логической целостности. Документы. ИзменениеПлановыхНачислений. Табличная часть имеет записи, не относящиеся ни к одной записи главной таблицы. Количество - 1.
Запускаем базу в пользовательском режиме. Запускаем обработку и получаем наименования таблиц в БД PostgreSQL и наименования полей "Ссылка".
3. Требуется найти в базе PostgreSQL записи не относящиеся ни к одной записи главной таблицы с помощью SQL запросов.
Я вообще не знаток запросов SQL. Быстрым гуглежом выработал для себя следующий алгоритм действий. Если в комментариях предложите вариант получше, то я буду благодарен.
Открываем PgAdmin, запускаем Query Tool.
С помощью следующих запросов выбираем все ссылки и сохраняем их в csv.
select distinct encode(FieldName,'hex') as linkId from TableName order by encode(FieldName,'hex')
FieldName замените на имя поля ссылки. TableName замените на имя таблицы.
С помощью Экселя или средствами 1С, или вообще как вам удобнее - найдите битые ссылки. То есть такие ссылки, которые присутствуют во вспомогательных таблицах, но отсутствуют в основной таблице документа.
4. SQL запросом удаляем некорректную строку.
delete from TableName where encode(FieldName,'hex') = '00000000000000000000000000000000'
TableName замените на имя таблицы. FieldName замените на имя поля ссылки. '00000000000000000000000000000000' замените на найденную некорректную ссылку. Апострофы должны остаться.
5. Проверить внутренним тестированием 1С, что проблема решена.
6. Выгрузить базу обратно в файловый вариант.
Дополнение от
С помощью консоли запросов и запроса к табличным частям документа тоже можно найти эти строки, которые не относятся ни к одному документу в базе. В поле "Ссылка" у них будет либо "Объект не найден", либо пустая ссылка на документ. Если "Объект не найден", то проблема решается ТиИ с созданием объекта по битой ссылке, либо программным созданием объекта с помощью следующего кода:
СтрокаGUID = "00000000-0000-0000-0000-000000000000"; //Здесь должна быть ваша ссылка
НаименованиеДокумента = "СтрокаНаименования" //Заменить на реальное наименование документа
НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);
ДокОбъект = Документы.[НаименованиеДокумента].СоздатьДокумент();
ДокОбъект.УстановитьСсылкуНового(Документы.[НаименованиеДокумента].ПолучитьСсылку(НовыйGUID));
//Возможно здесь потребуется дозаполнить реквизиты объекта, без которых он отказывается записываться
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать();
Затем, можно удалить этот объект программно, что решит проблему.
Если в поле "Ссылка" находится пустая ссылка на документ, то ошибка исправляется только описанным выше способом.