Имя: Пароль:
1C
1С v8
За какое время можно удалить 500 000 документов в БП 2.0?
0 fillIn
 
25.04.15
20:25
1. до 2 часов 40% (2)
2. более 4 суток 40% (2)
3. до 4 суток 20% (1)
4. до 8 часов 0% (0)
5. до 24 часов 0% (0)
Всего мнений: 5

Продолжение темы БП. Как ускорить закрытие периода?

Имеется 75000 контрагентов-физлиц, не ИП. Надо заменить их на одного контрагента. Один из этапов - удалить 500000 документов.
На это дается всего 2 часа (не спрашивайте, откуда такая цифра).
Клиент-серверный вариант. MS SQL. Сервера 16х1.4Ггц, RAM 32ГБ.

Есть мнение, что за 2 часа это сделать нереально. А каково по вашему мнению реальное время?
1 RomanYS
 
25.04.15
20:29
(0) а зачем удалять? ты их ещё сворачиваешь(объединяешь)?
2 fillIn
 
25.04.15
20:34
(1) Да. Вместо нескольких тысяч реализаций и оплат за месяц, надо сделать по одной реализации и одной оплате.
3 vde69
 
25.04.15
20:37
штатно не выйдет...

только удаление помеченных объектив на 0.5 ляма будет идти больше 2х часов
4 ShoGUN
 
25.04.15
20:38
(2) Во-первых, тут многое будет зависеть от дисков, имхо, а про них ничего не сказано, во-вторых, мне кажется, объединять при загрузке будет быстрее, чем хреначить 500000 документов, а потом из удалять.
5 Garykom
 
гуру
25.04.15
20:39
Сначала более 4 суток подготовки, и затем

до 2 часов
6 fillIn
 
25.04.15
20:41
(4) Это надо сделать в прошлых периодах в текущей базе.
7 RomanYS
 
25.04.15
20:43
может быстрее в пустую базу только нужное
8 fillIn
 
25.04.15
20:44
(6) Значит таки реально удалить за 2 часа? Что для это надо сделать за 4+ суток подготовки?
9 dmpl
 
25.04.15
20:45
(0) А может просто движения поправить? Зачем удалять?
10 jsmith82
 
25.04.15
20:45
Ну, если написать годный скрипт на T-SQL, то

до 2 часов
11 ДенисЧ
 
25.04.15
20:46
Мда... Тут лёгкая атлетика уже не поможет.
Тут только тотальная диспансеризация и детоксикация...
12 dmpl
 
25.04.15
20:46
(5) А подготовка зачем? Достаточно непосредственное удаление использовать.
13 fillIn
 
25.04.15
20:47
(7) Пробовали. Конвертация умирает на загрузке только справочников контрагентов и договоров. 250000 контрагентов (без физиков), еще больше договоров.
14 shuhard_серый
 
25.04.15
20:48
(0) а может и 30

более 4 суток
15 Garykom
 
гуру
25.04.15
20:50
(13) типовая да... тут как раз нужна самописная, на текстовых файлах с правильной транзакцией
16 fillIn
 
25.04.15
20:50
(10) Тут уже делали так. База после этого, мягко говоря, заглючила.
Требуется надежное решение.
17 ДенисЧ
 
25.04.15
20:51
(16) "База после этого, мягко говоря, заглючила"
Мягко говоря, тех, кто это делал, нужно было уволить.
Жёстко говоря - пристрелить...
18 fillIn
 
25.04.15
20:54
(17) Уже уволили. Не хочется уйти вслед за ними :)
Я считаю, что неплохо знаю структуру БД 1С, но не решусь удалять данные непосредственно в SQL.
19 RomanYS
 
25.04.15
20:56
(13) под конвертацией имеется в виду выгрузка по правилам обмена?
Или ВыгрузкаЗагрузкаXML тоже пробовали?
Откуда ограничение 2 часа?

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

до 4 суток
20 ДенисЧ
 
25.04.15
20:56
(18) А я считаю, что я плохо знаю структуры БД 1с 8*, но при необходимости выполнять такие операции - возьмусь, сделаю и всё будет работать, как часы "Командирские".
21 vde69
 
