Как правильно удалить данные по конкретной организации из 1С:УПП

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

При работе в многофирменных базах 1С:УПП (Управление производственным предприятием) нередко возникает задача полностью исключить данные одной из организаций. Это может быть связано с ликвидацией юридического лица, продажей части бизнеса или необходимостью разделения учета. Однако простое удаление документов — это лишь вершина айсберга. Система УПП обладает сложной архитектурой взаимосвязей, где данные переплетены через регистры накопления, сведения и ключи аналитики. В этой статье мы подробно разберем, как выполнить очистку корректно, избежав критических ошибок в базе данных.

Анализ архитектуры данных перед удалением

Прежде чем приступать к каким-либо действиям, проанализируем, как информация распределена в системе. В 1С:УПП данные организации хранятся не только в документах, но и в огромном количестве зависимых таблиц. Основная сложность заключается в том, что многие справочники (Номенклатура, Контрагенты, СтатьиЗатрат) являются общими для всех организаций. Если мы удалим документы, сами элементы справочников останутся, что может привести к засорению базы «пустыми» карточками.

Рассмотрим основные блоки, требующие внимания:

  1. Документы и их движения: Это бухгалтерские проводки и записи в регистрах накопления.
  2. РАУЗ (Расширенная аналитика учета затрат): Самый сложный блок, где данные привязаны к ключам аналитики.
  3. ЗУП (Зарплата и управление персоналом): Подсистема с высокой плотностью записей в периодических регистрах сведений.
  4. Независимые регистры: Учетная политика, настройки налогов, сведения об объектах ОС.

Метод 1: Программное удаление средствами платформы 1С

Этот метод считается наиболее безопасным с точки зрения логики бизнес-приложения, так как он задействует стандартные механизмы 1С. Разберем по шагам алгоритм действий программиста.

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


Выборка = Документы.РеализацияТоваровУслуг.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Выборка.Организация = НужнаяОрганизация Тогда
        Объект = Выборка.ПолучитьОбъект();
        Если Объект.Проведен Тогда
            Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
        КонецЕсли;
        Объект.УстановитьПометкуУдаления(Истина);
    КонецЕсли;
КонецЦикла;

Важный нюанс: при массовом удалении объектов рекомендуется использовать свойство ОбменДанными.Загрузка = Истина. Это позволит пропустить проверки в модулях объектов, что существенно ускорит процесс, но в этом случае ответственность за целостность данных полностью ложится на разработчика. Если вы хотите, чтобы движения удалялись автоматически вместе с объектом, используйте стандартный метод Удалить() или помечайте объекты на удаление и используйте типовую обработку «Удаление помеченных объектов».

Метод 2: Использование специализированных обработок для свертки

Для ускорения процесса можно воспользоваться готовыми инструментами. Существуют универсальные обработки для свертки базы или удаления объектов по произвольным критериям. Мы можем настроить отбор по реквизиту Организация для всех типов метаданных. Однако стоит помнить, что подсистема ЗУП в составе УПП часто игнорируется простыми обработками, так как записи о сотрудниках и их зарплате распределены по множеству периодических регистров, не всегда имеющих прямую связь с организацией через регистратор.

Метод 3: Удаление на уровне SQL (Direct SQL) — риски и преимущества

Если база данных имеет огромный объем (терабайты), программное удаление через 1С может затянуться на недели. В этом случае программисты прибегают к прямым SQL-запросам. Посмотрим на этот процесс с технической стороны.

Внимание: Этот метод нарушает лицензионное соглашение и крайне опасен. Платформа 1С не использует Foreign Keys на уровне SQL, поэтому удаление строки из таблицы документов (например, _Document150) оставит «битые» ссылки во всех таблицах движений (_AccumReg, _InfoReg).

Если вы решились на этот шаг, проанализируем последовательность:

  1. Выясните соответствие имен таблиц 1С и SQL (через метод ПолучитьСтруктуруХраненияБазыДанных).
  2. Удалите записи из таблиц движений, где _Fld... (поле организации) соответствует вашей цели.
  3. Удалите сами документы.
  4. Обязательно выполните Тестирование и исправление (ТиС) в конфигураторе, выбрав пункты «Проверка ссылочной целостности» и «Пересчет итогов».

Особенности РАУЗ и очистка ключей аналитики

Проанализируем ситуацию с РАУЗ. Даже после удаления всех документов, записи в регистре «Учет затрат» могут косвенно влиять на расчет себестоимости оставшихся организаций через общие ключи аналитики. Выясним причину: ключи аналитики (Справочник.КлючиАналитикиУчетаЗатрат) хранят уникальные комбинации номенклатуры, складов и затрат.

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

Методика «Инверсия»: Перенос в чистую базу

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

Посмотрим на преимущества этого подхода:

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

Блок ЗУП: Почему это сложнее всего?

Разберем ситуацию с кадровым учетом. Данные о физических лицах в УПП часто дублируются или связаны с разными организациями. Удаление приказов о приеме на работу не очищает сведения о паспортных данных, адресах и образовании сотрудников в регистрах сведений. Если стоит задача полной деперсонализации данных удаляемой организации, потребуется написание сложного скрипта, который будет находить физлиц, не связанных ни с какими другими организациями, кроме удаляемой, и очищать их персональные данные программно.

Итоговый чек-лист действий

Подведем итог и составим план работ:

  1. Создаем полную копию базы данных и проверяем ее работоспособность.
  2. Программно отменяем проведение всех документов целевой организации.
  3. Удаляем документы и связанные с ними записи в регистрах сведений (через пометку удаления или напрямую).
  4. Очищаем независимые регистры (учетная политика, настройки налогов).
  5. Запускаем процедуру очистки неиспользуемых ключей аналитики РАУЗ.
  6. Выполняем «Тестирование и исправление» с опцией «Очищать ссылки на несуществующие объекты».
  7. Проводим реиндексацию и сжатие базы на уровне MS SQL Server.

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

← На главную