Удаление данных по организации в базах, ведущих учет по нескольким организациям. БП 3.0, ЗУП 3.1


При необходимости разделить данные в базах, где ведется учет по нескольким организациям, данная обработка поможет очистить ненужную информацию по организации/организациям.
Работает в конфигурациях БП 3.0 и ЗУП 3.1.

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

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

Обработка работает в 2-х режимах:

1) Удаление данных по выбранной в форме обработки организации;

2) Удаление данных по всем, кроме выбранной в форме организации.

Сначала будет осуществлен поиск всех данных, связанных с удаляемой организацией (документы, справочники, регистры сведений, планы обмена), затем пометка на удаление (для независимых регистров сведений непосредственное удаление записей). После этого запущена обработка удаления помеченных объектов для контроля ссылочной целостности и непосредственного удаления.

Даты запрета изменения данных будут сняты и установлены обратно после выполнения автоматически.

Если после завершения работы обработки, удаляемая организация осталась в справочнике, нужно повторно выполнить удаление помеченных объектов ("Администрирование"-"Удаление помеченных объектов"). Если это не помогло, необходимо проверить данные. Возможно, что связанные между собой документы/справочники относятся к разным организациям (например Платежное поручение оформлено на одну организацию, а Ведомость (в реквизите ПП) на другую организацию). Такие проблемы надо устранять в индивидуальном порядке.

После завершения удаления данных желательно выполнить Тестирование и исправление ИБ в режиме Конфигуратора ("Администрирование"-"Тестирование и исправление").

Обработка требует монопольного доступа. При невозможности перейти в Монопольный режим будет выдано предупреждение. Обработка должна быть запущена под пользователем с полными правами и правами на открытие внешних отчетов/обработок.

Обработка тестировалась на БП 3.0 (3.0.69.35), ЗУП 3.1 (3.1.8.216), платформа 8.3 (8.3.13.1513;8.3.13.1644).

7 Comments

  1. Alex_E

    Доброго времени суток!

    Попробовал обработку на КА 2.4 — без напильника не получилось (модуль формы, после строки 45):

       Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(СсылкаНаЭлемент)) Тогда
    //ЕАЮ+++
    МетаданныеДокумента = СсылкаНаЭлемент.Метаданные();
    Если Не МетаданныеДокумента.Реквизиты.Найти(«ИсправленныйДокумент») = Неопределено Тогда
    Сведения = ИсправлениеДокументовЗарплатаКадры.СведенияОбИсправленииДокумента(СсылкаНаЭлемент);
    Если Сведения <> Неопределено Тогда
    ИсправлениеОбъект = Сведения.ДокументИсправление.ПолучитьОбъект();
    ИсправлениеОбъект.УстановитьПометкуУдаления(ИСТИНА);
    КонецЕсли;
    КонецЕсли;
    ИмяСправочника = МетаданныеДокумента.Имя + «ПрисоединенныеФайлы»;
    Если НЕ Метаданные.Справочники.Найти(ИмяСправочника) = Неопределено Тогда
    Запрос = Новый Запрос(
    «ВЫБРАТЬ
    | АктВыполненныхВнутреннихРаботПрисоединенныеФайлы.Ссылка КАК Ссылка,
    | АктВыполненныхВнутреннихРаботПрисоединенныеФайлы.Редактирует КАК Редактирует
    |ИЗ
    | Справочник.АктВыполненныхВнутреннихРаботПрисоединенныеФайлы КАК АктВыполненныхВнутреннихРаботПрисоединенныеФайлы
    |ГДЕ
    | АктВыполненныхВнутреннихРаботПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла»);
    Запрос.Текст = СтрЗаменить(Запрос.Текст, «АктВыполненныхВнутреннихРаботПрисоединенныеФайлы», ИмяСправочника);
    Запрос.УстановитьПараметр(«ВладелецФайла», СсылкаНаЭлемент);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    Если ЗначениеЗаполнено(Выборка.Редактирует) Тогда
    ФайлОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ФайлОбъект.Редактирует = «»;
    ФайлОбъект.ОбменДанными.Загрузка = Истина;
    ФайлОбъект.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    //ЕАЮ+++
    ОбъектСсылки = СсылкаНаЭлемент.ПолучитьОбъект();
    ОбъектСсылки.ДополнительныеСвойства.Вставить(«УдалениеИзКомплекта», Истина);                  //ЕАЮ+++
    ОбъектСсылки.УстановитьПометкуУдаления(ИСТИНА);
    

    Показать

    Вставил этот кусок кода, убрал монопольность (наверное это необязательно, но уж больно без отладки скушно) и транзакции — это, конечно ускоряет работу, но времени на исправление в следствии использования этих бантиков потерял много больше, чем потом прошло само удаление без них)))

    А так + удалилась таки непотребная организация…

    Reply
  2. SanchoD

    (1) Добрый день, коллега!

    Спасибо за комментарий. Может кому-то тоже пригодится.

    Reply
  3. Alex_E

    (2) Пожалуйста!

    Reply
  4. LostMicos

    Здравствуйте, в базе ЗУП с документами ввода начальных остатков программа не справилась.

    Reply
  5. SanchoD

    (4) Добрый день!

    Хотелось бы более подробную информацию получить про проблему с этими документами.

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

    И указав реквизит шапки документа «Организация»=Фирма_А, ничего не мешает создать записи регистров в нем с измерением «Организация»=Фирма_Б.

    Это из той же серии зехеров, когда зависимые документы оформлены на разные организации.

    Reply
  6. LostMicos

    (5) Документы ввода остатков перенесены стандартной программой из предыдущей версии.

    Кроме них осталось много других документов и записей регистров. В ЗУП данные аналитики могут быть «переплетены» между собой что вызывает взамоблокировки.

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

    Также изменить конструкцию попытка — исключение и перенести ее внутрь цикла, таким образом обработка сможет исправить то, что сможет. А с остальным можно будет справиться проанализировав результат.

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

    На последок пришлось временно установить разрешающие права на изменение нескольких регистров «история обращения ИФНС» и справочника подразделения, для разблокировки удаления последних справочников…

    Не говоря уже про удаление движений документов с ошибками (движения непроведенных документов)

    В общем задача не тривиальная, такую решить универсально в рамках «одной кнопки» будет не просто.

    Reply
  7. SanchoD

    (6) Действительно, сложно формализовать все нюансы в данных ИБ. Поэтому предупредил про ручное разруливание парасиков.

    Что касается перенести Попытку внутрь цикла, то первое же исключение завершит всю транзакцию. А отказаться от нее не хотелось бы.

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

    Возможно я пересмотрю алгоритм очистки, но для этого нужна база со сложностями, которые надо обойти.

    Насчет прав не сталкивался с проблемой. Может потому что ролей Администратора и Полные права хватило.

    У меня есть вариант этой обработки с возможностью грубого непосредственного удаления не в транзакции. Могу прислать.

    Reply

Leave a Comment

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