Удаление данных по организации в базах, ведущих учет по нескольким организациям. БП 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 не будет опубликован. Обязательные поля помечены *