Как удалить дубликат организации и перепривязать подразделения в 1С?

Программист 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

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

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

Метод 1. Использование группового изменения реквизитов в режиме разработчика

Рассмотрим наиболее эффективный способ, который помог автору темы. Обычная обработка Групповое изменение реквизитов часто не дает изменить поле ГоловнаяОрганизация или Владелец у подразделений из-за встроенных проверок в модулях объектов. Однако в этой обработке есть скрытые возможности.

  1. Откроем обработку Групповое изменение реквизитов (ее можно найти в разделе «Администрирование» — «Обслуживание» — «Корректировка данных»).
  2. Выберем объект Подразделения (или Подразделения организаций).
  3. Нажмем кнопку Дополнительные параметры. Здесь крайне важно установить флаг Режим разработчика. Этот режим позволяет обходить часть программных проверок при записи объекта.
  4. В списке реквизитов найдем поле Организация и выберем правильное значение (основную организацию).
  5. Нажмем Изменить реквизиты.

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

Метод 2. Манипуляция со статусами подразделений

Проанализируем специфическую блокировку, характерную для ERP. Система часто не дает пометить объект на удаление, если он считается "действующим". Как выяснилось в ходе обсуждения, решение может скрываться в свойствах самого подразделения.

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

  1. Зайдем в список подразделений дублирующей организации.
  2. В каждом подразделении найдем флаг (реквизит) Подразделение сформировано.
  3. Снимем этот флаг. В некоторых конфигурациях после этого подразделения позволяют себя пометить на удаление или вовсе "схлопываются" программно.
  4. После того как все подразделения дубликата будут либо перепривязаны к основной организации, либо помечены на удаление, блокировка с самой организации будет снята.

Метод 3. Отключение функциональных опций и штатного расписания

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

Предлагаем выполнить следующие шаги на копии базы:

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

Метод 4. Поиск и замена дублей со снятием документов с проведения

Стандартная обработка Поиск и замена дублей часто зависает или вылетает с ошибкой Runtime Error, если объем данных велик. Рассмотрим, как оптимизировать этот процесс:

Главная причина "падения" обработки — попытка пересчитать итоги или выполнить сложные подписки на события при замене ссылок в проведенных документах. Чтобы этого избежать:

  1. Найдем через консоль запросов или групповую обработку все документы, созданные по "неправильной" организации.
  2. Массово снимем их с проведения (только на время операции!).
  3. Запустим Поиск и замена дублей, где "Оригинал" — ваша рабочая организация, а "Дубль" — созданная по ошибке.
  4. После успешной замены удалим пустой дубликат и перепроведем документы (уже по новой организации).

Метод 5. Программный способ обхода проверок (для администраторов и программистов)

Если визуальные средства бессильны, воспользуемся программным кодом. Основная хитрость заключается в использовании свойства ОбменДанными.Загрузка = Истина. Этот флаг говорит системе, что запись производится в режиме загрузки данных, и большинство прикладных проверок (включая проверку на смену владельца) игнорируются.

Рассмотрим пример кода для принудительной смены организации в подразделениях:


// Выбираем подразделения, принадлежащие дублю
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Подразделения.Ссылка КАК Ссылка
    |ИЗ
    |   Справочник.ПодразделенияОрганизаций КАК Подразделения
    |ГДЕ
    |   Подразделения.Владелец = &ДубльОрганизации";

Запрос.УстановитьПараметр("ДубльОрганизации", Объект.СсылкаНаДубль);
Результат = Запрос.Выполнить().Выбрать();

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

Этот метод позволяет "силовым" путем перекинуть иерархию подразделений на правильный объект Организация. После выполнения такого кода дубликат останется "пустым" и его можно будет удалить стандартными средствами.

Метод 6. Крайняя мера — восстановление из бэкапа и XML-перенос

Если "каша в данных" (как выразились участники обсуждения) зашла слишком далеко и ручная правка связей занимает больше времени, чем повторный ввод данных, проанализируем вариант с откатом.

  1. Восстановим копию базы, сделанную до неудачной конвертации.
  2. В текущей (испорченной) базе воспользуемся типовой обработкой ВыгрузкаЗагрузкаДанныхXML.
  3. Выгрузим из испорченной базы только те документы, которые были созданы пользователями за период с момента конвертации до текущего момента.
  4. При загрузке в чистую базу (бэкап) используйте поиск по уникальным идентификаторам (GUID). Если организация в бэкапе и организация в текущей базе имеют разные GUID, потребуется дополнительная настройка сопоставления в правилах обмена (через Конвертацию данных).

Резюме и рекомендации

Мы проанализировали ситуацию и выяснили, что наиболее частой причиной блокировок является активное штатное расписание и включенные проверки в режиме предприятия.

Помните о мерах предосторожности:

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

← На главную