Переход с редакции «Бухгалтерия предприятия 2.0» на 3.0 — это отличный повод привести конфигурацию к типовому виду, вынеся все накопленные доработки в расширение. Это позволит в дальнейшем обновлять программу в автоматическом режиме, сохраняя при этом уникальный функционал (документы, регистры, справочники). Однако многие разработчики сталкиваются с тем, что стандартная кнопка «Добавить в расширение» для собственных объектов работает не так, как для типовых. Рассмотрим подробнее, как решить эту задачу, сохранив структуру и данные.
Когда мы нажимаем «Добавить в расширение» на типовом объекте, платформа создает в расширении лишь «проекцию» объекта, позволяя менять его поведение или добавлять реквизиты. Но если объект (например, Документ.Пр_МойДокумент) создан вами в основной конфигурации, система воспринимает его как часть ядра. При попытке переноса могут возникнуть сложности с копированием свойств, типов и предопределенных данных.
Для успешного переноса нам придется использовать комбинацию ручного копирования метаданных и программного переноса накопленной информации. Разберем по шагам, как это реализовать.
Первым делом проанализируем текущее состояние базы. У нас есть обновленная до БП 3.0 конфигурация, где наши доработки все еще находятся в основной ветке. Нам необходимо создать чистое расширение.
Важный нюанс: Перед началом работ убедитесь, что режим совместимости конфигурации установлен не ниже 8.3.14. Именно с этой версии платформа начала полноценно поддерживать добавление собственных документов и регистров в расширения.
Проанализируем ситуацию: после вставки платформа может автоматически добавить индекс к имени (например, МойРегистр1). Это происходит, если объект с таким именем все еще существует в основной конфигурации. На данном этапе это нормально.
Рассмотрим вопрос сохранения целостности. При копировании объекта из одной конфигурации в другую (даже в расширение) создается новый объект с новым внутренним идентификатором (UUID). Если на ваш документ ссылаются другие объекты, простым копированием здесь не обойтись — ссылки могут «побиться».
Для предотвращения конфликтов имен в будущем (например, если фирма «1С» встроит в типовую БП объект с таким же названием), крайне рекомендуется добавить к имени объекта в расширении уникальный префикс, например пр_.
Пример переименования:
РегистрСведений.ДополнительныеДанныеРегистрСведений.пр_ДополнительныеДанныеСамое распространенное заблуждение — вера в то, что данные «подцепятся» автоматически. В серверном варианте работы таблицы расширений в базе данных SQL физически отделены от таблиц основной конфигурации и имеют префиксы вида _Ext.... Следовательно, после удаления объекта из основной конфигурации данные исчезнут, если их не переместить.
Разберем промышленный стандарт переноса:
_Удалить (например, РегистрСведений.пр_Сведения_Удалить).РегистрСведений.пр_Сведения).Пример кода для переноса данных регистра сведений:
Выборка = РегистрыСведений.пр_Сведения_Удалить.Выбрать();
Пока Выборка.Следующий() Цикл
МенеджерЗаписи = РегистрыСведений.пр_Сведения.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка);
// Если есть ссылки на переносимые документы, здесь нужно логику сопоставления
МенеджерЗаписи.Записать();
КонецЦикла;
Проанализируем этот код: мы последовательно читаем записи из старой таблицы (из основной конфигурации) и записываем их в новую таблицу, принадлежащую расширению. ЗаполнитьЗначенияСвойств отлично справляется, если имена реквизитов идентичны.
После того как мы убедились, что все данные успешно перенесены в объекты расширения и проверили работу функционала:
_Удалить из основной конфигурации.Выясним причину возможных рисков. Удаление расширения из списка в режиме «1С:Предприятие» или в конфигураторе приводит к немедленному и безвозвратному удалению всех таблиц этого расширения вместе с данными. В отличие от основной конфигурации, платформа не всегда выдает подробное предупреждение о реструктуризации при удалении расширения. Поэтому всегда делайте резервную копию перед любыми манипуляциями с составом расширений.
Также стоит помнить о типах данных. Если ваш новый справочник из расширения должен использоваться в качестве типа реквизита в типовом документе, который находится в основной конфигурации, вам придется сначала добавить этот типовой документ в расширение, а затем уже менять тип его реквизита (или добавлять новый реквизит в расширении).
Использование данного метода позволяет полностью освободить основную конфигурацию от изменений, что значительно упрощает эксплуатацию системы 1С:Бухгалтерия предприятия 3.0 в долгосрочной перспективе.