Табличная часть имеет записи, не относящиеся ни к одной записи главной таблицы. Файловая база 1С. Исправление ошибки

16.10.19

Задачи пользователя - Корректировка данных

Памятка-инструкция по исправлению этой ошибки.

Скачать файлы

Наименование Файл Версия Размер
Обработка. Метаданные и их отображение в таблицах БД
.epf 7,76Kb
9
.epf 7,76Kb 9 Скачать

Хотя я в заголовке указал, что база файловая - без sql сервера, чтобы исправить эту ошибку нам не обойтись.

Для решения этой проблемы я использовал сервер PostgreSQL, PgAdmin4, Excel и самописную обработку на 1С (находится во вложении к статье).

1. Первым делом требуется развернуть поврежденную базу на SQL сервере.

2. Нужно сопоставить имя таблиц базы на SQL с именами метаданных конфигурации 1С.

Делал я это с помощью своей обработки. Обработка тестировалась на платформе 8.3.12 и выше.

Принцип прост. Тестирование и исправление нам дает название метаданных, которые нужно исправить. Например:

Проверка логической целостности. Документы. ИзменениеПлановыхНачислений. Табличная часть имеет записи, не относящиеся ни к одной записи главной таблицы. Количество - 1.

Запускаем базу в пользовательском режиме. Запускаем обработку и получаем наименования таблиц в БД PostgreSQL и наименования полей "Ссылка". скрин 1

3. Требуется найти в базе PostgreSQL записи не относящиеся ни к одной записи главной таблицы с помощью SQL запросов.

Я вообще не знаток запросов SQL. Быстрым гуглежом выработал для себя следующий алгоритм действий. Если в комментариях предложите вариант получше, то я буду благодарен.

Открываем PgAdmin, запускаем Query Tool.

Query Tool скрин

С помощью следующих запросов выбираем все ссылки и сохраняем их в csv.

select distinct encode(FieldName,'hex') as linkId from TableName order by encode(FieldName,'hex')

FieldName замените на имя поля ссылки. TableName замените на имя таблицы.

Скрин. Выполнение запросов в PgAdmin

С помощью Экселя или средствами 1С, или вообще как вам удобнее - найдите битые ссылки. То есть такие ссылки, которые присутствуют во вспомогательных таблицах, но отсутствуют в основной таблице документа.

4. SQL запросом удаляем некорректную строку.

delete from TableName where encode(FieldName,'hex') = '00000000000000000000000000000000'
                                                       

TableName замените на имя таблицы. FieldName замените на имя поля ссылки. '00000000000000000000000000000000' замените на найденную некорректную ссылку. Апострофы должны остаться.

5. Проверить внутренним тестированием 1С, что проблема решена.

6. Выгрузить базу обратно в файловый вариант.

Дополнение от kosmo0.

С помощью консоли запросов и запроса к табличным частям документа тоже можно найти эти строки, которые не относятся ни к одному документу в базе. В поле "Ссылка" у них будет либо "Объект не найден", либо пустая ссылка на документ. Если "Объект не найден", то проблема решается ТиИ с созданием объекта по битой ссылке, либо программным созданием объекта с помощью следующего кода:

СтрокаGUID = "00000000-0000-0000-0000-000000000000"; //Здесь должна быть ваша ссылка
НаименованиеДокумента = "СтрокаНаименования" //Заменить на реальное наименование документа
            
НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);
ДокОбъект = Документы.[НаименованиеДокумента].СоздатьДокумент(); 
ДокОбъект.УстановитьСсылкуНового(Документы.[НаименованиеДокумента].ПолучитьСсылку(НовыйGUID));
//Возможно здесь потребуется дозаполнить реквизиты объекта, без которых он отказывается записываться
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать();

Затем, можно удалить этот объект программно, что решит проблему.

Если в поле "Ссылка" находится пустая ссылка на документ, то ошибка исправляется только описанным выше способом.

Обработка Исправление ошибок Восстановление базы

См. также

Исправление в 1С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

Корректировка данных Зарплата Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    2311    29    15    

33

Тестирование и исправление ключей аналитики ERP, УТ11, КА

Корректировка данных Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    106789    633    173    

675

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27366    79    146    

59

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22315    299    35    

71

SALE! 20%

Заполнение документа "Корректировка регистров" произвольными данными

Закрытие периода Корректировка данных Платформа 1С v8.3 Система компоновки данных 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 1920 руб.

13.07.2015    50160    171    29    

121
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 165 17.10.19 09:18 Сейчас в теме
Ничего не понял - когда и где возникает такая ситуация?
ТиИ не помогает?
2. Dipod 111 17.10.19 09:39 Сейчас в теме
(1)Эта ошибка возникает при тестировании и исправлении из конфигуратора. И платформа не умеет автоматически исправлять эту ошибку.
3. TMV 14 17.10.19 12:48 Сейчас в теме
(2) наверное, имели ввиду, что сообщение об ошибке выходит во время ТиИ? Вряд ли ошибка возникает в этот момент.
11. Fox-trot 156 18.10.19 07:18 Сейчас в теме
(2)
Эта ошибка возникает при тестировании и исправлении из конфигуратора. И платформа не умеет автоматически исправлять эту ошибку.

платформа сама создает проблемы и потом не может их решить. так?
12. Dipod 111 18.10.19 07:35 Сейчас в теме
(11)Нет. Платформа при тестировании просто сообщает о наличии некорректной записи в подчиненной таблице, но не умеет удалять некорректную строку.