25.04.15
21:06
документы надо удалить выборочно или все определеного вида?
22 fillIn
 
25.04.15
21:08
(19) > под конвертацией имеется в виду выгрузка по правилам обмена?
Да

> Или ВыгрузкаЗагрузкаXML тоже пробовали?
А как это поможет?

> Откуда ограничение 2 часа?
Некоторые считают это реальным, причем только средствами 1С.

Документы проведены.
23 fillIn
 
25.04.15
21:10
(21) Несколько видов. Реализация, СФ, оплата, корректировка долга, может еще что-то забыл.
24 RomanYS
 
25.04.15
21:11
(22) я думаю, ВыгрузкаЗагрузкаXML будет заметно  быстрее чем обмен по правилам
25 dmpl
 
25.04.15
21:13
(22) Ну, если удалить именно документы - попробуй непосредственное удаление в монопольном режиме.
26 RomanYS
 
25.04.15
21:14
(22)
>Документы проведены.
Отключение итогов может ускорить удаление на порядок, только последующий расчет итогов может занять более 2 часов
27 fillIn
 
25.04.15
21:44
(15) Самописная конвертация? Рассматриваем как вариант.
На какое время можно выйти в этом случае по Вашему мнению?.
28 aspirant
 
25.04.15
22:11
Блин, да сделай в конце концов РИБ, и в файловой периферийное базе, размещённой в Рам диске проверки свои опыты, потом обмен между базами и все. Никто даже не заметит...
29 dmpl
 
25.04.15
22:13
(28) Обмен тупо свалится по недостатку памяти.
30 aspirant
 
25.04.15
22:20
(29) 64битный сервер не свалится. Настроить правильно транзакции и периодичность обменов.
31 fillIn
 
25.04.15
22:24
(28) Не вариант. Происходит, как в (29). 64-битный сервер 32ГБ ОЗУ. Оптимизация обмена - это уже другая история.
32 Злопчинский
 
25.04.15
23:13
Еще подсказывали что отключить регистрацию в журнале на массовых таких операциях
33 fillIn
 
25.04.15
23:48
(32) Сделали. Помогает, но не сильно.
34 Asirius
 
26.04.15
00:46
(0) Удалять непосредственно движения документов, при чем паралельно на разных таблицах.
Выпилить все срабатываемые события и блокировки (например, временно накатив подготовленную заранее конфу), а не просто обменданными.загрузка = истина.
35 Garykom
 
гуру
26.04.15
00:51
(27) все кроме проведения доков будет ок

скажем на нормальном обычном компе (файловая на ssd) до 100 записей (элементов справочника или документов) в секунду при загрузке (и правильно подобранной транзакции)
36 Wirtuozzz
 
26.04.15
00:59
(0) За два часа завалить базу - легко! Заказчику надеюсь вы сказали чем вся эта спешка обернется? Если нет, то надо бы сказать.
37 GANR
 
26.04.15
01:22
(10) Конечно же надо учитывать, что скрипт должен чистить еще и движения удаляемых документов (если есть). Плюс надо учесть, что на удаляемые документы может что-то ссылаться. К примеру, Поступление может фигурировать в качестве парии для какой-нибудь Реализации или Комплектации, а Реализация - выступает основанием Счета-Фактуры.

А особенно круто, если удаляемые документы могут ссылаться друг на друга, и плюс НА какие-то из удаляемой связки может ссылаться что-то, что нельзя удалять - тогда получается, что нельзя удалять всю связанную группу. Представляете себе алгоритм решения такой задачки?
38 Garykom
 
гуру
26.04.15
01:39
(37) лисапед... в смысле уже писалось и не раз "быстрое удаление" "связанных объектов"

все делается через списки (можно - низзя) и поиск ссылок
39 VladZ
 
26.04.15
08:37
(0) А не быстрее будет в чистую базу залить без этих 500 000 доков?
40 MaxS
 
26.04.15
08:57
А можно ли так?
Делается полный бэкап и копия базы средствами SQL.
На копии неспеша удаляются документы.
Потом в копию средствами SQL загружаются изменения из рабочей базы.
Рабочая база подменяется копией.
41 ProxyInspector
 
