Как перенести справочники, документы и роли из основной конфигурации в расширение для возврата на поддержку

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто в процессе эксплуатации системы 1С возникает ситуация, когда конфигурация была снята с поддержки для добавления новых справочников или документов. Со временем становится понятно, что поддерживать такую базу сложно: каждое обновление требует ручного сравнения и объединения. В этой статье мы разберем, как правильно перенести доработки в расширение, чтобы вернуть основную конфигурацию «на замок».

Анализ задачи: перенос структуры и данных

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

Шаг 1. Перенос структуры метаданных

Рассмотрим самый простой способ копирования структуры. Платформа позволяет использовать стандартные команды буфера обмена. Проделаем следующие действия:

  1. Откроем основную конфигурацию и найдем нужный объект (например, Справочник.ДополнительнаяИнформация).
  2. Нажмем Ctrl+C на объекте.
  3. Перейдем в дерево метаданных нашего расширения.
  4. Нажмем Ctrl+V. Платформа создаст копию объекта в расширении.

Важный совет: Рекомендуем сразу использовать префиксы для имен объектов в расширении (например, Прф_ДополнительнаяИнформация). Это исключит конфликты имен, если в будущем фирма «1С» добавит объект с таким же именем в типовую конфигурацию.

Шаг 2. Сохранение данных и решение проблемы UUID

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

  1. Создаем в расширении пустые объекты-приемники с идентичной структурой (реквизиты, табличные части).
  2. Используем обработку «Выгрузка загрузка данных XML». В ней можно сопоставить объекты по именам.
  3. Главный секрет сохранения ссылок — использование метода УстановитьСсылкуНового() при программном переносе или использование режима «Загружать объекты с их идентификаторами» в типовых обработках.

Если вы решили писать свою обработку для переноса, пример кода для сохранения UUID будет выглядеть так:


// Пример программного создания элемента в расширении с сохранением ГУИД
СтараяСсылка = Справочники.СтарыйСправочник.НайтиПоКоду("001");
НовыйЭлемент = Справочники.Прф_НовыйСправочник.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(Справочники.Прф_НовыйСправочник.ПолучитьСсылку(СтараяСсылка.УникальныйИдентификатор()));
// Заполнение реквизитов
НовыйЭлемент.Наименование = СтараяСсылка.Наименование;
// ...
НовыйЭлемент.Записать();

Шаг 3. Работа с ролями и правами доступа

Разберем ситуацию с ролью «Особые полные права». Автор темы столкнулся с проблемой: как в расширении сделать роль, которая разрешает всё, кроме удаления? Здесь кроется важная особенность платформы: права в расширении аддитивны.

Проанализируем это правило: если в основной конфигурации у пользователя есть роль ПолныеПрава, которая разрешает удаление, то добавление любой роли в расширении не сможет запретить это действие. Расширение может только «добавить» права, но не «отобрать» их.

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

  1. В расширении создаем новую роль (например, Прф_ПолныеПраваБезУдаления).
  2. Заимствуем в расширение все необходимые объекты основной конфигурации.
  3. В созданной роли проставляем нужные флажки (чтение, изменение, добавление), но не снимаем флаг удаления (так как мы создаем права «с нуля» для этой роли).
  4. Критически важный момент: В пользовательском режиме (через «Администрирование — Пользователи») у конкретного сотрудника нужно отключить типовую роль ПолныеПрава и включить вашу роль из расширения. Только так ограничение на удаление вступит в силу.

Шаг 4. Анализ производительности (SQL таблицы)

Существует мнение, что хранение объектов в расширении замедляет систему из-за «лишних таблиц». Проясним ситуацию с точки зрения СУБД:

Итоги и возврат на поддержку

После того как данные перенесены, а роли настроены, выполните финальные действия:

  1. Убедитесь, что на новые объекты в расширении переписаны все ссылки в алгоритмах (запросы, модули), которые вы также перенесли в расширение.
  2. Удалите добавленные вручную объекты из основной конфигурации.
  3. В окне «Настройка поддержки» установите для конфигурации режим «Объект поставщика редактированию не подлежит» (верните замок).

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

← На главную