Как сказал (7), эту ошибку можно обойти, если при ТиИ создать объект по битой ссылке, а потом корректно его удалить. Но этот способ сработает только в том случае, если в строке подчиненной таблицы в поле "Ссылка" не стоит пустая ссылка. Пустая ссылка там может возникнуть, если кто-то ранее выполнил ТиИ с настройкой "Удалять ссылки".
13. kosmo0 107 24.10.19 14:09 Сейчас в теме
(12) Вообще то не очень понятно почему при ТиС платформа чистит ссылку при имеющихся табличных частях. Это либо косяк платформы либо кто-то залез своими шаловливыми ручками.
Если это косяк платформы, то он либо исправлен в более свежих релизах либо нужно донести информацию до разработчиков платформы. Последнее, после одного случая обращения, лично для меня бесполезное занятие.
14. Dipod 111 24.10.19 14:56 Сейчас в теме
(13) При ТиС платформа может очистить битую ссылку на основной объект. Но основная проблема связана с тем, что база уже повреждена до тестирования. И в базе есть запись во вспомогательной таблице по объекту, записи о котором нет в основной таблице.

Я не знаю истоков проблемы. Но почему-то случилась у клиента ситуация, при которой основная запись по документу в таблице удалилась, а запись во вспомогательной таблице по этому документу нет. Можно только гадать о причинах. Знаю только то, что эта проблема довольно распространена. Регулярно с ней сталкиваюсь у клиентов.
4. TMV 14 17.10.19 12:50 Сейчас в теме
Для файловой базы есть ещё кстати утилита checkdbf, она не помогает?
6. Dipod 111 17.10.19 13:07 Сейчас в теме
(4)Нет, эта утилита не помогает от этой ошибки.
5. Dipod 111 17.10.19 13:07 Сейчас в теме
7. kosmo0 107 17.10.19 17:18 Сейчас в теме
А такой алгоритм - запросом по табличным частям. В колонке ссылка находим все <Объект не найден>. То есть получаем список уникальных идентификаторов (УИД) документов отсутствующих в БД. На основании этих УИД создаем документы, а потом эти вновь созданные документы корректно удаляем вместе с табличными частями.


А сопоставление имен таблиц базы на SQL с именами метаданных конфигурации 1С можно глянуть в инструментах разработчика (их можно скачать бесплатно не только с данного ресурса). Да и консоль запросов там есть.
8. Dipod 111 17.10.19 17:36 Сейчас в теме
(7)
А такой алгоритм - запросом по табличным частям. В колонке ссылка находим все <Объект не найден>. То есть получаем список уникальных идентификаторов (УИД) документов отсутствующих в БД. На основании этих УИД создаем документы, а потом эти вновь созданные документы корректно удаляем вместе с табличными частями.

Когда мне досталась база, по ней уже кто-то прошелся тестированием и исправлением с удалением битых ссылок. Поэтому строка табличной части в поле ссылка содержала пустую ссылку на документ. Из-за этого внутреннее тестирование и исправление не могло создать объект и падало с ошибкой SDBL. А без объекта документа в базе, стандартными средствами мы никак не можем получить возможность удалить некорректную строку подчиненной таблицы. Пришлось удалять эту строку средствами SQL.
Ваш способ сработает, если ссылка осталась в исходном виде.

А сопоставление имен таблиц базы на SQL с именами метаданных конфигурации 1С можно глянуть в инструментах разработчика (их можно скачать бесплатно не только с данного ресурса). Да и консоль запросов там есть.

Согласен. Я, чтобы написать обработку из вложения, потратил 15 минут. Её код очень прост и прозрачен. Быстрое гугление легко находит функцию глобального контекста сопоставления метаданных и таблиц БД ПолучитьСтруктуруХраненияБазыДанных(), которую я использовал в обработке.
Я исхожу из того, что любой труд должен быть оплачен. Если моя обработка сэкономит кому-то время, которое он мог потратить на более полезные вещи, то потратить 1SM за неё не должно быть жалко. Кому этот вариант не подходит, тоже могут спокойно написать себе обработку за 15 минут, как это сделал я.
9. echo77 1868 18.10.19 05:04 Сейчас в теме
(8) а если самому создать документ с такой ссылкой?
10. Dipod 111 18.10.19 07:06 Сейчас в теме
(9)А как вы создадите документ с пустой ссылкой? Сейчас специально проверил на платформе 8.3.15, но думаю и на более ранних такой код не прокатит.
	ДокОбъект = Документы.Test.СоздатьДокумент();
	ДокОбъект.УстановитьСсылкуНового(Документы.Test.ПустаяСсылка());
	ДокОбъект.Дата = ТекущаяДата();
	ДокОбъект.ОбменДанными.Загрузка = Истина;
	ДокОбъект.Записать();
	UID  = ДокОбъект.Ссылка.УникальныйИдентификатор();
	Сообщить(UID);

Документ создается, но не с пустой ссылкой.
15. unk2 201 29.10.22 07:54 Сейчас в теме
Решить проблему помогает запрос по табличной части документа. Сортировкой по дате в самом верху будут строчки с Объект не найден. С помощью любой обработки (например https://infostart.ru/public/601873/) можно создать ссылки на удаленную ссылку. После этого вы сможете посмотреть что у вас в табличной части
16. Dipod 111 10.11.22 14:57 Сейчас в теме
(15) Это сработает, если ссылку не очистили с помощью тестирования и исправления. Если очистили, то нельзя создать родительский объект с пустой ссылкой.
Оставьте свое сообщение