26.04.15
09:17
Можно удалить штатными средствами
1  Без перехода в монопольный режим по 1 штуке как это сделано в УТ11. Займет времени 500 тыс секунд = это около 1 года
2. В монопольном режиме удалять порциями по 20 тыс документов. Займет это часов 10 - 15
3. Написать обработку по поиску объектов без ссылок. За час она найдет все объекты без ссылок. Потом в монопольном режиме можно удалить эти объекты стандартным способом за пару часов.
  
  Хочешь я тебе напишу внешнюю обработку по удалению большого числа объектов с контролем ссылочной целостности с минимально возможным временем нахождения базы в монопольном режиме.
    PS. Для 7-ки 500 тыс. документов удаляется за несколько часов :)
42 Рэйв
 
26.04.15
09:19
мы скульно удаляли 5 000 000  расходных перед обрезкой около
5 часов
43 Рэйв
 
26.04.15
09:20
там даже 5 мильенов с половиной было помоему
44 ProxyInspector
 
26.04.15
09:23
Если (0) надо пометить на удаление эти 500 тыс. документов, то это сложнее. Типовым способом на это уйдет от 10 до 100 суток. Если через SQL час. Но с учетом того, что на 8-ке нет 1С++ , то это почти не реально.
45 ProxyInspector
 
26.04.15
09:25
Короче, если (0) задает такие вопросы, то автор не удалит 500 тыс документов :)

более 4 суток
46 EugeniaK
 
26.04.15
09:34
(0) Можно не удалять, а просто в фоновом режиме постепенно заменять несколько на один и помечать на удаление. Монопольный режим тут не нужен, постепенно удалятся.
47 ILM
 
гуру
26.04.15
10:33
Может съесть слона по кусочкам.
1. Ввести нужный остаток где надо (можно за два часа).
2. Удалить что не нужно (несколько суток).
3. Получить что причитается (до нескольких часов).
48 vde69
 
26.04.15
11:26
я немного поработаю телепатом...

у автора розница, весь квартал оформляли на разных физиков...
сейчас время сдачи НДС, а проверка ругается на не заполненное ИНН,
кто-то умный сказал - оформляйте все на Иванова, у него ИНН есть и все пройдет....

а документов дофига и времени в обрез...

способ реально только один
1. отключаем итоги
2. запускаем 10 сесий, каждая обрабатывает документы которые заканчиваются на цифру номер сесии (от 0 до 9)
3. устанавливаем пометки проведения
4. после в одной сесии генерим новые документы и их проводим
5. сдаем НДС
6. в фоне удаляем помеченные на удаление объекты в течении месяца...
49 ILM
 
гуру
26.04.15
11:30
(48) Тут и телепатом не надо быть, чтобы понять - ТС НДС не сдаст их текущей базы. Нужно выгрузить реализацию и уже в ХМЛ заменять значения физика, или в самой декларации при сдаче. Короче решений масса, но они вне текущей базы.
50 vde69
 
26.04.15
11:34
кстати есть такое решение

на копии всех физиков банально изменить на одну фамилию и один ИНН, а потом по кодам вернуть взад...

вся прелесть - не надо документы ни удалять ни новые делать...
51 vde69
 
26.04.15
11:35
(50) реально минут 300 займет...
52 vde69
 
26.04.15
11:35
30
53 v8Newbie
 
26.04.15
11:56
(0) Легко до 2 часов. TSQL в помощь.
54 vde69
 
26.04.15
16:06
(53) ты за 2 часа напишешь и отладишь скрипт который корректно удаляет документы, движения и при этом все с контролем ссылочной целостности?
55 ДенисЧ
 
26.04.15
16:08
(54) Задача не написать скрипт за 2 часа, а чтобы он отработал за эти 2 часа
56 Garykom
 
гуру
26.04.15
17:10
(50) а не проще поменять только в одном месте? в месте проверки

Если ПустаяСтрока(ИНН) Тогда
ИНН=ИНН_Одного_Физика_С_ИНН;
КонецЕсли;
57 v8Newbie
 
26.04.15
17:18
(54) Набрать по видам документов ссылок во временную таблицу, проиндексировать и написать delete по всем регистрам(по виду регистратора) по регистратору с join по временной таблице? Да пожалуй что смогу...