Внимание! Согласно лицензионному соглашению 1С нельзя манипулировать данными средствами СУБД. Поэтому данная обработка носит чисто теоретический характер для понимания структуры хранения и целостности данных в SQL. Во избежание нарушения лицензионного соглашения 1С нельзя запускать эту обработку.
Постановка задачи (придуманная, но вполне реальная): Начать заново ведение учета в существующей ИБ (не свертка, а так называемый «рестарт»).
Анализ поставленной задачи: Для рестарта нам необходимо сохранить все константы, все справочники, некоторые документы (например, по установке цен или по принятию сотрудников) и некоторые регистры сведений (не подчиненные регистратору). В классическом варианте, конечно же, необходимо взять чистую ИБ и в неё загрузить все необходимые данные из текущей ИБ. Т.к. конфигурации идентичные, то это сделать не сложно через XML. Но, для понимания структуры хранения и целостности данных в SQL, был принят к рассмотрению вариант очистки «лишних» данных средствами SQL.
Алгоритм выполнения поставленной задачи:
1. Средствами SQL удаляем: выборочные документы, все журналы документов, все последовательности, выборочные бизнес-процессы и задачи.
2. Средствами SQL удаляем: выборочные регистры сведений (не подчиненных регистратору).
3. Средствами SQL удаляем: все регистры сведений (подчиненные регистратору), все регистры накопления, все регистры бухгалтерии, все регистры расчета (в т.ч. перерасчеты) и все планы обмена.
4. Запустить штатный механизм удаления помеченных на удаление (т.к. во 1-ых: Планы обмена в данном механизме не удаляются через SQL, а на них устанавливается пометка удаления; во 2-ых: Обычно существуют элементы справочников, которые помечены на удаление, а удалить их раньше было нельзя, т.к. использовались в документах).
5. В конфигураторе запустить «Тестирование и исправление».
6. Перепровести документы, не удаленные в п.1.
Особенность выполнения обработки: все таблицы хранения данных в ИБ получаются с помощью метода ПолучитьСтруктуруХраненияБазыДанных(), а удаляются с помощью команды SQL: TRUNCATE TABLE [ИмяТаблицы] (кроме планов обмена, на которые просто устанавливается пометка удаления. Планы обмена необходимо удалять штатными средствами, т.к. есть предопределенные элменты и регистрация изменений).
Жду комментарии специалистов по поводу целостности ИБ при использовании такого подхода.
Обновление от 11.01.2013
Добавлена версия обработки под 8.1
Правда, поставить сервер 8.1 и протестировать один нюанс не было времени.
Поэтому опишу его сдесь.
В 8.1 у метода ПолучитьСтруктуруХраненияБазыДанных() в оличии от 8.2 отсутствует 2-ой параметр, отвечающий, в каких терминах выдается информация о структуре хранения. Поэтому, возможно, в коде необходимо подредактировать имена таблиц. Это реализовано в модуле обработки в последней процедуре ОчиститьОбъектыНаУровнеSQL(), достаточно раскаментировать.
Очень было бы полезно чистить базу по фильтрам, например по организации.
вот ведь засаду 1с-овцы устроили со своим лицензионным соглашением.
Как-то надо было свернуть базу. Быстро. Вырезать из нее лет 5 интенсивной работы. Документов накоплено ну ОЧЕНЬ много. Сделал попытку пометить на удаление документы одного вида за 1 год и удалить. Пометка на удаление длилась часов 5. Удаление не смогло выполниться — умерло на стадии контроля ссылочной целостности — памяти не хватило. В итоге пришлось крошить данные прямо в SQL. Руками. Делая запросы к каждой таблице.
Так что дорабатывайте свою обработку до коммерческого использования с использованием хотя бы простейших условий и ограничений, например, по дате документа. Спрос, думаю, будет.
А не проще, соблюдая лицензионное соглашение, перегрузить в «пустышку» необходимые данные?
Какая-нить есть статистика? Сколько по времени/размеру базу схлопывали?
(1) Да, было бы полезно в разрезе организации и на дату(интервал)
Да забейте вы на «нарушение лицензионного соглашения». Там еще разобраться нужно, кто и что нарушил 🙂
Какая-нить есть статистика? Сколько по времени/размеру базу схлопывали?
Регистр «Списанные товары» конфигурации «Управление торговлей» Предприятие 8.1. Сам регистр не хилый — много ресурсов. Кол-во записей 404 207 030. Не знаю сколько времени нужно, через 1С удалять все это чудо, но вот из SQL через DROP and CreateTable это происходит меньше чем за секунду!
(1)(2)(4) Да, наверное, в ближайшее время доработаю для универсальности.
(3) Проще, но дольше и не интересней 🙂
(4) На уровне SQL эта обработка очищает базу в считаные секунды, а штатными средствами на больших объемах очистка может занимать сутки, недели или вообще просто умирать от недостатка памяти.
(7) Было бы весьма кошерно, ибо: берем обычную файловую базёнку, поднимаем ее на скуле и после этого препарируем ее. Сплошь и рядом, когда ведутся несколько фирм и нужно все шевеления по какой-нить прибить. или папики ра$$ераются и начинают делить бизнес: фирма «А» — тебе, фирма «Б» — мне…
Очень интересная идея!
если бы ещё для 1С 7.7, было что-то похожее…
да, фильтры нужны. а публикация хорошая, автору спасибо 🙂
(9) Писал в свое время обработку пометки на удаление документов за период с очисткой движений регистров. Писал с использованием 1С++. Если есть на то потребность, могу выложить.
(11)
Было бы прекрасно, если Вы не просто выложили, а сделали бы сравнительный анализ: при прочих равных условиях, чья обработка быстрее, Ваша или ув. vetalvr (ну и вопрос «юзабилити» не на последнем месте)
(12) На сколько я понял, то (11) имеет ввиду обработку для версии 7.7
(12)(13) Обработка для 1с77.
Не хватает фильтра и возможности выбирать метаданные, а не только эти 3 пункта.
А вообще полезная штука, иногда бывает очень нужна. Спасибо!
Как раз вы вовремя, попробую, отпишу
Большую помощь оказали. Пытался сам через SQL-запросы писать, но все медленно и непонятен результат. Спасибо.
есть возможность попробовать, отпишусь потом что получилось…
а есть возможность для 1С 8.1 УТ очень нужно
(6) как ты запустил обработку на 1С 8.1 подскажи пожалуйста
(20) Banzai79, в (6) Homosum привел пример из собственных экспериментов, а не по этой обработке. У него даже метод другой используется.
(19) Banzai79, Вам в 8.1 обработку конвертнуть?
(22)
Думаю не только Banzai79 будет интересна данная обработка под 8.1…
Мне точно будет интересна 🙂
Похоже забыли про обработку…..
(24) Не забыл. Не стал её конвертировать на предыдущие версии из следующих соображений:
Если кто-то не может конвертнуть на предыдущие версии — значит он не программист 1С. Значит у него нет представления, как хранятся данные 1С в SQL. Обработка работает напрямую с таблицами SQL, обходя механизмы 1С, и требуется осознанное использование данной обработки. Хотя очистка средствами 1С в этой обработке тоже была реализована.
Отброшу идейные соображения и на днях конвертну под 8.0 (чтобы открыть её под 8.1 необходимо будет открыть её в конфигураторе).
Фильтры, наверное, таки да, тоже добавлю как-нибудь, но позже — работы очень много…
(19)(20)(23) Выложил обработку под 8.1. Возможно, её нужно будет подправить в связи с особенностями 8.1.
Странно работает обработка. Запустил, выбрал тип документов, нажал «Выполнить», вылезло окошко «Выполнено». Открываю документы — ничего не изменилось. Ни один не исчез. В чем соль?
(27) А можно немного подробностей?
— 8.1 или 8.2
— обычное или управляемое
— что выбрано: средствами 1С или через скул?
8.2
УТ 10.3
через скуль.
(29) Прошу прощения. В обработке для отладки временно была отключена процедура. Исправил и залил заново обработку.
СПС отлично работает, единственно что не понравилось — движения по регистрам рубятся только полностью, а если удалить документы то их движения остаются, может прикрутить к фильтрам по документам крыжик «удалять движение документов», или я может что то проглядел??
(31) Изначально исходя из поставленной задачи обработка написана таким образом, что таблицы очищаются только полностью. Чтобы очищать таблицы не полностью или очищать связанные движения, необходимо переписывать запросы на уровне SQL (для не полного очищения таблицы использовать фильтры, для связанных движений использовать соединения). Задача в принципе не сложная для тех, кто может написать подобные запросы на языке 1С.
Полезная вещь
А можно чтобы не удалялись предопределенные элементы?
(34) _Ramzes, эта обработка очищает документы и регистры. О каких предопределенных элементах идет речь?
Отличная обработка, ожидается её доработка про выбор по определенным фильтрам ?
(36) b-dm, пока не планировалось ввиду малого спроса