• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Удаление документов 1с77

  • Автор темы vbs
  • Дата начала
V

vbs

Понадобилось удалить тучу документов в базе ТиС 8.7 (около 500.000).
Зачем - не спрашивайте, свертку стандартными средствами не предлагать :*цензура*you:
Пометка на удаление и последующее "Удаление помеченных" работает крайне медленно (База формата ДБФ размер 5,5ГБ).
Обработка по непосредственному удалению - тоже медленно.
Попробовал использовать в ней транзакцию, причем фиксирую ее через каждую сотню документов. Не скажу, что летает, но, по крайней мере, не висит по несколько минут.
Скорость удаления удалось поднять до 1000 документов за 7-10 минут. Но и тут случаются тормоза (видно по счетчику в статусе) - еще до фиксации транзакции
на отдельных документах висим секунд по 20-30.
Собственно, к чему это я ? Пожалуй, к тому, чтобы выслушать компетентные комментарии, да и пожалели чтоб... :welcome:
Сижу вот 5 часов уже, и конца не видно :)
Да и другие открытые приложения скорости отнюдь не способствуют...
 
Д

Дайнеко

Это просто.
Время при удалении дока от 2007г. уходит на пересчет итогов от даты дока до сегодняшнего дня.
Есть способы:

Пользовательский:
"Управление оперативными итогами". Установить дату ТА на начало века.
"Управление бухгалтерскими итогами". Установить квартал туда же.

Хакерский:
Можно сочетать с предыдущим. Удалить файлы с проводками и итогами: 1SBKTTL.*, 1SENTRY.*, Все RG*.*, RA*.*. Пересчитываться будет нечему.

Программный:
Транзакции нужны. И завершение Тран. ставить не через 100 доков. А в начале-конце. Когда слишком много доков и мало ОЗУ, запускать удаление по годам.

Предполагаемое ускорение 3-5 раз.
 
E

evgenyatam

вообще то в вопросе не указано проведенные они или нет. если проведенные - время тратится на распроведение. если нет - только на запись в файл.
 
V

vbs

Хакерский:
Можно сочетать с предыдущим. Удалить файлы с проводками и итогами: 1SBKTTL.*, 1SENTRY.*, Все RG*.*, RA*.*. Пересчитываться будет нечему.
Не мой, вроде, случай.Условно говоря, надо в базе оставить документы за 3 месяца текущего года. А что произойдет потом, когда все регистры удалены ?
Понятно, что восстановление последовательности все восстановит, и быстрее будет. Буду пробовать
Программный:
Транзакции нужны. И завершение Тран. ставить не через 100 доков. А в начале-конце. Когда слишком много доков и мало ОЗУ, запускать удаление по годам
С этим вообше беда. Вчера ушел, подав на удаление месяц с одной фиксацией транзакции (примерно 30 000 документов), через 4 часа вернулся - висим на числе 3437 :)
Число 100 родилось опытным путем, да и в случае повисания хоть что-то удаляется. Вот сегодня в 7 утра запустил месяц с квантовой фиксацией транзакции по сотне - за 6 часов удалилось 13000
вообще то в вопросе не указано проведенные они или нет. если проведенные - время тратится на распроведение. если нет - только на запись в файл.
Мысль хорошая - попробую снять проведение, но тоже процесс небыстрый

Тем не менее, спасибо за оперативные отклики
 
P

puh14

Коли так может проще сделать копию, поубивать документы и регистры и перенести документы за последние три месяца и провести их? остатки на начало периода переносились вообще элементарно - - тз с итогами выгружалось в текст с сохранением идентификаторов, а в копии примитивная обработка создавала документы ввода остатков. Так как это копия и айдишники одинаковые - то прокатывало. В понедельник могу помочь с обработкой по остаткам. Как скопировать документы - это вопрос. Наверно придется подрубаться по ОЛЕ перебирать в цикле метаданные и присваивать значения реквизитов. Эххх - еслиб знать как вызвать программно копирование документа, как это сделано в журнале....
 
V

vbs

Коли так может проще сделать копию, поубивать документы и регистры и перенести документы за последние три месяца и провести их
Не проще. Процесс очень долгий. Правда, может, у меня программа переноса не слишком хороша (1000 документов, а это примерно столько за день, выгружаются минут 20, а загружаются раза в 2 дольше)
остатки на начало периода переносились вообще элементарно - - тз с итогами выгружалось в текст с сохранением идентификаторов
Остатки по контрагентам и товарам я уже лет 8 умею переносить. Только пользую файл ДБФ из 3-4 полей и коды товаров и контрагентов

А вот "хакерский" метод от Дайнеко - это ПЯТЬ
Я убил регистры и все документы удалились за 15 минут (в среднем по 30000 в минуту).
Теперь осталось загрузить остатки (это на час), восстановить последовательность и, откинувшись на спинку кресла, закурить кальян,
ожидая горячей благодарности заказчика в материальном выражении
 
