Очистка базы данных от данных по организации

Обработка генерирует SQL-скрипт, который очищает базу данных от документов выбранной организации. Проверялась на конфигурации Управление производственным предприятием на платформе 8.3. Но в принципе универсальная для стандартных конфигураций на платформе 8.3.

В БД велось несколько организаций. Некоторые закрылись несколько несколько лет назад. Сама БД стала весить гораздо более 400 ГБ. Встал вопрос об уменьшении базы за счет "вырезания" из нее ненужных документов закрытых организаций.

Для этого был написана эта обработка.

Как пользоваться:

1. Запустить обработку в 1С предприятии в нужной базе.

2. Выбрать Организацию.

3. Нажать кнопку "Выполнить". Запустится процедура генерации SQL-скрипта. Будет создан файл и в сообщении указано его имя.

4. Запустить SQL Server Management Studio.

5. Нажать кнопку "Open File" и выбрать созданный файл.

6. Выбрать нужную базу для выполнения скрипта.

7. Нажать кнопку "Execute". Скрипт начнет выполняться. Время выполнения зависит от объема данных по организации и мощности сервера. У меня с 400Г до 200Г резалось около часа. Документов было около миллиона.

8. После выполнения скрипта запустить 1С в режиме Конфигуратор в обрезанной базе.

9. В меню "Администрирование" выбрать пункт "Тестирование и исправление". Откроется окно настройки тестирования и исправления.

10. Выбрать только пункт "Пересчет итогов". Скрипт не смотрит на таблицы итогов и оборотов в регистрах, поэтому пересчет итогов необходим.

