Цель: написать конвертер расширения конфигурации в патч.
Функционал:
1. Замена всех значений A на B;
2. Замена всех внутренних идентификаторов на новые.
Расширение конфигурации: простое и подготовленное расширение(имя расширения начинается с EF_).
Простое расширение
Обработка умеет конвертировать патч из простого расширения.
Сценарий пользования обработки:
- В закладке "Основное" выбрать файл расширения конфигурации МоеРасширение.cfe и нажать "Конвертировать в патч".
- Файл сконвертировался EF_00_00000001.cfe.
Что делает обработка:
- Подключается к базе, очищает расширение в базе 2, загружает простое расширение МоеРасширение.cfe в базу 2, выгружает расширение в файлы, заменяет все внутренние идентификаторы на новые, добавляет новый общий макет EF_00_00000001.cfe и т.д., загружает из файлов в расширение конфигурации, выгружает расширение в файл EF_00_00000001.cfe и снова очищает расширение.
Подготовленное расширение
Программист может создавать новые патчи копированием старых патчей, а при запуске программы возникать ошибки "EF_00_00000001: (Критичная): Конфликт внутренних идентификаторов у объекта".
Типичные ошибки программистов:
- В базе создали новый патч, в нем создали новые объекты метаданных(макет, модуль и т.д.), сохранили патч в файл EF_00_00000001.cfe, затем модифицировали патч и сохранили его в отдельный файл EF_00_00000002.cfe, потом загрузили 2 патча в базу. После перезапуска программы ошибка.
- В базе создали новый патч, в нем создали новые объекты метаданных(макет, модуль и т.д.), сохранили патч в файл EF_00_00000001.cfe, затем создали еще новый патч копированием старого патча EF_00_00000001.cfe и модифицировали его(убрали и добавили новые объекты метаданных, изменили номер патча), потом загрузили 2 патча в базу. После перезапуска программы ошибка.
- В базе программист создал новый патч, в нем создал новые объекты метаданных(макет, модуль и т.д.), сохранил патч в файл EF_00_00000001.cfe, затем другой программист создал еще новый патч и сравнивал/объединял с патчем EF_00_00000001.cfe, затем модифицировал его и сохранил в патч EF_00_00000002.cfe, потом загрузили 2 патча в другую базу. После перезапуска программы ошибка.
Есть поведение идентификатора при перемещении объекта https://its.1c.ru/db/metod8dev/content/2291/hdoc, что новые идентификаторы создает только при копировании в буфер обмена объектов и создавать патчи нужно с нуля.
Но что делать с патчами, которые создавали не с нуля? Попросить программистов переделать патчи с нуля? А это пустая трата нервов, здоровья и времени.
Предлагаю обработку, которая умеет конвертировать из любого расширения в патч с новым произвольным номером ошибки, внутренними уникальными идентификаторами и идентификатором патча.
Сценарий пользования обработки:
- В закладке "Основное" выбрать файл расширения конфигурации EF_00_00000001.cfe и нажать "Конвертировать в патч".
- Файл сконвертировался EF_00_00000002.cfe. Зайти в базу 2 и загрузить 2 патча: EF_00_00000001.cfe и EF_00_00000002.cfe. Ошибки нет. Можно продолжать модифицировать и сохранять патч EF_00_00000002.cfe.
Что делает обработка:
- Подключается к базе, очищает расширение в базе 2, загружает патч EF_00_00000001.cfe в базу 2, выгружает патч в файлы, заменяет все внутренние идентификаторы, уникальный идентификатор патча и номер ошибки на новые, загружает из файлов в патч, выгружает патч в файл EF_00_00000002.cfe и снова очищает расширение.
Проверял в демобазе Управление торговлей 11.5.8.341 в платформе 8.3.22.1704. Более сложные расширения не проверял.
Спасибо автору Yashazz за часть фрагмента кода из статьи Программное создание расширения.
13.12.2022:
- Добавлена версия формата 2.15 для платформы 8.3.22.
- Убраны настройки подключения базы, подключение будет непосредственно из макета.
19.04.2022:
- Добавлена версия формата 2.13 и 2.14 для платформы 8.3.20 и 8.3.21.
18.04.2022:
- Добавлены настройки текущей базы.
- Исправлены выявленные ошибки.
Опубликованы примеры скриншотов.
09.11.2021:
- Добавлена информация о выбранном файле и информация о конвертируемом патче. При выборе файла отобразится информация о выбранном файле, но прежде чем конвертировать патч можно добавить дополнительную инфу о конвертируемом патче.
- Перенесена закладка "Настройки" в закладку "Основное".
- Переименован режим "Перезаписывать измененный патч" вместо "Создать патч с нуля".
- Исправлены выявленные ошибки.
23.09.2021:
- Добавлена кнопка "Информация о патче" в закладке "Основное" в режиме "Создать патч с нуля". Прежде чем конвертировать в режиме "Создать патч с нуля", получите сначала информацию о патче (версии программ, изменяемые объекты метаданных, описание исправления).
- Исправлены выявленные ошибки.
23.09.2021:
- Добавлена кнопка "Информация о текущей ИБ" в закладке "Настройки". Получить информацию о текущей базе для подключения к другой базе (текущий пользователь и путь к текущей базе).
- Исправлена ошибка записи макета в файл TXT в одну строку в режиме "Создать патч с нуля".
16.09.2021:
- Добавлен новый режим "Загрузить выбранный файл расширения конфигурации в текущую базу". После загрузки файла расширения предлагает перезапустить программу.
16.09.2021:
- Добавлен подробный лог файла при конвертации расширения конфигурации в патч. Файл для вывода служебных сообщений больше не очищается.
- Добавлен новый режим "Использовать текущую версию программы". Добавляет/удаляет текущую версию программы, удаляет дубли версий, лишние пробелы и сортирует номера версий в поле "Версии программ".
- Исправлена ошибка в режиме "Создать патч с нуля". Некорректно заполняется макет.
27.08.2021:
- Изменен режим с "Не изменять номер и идентификатор патча" на "Создать патч с нуля". Патч можно создавать с нуля, например, нужно из расширения EF_00_00000001 сделать патч, в расширении не был создан макет, не все флаги по регламенту сделаны (было: умеет создавать с нуля только из обычного расширения; стало: умеет создавать с нуля из обычного и подготовленного расширения).
- Исправлено удаление тега (было: не все теги удалялись корректно, например, не снят флаг "Основные роли"; стало: теги удаляются корректно).
20.08.2021:
- Добавлен новый режим "Загрузить конвертируемый патч в базу". После загрузки патча предлагает перезапустить программу.
- Исправлено удаление расширения конфигурации (было: очищать все расширения конфигурации, стало: выборочное удаление расширения конфигурации).
03.08.2021:
- Добавлено поле "Добавить суффикс патча (в случае первого отзыва)". В случае отзыва добавляет суффикс патча.
Пример:
- EF_00_00000001 - отозвали из-за ошибок;
- EF_00_00000001_2 - новая версия патча.
15.07.2021:
- Добавлены новые поля: Описание исправления, Изменяемые объекты метаданных и Версии программ. Поля обязательно нужны для заполнения одноименного общего макета при создании нового патча.
02.06.2021:
- Добавлена возможность конвертирования из простого расширения в патч.
24.05.2021:
- Добавлена настройка для подключения к серверной базе.
- Добавлена возможность не изменять номер ошибки и идентификатор патча, кроме внутреннего идентификатора.