Разработка и Конфигурация · 11 мин
Как убрать структуру подчиненности в 1С
Как убрать структуру подчиненности справочников в 1С: отключение иерархии, удаление владельца и подчиненных объектов, перенос данных и проверка результата.
Структура подчиненности в 1С возникает в двух ситуациях: когда справочник имеет иерархию (группы и элементы) и когда один объект подчинен другому как владельцу, например справочник «Договоры контрагентов» подчинен справочнику «Контрагенты». Убрать такую связь бывает нужно при редизайне конфигурации, упрощении учета или при подготовке к обмену данными, где подчиненность не поддерживается.
Главная сложность в том, что подчиненность — это не просто настройка интерфейса, а свойство метаданных, зашитое в конфигурацию. Просто «выключить галочку» в пользовательском режиме нельзя: потребуется работа в конфигураторе, а в ряде случаев — предварительная обработка данных, чтобы не потерять связанные элементы.
Ниже разобраны оба сценария: отключение иерархии внутри одного справочника и удаление связи «владелец — подчиненный объект». Для каждого случая даны условия, при которых операция безопасна, и порядок проверки результата.
Что именно вы собираетесь убирать: иерархия или владелец
Прежде чем менять конфигурацию, определите тип подчиненности. Иерархия — это когда элементы одного справочника вкладываются друг в друга через группы (например, «Номенклатура» с папками). Подчиненность владельцу — это когда записи одного объекта существуют только внутри другого: договоры у контрагента, единицы измерения у номенклатуры.
Признак иерархии виден прямо в списке: есть папки, в которые можно зайти. Признак владельца — в форме элемента есть обязательное поле «Владелец», и список подчиненного объекта обычно открывается из карточки родителя.
От типа зависит и способ отключения. Иерархия снимается одним флагом в свойствах справочника, но требует решить, что делать с группами. Удаление владельца затрагивает ссылочную целостность: если в базе уже есть подчиненные записи, платформа не даст просто обновить конфигурацию без обработки данных.
Подготовка: резервная копия и анализ данных
Любое изменение структуры метаданных начинайте с выгрузки информационной базы через конфигуратор (Администрирование → Выгрузить информационную базу) или копии на уровне СУБД, если база клиент-серверная. Откат изменения конфигурации с уже удаленным владельцем без копии может оказаться невозможным.
Далее оцените объем данных. Для иерархического справочника выясните, есть ли элементы, лежащие непосредственно в группах, и многоуровневая ли вложенность. Для подчиненного объекта — сколько записей существует и используются ли ссылки на них в документах и регистрах.
Полезно выполнить поиск ссылок на объект: в конфигураторе правой кнопкой по объекту метаданных → «Поиск ссылок в объектах». Это покажет, где в конфигурации используется подчиненный объект, и поможет оценить, что сломается после изменения.
Как убрать иерархию справочника
Откройте конфигуратор, найдите нужный справочник в дереве конфигурации и откройте его свойства (правой кнопкой → Свойства или через палитру свойств). На закладке «Иерархия» снимите флаг «Иерархический».
Обратите внимание на вид иерархии, если она была включена: «Иерархия групп и элементов» означает, что группы — отдельный тип записей, а «Иерархия элементов» — что родителем может быть обычный элемент. При снятии флага это различие теряет значение.
После снятия флага обновите конфигурацию базы данных (F7 или Конфигурация → Обновить конфигурацию базы данных). Платформа выполнит реструктуризацию: поле «Родитель» останется физически, но перестанет использоваться в интерфейсе.
Важный нюанс: сами данные при этом не меняются. Элементы, у которых был заполнен родитель, сохранят это значение, но список станет плоским. Если нужна именно «чистая» структура, родителя у элементов придется очищать обработкой.
- 1Сделайте выгрузку базы и протестируйте на копии
- 2Откройте свойства справочника в конфигураторе
- 3Снимите флаг «Иерархический» на закладке «Иерархия»
- 4Обновите конфигурацию базы данных (F7)
- 5Откройте список в режиме предприятия и проверьте, что он стал плоским
- 6При необходимости очистите поле «Родитель» у элементов обработкой
Как удалить подчиненность владельцу
Откройте свойства подчиненного справочника и перейдите на закладку «Владельцы». Снимите флажки со всех объектов-владельцев. Одновременно проверьте обратную сторону: в свойствах объекта-владельца на закладке «Подчиненные» связь отобразится как удаленная после обновления.
Ключевая проблема этого сценария — поле «Владелец» в существующих записях. Если в базе есть элементы с заполненным владельцем, при реструктуризации платформа попытается удалить это поле, и данные о связи будут потеряны. Сами записи обычно сохраняются, но становятся «сиротами» без привязки.
Поэтому перед удалением владельца решите судьбу данных. Типовые варианты: перенести значение владельца в добавленный заранее обычный реквизит (например, «Контрагент» типа «СправочникСсылка.Контрагенты»), либо удалить подчиненные записи, если они не нужны.
Порядок безопасного переноса такой: добавьте новый реквизит, обновите конфигурацию, выполните обработку, копирующую значение поля «Владелец» в новый реквизит, и только после этого снимайте связь владельца и обновляйте конфигурацию повторно.
// Обработка переноса владельца в обычный реквизит
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Владелец ИЗ Справочник.ДоговорыКонтрагентов";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Контрагент = Выборка.Владелец; // новый реквизит
Объект.Записать();
КонецЦикла;Что делать с формами, запросами и кодом
Удаление подчиненности почти всегда требует доработки связанных объектов конфигурации. В формах списков и элементов могут быть элементы, привязанные к полям «Родитель» и «Владелец», — после реструктуризации они станут недоступны или вызовут ошибки.
Проверьте модули: программные обращения вида Элемент.Владелец или Справочники.Договоры.НайтиПоВладельцу(...) перестанут компилироваться после удаления владельца. Используйте глобальный поиск по конфигурации (Правка → Глобальный поиск) по имени поля, чтобы найти все такие места.
Отдельно проверьте запросы в отчетах и обработках: конструкции с отбором по владельцу и соединения через поле «Владелец» нужно переписать на новый реквизит. Также посмотрите критерии отбора и планы обмена — подчиненные объекты часто включены туда вместе с владельцем.
Проверка результата после изменений
После обновления конфигурации базы данных откройте список в режиме предприятия. Для снятой иерархии список должен отображаться плоским, без кнопок перехода в группы. Для удаленного владельца — в форме элемента не должно быть поля «Владелец», а список должен открываться самостоятельно из раздела, а не только из карточки родителя.
Проверьте целостность данных: откройте несколько элементов, у которых раньше был владелец, и убедитесь, что новый реквизит заполнен корректно. Затем запустите тестирование и исправление информационной базы (Администрирование → Тестирование и исправление) с проверкой ссылочной целостности.
Финальный этап — прогон ключевых сценариев учета: создание документа, где используется измененный объект, формирование связанных отчетов и, если есть, обмен данными. Ошибки компиляции модулей проявятся уже при первом обращении к измененному объекту.
Как проверить результат
Плоский список без групп или самостоятельный список без отбора по владельцу
Остались папки либо список не открывается без родителя
Нет поля «Владелец», новый реквизит заполнен
Ошибка при открытии формы или пустые связанные данные
Нет ошибок ссылочной целостности
Сообщения о битых ссылках на удаленные объекты
Документы создаются и проводятся, отчеты формируются
Ошибки обращения к полю «Владелец» или пустые отчеты
Альтернативы полному удалению подчиненности
Не всегда нужно удалять связь физически. Если цель — только упростить работу пользователей, достаточно изменить представление: настроить список без отображения иерархии (в форме списка установить режим просмотра «Список») или убрать поле «Владелец» с формы, оставив связь в метаданных.
Еще один вариант — заменить подчиненность обычным реквизитом ссылочного типа, как описано выше, но оставить старый объект нетронутым, создав рядом новый справочник. Это дольше, но безопаснее для больших баз с активным обменом: старые данные остаются доступными для истории и отчетности.
Выбор зависит от масштаба: для внутреннего справочника без интеграций смело удаляйте связь, для объектов, участвующих в обменах и внешних отчетах, предпочтительнее постепенная миграция через новый реквизит или новый объект.
Как выбрать действие
Частые вопросы
Можно ли убрать подчиненность без конфигуратора, в режиме предприятия?
Нет. Иерархия и владельцы — это свойства метаданных, они изменяются только в конфигураторе с последующим обновлением конфигурации базы данных. В пользовательском режиме можно лишь скрыть отображение иерархии в конкретной форме списка.
Что произойдет с элементами в группах после снятия иерархии?
Элементы и группы останутся в базе, но список станет плоским: группы превратятся в обычные записи (при иерархии групп и элементов они могут перестать отображаться в списке элементов в зависимости от настроек формы). Поле «Родитель» физически сохранится, но перестанет использоваться платформой.
Платформа отказывается обновлять конфигурацию после удаления владельца. Что делать?
Обычно причина в том, что на подчиненный объект ссылаются другие метаданные: критерии отбора, планы обмена, подсистемы. Выполните поиск ссылок на объект в конфигураторе, удалите или скорректируйте найденные связи и повторите обновление. Работайте на копии базы.
Как массово очистить поле «Родитель» у всех элементов?
Напишите простую обработку: запросом выберите все элементы, где родитель не пустой, и в цикле присвойте полю «Родитель» пустую ссылку, затем запишите объект. Для больших объемов используйте пакетную запись с транзакциями по частям, чтобы не блокировать таблицу надолго.
Нарушится ли обмен данными после удаления подчиненности?
Да, если объект включен в план обмена и правила конвертации рассчитаны на старую структуру. Перед изменением отключите объект из состава плана обмена или обновите правила конвертации, иначе на стороне приемника возникнут ошибки сопоставления.
Можно ли вернуть подчиненность обратно после удаления?
Технически флаг можно включить снова, но данные, утерянные при реструктуризации (значения поля «Владелец»), автоматически не восстановятся. Поэтому перед изменением обязательно делайте выгрузку базы — это единственный надежный способ отката.
Что важно запомнить
Подчиненность убирается только в конфигураторе: иерархия — снятием флага, владелец — удалением связи на закладке «Владельцы». Перед изменением сделайте копию базы, перенесите значимые связи в обычный реквизит и после обновления проверьте формы, код, отчеты и ссылочную целостность.