Ситуация с появлением дублей организаций в информационных базах 1С (особенно в ERP, ЗУП 3.1 или Комплексной автоматизации) — это классическая проблема, возникающая после некорректного обмена данными или неудачной конвертации. Основная сложность заключается в том, что справочник Организации жестко связан со справочником Подразделения и множеством регистров. Система блокирует попытки изменения владельца подразделения или пометку организации на удаление, выдавая ошибки о "действующей организации".
В этой статье мы разберем по шагам, как преодолеть эти ограничения, используя как стандартные инструменты, так и продвинутые технические приемы. Проанализируем ситуацию, когда обычная пометка на удаление не работает, и выясним, какие механизмы блокируют редактирование данных.
Рассмотрим наиболее эффективный способ, который помог автору темы. Обычная обработка Групповое изменение реквизитов часто не дает изменить поле ГоловнаяОрганизация или Владелец у подразделений из-за встроенных проверок в модулях объектов. Однако в этой обработке есть скрытые возможности.
Групповое изменение реквизитов (ее можно найти в разделе «Администрирование» — «Обслуживание» — «Корректировка данных»).Подразделения (или Подразделения организаций).Организация и выберем правильное значение (основную организацию).Важный нюанс: если даже в режиме разработчика система выдает ошибку "Нельзя менять организацию — владельца элемента", попробуйте в тех же дополнительных параметрах включить опцию Выполнять в транзакции и Прерывать при ошибке (сняв последний флаг, если нужно пропустить проблемные записи).
Проанализируем специфическую блокировку, характерную для ERP. Система часто не дает пометить объект на удаление, если он считается "действующим". Как выяснилось в ходе обсуждения, решение может скрываться в свойствах самого подразделения.
Посмотрим на алгоритм действий:
Выясним причину, по которой организация может быть заблокирована. В кадровых и производственных решениях организация и ее структура тесно связаны с механизмом штатного расписания. Пока ведется история изменений штатного расписания по этой организации, удалить ее невозможно.
Предлагаем выполнить следующие шаги на копии базы:
Стандартная обработка Поиск и замена дублей часто зависает или вылетает с ошибкой Runtime Error, если объем данных велик. Рассмотрим, как оптимизировать этот процесс:
Главная причина "падения" обработки — попытка пересчитать итоги или выполнить сложные подписки на события при замене ссылок в проведенных документах. Чтобы этого избежать:
Поиск и замена дублей, где "Оригинал" — ваша рабочая организация, а "Дубль" — созданная по ошибке.Если визуальные средства бессильны, воспользуемся программным кодом. Основная хитрость заключается в использовании свойства ОбменДанными.Загрузка = Истина. Этот флаг говорит системе, что запись производится в режиме загрузки данных, и большинство прикладных проверок (включая проверку на смену владельца) игнорируются.
Рассмотрим пример кода для принудительной смены организации в подразделениях:
// Выбираем подразделения, принадлежащие дублю
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Подразделения.Ссылка КАК Ссылка
|ИЗ
| Справочник.ПодразделенияОрганизаций КАК Подразделения
|ГДЕ
| Подразделения.Владелец = &ДубльОрганизации";
Запрос.УстановитьПараметр("ДубльОрганизации", Объект.СсылкаНаДубль);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
ОбъектПодразделение = Результат.Ссылка.ПолучитьОбъект();
// Устанавливаем правильного владельца
ОбъектПодразделение.Владелец = Объект.ПравильнаяОрганизация;
// Включаем режим обмена данными для обхода блокировок
ОбъектПодразделение.ОбменДанными.Загрузка = Истина;
Попытка
ОбъектПодразделение.Записать();
Сообщить("Подразделение " + ОбъектПодразделение.Наименование + " успешно перенесено.");
Исключение
Сообщить("Ошибка при переносе: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Этот метод позволяет "силовым" путем перекинуть иерархию подразделений на правильный объект Организация. После выполнения такого кода дубликат останется "пустым" и его можно будет удалить стандартными средствами.
Если "каша в данных" (как выразились участники обсуждения) зашла слишком далеко и ручная правка связей занимает больше времени, чем повторный ввод данных, проанализируем вариант с откатом.
ВыгрузкаЗагрузкаДанныхXML.Конвертацию данных).Мы проанализировали ситуацию и выяснили, что наиболее частой причиной блокировок является активное штатное расписание и включенные проверки в режиме предприятия.
Помните о мерах предосторожности:
ОбменДанными.Загрузка = Истина, выполняйте исключительно на копии базы.Ответственные лица и Регистрации в налоговых органах. Часто записи в этих регистрах держат ссылку на дубль, не позволяя его удалить.UPDATE в таблице справочника на уровне СУБД, но это требует высочайшей квалификации и понимания структуры таблиц 1С.После того как подразделения перенесены на основную организацию, а дубликат помечен на удаление, обязательно запустите стандартную процедуру Удаление помеченных объектов. Она покажет оставшиеся связи (например, в константах или настройках пользователей), которые вы могли упустить из виду.