Удаление справочника, документа или реквизита из конфигурации 1С 8.3 без потери данных

· 9 мин

Содержание

Чтобы удалить объект в конфигураторе 1С, откройте конфигурацию (Конфигурация → Открыть конфигурацию), выделите объект в дереве метаданных и нажмите Delete или выберите «Удалить» в контекстном меню. Затем сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). На последнем шаге платформа удалит из базы таблицы объекта вместе со всеми данными.

Способов по сути три, и выбор зависит от ситуации. Прямое удаление подходит для собственных объектов, которые никто не использует. Переименование с префиксом «Удалить» — для объектов с данными, которые ещё нужно перенести. Отключение через роли и функциональные опции — для типовых объектов, которые трогать не стоит, чтобы не ломать обновления.

Что проверить до удаления объекта метаданных

Удаление объекта из конфигурации — операция с изменением структуры базы. Откатить её после обновления базы данных можно только из резервной копии.

Перед началом убедитесь в четырёх вещах:

  • 🔑 Права. У пользователя, под которым вы заходите в конфигуратор, должна быть роль с правом «Администрирование». Без неё режим «Конфигуратор» не откроется.
  • 💾 Резервная копия. Выгрузите базу целиком: Администрирование → Выгрузить информационную базу (файл .dt). Отдельно сохраните конфигурацию: Конфигурация → Сохранить конфигурацию в файл (файл .cf).
  • 🔒 Режим поддержки. Если конфигурация типовая и стоит на поддержке, объекты поставщика по умолчанию заблокированы. Их нельзя ни изменить, ни удалить, пока не включена возможность изменения.
  • 👥 Пользователи. Применить удаление к базе (обновить её структуру) получится только в монопольном режиме. Договоритесь о времени, когда в базе никого не будет.

Сделайте копию .dt до любых правок. После F7 данные удалённого справочника или документа из базы исчезают. Вернуть их можно только восстановлением из выгрузки.

Как включить возможность изменения типовой конфигурации

  1. Откройте Конфигурация → Поддержка → Настройка поддержки.
  2. Нажмите «Включить возможность изменения» и подтвердите.
  3. Для нужного объекта задайте правило «Объект поставщика редактируется с сохранением поддержки» или снимите его с поддержки.

Учтите: каждый удалённый типовой объект потом всплывёт при сравнении и объединении во время обновления. Чем больше таких правок, тем дороже каждое обновление.

Пошаговое удаление объекта в дереве конфигурации

Порядок одинаковый для справочника, документа, регистра, отчёта, обработки, общего модуля, а также для реквизита или табличной части внутри объекта.

Шаг 1. Найдите, где используется объект

Щёлкните по объекту правой кнопкой и выберите «Поиск ссылок на объект». Внизу откроется окно со списком мест, где он упоминается:

  • 📎 реквизиты других объектов с этим типом (в том числе составной тип);
  • 📎 формы, где есть поле с этим объектом;
  • 📎 подсистемы, роли, планы обмена, критерии отбора, подписки на события;
  • 📎 регистры, у которых объект указан регистратором или измерением.

Пройдите по списку и решите для каждой строки: убрать ссылку, заменить тип или отказаться от удаления.

Шаг 2. Удалите объект

  1. Выделите объект в дереве.
  2. Нажмите Delete или «Удалить» в контекстном меню.
  3. Подтвердите удаление.

Если на объект ещё остались ссылки, конфигуратор не даст его удалить и покажет, где он используется. Тогда вернитесь к шагу 1.

Состав подсистем и права в ролях обычно чистятся автоматически: строка с удалённым объектом из них просто пропадает.

Шаг 3. Проверьте код

Поиск ссылок на объект находит связи в метаданных, но не в тексте модулей. Код, который обращается к объекту по имени, останется и сломается при компиляции.

  1. Запустите Конфигурация → Проверка конфигурации и отметьте синтаксический контроль модулей.
  2. Дополнительно выполните глобальный поиск по тексту (Ctrl+Shift+F) по имени объекта. Так найдутся строки в текстах запросов и обращения вида Метаданные.Справочники.Имя, которые проверка модулей может не поймать.

Пример кода, который проверка модулей пропустит, а в работе он упадёт:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.СтарыеСклады";
Результат = Запрос.Выполнить();

Текст запроса — просто строка. Ошибка проявится только при выполнении.

Шаг 4. Сохраните и обновите базу

  1. Конфигурация → Сохранить конфигурацию (Ctrl+S).
  2. Конфигурация → Обновить конфигурацию базы данных (F7).
  3. Платформа покажет окно «Реорганизация информации» со списком изменений. Прочитайте его: там видно, какие таблицы будут удалены.
  4. Нажмите «Принять».

Передумали до F7? Команда Конфигурация → Вернуться к конфигурации БД откатывает основную конфигурацию к состоянию базы. Все несохранённые в базу правки пропадут, не только удаление.

Как не потерять данные: переименование вместо удаления

