В процессе доработки конфигураций 1С часто возникает ситуация, когда функциональность оказывается разнесена по нескольким разным расширениям. Это может усложнять поддержку и обновление системы. Возникает логичный вопрос: можно ли объединить два расширения в одно, перенеся, например, документ со всеми накопленными данными из одного расширения в другое? Рассмотрим эту задачу подробно. Сразу отметим, что это комплексный процесс, состоящий из двух ключевых этапов: переноса структуры объектов (метаданных) и переноса самих данных.
Первая и основная часть задачи — это перенос самих объектов конфигурации (документов, справочников, отчетов и т.д.) из одного расширения в другое. Для этого в платформе 1С существует штатный и очень мощный инструмент — «Сравнение, объединение с конфигурацией из файла...». Разберем этот процесс по шагам.
Создание резервной копии. Это обязательное правило перед любыми серьезными изменениями в структуре базы данных. Убедитесь, что у вас есть актуальная резервная копия, к которой можно будет вернуться в случае непредвиденных проблем.
Выгрузка исходного расширения. Откроем конфигуратор. В окне «Расширения конфигурации» найдем расширение, из которого мы хотим забрать объекты (расширение-источник). Выделим его и через главное меню «Конфигурация» -> «Сохранить конфигурацию в файл...» выгрузим его в файл с расширением .cfe.
Выбор целевого расширения. В том же окне конфигуратора выберем расширение, в которое мы будем переносить объекты (целевое расширение).
Запуск сравнения и объединения. Теперь запустим сам механизм. В главном меню выберем «Конфигурация» -> «Сравнить, объединить с конфигурацией из файла...». В открывшемся диалоге укажем путь к файлу .cfe, который мы сохранили на предыдущем шаге.
Настройка параметров объединения. После анализа файла откроется окно сравнения. В нем мы увидим дерево объектов конфигурации, где система наглядно покажет различия. Чтобы не перенести ничего лишнего, рекомендуется сначала снять все галочки (через меню «Действия» -> «Отметить по подсистемам» и снять все флажки). Затем вручную отметим только те объекты, которые нам необходимо перенести, например, нужный документ и связанные с ним справочники, перечисления или общие модули.
Важный момент: для корректного переноса и удаления объектов, которые больше не нужны в целевом расширении (если такие есть), может потребоваться в настройках сравнения (кнопка «Настройка» внизу окна) установить флаг «Разрешить удаление объектов основной конфигурации». В нашем контексте «основной конфигурацией» выступает целевое расширение.
Выполнение объединения. После того как мы внимательно отметили все необходимые объекты, нажимаем кнопку «Выполнить». Платформа скопирует выбранные метаданные в целевое расширение.
Обновление конфигурации базы данных. Финальный шаг — применяем внесенные изменения к информационной базе. Нажимаем F7 или кнопку «Обновить конфигурацию базы данных». После этого в структуре базы данных появятся новые таблицы для перенесенных объектов.
На этом перенос структуры завершен. Однако новые таблицы будут пустыми. Перейдем ко второму, не менее важному этапу.
Как верно подметили на форуме, метаданные и данные — это разные сущности. Механизм сравнения и объединения работает только с метаданными. Данные, накопленные пользователями в таблицах старого расширения, сами по себе никуда не переместятся. Для их миграции необходимо написать специальную обработку на встроенном языке 1С.
Проанализируем ключевые моменты, которые нужно учесть при разработке такой обработки.
Имена таблиц в базе данных
Платформа 1С формирует имена таблиц в SQL для объектов расширений по определенному правилу, включая в них имя самого расширения. Например, если у нас был документ «СпецЗаказ» в расширении «Расширение1», его таблица могла называться примерно так: _Document300_T1_R1. После переноса в «Расширение2» для него будет создана новая таблица, например, _Document300_T2_R1 (имена и суффиксы условны). Задача обработки — прочитать данные из таблиц, относящихся к старому расширению, и записать их в новые таблицы, относящиеся к целевому расширению.
Соответствие типов и перенос ссылок
При переносе важно обеспечить точное соответствие типов данных. Особое внимание уделим ссылкам. Если переносимый документ ссылается на справочники или другие документы, которые также были в исходном расширении и тоже были перенесены, нужно корректно переносить эти ссылки. В обработке необходимо будет сначала найти или создать соответствующий элемент в новом справочнике, получить на него ссылку и уже ее подставить в реквизит нового документа.
Перепроведение документов
Для документов простой перенос записей из одной таблицы в другую — это лишь половина дела. Документ ценен не только своими данными, но и движениями, которые он формирует по регистрам (бухгалтерским, накопления, сведений). Чтобы новый, перенесенный документ сформировал все необходимые движения, его нужно перепровести. Поэтому алгоритм обработки должен быть следующим:
Важно: проводить документы нужно в строгой хронологической последовательности, чтобы не нарушить учет и корректность остатков по регистрам.
При планировании объединения расширений стоит учитывать еще несколько моментов, которые могут усложнить задачу:
Зависимости объектов. Переносимый документ может использовать общие модули, справочники, перечисления из своего «родного» расширения. При переносе нужно не забыть перенести и все зависимые объекты, иначе целевое расширение просто не будет работать.
Конфликты и объединение кода. Самая сложная ситуация возникает, когда оба расширения (и исходное, и целевое) изменяют один и тот же объект основной конфигурации, например, форму документа «Реализация товаров и услуг». В этом случае при объединении платформа покажет конфликт. Его придется разрешать вручную: открывать модули и аккуратно переносить код из одного расширения в другое, чтобы не потерять функциональность ни того, ни другого.
Целесообразность объединения. Перед началом такой масштабной работы стоит задать себе вопрос: а действительно ли это необходимо? Иногда управлять двумя небольшими, независимыми расширениями проще, чем одним большим и сложным, где все взаимосвязано.
В заключение отметим, что объединение расширений — это выполнимая, но требующая высокой квалификации задача. Она требует внимательности при переносе метаданных и глубокого понимания логики данных при написании обработки миграции. И, конечно же, все операции следует сначала проводить на тестовой копии базы.