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

16.10.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка. Метаданные и их отображение в таблицах БД
.epf 7,76Kb
10
10 Скачать (1 SM) Купить за 1 850 руб.

Хотя я в заголовке указал, что база файловая - без 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С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

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

60000 руб.

06.10.2023    4560    37    19    

45

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

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

14400 руб.

29.04.2020    33907    108    152    

75

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

Представьте, что есть система QR - кодирования, которая НЕ ТРЕБУЕТ изменения конфигурации, НЕ ТРЕБУЕТ изменения ни одной печатной формы для добавления QR-кода, включая внешние, НЕ ХРАНИТ данные штрихкодов и их связь, от чего база не "пухнет", ИМЕЕТ возможность закодировать в QR-коде произвольные данные параметров для последующей обработки полученных данных, УМЕЕТ прикреплять сканы, УМЕЕТ обработать считанный QR-код как ВЫ захотите. А также ХРАНИТ историю операций в обход базы для каждого пользователя в отдельности и УМЕЕТ работать с 2D - сканерами. А также автоматически распознавать отсканированные печатные формы (картинки или pdf-файлы) и выполнять заданные произвольные алгоритмы, в том числе прикрепление их к документам! Обновление 3.2 от 09.06.2024!

19200 руб.

26.08.2018    52637    16    61    

55

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

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

3600 руб.

10.02.2017    111449    669    175    

708

Взаиморасчеты Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 1C:Бухгалтерия Бухгалтерский учет Управленческий учет Платные (руб)

Вы наконец разобрались с закрытием месяцев и пора начать контролировать сроки оплаты поставщикам и задолженности клиентов, но в базе расчеты не идут из-за развернутого сальдо? Не беда, есть решение!

12000 руб.

02.11.2020    7563    6    0    

8

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

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

2400 руб.

13.07.2015    51393    175    29    

127

Корректировка данных Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Обработка предназначена для ООО для смены системы налогообложения УСН на ОСНО, без ведения раздельного учета, входящего НДС по способам учета. При реализации перехода в операции формируются проводки по выделению НДС, который ранее учитывался в стоимости номенклатуры, регистр «НДС Предъявленный».

6000 руб.

22.01.2025    335    1    0    

3

Корректировка данных Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Налоговый учет Налог на прибыль Платные (руб)

Обработка служит для: выравнивания бухгалтерского и налогового учета на определенную дату по выбранным счетам; закрытия остатков по выбранным счетам; обнуления налогового учета (ПР, ВР также будут обнулены)

2880 руб.

05.05.2024    711    10    0    

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

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

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

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


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

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

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

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

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