Если в объекте есть данные, которые нужно перенести в другой объект, сразу удалять его нельзя. Приём, который используют разработчики типовых конфигураций:

  1. Переименуйте объект, добавив префикс: Склады → УдалитьСклады. Синоним тоже поменяйте, например на «(не используется) Склады».
  2. Уберите объект из всех подсистем и ролей пользователей, чтобы его не было видно в интерфейсе.
  3. Создайте новый объект или реквизит и напишите обработку переноса данных.
  4. Перенесите данные и проверьте результат.
  5. Только после этого удаляйте старый объект по шагам выше.

Переименование не меняет структуру хранения данных. Таблица остаётся на месте, данные целы, а префикс сразу показывает всем разработчикам, что объект отслужил своё.

Сравним три подхода:

СпособКогда подходитРиски
Прямое удалениеСвой объект без данных и без ссылокПотеря данных, если они всё-таки были
Префикс «Удалить»Есть данные для переноса, нужен переходный периодОбъект ещё живёт в базе и занимает место
Скрыть через роли и функциональные опцииТиповой объект на поддержкеПочти нет: обновления проходят без конфликтов
Какой у вас объект?

Удаление в режиме Предприятия и в расширениях конфигурации

Что можно удалить из пользовательского режима

В режиме 1С:Предприятие удалить объект метаданных нельзя. Там удаляются только данные: элементы справочников, документы, записи.

Схема для данных двухшаговая:

  1. Пометить элемент на удаление (Delete в списке).
  2. Запустить обработку «Удаление помеченных объектов». В Бухгалтерии 3.0 она находится в разделе Администрирование → Обслуживание, группа «Корректировка данных». В любой конфигурации её можно открыть через Все функции → Стандартные.

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

Если меню «Все функции» не видно, включите его в настройках: Сервис и настройки (кнопка с шестерёнкой) → Параметры → Отображать команду «Все функции».

Объекты расширения

Расширение не умеет удалять объекты основной конфигурации. Оно только добавляет свои объекты и меняет поведение заимствованных.

Удалить объект, который добавлен в самом расширении:

  1. В конфигураторе откройте Конфигурация → Расширения конфигурации.
  2. Откройте нужное расширение, удалите объект в его дереве так же, как в основной конфигурации.
  3. Сохраните расширение и обновите конфигурацию базы данных для него.

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

Особенности удаления в распределённой информационной базе (РИБ)

В РИБ конфигурацию меняют только в главном узле. В подчинённых узлах она заблокирована: удалить там объект не получится.

Порядок работы:

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

Данные удалённого объекта пропадут во всех узлах, когда они примут новую конфигурацию. Если в подчинённом узле успели ввести документы, которые не дошли до главного, они будут потеряны. Отсюда правило из шага 1.

Если конфигурация обменивается не через РИБ, а через правила обмена (например, конвертацией данных), удалённый объект нужно убрать и из правил. Иначе обмен упадёт на попытке выгрузить или загрузить несуществующий тип.

Удаление объекта при работе с хранилищем конфигурации

Если конфигурация подключена к хранилищу, удаление тоже идёт через захват.

  1. Обновите конфигурацию из хранилища, чтобы работать с актуальной версией.
  2. Захватите удаляемый объект и все объекты, которые на него ссылаются: их тоже придётся менять. Если конфигуратор потребует захватить корень конфигурации, сделайте это.
  3. Удалите объект по шагам выше и проверьте конфигурацию.
  4. Поместите изменения в хранилище с понятным комментарием, например «Удалён справочник СтарыеСклады, данные перенесены в Склады».
  5. Остальные разработчики получат удаление при следующем обновлении из хранилища.

Если объект захвачен другим разработчиком, удалить его не получится, пока он не поместит изменения или не отменит захват. Администратор хранилища может отменить чужой захват, но несохранённые правки коллеги при этом будут потеряны для хранилища.

Рабочую базу обновляйте не напрямую из хранилища, а файлом .cf, проверенным на копии. Так удаление объекта не застанет пользователей врасплох посреди рабочего дня.

Ошибки после удаления и что с ними делать

Большинство проблем возникает из-за ссылок, которые поиск не нашёл, или из-за занятой базы.

Диагностика: выберите симптом

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

Частые вопросы

Можно ли восстановить удалённый объект метаданных?
До обновления базы — да, через «Вернуться к конфигурации БД» или загрузку сохранённого файла .cf. После обновления структура восстановится загрузкой .cf, но данные вернутся только из выгрузки .dt.
Удалится ли объект из базы сразу после нажатия Delete?
Нет. Пока вы не сохранили конфигурацию и не выполнили «Обновить конфигурацию базы данных», база работает по-старому, а данные на месте.
Как удалить реквизит документа, если по документу есть движения?
Удаление реквизита не трогает движения регистров. Но если реквизит используется в обработке проведения, сначала исправьте код, иначе проведение перестанет работать.
Что будет при обновлении типовой конфигурации, если я удалил её объект?
При сравнении и объединении объект появится как различие. Если его снова принять от поставщика, он вернётся, но без данных, которые были до удаления.
Почему база стала меньше не сразу после удаления справочника?
В файловой базе место от удалённых таблиц освобождается после тестирования и исправления с флажком «Сжатие таблиц информационной базы» (Администрирование → Тестирование и исправление в конфигураторе) или после выгрузки и загрузки .dt. Для сжатия нужен монопольный доступ.