Вопрос № 27838: Товарищи эксперты, у меня такой вопрос. Я хочу в общем журнале документов удалить все документы за 2002-2004 год и оставить только 2005. Можно ли как-нибудь это сделать, не из программы? На удаление из программы 3000 документов у меня уйдет не один ч...
Вопрос № 27.838
Товарищи эксперты, у меня такой вопрос. Я хочу в общем журнале документов удалить все документы за 2002-2004 год и оставить только 2005. Можно ли как-нибудь это сделать, не из программы? На удаление из программы 3000 документов у меня уйдет не один час. Куда записываются все документы? В один файл или в разные таблицы?
Отправлен: 17.10.2005, 13:38
Вопрос задал: Dusha (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ovr1970
Здравствуйте, Dusha!
Вообще то документы записывабтся в разные файлы, которые начинаются DH (Шапки документов) и DT (табличные части). Соответственно каждому типу документов два файла. Но все документы дублируются в файле 1SJourn (Журнал документов, содержит номера и общие атрибуты) и 1SDNLock (Номера для блокировки при записи с тем же номером) и 1SCRDoc - ссылки на документы. Последний файл может пересчитать сам 1С. Все остальные придется чистить самому, но остается открытым вопрос о движениях документов. Если выполнить проверку,
то для всех движений будут опять созданы исходные документы (причем не заполненные, естественно). Если проверку не выполнять, то как узнавать о ошибках БД?
Поэтому мой совет: напиши програмное удаление документов и выполни его, даже если эта задача будет крутиться 10 дней. Просто нужно будет разбить ее на 10 частей и потихоньку запускать по одной части каждый выходной.
Ответ отправил: Ovr1970 (статус: 1-ый класс)
Отправлен: 17.10.2005, 13:53 Оценка за ответ: 4
Отвечает: FarGot
Здравствуйте, Dusha!
Сервис->Обработка документов, выбрать все документы, "обработка"-пометить на удаление. Примерно 2000 документов пометилось меньше чем за пять минут, ну еще столько же само удаление. Если уж настолько слабая машина что будет делать это часами - я бы перетащил базу на более мощьную, там бы убил все что нужно и назад. Еще вариант через import77.ert-export77.ert - наверное на любом диске ИТС есть.
Ответ отправил: FarGot (статус: 6-ой класс)
Отправлен: 17.10.2005, 18:02 Оценка за ответ: 5 Комментарий оценки: Спасибо огромное! Самый дельный совет! 5+++ ставлю!
Отвечает: Anefedov
Здравствуйте, Dusha!
В разные.
Советую потерпеть час, чтобы потом день не мучаться. Все равно руками контроль целостности не сделаешь.
Если очень лень ждать, и пофигу на последствия - сделай просто.
Процедура УдалитьНах()
Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы("01.02.2002", "31.12.2004");
Пока ДОк.ПолучитьДокуумент() = 1 Цикл
Док.Удалить(1);
КонецЦикла;
КонецПроцедуры
Но лучше сделать так:
Процедура УдалитьПравильно()
Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы("01.02.2002", "31.12.2004");
Пока ДОк.ПолучитьДокуумент() = 1 Цикл
Док.Удалить(0);
КонецЦикла;
КонецПроцедуры
И после этого запустить обработку - удаление помеченных объектов
Только все равно потом от бухгалтера или директора люлей получать придется за то, что все остатки полетели.
Нужно делать свертку базы - вот единственный прогрессивный подход!
Ответ отправил: Anefedov (статус: 7-ой класс)
Отправлен: 19.10.2005, 11:41 Оценка за ответ: 5
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Dusha!
Каждый документ лежит в двух файлах - шапка отдельно, табличная часть отдельно, и не факт, что первая и вторая строки есть соседние записи в dbf (они соседние, если использовать индекс). Так что в этом направлении движение неверно.
Вам нужно свернуть базу, то есть посмотреть остатки на конец 2004, завести их 01,
01,2005 (перенести остатки), и не только по проводкам, но и по регистрам.
Я у себя такое сделал. Это не так страшно, как кажется. Задал обработке перенести 15 дней, и оставил ее на ночь. За 24 ночи год свернулся. Я удалил более 45 тысяч документов, 900 элементов справочников и ничего.
Пример моей обработки ftp://82.207.94.32/CloseBase.ert