При сопровождении сильно измененных 1С достаточно частая задача — очистка основной конфигурации от изменений и вынос их в расширения. Это необходимо для снижения стоимости последующих обновлений, стандартизации кода и возврата конфигурации к полностью типовому виду.
Расскажем о нашем алгоритме по миграции доработок в расширение на одном из проектов с «1С:Комплексная автоматизация 2» релиз 2.5.22.114.
Когда префиксы уже не помогают
Вариант с использованием префиксов для измененных стандартных объектов в этой ситуации уже не работал. Мы столкнулись с такими проблемами:
- Риск потери данных: при простом удалении объектов из основной конфигурации или изменении их типов данных в процессе обновления СУБД происходит необратимая потеря информации.
- Ограничения платформы при изменении типов данных: прямая замена типов реквизитов в основной конфигурации на типы из расширения некорректно обрабатывается платформой при реструктуризации.
- Особенность платформы при интеграции команд: выявлена критическая особенность платформы, ограничивающая корректный вывод кастомной команды создания связанных документов через стандартные механизмы расширения метаданных. Использование штатного добавления команды в расширение приводило к нестабильной работе интерфейса.
Алгоритм переноса доработок в расширение
Мы сделали такую схему миграции доработок из конфигурации.
Шаг 1. «Мягкое» удаление объектов
Для миграции добавленных объектов метаданных, использовалась схема «мягкого» удаления:
- Создание промежуточной конфигурации: все переносимые новые кастомные объекты в основной конфигурации переименовывались путем добавления префикса Удалить_.
- Создание расширения: в целевое расширение переносились те же объекты, но под своими первоначальными именами.
- Создание обработки для переноса данных из одних объектов в другие: в рабочую базу загружалась промежуточная конфигурация, подключалось расширение. С помощью обработки выполнялся перенос данных из объектов конфигурации с префиксом в объекты расширения без префикса.
- Загрузка финальной конфигурации: после верификации переноса данных в базу загружалась финальная конфигурация, из которой объекты с префиксом Удалить_ были полностью исключены.
Шаг 2. Перенос изменений в типовых объектах
При переносе в расширение измененных типовых объектов алгоритм с префиксом Удалить_ не подходит для измененных реквизитов, нужна доработка промежуточной конфигурации и логики обработки.
Для сохранения накопленных в измененных реквизитах алгоритм был переведен на файловый обмен:
- Экспорт данных: перед началом обновления данные изменённых реквизитов и объектов основной конфигурации выгружаются во внешний файл — сериализованный XML/JSON-пакет.
- Подготовка базы: в информационную базу загружается промежуточная конфигурация и файл расширения.
- Импорт и сопоставление: обработка в транзакционном режиме выполняет восстановление измененных типов и данных в реквизитах расширения из ранее созданного файла, а затем обрабатывает добавленные объекты по первоначальной логике — из объектов с префиксом Удалить_.
- Очистка конфигурации: после успешного переноса — производится загрузка полностью типовой конфигурации «1С:Комплексная автоматизация 2». Все кастомные данные теперь физически хранятся и обрабатываются внутри таблиц расширения.
Таким образом, все изменения в свойствах типовых объектов и реквизитах, включая типы данных, были перенесены в расширение.
Шаг 3. Обход ограниченийплатформы при создании связанных документов через стандартные механизмы расширения метаданных
Для обхода нестабильного поведения платформы при выводе доработанной команды «Ввод на основании» через стандартную форму расширения — мы отказались от настройки команды в окне свойств и дереве метаданных в пользу программного интерфейса:
- Кастомная команда ввода на основании была полностью удалена из дерева метаданных конфигурации/расширения.
- В расширение добавлены служебные модули для реализации логики:
- [Префикс]_СозданиеНаОснованииКлиент
- [Префикс]_СозданиеНаОснованииВызовСервера
- Регистрация и вывод команды в интерфейс стандартных документов конфигурации реализованы через интеграцию с подсистемой «Подключаемые команды» Библиотеки Стандартных Подсистем (БСП).
Итоги: 3 совета по упрощению переноса доработок 1С в расширение
- Используйте транзитные файлы при изменении типов данных: пытаться изменить тип реквизита «на лету» в процессе динамического обновления или реструктуризации СУБД — критический риск. Схема «Выгрузка в файл e32; Обновление конфигурации e32; Загрузка из файла в расширение» гарантирует сохранность данных.
- Стандартизируйте имена: применение префиксов, например, Удалить_, на промежуточных этапах позволяет избежать конфликтов пространств имен платформы при одновременном наличии объекта в конфигурации и расширении.
- Минимизируйте создание элементов интерфейса в редакторе расширений: при изменении командных панелей и сложных форм лучше выводить кнопки и элементы кодом через БСП. Это защитит от сбоев внешнего вида формы при обновлении платформы.
Вступайте в нашу телеграмм-группу Инфостарт