26 Comments

  1. Novoenkov

    Т.е. скрипт только удаляет документы, а битые ссылки очищаются, регистры исправляются тестированием и исправлением?

    Reply
  2. mugr

    (1) Скрипт удаляет:

    1. Данные в шапке документа (т.е. сами ссылки)

    2. Табличные части документа

    3. Движения документа по регистрам накопления, бухгалтерии, сведений и последовательностям. При этом не трогаются таблицы промежуточных итогов (остатков или оборотов), поэтому и нужен пересчет итогов.

    4. Частично удаляются битые ссылки (по тем регистрам, где я был уверен). Полной чистки (по справочникам, документам и регистрам) писать не стал. Причина — это потенциально более опасное действие — можно удалить нужные данные по другой организации… Битые ссылки отрабатывались отдельно после более тщательного анализа.

    Поэтому ССЫЛКИ после обработки ВОССТАНАВЛИВАТЬ не НАДО! Нужен детальный анализ и скрипт более тщательно подготовленный с расширенной фильтрацией.

    Reply
  3. puzakov

    Это нарушение лицензионного соглашения 1с.

    Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными «1С:Предприятия» — например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД. Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных «1С:Предприятия».

    http://v8.1c.ru/predpriyatie/questions_licence.htm#65

    Reply
  4. sovital

    (3) Лицензионное соглашение не позволяет использовать недокументированные фирмой «1С» средства для построения решений на платформе 1С:Предприятие. Это означает, что средства СУБД (или любые другие внесистемные средства) можно использовать только в том случае, если документация по продуктам линейки «1С:Предприятие» (включая 1С:ИТС) содержит явную рекомендацию использовать данное средство для решения данной задачи.



    Данное ограничение необходимо для обеспечения стабильности работы механизмов системы, осуществления поддержки и возможности перехода на новые версии «1С:Предприятия».

    1. Для задач разделения конфигураций по юридическим лицам компания 1С ничего не советует. Помечайте на удаление и удаляйте не работает, ибо сроки такой реализации подхода крайне неприемлемы.

    2. Такие задачи делаются не для повседневной работы, а для того, чтобы можно иметь базу с одним юрлицом для проверяющих органов.

    3. Данные принадлежат мне, и работа с ними регламентируется лицензионным соглашением Microsoft. И с помощью средств СУБД имею полное право на то, чтобы смотреть что и как там.

    Reply
  5. mugr

    Согласен с Яном.

    Если бы 1С не позиционировала себя как решение для крупных предприятий или дала стандартную возможность удалить пол-базы за приемлемые сроки (расчетно у меня было около недели стандартными методами [распроведение, пометка и удаление с отключенными итогами] или обменом данных), то таких обработок бы и не появлялось.

    Причем тут крупные предприятия: жизненный цикл базы на таких подразумевает, что ее надо чистить и при этом довольно быстро. Имеется ввиду Frontend-база, т.е. куда заносятся данные. Backend-базы нехай себе данные для аналитики копят их резать глупо. И тут появляется противоречие быстро это стандартными методами сделать нельзя.

    Про стандартные методы. Для меня уже 15 лет загадка, почему нельзя разрешить конструкцию:

    Запрос = Новый Запрос(«ВЫБРАТЬ Ссылка ИЗ Документ.РасчетСебестоимостиВыпуска»);
    мс = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(«Ссылка»);
    РегистрыНакопления.НезавершенноеПроизводство.УстановитьИспользованиеИтогов(ЛОЖЬ);
    нз = РегистрыНакопления.НезавершенноеПроизводство.СоздатьНаборЗаписей();
    нз.Отбор.Регистратор.Установить(мс, ИСТИНА); //Вот так почему 15 лет делать запрещено?
    нз.Очистить();
    нз.Записать();
    РегистрыНакопления.НезавершенноеПроизводство.УстановитьИспользованиеИтогов(ИСТИНА);
    

    Показать

    Решение использовать вместо массива конкретную ссылку в цикле не прокатывает. Документов многовато…

    Reply
  6. puzakov

    (5)

    нз.Отбор.Регистратор.ВидСравнения = ВидСравнения.ВСписке;
    нз.Отбор.Регистратор.Значение = мс;

    не пробовал, но должно работать.

    Reply
  7. puzakov

    (4) я согласен, что иногда хочется влезть в базу недокументированными средствами, и это может оказаться быстрее или удобнее. НО! Это нарушение лицензионного соглашения. Со всеми вытекающими.

    Reply
  8. Novoenkov

    (7) С какими именно «вытекающими»?

    Reply
  9. sovital

    (7)Средства SQL весьма и весьма документирваны…

    Reply
  10. puzakov

    (9) да, но имеется ввиду, если документировано фирмой 1с использование средств SQL. В данном случае фирма 1с запрещает даже считывать данные напрямую, не то что изменять их средствами SQL.

    Reply
  11. puzakov

    (8) когда вы влезаете в данные напрямую, минуя объектную модель, вы нарушаете лицензионное соглашение. Нарушив лицензионное соглашение, вы теряете право использовать ПП. А какие последствия бывают за использование не лицензионного ПО, можете нагуглить сами.

    4. Лицензиат обязуется не допускать нарушений исключительных прав Правообладателя на ПРОГРАММНЫЙ ПРОДУКТ, в частности, не совершать и не допускать совершения третьими лицами следующих действий без специального письменного разрешения Правообладателя:

    — распространять ПРОГРАММНЫЙ ПРОДУКТ или отдельные его компоненты;

    вносить какие-либо изменения в код ПРОГРАММНОГО ПРОДУКТА, содержимое баз данных и других наборов данных, в которых система хранит информацию, за исключением тех изменений, которые вносятся штатными средствами, входящими в состав ПРОГРАММНОГО ПРОДУКТА и описанными в сопроводительной документации;

    — осуществлять доступ к информационной базе ПРОГРАММНОГО ПРОДУКТА и построение систем на основе ПРОГРАММНОГО ПРОДУКТА с помощью средств и технологических решений, не предусмотренных в сопроводительной документации;

    (с) лицензионное соглашение 1с

    Reply
  12. Novoenkov

    (11) Меня в гугле забанили. Напишите конкретней, к каким последствиям приведет нарушение указанного пункта соглашения? Тюремный срок? Штраф? Есть прецеденты?

    Reply
  13. sovital

    (10) А компания 1С вправе регламентировать мои отношения с SQL?

    Reply
  14. puzakov

    (13) 1С вправе регламентировать ваши отношения с их продуктом. Через SQL вы изменяете часть их продукта, так что всё в рамках закона. И видите ли в чем дело, вы СОГЛАСИЛИСЬ исполнять лицензионное соглашение фирмы 1с, когда начали использовать её ПП. Отскоки в сторону уже не принимаются. Надо было отказаться от 1С:Предприятия и использовать продукт другого вендора, который не запрещает менять данные посредством сторонних инструментов.

    Reply
  15. puzakov

    (12) вы меня троллите? Нарушение лицензионного соглашения ведет к тому, что продукт перестает быть лицензионным. А что бывает за использование нелицензионного ПО, вам любой поисковик выдаст.

    Reply
  16. Novoenkov

    (15) Насколько здорово вы разбираетесь в предмете я понял. Своим вопросом всего лишь хотел в этом убедиться. Убедился.

    Reply
  17. puzakov

    (16) а что конкретно я неправильно сказал? Я не юрист, во всех тонкостях не разбираюсь, но лицензионное соглашение фирмы 1С читал.

    Reply
  18. sovital

    (14) Уверяю Вас, лицо согласившееся с лиц., вообще не в курсе, кто и что делает в его инф. системе.

    Reply
  19. logarifm

    (3)

    ужебных данных «1С:Пред

    Согласен. Автору статьи обязательно следует это указать в описании!!!

    Reply
  20. sovital

    (0)Спасибо большое за обработку.

    Вопрос возник, планируете ли дорабатывать, в частности вычищать ссылки документов по журналам?

    Reply
  21. Novoenkov

    (17) ни в административном, ни в уголовном кодексе ничего про «нарушение лицензионного соглашения», насколько мне известно, не сказано. а употребляются термины «контрафакт» и «авторские (смежные) права».

    поэтому, чисто теоретически, указанное «нарушение лицензионного соглашения» может привести только к тому, что фирма 1С на вас обидится и будет дуться. или откажет в поддержке, если каким-то образом об этом узнает.

    то есть, исходя из реалий (а не ограничений, существующих только на бумаге или в голове) ни к каким последствиям использование этой или подобной обработки привести не может.

    следовательно, ваши комментарии про какие-то «вытекающие» про которые знаете только вы, являются профанацией и демагогией, если вы не можете подтвердить обратного.

    Reply
  22. puzakov

    (21) я не юрист, всех тонкостей не знаю. Но не думаю что юристы фирмы 1С такие дураки, что составили совершенно бесполезное лицензионное соглашение. Могу предложить, что фирма 1С, как правообладатель, может на законных основаниях потребовать от пользователя удаления нелицензионной платформы (которая таковой становится вследствие нарушения лиц. соглашения), и всех баз данных, которые создавались/наполнялись при помощи этой платформы.

    Reply
  23. ambabas

    А под управляемые формы не планировали сделать? а то в тройке неудобно работать без УФ.

    Reply
  24. JammShoot

    {ВнешняяОбработка.ОчисткаОтДанныхОрганизации.Форма.Форма1.Форма(183)}: Поле объекта не обнаружено (КатегорииОбъектов)

    мдРегра = Метаданные.РегистрыСведений.КатегорииОбъектов;

    БП 2.0.66.46

    платформа 8.3.10.2375

    Reply
  25. longnet

    спасибо автору за обработку !!!

    Когда встал вопрос в базе в 80 гигов на скуле из примерно 40 организаций выкинуть более половины, а оставшиеся поделить по группам, я думал что сойду с ума штатными средствами выгружать. Примерное расчетное время было почти месяц.

    А так может за пару дней справлюсь.

    Пожелание автору добавить отбор по нескольким организациям, ну и рассмотреть вариант быстрого создания копии базы с выделенной организацией с переносом всех документов по ней. Иногда надо вырезать организацию из всей базы и отдать на сторону, на пример аудиторам.

    Reply
  26. NeSPEC

    Добрый день.

    На PostGreSQLбудет работать ?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *