Задача выделения одной организации из общей базы 1С:Зарплата и управление персоналом 3.1 является одной из самых трудоемких для технического специалиста. В отличие от 1С:Бухгалтерии, архитектура ЗУП содержит множество перекрестных связей между сотрудниками, физическими лицами и регистрами расчета, которые зачастую не имеют прямой привязки к организации. В этой статье мы разберем наиболее эффективные методы разделения баз, проанализируем типичные ошибки и составим алгоритм действий для корректного переноса данных. Если требуется полностью перенести сведения по одной компании в новую базу, целесообразно применить обработку для переноса сотрудников, кадровых и расчетных данных между базами ЗУП 3.
Это штатный механизм платформы, который позволяет создать подчиненный узел с отбором данных. Однако в ЗУП он часто работает не так «чисто», как ожидается. Проанализируем основные шаги:
8.3.27.1859 и выше.Даже при успешном создании образа в базу могут попасть «хвосты»: справочники физических лиц, общие настройки или записи регистров сведений. Рассмотрим, как провести доочистку в методе 3.
Если база имеет внушительный объем, стандартные средства 1С могут работать крайне медленно. В этом случае программисты прибегают к генерации SQL-скриптов для удаления лишних данных непосредственно в СУБД. Проанализируем этот алгоритм:
Для генерации скрипта можно использовать специализированные обработки (например, с портала Инфостарт), которые анализируют структуру метаданных. После получения текста скрипта его необходимо запустить в SQL Server Management Studio.
Перед запуском обязательно убедимся, что мы работаем с копией базы. Чтобы скрипт выполнился для конкретной БД, в начале текста следует добавить команду:
USE [Имя_Вашей_Базы];
GO
Риски метода: Прямое удаление из таблиц _InfoReg или _Document может нарушить логическую целостность. После выполнения скрипта необходимо обязательно запустить в конфигураторе процедуру Тестирование и исправление с включенными опциями проверки ссылочной целостности и пересчета итогов. Также важно помнить, что в ЗУП данные сотрудников и физлиц тесно связаны — удаление организации не удаляет записи в регистрах сведений по физлицам автоматически.
Рассмотрим наиболее надежный путь, который помог решить задачу автору обсуждения. Он заключается в создании «грязного» образа РИБ с последующей тонкой очисткой базы от лишних данных. При необходимости безопасно очистить базу от лишней компании при ее разделении можно применить обработку для удаления данных по организации в БП 3.0 и ЗУП 3.1.
Шаг 1: Пометка на удаление. Пометим на удаление все документы лишних организаций. Попробуем выполнить стандартное удаление помеченных объектов. Скорее всего, система откажет в удалении многих объектов из-за ссылок в регистрах сведений. Для ускорения этого процесса и корректной очистки базы с учетом кольцевых зависимостей применяется обработка для выборочного удаления связанных данных организации из баз 1С.
Шаг 2: Анализ блокирующих ссылок. Выясним, какие регистры мешают удалению. Часто это регистры, где Организация не является ведущим измерением, или кадровые данные, связанные с переводами сотрудников между организациями.
Шаг 3: Написание обработки для очистки регистров. Разберем пример кода для удаления записей из регистра сведений, которые «держат» ссылки на ненужную организацию. Нам нужно выбрать записи по фильтру и удалить их программно:
Процедура ОчиститьРегистрПоОрганизации(ИмяРегистра, НенужнаяОрганизация)
НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
// Если в регистре есть измерение Организация
Если Метаданные.РегистрыСведений[ИмяРегистра].Измерения.Найти("Организация") <> Неопределено Тогда
НаборЗаписей.Отбор.Организация.Установить(НенужнаяОрганизация);
НаборЗаписей.Записать(); // Записываем пустой набор - удаляем записи
КонецЕсли;
КонецПроцедуры
Шаг 4: Работа со справочниками. Особое внимание уделим справочнику Сотрудники и Физические лица. Если сотрудник переводился из одной организации в другую (в рамках одной базы), у него будет одна карточка физлица, но две карточки сотрудника. При выделении организации важно убедиться, что история персональных данных (ИНН, СНИЛС, паспорт) сохранилась корректно. Чтобы избежать этих сложностей, для переноса кадров в чистую базу можно использовать обработку для переноса сотрудников с остатками и расчётными данными из ЗУП 3.1 в ЗУП 3.1.
Выясним причину, почему в ЗУП выделение проходит сложнее, чем в Бухгалтерии. Основная проблема — кадровые переводы между организациями. Если в базе зафиксирован перевод сотрудника из «Организации А» (которую мы удаляем) в «Организацию Б» (которую оставляем), документ перевода будет ссылаться на обе организации. В этом случае:
Перенос данных.Для финальной «полировки» базы после удаления документов можно воспользоваться инструментом Поиск и удаление дублей. Выберем объект (например, лишнего Пользователя или Ответственного), которого нужно заменить на «Администратора» во всех оставшихся ссылках, и выполним замену. Это позволит окончательно удалить объекты, на которые остались косвенные ссылки в системных настройках или версиях объектов.
Подведем итог: Наиболее жизнеспособный сценарий — это создание РИБ на актуальной платформе, массовая пометка на удаление лишних документов и точечная программная чистка регистров сведений, которые блокируют окончательное удаление объектов. Всегда выполняйте такие операции только на копии базы и проводите полный цикл тестирования перед передачей базы заказчику.