Как выделить данные одной организации из базы 1С:ЗУП 3.1 в отдельную информационную базу

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

Задача выделения одной организации из общей базы 1С:Зарплата и управление персоналом 3.1 является одной из самых трудоемких для технического специалиста. В отличие от 1С:Бухгалтерии, архитектура ЗУП содержит множество перекрестных связей между сотрудниками, физическими лицами и регистрами расчета, которые зачастую не имеют прямой привязки к организации. В этой статье мы разберем наиболее эффективные методы разделения баз, проанализируем типичные ошибки и составим алгоритм действий для корректного переноса данных. Если требуется полностью перенести сведения по одной компании в новую базу, целесообразно применить обработку для переноса сотрудников, кадровых и расчетных данных между базами ЗУП 3.

Метод 1: Использование механизма РИБ с фильтром по организации

Это штатный механизм платформы, который позволяет создать подчиненный узел с отбором данных. Однако в ЗУП он часто работает не так «чисто», как ожидается. Проанализируем основные шаги:

  1. Перейдем в раздел Администрирование — Синхронизация данных — Сценарии синхронизации и настроим распределенную информационную базу (РИБ) с фильтром по организации.
  2. При создании начального образа укажем конкретную организацию.
  3. Важный нюанс: Опыт пользователей показывает, что на старых релизах платформы (например, 8.3.27.1688) этот механизм может работать некорректно, перенося документы «чужих» организаций. Рекомендуется использовать актуальные версии платформы, такие как 8.3.27.1859 и выше.

Даже при успешном создании образа в базу могут попасть «хвосты»: справочники физических лиц, общие настройки или записи регистров сведений. Рассмотрим, как провести доочистку в методе 3.

Метод 2: Прямое удаление данных через SQL-скрипты

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

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

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


USE [Имя_Вашей_Базы];
GO

Риски метода: Прямое удаление из таблиц _InfoReg или _Document может нарушить логическую целостность. После выполнения скрипта необходимо обязательно запустить в конфигураторе процедуру Тестирование и исправление с включенными опциями проверки ссылочной целостности и пересчета итогов. Также важно помнить, что в ЗУП данные сотрудников и физлиц тесно связаны — удаление организации не удаляет записи в регистрах сведений по физлицам автоматически.

Метод 3: Комбинированный метод (РИБ + Программная очистка)

Рассмотрим наиболее надежный путь, который помог решить задачу автору обсуждения. Он заключается в создании «грязного» образа РИБ с последующей тонкой очисткой базы от лишних данных. При необходимости безопасно очистить базу от лишней компании при ее разделении можно применить обработку для удаления данных по организации в БП 3.0 и ЗУП 3.1.

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

Шаг 2: Анализ блокирующих ссылок. Выясним, какие регистры мешают удалению. Часто это регистры, где Организация не является ведущим измерением, или кадровые данные, связанные с переводами сотрудников между организациями.

Шаг 3: Написание обработки для очистки регистров. Разберем пример кода для удаления записей из регистра сведений, которые «держат» ссылки на ненужную организацию. Нам нужно выбрать записи по фильтру и удалить их программно:


Процедура ОчиститьРегистрПоОрганизации(ИмяРегистра, НенужнаяОрганизация)
    НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
    // Если в регистре есть измерение Организация
    Если Метаданные.РегистрыСведений[ИмяРегистра].Измерения.Найти("Организация") <> Неопределено Тогда
        НаборЗаписей.Отбор.Организация.Установить(НенужнаяОрганизация);
        НаборЗаписей.Записать(); // Записываем пустой набор - удаляем записи
    КонецЕсли;
КонецПроцедуры

Шаг 4: Работа со справочниками. Особое внимание уделим справочнику Сотрудники и Физические лица. Если сотрудник переводился из одной организации в другую (в рамках одной базы), у него будет одна карточка физлица, но две карточки сотрудника. При выделении организации важно убедиться, что история персональных данных (ИНН, СНИЛС, паспорт) сохранилась корректно. Чтобы избежать этих сложностей, для переноса кадров в чистую базу можно использовать обработку для переноса сотрудников с остатками и расчётными данными из ЗУП 3.1 в ЗУП 3.1.

Тонкости работы с кадровыми данными

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

Использование штатной обработки «Поиск и удаление дублей»

Для финальной «полировки» базы после удаления документов можно воспользоваться инструментом Поиск и удаление дублей. Выберем объект (например, лишнего Пользователя или Ответственного), которого нужно заменить на «Администратора» во всех оставшихся ссылках, и выполним замену. Это позволит окончательно удалить объекты, на которые остались косвенные ссылки в системных настройках или версиях объектов.

Подведем итог: Наиболее жизнеспособный сценарий — это создание РИБ на актуальной платформе, массовая пометка на удаление лишних документов и точечная программная чистка регистров сведений, которые блокируют окончательное удаление объектов. Всегда выполняйте такие операции только на копии базы и проводите полный цикл тестирования перед передачей базы заказчику.

← На главную