|
Средствами SQL удалены документы, а табличные части остались | ☑ | ||
---|---|---|---|---|
0
ГеннадийУО
25.05.15
✎
09:53
|
Умельцы-внедренцы при чистке базы данных (нетиповая специализированная конфа) умудрились удалить документы, а их табличные части оставить.
В результате у меня 2 вопроса - чем это плохо, и можно ли как-нибудь удалить такие вещи средствами 1С? |
|||
1
ДенисЧ
25.05.15
✎
09:54
|
Это плохо тем, что они остались в базе.
Средства 1с штатны - ТиИ |
|||
2
Широкий
25.05.15
✎
09:55
|
Тестирование и исправление может помочь.
Но проще все же скуль запросами прибить |
|||
3
ГеннадийУО
25.05.15
✎
09:56
|
ТИИ нельзя, документов несколько миллионов, за время допустимого простоя не успевает...
|
|||
4
ГеннадийУО
25.05.15
✎
09:57
|
(2) Ну я надеюсь умельцы исправят свой косяк, но на всякий случай интересуюсь...
|
|||
5
ДенисЧ
25.05.15
✎
09:57
|
(3) Тогда тебе самому придётся стать умельцем и написать запрос на удаление
|
|||
6
hhhh
25.05.15
✎
09:58
|
(4) ну просто пусть удалят табличеые части. Какие проблемы?
|
|||
7
xXeNoNx
25.05.15
✎
09:58
|
загрузка - выгрузка
|
|||
8
xXeNoNx
25.05.15
✎
09:58
|
(7) или наоборот
|
|||
9
ГеннадийУО
25.05.15
✎
10:02
|
(6) Проблема в их квалификации :)
|
|||
10
МихаилМ
25.05.15
✎
10:18
|
(7)
не поможет. |
|||
11
МихаилМ
25.05.15
✎
10:23
|
(0)
удалите средствами SQL данные тч. ПолучитьСтруктуруХраненияБазыДанных() Вам поможет |
|||
12
Ненавижу 1С
гуру
25.05.15
✎
10:25
|
да в общем то ничего страшного, просто фантомные записи, которые не влияют ни на что, кроме размера/скорости
вот если еще движения по регистрам остались, то веселее |
|||
13
Гёдза
25.05.15
✎
10:28
|
а еще могут быть движения
|
|||
14
Фрэнки
25.05.15
✎
10:34
|
Не указана версия - вполне вероятно, что это еще на 7.7
Файл описания с соответствием таблиц у базы все равное есть. И правильно сказано в (13), что удалить нужно не только табличные части документов из нужной таблице, но так же надо выбрать/удалить все движения по регистрам, а также итоговые обороты/остатки надо будет рассчитывать заново. |
|||
15
ГеннадийУО
25.05.15
✎
10:44
|
(11) Да это не проблема, просто интересно, можно это сделать средствами 1С кроме ТИИ или нет.
|
|||
16
ГеннадийУО
25.05.15
✎
10:45
|
(12) Эти документы к счастью не делают движений...
|
|||
17
Славен
25.05.15
✎
10:46
|
(15) можно
|
|||
18
Славен
25.05.15
✎
10:48
|
+(17) если часть тч нужна, то запросом дергаешь те у которых ссылки на док битые и удаляешь, если вообще все надо почистить, то удаляешь в конфигураторе тч(и док), обновляешь, заново добавляешь
|
|||
19
ГеннадийУО
25.05.15
✎
10:50
|
(18) Как удалить табличную часть, у которой битая ссылка на документ? Какой код надо написать?
|
|||
20
Славен
25.05.15
✎
10:51
|
||||
21
Славен
25.05.15
✎
10:52
|
+(20) выводит в том числе и http://catalog.mista.ru/public/98973/
|
|||
22
Фрэнки
25.05.15
✎
10:53
|
(20) найти не проблема - какой код удаляет обнаруженные битые ссылки в табличных частях?
Это же не удаление наборов записей в регистрах. |
|||
23
Славен
25.05.15
✎
10:57
|
(22) тч просто для начала очистить у которой ссылка на объект битая
|
|||
24
Славен
25.05.15
✎
10:59
|
ну и по гуиду такой ссылки можно восстановить объект и затем его удалить полностью
|
|||
25
Зеленый пень
25.05.15
✎
11:03
|
(19) Если средствами 1С: запросом получай битые ссылки из таб.частей (ТабЧасть.Ссылка.Дата ЕСТЬ NULL), создавай документы с такими ссылками, очищай таб.часть, и тут же удаляй документ.
|
|||
26
ГеннадийУО
25.05.15
✎
11:06
|
(25) Вот и я так думаю, что по другому никак. Но несколько миллионов документов восстанавливать а потом удалять както печально...
|
|||
27
МихаилМ
25.05.15
✎
11:11
|
(26)
у создавайте-удаляйте в несколько фоновых заданий. |
|||
28
EugeniaK
25.05.15
✎
11:15
|
(0) На самом деле, эти строки абсолютно никак не влияют на дальнейшую работу базы.
Можно на них просто забить. Конечно, если у вас нет умельцев, строящих отчеты по данным табличных частей. Для психологического комфорта, можно написать или найти на инфостарте маленькую обработочку, которая эти строки поудаляет. |
|||
29
Зеленый пень
25.05.15
✎
11:20
|
(26) Чего там "восстанавливать"? Ссылка создастся мгновенно.
Теоретически, конечно, можно было бы так, но это будет нарушение лиц. соглашения 1С: Процедура УдалитьЗависшиеТабличныеЧасти() Экспорт // удаляем таб.части документов, у которых нет записей в основных таблицах Для каждого ОбъектМетаданных Из Метаданные.Документы Цикл МассивМД = Новый Массив; МассивМД.Добавить(ОбъектМетаданных); ТаблицаБД = ПолучитьСтруктуруХраненияБазыДанных(МассивМД, Истина); // Основная таблица ИмяТаблицыДокумента = ТаблицаБД.Найти("Основная", "Назначение").ИмяТаблицыХранения; Для каждого СтрокаТЗ Из ТаблицаБД Цикл ОбработкаПрерыванияПользователя(); Если СтрокаТЗ.Назначение = "ТабличнаяЧасть" Тогда // проверяем таб.часть ИмяТаблицы = СтрокаТЗ.ИмяТаблицыХранения; ИмяПоляСсылки = ""; Для каждого СтрокаПолей Из СтрокаТЗ.Поля Цикл Если Найти(СтрокаПолей.ИмяПоляХранения, "_IDRRef") > 0 Тогда ИмяПоляСсылки = СтрокаПолей.ИмяПоляХранения; Прервать; КонецЕсли; КонецЦикла; Команда = "DELETE TOP (100000) FROM " + ИмяТаблицы + " |FROM " + ИмяТаблицы + " as vt |LEFT JOIN " + ИмяТаблицыДокумента + " | ON vt." + ИмяПоляСсылки + " = " + ИмяТаблицыДокумента + "._IDRRef | WHERE " + ИмяТаблицыДокумента + "._Date_Time is null"; Запрос = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Количество ИЗ " + СтрокаТЗ.ИмяТаблицы + " КАК Док ГДЕ Док.Ссылка.Ссылка ЕСТЬ NULL"); Состояние("Проверяем " + СтрокаТЗ.ИмяТаблицы); Записей = Запрос.Выполнить().Выгрузить()[0].Количество; Пока Записей > 0 Цикл ВыполнитьКомандуSQL(Команда); Состояние("Проверяем " + СтрокаТЗ.ИмяТаблицы); Записей = Запрос.Выполнить().Выгрузить()[0].Количество; ОбработкаПрерыванияПользователя(); КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
30
Фрэнки
25.05.15
✎
11:20
|
(28) мда... уже отвечено было в ветке, что документы с тч, но без движений.
Естественно, что отчеты в базе будут работать именно по тч документов. Просто надо переделать все запросы, чтоб в них была проверка что тч.ссылка.ссылка не равна пустой ссылке. |
|||
31
EugeniaK
25.05.15
✎
11:40
|
(30) Какие отчеты по ТЧ без движений?
Ни одного типового не знаю. |
|||
32
sapphire
25.05.15
✎
11:42
|
(0) Легко
|
|||
33
sapphire
25.05.15
✎
11:42
|
(29) еретик.
надо использовать truncate |
|||
34
Зеленый пень
25.05.15
✎
11:43
|
(33) для неполной очистки таблицы?
|
|||
35
sapphire
25.05.15
✎
11:45
|
(34) Я думал там полная, один фиг, если удалемых записей больше целевых то лучше использовать транкейт
|
|||
36
ДенисЧ
25.05.15
✎
11:46
|
(35) транкейт по условию? Научишь?
|
|||
37
fisher
25.05.15
✎
11:49
|
(26) Вот именно. С другой стороны это можно делать порционно в течение нескольких дней. Хотя, конечно, в разы проще и быстрее прибить их скриптом TSQL.
|
|||
38
Черный маклер
25.05.15
✎
11:56
|
(0) в 4 прыжка:
1. универсально выгружаешь в xml доки с нужными тч 2. в конфигураторе удаляешь тч 3. загружаешь сохраненную конфигурацию с тч 4. загружаешь из xml доки |
|||
39
ЧеловекДуши
25.05.15
✎
11:58
|
(0) Отдельная благодарность, горе писателю прямого запроса.
Напиши, еще запрос, для удаления Табличной части, у которых нет Ссылок на Шапку документа. ... А так, есть еще такое дело, что ссылки на удаляемый документ могли где либо записаться в других документах. |
|||
40
vde69
25.05.15
✎
12:01
|
(0) я-бы подумал о смене "умельцев"...
|
|||
41
Tateossian
25.05.15
✎
12:03
|
Сделай TRUNCATE TABLE по требуемой таблице дока, затем тоже самое с таблицей регистрации (если есть регистрация изменений). А когда будет доступна база для регламентного обслуживания ТИИ сделай, можно в несколько заходов.
|
|||
42
vde69
25.05.15
✎
12:06
|
(39) у автора база БОЛЬШАЯ... и по любому там сейчас бардак с ссылочной целостностью.
давать реальные советы не посмотрев на это тело - точно не стоит :) |
|||
43
ЧеловекДуши
25.05.15
✎
12:07
|
(0) Дарю...
http://catalog.mista.ru/public/122546/ |
|||
44
ЧеловекДуши
25.05.15
✎
12:07
|
(43) Очистка базы средствами SQL
http://catalog.mista.ru/public/122546/ |
|||
45
ГеннадийУО
25.05.15
✎
12:25
|
(40) Не выйдет. Они сами разработчики этой конфы :)
|
|||
46
ГеннадийУО
25.05.15
✎
12:26
|
(44) Спасибо. Умельцы вроде согласились, что это их косяк и им его надо исправить, скину им эту ссылочку.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |