В процессе разработки тиражируемых решений на платформе 1С:Предприятие часто возникает дилемма: выпускать продукт в виде подсистемы для встраивания в основную конфигурацию или в виде расширения (.cfe) или в виде патча. Разработка в расширениях удобнее для поддержки, но имеет ряд ограничений по версиям платформы (например, полноценная работа с данными появилась только в 8.3.11). В этой статье мы подробно разберем, как организовать процесс переноса и синхронизации объектов между конфигурацией и расширением, чтобы не потерять типизацию данных и минимизировать ручной труд.
Когда мы пытаемся просто скопировать объект (например, Справочник или Документ) из основной конфигурации в пустую базу для создания расширения, мы часто сталкиваемся с тем, что типы реквизитов «слетают». Это происходит из-за того, что связи между объектами в 1С строятся на внутренних идентификаторах (UUID). Если в целевой базе нет связанных объектов, система заменяет тип на ЛюбаяСсылка или просто удаляет его, поэтому предварительно стоит провести анализ зависимостей конфигурации.
Рассмотрим ситуацию: у вас есть подсистема в основной конфигурации, которую нужно превратить в расширение. Проанализируем основные способы сделать это грамотно.
EDT — это современная среда разработки, которая работает с конфигурацией как с набором XML-файлов. В отличие от классического «Конфигуратора», EDT предоставляет гораздо более гибкие инструменты миграции метаданных, хотя объединение модулей в разрезе методов сегодня доступно и в обычном конфигураторе.
Разберем алгоритм работы в EDT:
Этот метод считается наиболее безопасным, так как EDT корректно правит связи в XML-структурах, сохраняя целостность типов данных.
Если вы привыкли работать в классическом конфигураторе, используйте метод «двух баз». Посмотрим, как это реализовать:
.cf вашей основной разработки.Для продвинутых разработчиков подойдет путь автоматизации выпуска релиза. Проанализируем ситуацию: вы ведете разработку только в основной конфигурации, а файл .cfe формируется скриптом автоматически.
Схема работы скрипта:
Designer.exe /DumpConfigToFiles [ПутьКПапке].ConfigDumpInfo.xml, чтобы найти объекты, принадлежащие вашей подсистеме.Configuration.xml) меняется заголовок (Namespace) на соответствующий расширению..cfe.Такой подход позволяет избежать рутинного копирования и гарантирует, что код в расширении всегда идентичен коду в основной конфигурации.
Выясним причину, по которой нельзя просто «перекидывать» объекты туда-сюда на живой базе. Когда вы создаете Справочник.МойСправочник в основной конфигурации, платформа создает в SQL таблицу с именем вроде _Reference75. Если вы переместите этот объект в расширение, платформа создаст новую таблицу с префиксом расширения, например _Reference75_EXT1.
Помните: бесшовный перенос данных между конфигурацией и расширением невозможен. Если вы решили переехать из CF в CFE, вам придется написать обработку для переноса данных:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.МойСправочник"; // Источник (в CF)
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Результат Цикл
НовыйОбъект = Расширение_Справочники.МойСправочник.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НовыйОбъект, Строка);
НовыйОбъект.Записать();
КонецЦикла;
Если ваша задача — поддержка УТ 10.3 или систем с режимом совместимости 8.3.6, использование расширений для хранения данных невозможно. В таких случаях рекомендуем использовать «Гибридный метод»:
Если РасширенияКонфигурации.Получить().Количество() > 0 Тогда
// Логика для современных систем
КонецЕсли;
Подводя итог, можно сказать, что выбор метода зависит от частоты обновлений. Если вы обновляете подсистему раз в полгода — достаточно метода со «Сравнением и объединением». Если же вы ведете активную разработку, настоятельно рекомендуем перейти в EDT или настроить автоматизированную сборку через OneScript. Это исключит человеческий фактор и ошибки типизации при миграции объектов между основной конфигурацией и расширением.