Постановка задачи
Есть тиражное решение – расширение, в котором хранятся данные. У расширения 2 редакции: для "1С:Бухгалтерии" и "1С:Бухгалтерии КОРП". Назовем их "ПРОФ" (или "источник") и "КОРП" (или "приёмник").
Рис. 1. Схема задачи
Клиент, который продолжительное время пользовался расширением ПРОФ, решил перейти на КОРП и купил лицензию на апгрейд. Естественно, он ожидает, что все его данные после установки редакции КОРП сохранятся.
Расширение КОРП когда-то было создано из ПРОФ, а затем каждая редакция дорабатывалась отдельно. В результате расширение КОРП уже не является прямым потомком ПРОФ, то есть простое обновление расширения приведёт к потере данных. Надо разработать процедуры переноса данных из источника в приёмник.
Виды объектов в расширениях: справочники и регистры сведений.
У редакции КОРП похожая структура данных, но в измерения регистров добавлены подразделения.
Хочется перенести всё без потерь. Как известно, "обменов без потерь не бывает" (С), поэтому я выбрала способ переноса данных через промежуточное расширение. Всё происходит в пределах одной информационной базы.
Решение
Задача решается в два этапа. Сначала – выгрузка данных из расширения для "1С:Бухгалтерии", затем – загрузка в расширение для "1С:Бухгалтерии КОРП".
Рис. 2. Схема решения
Выгрузка данных из расширения-источника
1. В информационной базе, в которой разрабатывается первая редакция, создаю расширение с назначением "Дополнение". Основное расширение имеет тип "Адаптация". Даю этому новому расширению префикс "Переход".
Рис. 3. Список расширений в "Конфигураторе"
Справка: Свойство расширения "Назначение" может принимать 3 значения: Исправление, Адаптация и Дополнение.
- Исправление – когда расширение исправляет ошибку в прикладном решении.
- Адаптация – когда расширение адаптирует типовую конфигурацию под требования заказчика.
- Дополнение – когда расширение добавляет дополнительный функционал в типовую конфигурацию.
"Назначение" влияет на порядок подключения расширений при старте сеанса (сначала подключаются расширения с назначением "Исправление", затем – "Адаптация" и в последнюю очередь – "Дополнение"). Таким образом, новое расширение видит все данные расширения-источника.
2. В переходном расширении простым копированием создаю такие же справочники и регистры, как в первом расширении. Но названия их – другие, с префиксом "Переход". Чтобы типы данных измерений и ресурсов регистров и реквизитов справочников были правильными, заимствую необходимые объекты из основной конфигурации.
3. Не забываю про назначение прав пользователям этого расширения на новые объекты. Для переноса данных достаточно одного пользователя с полными правами.
4. Делаю подсистему в переходном расширении и вывожу все созданные объекты в пользовательский интерфейс. Подсистема также называется по-другому, не так, как в расширении-источнике.
5. Создаю обработку в переходном расширении, которая будет забирать данные из расширения-источника.
При запуске "1С:Предприятия" в интерфейсе теперь два добавленных раздела. Один добавляется расширением ПРОФ, второй – переходным расширением.
Рис. 4. Меню разделов в "1С:Бухгалтерии" с добавленными пунктами
Вот так выглядит меню переходного расширения:
Рис. 5. Меню переходного раздела в "1С:Бухгалтерии"
В меню выведены все добавленные объекты и обработка загрузки данных.
Сама обработка содержит одну кнопку, по нажатию на которую выполняется команда "Прочитать и загрузить данные расширения-источника". Команда считывает содержимое регистров и справочников расширения ПРОФ и записывает его в свои объекты. Каждый запуск команды сначала обнуляет объекты переходного расширения, затем записывает в них считанные данные по новой.
Рис. 6. Форма обработки загрузки регистров и справочников
Обработка безопасна для расширения-источника, так как ничего не изменяет в исходных данных.
После выполнения команды загрузки данных в переходном расширении дублируется информация из справочников и регистров расширения ПРОФ. Чтобы проверить, как прошла операция, открываю каждый список объектов из меню раздела "Переход" (см. рис. 5).
Если по какой-то причине после загрузки регистры выглядят пустыми, то есть волшебная команда "Обновить" (F5).
Загрузка данных в расширение-приёмник
Чтобы обеспечить загрузку данных в расширение для "1С:Бухгалтерии КОРП", нужно доработать это расширение.
Добавляем новую обработку в это расширение. Делаем её по умолчанию невидимой для пользователей в меню раздела. Рассказываем в инструкции по переходу, как эту функцию вывести в меню. Спойлер: через "шестерёнку", "Настройка действий".
Рис. 7. Добавление обработки в меню раздела
В левом списке выделяем обработку "Перенос данных" и по кнопке "Добавить" переносим в правый список. Нажимаем "ОК".
После завершения переноса данных пользователю нужно будет убрать эту команду из меню таким же способом (перенести из правого списка в левый).
Так выглядит обработка загрузки в расширении-приёмнике:
Рис. 7. Форма обработки загрузки данных в расширении-приёмнике
Перед запуском этой обработки проверяется, есть ли данные в регистрах и справочниках расширения-приемника. Поскольку это новое расширение, то данных в нём быть ещё не должно. Кроме того, проверяется наличие в информационной базе переходного расширения – если его нет, то и делать тут нечего.
Состав комплекта поставки для пользователя
- Расширение для "1С:Бухгалтерии КОРП" с функцией загрузки данных.
- Временное расширение-переходник.
- Инструкция по переходу с ПРОФ на КОРП вместо инструкции по установке расширения КОРП с нуля.
Последовательность действий пользователя при переходе с одного расширения на другое
Пользователь открывает инструкцию и видит эти шесть пунктов.
- Создание резервной копии информационной базы.
- Подключение временного расширения для переноса данных.
- Заполнение справочников и регистров временного расширения.
- Удаление старого расширения и подключение нового.
- Перенос данных из временного расширения.
- Удаление временного расширения.
После обязательного этапа создания резервной копии в информационную базу загружается переходное расширение. Оно становится активным наряду со "старым" расширением.
В переходное расширение загружаются накопленные данные пользователя из справочников и регистров. Пользователь проверяет правильность и полноту загрузки. Может снова сделать резервную копию.
Теперь "старое" расширение может быть удалено.
После перезагрузки информационной базы добавляется "новое" расширение, предназначенное для "1С:Бухгалтерии КОРП".
Рис. 8. Новое расширение и переходное расширение в списке
В "новом" расширении запускается обработка загрузки данных из переходного расширения. Снова пользователь проверяет полноту и правильность загруженных справочников и регистров.
Если всё хорошо, то переходное расширение можно сначала отключить, а затем и удалить из базы.
Задача решена.
Что осталось за кадром
1. Остались незаполненные подразделения в регистрах расширения-приёмника. Эту задачу можно рассматривать как индивидуальную доработку для конкретного клиента. Возможно, её и не нужно будет решать программными средствами.
2. После того, как разработка была закончена, я задалась вопросом: почему расширение КОРП с назначением "Адаптация" видит данные переходного расширения? Видимо, дело тут не назначении, а в последовательности загрузки расширений а информационную базу. Последнее загруженное расширение видит все данных всех расширений. Об этом говорит и документация на сайте ИТС:
При рассмотрении вопроса взаимодействия расширений и расширяемой конфигурации будет использоваться пример из двух расширений (Расширение1 и Расширение2), зарегистрированных в расширяемой системе в указанном порядке. При этом чем раньше зарегистрировано расширение, тем меньше расширений находится между этим расширением и расширяемой конфигурацией. Так, Расширение1 будет расширять непосредственно расширяемую конфигурацию, а Расширение2 будет расширять конфигурацию, которая является объединением Расширения1 и оригинальной расширяемой конфигурации.
Плюсы и минусы такого решения
Плюсы:
- Апгрейд на более функциональную редакцию тиражного программного продукта полностью автоматизирован и не требует участия в нём разработчика. Пользователю даются подробные инструкции и необходимые файлы (в данном случае, переходное расширение). Все действия он выполняет самостоятельно или силами своих специалистов.
- Решение даёт возможность перенести все данные без потерь.
Минусы:
- В дистрибутиве тиражного программного продукта появилось ещё одно расширение, работоспособность которого зависит от структуры данных других расширений. При любом изменении структуры данных регистров и справочников расширения-источника и расширения-приёмника придётся дорабатывать ещё и расширение-переходник.
Что делать, если клиент уже успел кастомизировать исходное расширение?
Так как расширение продаётся с открытым кодом, то клиент имеет все возможности его самостоятельно доработать.
Я даю пользователям рекомендации, как дорабатывать расширение, чтобы оставаться на поддержке разработчика и пользоваться благами обновлений. В частности, не рекомендуется изменять структуру объектов расширения – справочников и регистров.
Если структура объектов не изменена, то переходное расширение справится со своей задачей. Остальные доработки клиент должен будет перенести в новую версию самостоятельно.
В противном случае к решению задачи переноса данных нужно привлекать программистов.
Подведём итоги
Задача переноса данных из одного расширения в другое в случае, когда оба расширения не могут одновременно находиться в базе, может быть решена через промежуточное расширение. Главное – следить за тем, чтобы в процессе не затерлись случайно данные пользователя. Ну и не забывать о создании резервных копий.
Разработка велась на типовой конфигурации "1С:Бухгалтерия" 3.0.161.19. Платформа 1С:Предприятие 8.3.24.1586.
Ответы на частые вопросы
Что такое тиражное решение?
Тиражное решение – это программная разработка, предназначенная для неограниченного круга пользователей. Она изначально создаётся как универсальный программный продукт. Сначала делается, затем продаётся. Продаётся, как правило, на маркетплейсах и других ресурсах, привлекающих массового клиента.
Решение, о котором идёт речь в статье: Учет по проектам в 1С:Бухгалтерии 3.0.
Что такое дистрибутив программного продукта?
Дистрибутив – это комплект поставки программного продукта. В него могут входить расширения, внешние отчеты и обработки, документация пользователя, инструкция по установке и другие файлы.
Что такое редакция программного продукта?
Редакцией (Ediition) называют выпуск программы, обладающий значительными отличительными характеристиками для пользователя. Редакции могут различаться для разных версий одного программного продукта.
Например, Windows 7 выпускалась в шести редакциях:
- Начальная (Starter)
- Домашняя базовая (Home Basic)
- Домашняя расширенная (Home Premium)
- Профессиональная (Professional)
- Корпоративная (Enterprise)
- Максимальная (Ultimate)
А у Windows 10 уже другие редакции:
- Домашняя (Home)
- Профессиональная (Pro)
- Корпоративная (Enterprise)
Что такое апгрейд с одной редакции на другую?
Апгрейд (upgrade) – это переход с младшей редакции на старшую (или с менее функциональной на более функциональную). Лицензия на апгрейд, как правило, стоит дешевле, чем полная лицензия. То есть владелец лицензии на младшую редакцию доплачивает, что приобрести старшую редакцию.
Помимо денежных затрат, зачастую пользователь также должен решить задачу переноса данных.
Пример апгрейда программы 1С: переход с "1С:Зарплата и управление персоналом ПРОФ" на "1С:Зарплата и управление персоналом КОРП".
Надо оговориться, что фирма "1С" называет ПРОФ и КОРП "версиями", но смысл тот же.