Д

Дайнеко

А вот "хакерский" метод от Дайнеко - это ПЯТЬ
...... ожидая горячей благодарности заказчика в материальном выражении
А где благодарность советчику?

Хочу заметить, что метод Пользовательский в сочетании с транзакциями едва ли уступает в скорости. Пропустим мимо ушей замечание "вообще то в вопросе не указано проведенные они или нет" - ну что за база такого размера с одними непроведенными? Утверждаю, что 80-90% времени уходит на распроведение. При откатанной ТА в начало базы, система не запускает пересчет итогов. Ну а плюсище метода - вернул ТА на сегодня - и никакой возни с переносами.
И еще мысль родилась - может Вы над базой так раз несколько поиздевались? Обязательно нужно упаковка таблиц базы. Это существенно уменьшает удаление помеченных.
 
V

vbs

А где благодарность советчику?
Кстати, за такой полезный совет, готов и материально отблагодарить, предлагай варианты
И еще мысль родилась - может Вы над базой так раз несколько поиздевались? Обязательно нужно упаковка таблиц базы. Это существенно уменьшает удаление помеченных.
Ну уж, все же я не до такой степени туп :*цензура*you:
Дайнеко сказал(а):
Хочу заметить, что метод Пользовательский в сочетании с транзакциями едва ли уступает в скорости
Настолько порадовала победа после удаления регистров, что даже и не проверял.
А вот для бухгалтерии при случае обязательно воспользуюсь
 
V

vbs

Я ведь вполне серьезно !
Времени мне дельный совет сэкономил немало. Готов поделиться. Если мы из одного города, проблему легко решим :rolleyes:
 
V

vbs

Транзакции нужны. И завершение Тран. ставить не через 100 доков. А в начале-конце. Когда слишком много доков и мало ОЗУ, запускать удаление по годам.
И еще дополнение для того, чтобы расставить точки над i. Замечу, что получено экспериментальным путем.
С одной транзакцией первые несколько тысяч доков удаляются очень быстро (12-13 тыс в минуту), потом процесс существенно замедляется и скорость падает до 500 в минуту.
С ОЗУ у меня все в порядке (4Гб).
Я для своего случая выяснил, что оптимально транзакцию начинать-завершать примерно через каждые 30 тыс. документов, тогда процесс удаления летает.
Если найдутся желающие проверить, буду рад услышать отзывы.
В любом случае поток теплых слов в адрес Дайнеко не иссякает
 
V

vbs

Дошли руки до проверки на Бухгалтерии 4.5
Удалял документы за год (около 30 тысяч)
1. Пользовательский метод (с откатом назад бух. итогов) 17 мин. (в обычном варианте 4 часа)
2. "Хакерский" (с удалением 1SBKTTL.*, 1SENTRY.*) 4 мин
и еще раз убедился, что транзакция квантами быстрее, чем одна общая
Рекомендую :)
 
V

vbs

Можно сочетать с предыдущим. Удалить файлы с проводками и итогами: 1SBKTTL.*, 1SENTRY.*, Все RG*.*, RA*.*. Пересчитываться будет нечему.


Для бухгалтерии все не так просто

После удаления 1SENTRY.* умирают все документы "Операция". Справился так : выгрузил нужные операции, а потом их внедрил в обрезанную базу.
Кроме того, такой нюанс : удаление в таком варианте, разумеется, раз в 100 быстрее. Но приходится перепроводить все оставшиеся в базе документы -
а это вещь небыстрая. И не факт, что окупает быстрое удаление. Вывод : Метод, предложенный Дайнеко надо использовать с осторожностью.
Если удаляете 50% и больше - да, если нет - время на перепроведение может занять гораздо больше времени, нежели время на удаление
 
Д

Дайнеко

Если удаляете 50% и больше...

Ну, голубчик, та-ки проснулся и попробовал. :)
Разумеется удалить файлы проводок и регистров можно только при удалении всех документов. А если свертку делаете, то этот пункт пропустим. Бывает просят: сделай новую базу, но все справочники и настройки возьми из старой.
 
V

vbs

Ну, голубчик, та-ки проснулся и попробовал.

Таки пробую довольно часто.

Разумеется удалить файлы проводок и регистров можно только при удалении всех документов

Или, если оставить документы за небольшой период - тогда перепроведение не займет много времени

Бывает просят: сделай новую базу, но все справочники и настройки возьми из старой

А для этого случая есть и более простой способ : Оставить в базе 1SBLOB, 1SCONST, 1SUSERS, 1SSYSTEM и SC*.* - остальное тупо удалить.
Справедливо и для Бух и для ТиС
Всей работы на 2 минуты

А я изначально страдал, когда резал ТиС, где нужно было оставить документы за несколько дней (типа 10 января при обрезке на начало года)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!