|
1C удаление в базе 600 000 элементов (зацикливание) | ☑ | ||
---|---|---|---|---|
0
andryscha1c
09.11.21
✎
14:38
|
Пользователь каким то образом зациклил в справочнике группы (около 600 000 тыс. создалось). При попытке пометить на удаление или программно удалить эти группы - вылетало в аварийное завершение. Запрос полностью зависал при выполнении, если в его тексте выбираем эти группы.
Необходимо каким то образом удалить только конкретные группы в справочнике, причем другие элементы не трогать. Удаление таблицы целиком, чревато потерей старых данных, которые учавствуют элементы справочника. Речь сейчас скорее пойдет о порционном удалении... Кто сталкивался? |
|||
1
RomanYS
09.11.21
✎
14:46
|
(0) показывай своё "программно удалить".
Возможно сначала стоит расциклить группы, если удалить не получаетсяю Возможно поможет режим загрузки. |
|||
2
pechkin
09.11.21
✎
14:48
|
удаляй програмно, но обменданными.загрузка
|
|||
3
pechkin
09.11.21
✎
14:48
|
тогда при удалении группы подчинненные не удаляются
|
|||
4
Garykom
гуру
09.11.21
✎
14:48
|
(1) "покажите друга" ?
|
|||
5
ДенисЧ
09.11.21
✎
14:49
|
(4) А оно тебе надо? ))
|
|||
6
Garykom
гуру
09.11.21
✎
14:53
|
(5) Нет, я же не доктор
|
|||
7
ДенисЧ
09.11.21
✎
14:55
|
(6) "Я не доктор, но посмотреть могу" (с)
|
|||
8
andryscha1c
09.11.21
✎
14:56
|
(2) как вариант использовать транзакции?
|
|||
9
andryscha1c
09.11.21
✎
14:56
|
(3) нужно все подчиненные удалить, то есть к примеру на форме выбрал группу, а далее как бы в иерархии все что находится внутри этой группы
|
|||
10
mistеr
09.11.21
✎
14:57
|
(0) ИР, Подбор и обработка?
|
|||
11
andryscha1c
09.11.21
✎
15:05
|
(10) групповым изменением объектов хотел воспользоваться, но там зависает уже на этапе отбора
|
|||
12
tesei
09.11.21
✎
15:05
|
Есть обработка пакетного удаления объектов. Можно вычислить, что именно не удаляется (с определенного момента пакет не будет обработан), и работать с этим.
|
|||
13
Sapiens_bru
09.11.21
✎
15:18
|
База файловая?
Если нет - такие вещи легко разруливаются на уровне sql сервера. |
|||
14
andryscha1c
09.11.21
✎
15:20
|
(13) SQL, куда копать?
|
|||
15
tesei
09.11.21
✎
15:25
|
+ (12) Вот у тебя 600 000 объектов. Запускаешь пакетное удаление по 20 объектов, будет удаляться до тех пор, пока не споткнется. У проблемного объекта обнуляй родителя.
|
|||
16
Strogg
09.11.21
✎
15:28
|
(0) в чем проблема написать пакетную обработку пометки и дальнейшего удаления? У меня как-то создалось 2 миллиона наименований продукции ветис, так я порциями по 50к помечал/удалял в течении пары недель.
|
|||
17
Garykom
гуру
09.11.21
✎
15:33
|
(16) а слабо было в 20-30 потоков запустить на сервере?
|
|||
18
mistеr
09.11.21
✎
15:33
|
(11) Отбор делай запросом, результат передавай в обработку.
|
|||
19
andryscha1c
09.11.21
✎
15:34
|
(15) (16) пакетное удаление имеется ввиду делать запрос к примеру по 5000 и удалять программно сразу?
|
|||
20
Strogg
09.11.21
✎
15:36
|
(17) ха. На какой-то платформе делал многопоточную реглу - так она постоянно вылетала в ошибку. Пробовал добавлять до 10 потоков - выигрыш во времени составил около 30% при постоянных сваливаниях в штопор(причем, при одном потоке отрабатывала на ура!)... Хз, может платформа неудачная была, но многопоточность тогда совсем не зашла...
|
|||
21
Sapiens_bru
09.11.21
✎
15:38
|
(14) MS-SQL ?
У справочника иерархия элементов или элементов и групп? |
|||
22
Dmitrii
гуру
09.11.21
✎
15:41
|
(0) Я не понял. А вы выяснили - в чём конкретно косяк? У какой-то одной группы в качестве родителя указана она сама?
Тогда что мешает найти эту одну проблемную группу и исправить проблему? Или таких групп множество? Какие-то сказки венского леса. |
|||
23
andryscha1c
09.11.21
✎
15:42
|
(21) групп
|
|||
24
andryscha1c
09.11.21
✎
15:46
|
(22) у всех групп, раскрывая группы содержит группу с тем же названием что и родитель
|
|||
25
mistеr
09.11.21
✎
15:48
|
(24) Отключи наконец иерархический просмотр.
|
|||
26
Garykom
гуру
09.11.21
✎
15:49
|
(20) это очень странно
на той же платформе юзеры не вылетали случаем? ибо правильно заюзанная ничуть не хуже часто выбивает фоновые когда ресурсов не хватает, например оперативки или еще какие то проблемы |
|||
27
andryscha1c
09.11.21
✎
15:53
|
(25) это не решит проблему
|
|||
28
mistеr
09.11.21
✎
15:56
|
(27) Для начала проблему нужно правильно диагностировать. Пока не видно каких-то усилий от тебя в этом направлении.
|
|||
29
Dmitrii
гуру
09.11.21
✎
16:09
|
(24) >> у всех групп, раскрывая группы содержит группу с тем же названием что и родитель
А теперь по-русски и в терминах 1С. А не куцым языком пользователя, вчера увидевшего 1С. |
|||
30
Dmitrii
гуру
09.11.21
✎
16:19
|
Если справочник с иерархией групп и элементов, я бы тупо удалил (непосредственное удаление без контроля ссылочной целостности) всех групп, которые не являются родителями для элементов.
Вторым шагом (если он вообще потребуется) отобрал бы группы, где <Родитель> = <Ссылка> (группы у которых родитель сама эта группа), и очистил бы реквизит <Родитель>, сделав их таким образом корневыми. Потом разбирался бы с результатом и при необходимости заставил бы этого пользователя раскладывать группы, вылезшие на предыдущем шаге в корень справочника, по нужным папкам (группам). Хотя, есть ненулевая вероятность, что всё гораздо проще и в справочнике есть одна единственная группа, где <Родитель> = <Ссылка>. тогда достаточно найти эту группу и исправить в ней родителя на правильного. |
|||
31
Sapiens_bru
09.11.21
✎
16:21
|
(23)
Сделай копию базы Зайди в Sql Management Studio Найди свою базу, нажми на ней правой кнопкой и выбери "Выполнить Запрос" Вставь текст запроса: UPDATE [_Reference32] set _ParentIDRRef = CAST(0x00000000000000000000000000000000 AS varbinary(16)) where _Folder = 0x00 Вместо _Reference32 подставь имя таблицы где у тебя данные лежат. Инструментов про просмотру структуры базы данных полно Выполни запрос. В результате запроса все группы в справочнике потеряют иерархию. При этом элементы справочника останутся в своих группах. Останется собрать справочник заново, распихать группы по группам. |
|||
32
Sapiens_bru
09.11.21
✎
16:22
|
(31) Миста криво куски кода определяет(
В тексте запроса три строки, не ошибись |
|||
33
Dmitrii
гуру
09.11.21
✎
16:54
|
Если автор умудрился сотворить (0), то сейчас ему только прямых SQL-запросов не хватает, чтобы убить базу окончательно.
|
|||
34
timurhv
09.11.21
✎
17:11
|
(33) Написано что пользователь, но ИМХО это план обмена или обработка.
|
|||
35
andryscha1c
09.11.21
✎
23:24
|
(33) (34) сотворил это пользователь, скорее с помощью запущенной обработки.
|
|||
36
andryscha1c
09.11.21
✎
23:26
|
(31) это очистит все данные с таблицы? (нужен отбор по группе определенной, сохранив элементы)
|
|||
37
andryscha1c
09.11.21
✎
23:31
|
(36) where _Folder = 0x00 вот тут это как то определить надо будет вместо 0x00?
|
|||
38
Ёпрст
09.11.21
✎
23:57
|
(37) 0x01 - элемент, 0x00 - группа
|
|||
39
Ёпрст
09.11.21
✎
23:58
|
но, я бы так не делал.
|
|||
40
TormozIT
гуру
09.11.21
✎
23:58
|
Объект = Ссылка.ПолучитьОбъект();
Объект.ОбменДанными.Загрузка = Истина; Объект.Родитель = 0; Объект.Записать(); Не помогает разве? |
|||
41
Ёпрст
09.11.21
✎
23:59
|
(40) помогает, просто автор не может толком объяснить, что у него "зацикленно"
|
|||
42
Ёпрст
10.11.21
✎
00:01
|
Проще так написать, если Родитель = ссылке у группы
UPDATE [_Reference32] set _ParentIDRRef = CAST(0x00000000000000000000000000000000 AS varbinary(16)) where _ParentIDRRef = _IDRRef |
|||
43
andryscha1c
10.11.21
✎
00:42
|
||||
44
andryscha1c
10.11.21
✎
00:43
|
(40) надо полностью удалить элементы групп, выше скрин
|
|||
45
серый КТУЛХУ
10.11.21
✎
01:27
|
(43): о, кучно пошло... кто-то с рекурсией криво поигрался небось...
|
|||
46
Sapiens_bru
10.11.21
✎
05:12
|
(36) Ты программист 1С?
Если нет, позови программиста. Я думал у тебя справочник зациклен и средствами платформы не обрабатывается. Предложил как его расциклить, а уж обработать сам знаешь как. Но похоже не знаешь. Программист с подобными проблемами помогает так : подключается, слушает пользователя, смотрит вместе с ним в рабочую базу, уточняет задачу вопросами. Потом берет копию базы и на ней делает хорошо. Показывает пользователю. Если их понятие о "хорошо" совпало - те же действия выполняются в рабочей базе Ты пытаешься решить проблему через два глухих телефона. Первое - нифига не можешь объяснить что нужно сделать. Второе - попытаешься применить решение сам без понятия как оно работает. |
|||
47
Обработка
10.11.21
✎
05:31
|
Задача в теме - одно из задач чтобы понять человек может стать кодером или нет.
Пусть даже на уровне логики чтоб решил без всякого языка программирования. |
|||
48
Ёпрст
10.11.21
✎
09:24
|
(43) и? Тут нет никакого "зацикливания" . Все группы имеют уникальный код.
Можно их удалить примитивным запросом, тупо удалять все группы, если количество групп с одинаковым наименованием >1 |
|||
49
Dmitrii
гуру
10.11.21
✎
09:53
|
(35) >> сотворил это пользователь, скорее с помощью запущенной обработки.
А такие "волшебные" обработки у вас пользователи сами пишут? Ну к чему ей богу эти детские отмазки? Я ж без особых претензий к тебе. Все ошибаются. Но, судя по тому, что ты не в состоянии даже понять источник и причину проблемы, лучше руками через прямые запросы к СУБД ничего не делать. Тем более, что с вероятностью 99.9% проблема решается средствами платформы и даже без программирования. |
|||
50
Garykom
гуру
10.11.21
✎
09:57
|
(49) Угу. В типовых есть Корректировка данных > Групповое изменение реквизитов
|
|||
51
Ёпрст
10.11.21
✎
11:11
|
На вот, поставишь своё имя базы, своё имя таблички и своё наименование. Занимайся
|
|||
52
youalex
10.11.21
✎
11:52
|
(51) если такая структура будет, удалит корневой элемент и будет битая ссылка у второй группы
Полуфабрикаты Полуфабрикаты Элемент1 |
|||
53
Ёпрст
10.11.21
✎
12:00
|
(52) ?
|
|||
54
Ёпрст
10.11.21
✎
12:00
|
посмотри внимательнее
|
|||
55
Ёпрст
10.11.21
✎
12:00
|
там всё ровно
|
|||
56
Ёпрст
10.11.21
✎
12:06
|
Да.. будет битая, ну и ладно
|
|||
57
Ёпрст
10.11.21
✎
12:07
|
проапдейтить потом оставшуюся группу поуфабрикат на предмет родителя
|
|||
58
Ёпрст
10.11.21
✎
12:11
|
Поправил, занимайся
|
|||
59
andryscha1c
11.11.21
✎
01:38
|
(58) вам можно как то написать лично для решения задачи $$$ посредством запроса sql?
|
|||
60
Ёпрст
11.11.21
✎
01:45
|
(59) дык тебе же дали готовый запрос, подставь своё имя таблички и имя базы и всё
|
|||
61
andryscha1c
11.11.21
✎
09:54
|
(60) к сожалению, пытался по всякому, не сработало
|
|||
62
Ёпрст
11.11.21
✎
10:06
|
(61) Не сработало, это как ? :))
|
|||
63
andryscha1c
11.11.21
✎
11:19
|
(62) обработано 0 записей, как будто бы запрос пустой выдал. Могу вам на почту хотя бы скрин скинуть?)
|
|||
64
andryscha1c
11.11.21
✎
11:20
|
(63) хоть он и выполнился успешно, но ничего не удалилось
|
|||
65
OldCondom
11.11.21
✎
11:26
|
(62) видимо от того, что вы по очень странной причине решили, что данному персонажу можно не писать комментарий в запросе update "вот сюда воткнуть имя таблички".
|
|||
66
andryscha1c
11.11.21
✎
11:36
|
(65) поменяли
|
|||
67
OldCondom
11.11.21
✎
11:46
|
откуда имя таблицы справочника взяли? Чудес не бывает
|
|||
68
Ёпрст
11.11.21
✎
11:55
|
(63) ну дай доступ по тимвьюверу/анидеску/эммиадмину ..посмотрю, че ты там творишь
|
|||
69
Ёпрст
11.11.21
✎
11:55
|
||||
70
andryscha1c
11.11.21
✎
11:57
|
(69) Спасибо. напишу.
|
|||
71
Ёпрст
11.11.21
✎
13:09
|
Короче, имя таблички было другое, ибо справочник болтался в расширении, ну и табличка с X в конце. А так, починилось.
|
|||
72
OldCondom
11.11.21
✎
13:29
|
собственно 67. Это печально конечно, откровенно профессиональные импотенты появляются все чаще.
|
|||
73
andryscha1c
12.11.21
✎
23:51
|
(71) спасибо, большое, за помощь!
|
|||
74
GANR
13.11.21
✎
12:24
|
(0) Если нужных элементов немного, делается так:
1. Выгрузить нужные элементы через ВыгрузкаЗагрузкаДанных или самопальную обработку 2. truncate table убить все данные 3. Загрузить выгруженные в п.1 данные с ОбменДанными.Загрузка = Истина |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |