Цель: написать конвертер расширения конфигурации в патч.
Функционал:
1. Замена всех значений A на B;
2. Замена всех внутренних идентификаторов на новые.
Проблема:
Загрузили патчи EF_00_00000001 и EF_00_00000002 в базу, при запуске программы возникает ошибка "EF_00_00000001: (Критичная): Конфликт внутренних идентификаторов у объекта".
Типичные ошибки программистов:
- В базе был создан новый патч, в который добавили новые объекты метаданных (макет, модуль и т.д.), и сохранили его в файл EF_00_00000001.cfe. Затем патч был модифицирован и сохранен в отдельный файл EF_00_00000002.cfe.
- В базе был создан новый патч с новыми объектами метаданных (макет, модуль и т.д.), который сохранили в файл EF_00_00000001.cfe. После этого был создан еще один патч на основе копии EF_00_00000001.cfe, который был изменен (удалены и добавлены новые объекты метаданных, а также изменен номер патча).
- Программист разработал новый патч в базе, добавив новые объекты метаданных (например, макет, модуль и т.д.), и сохранил его в файл EF_00_00000001.cfe. После этого другой программист создал новый патч, сравнив и объединив его с патчем EF_00_00000001.cfe, затем внес изменения и сохранил в патч EF_00_00000002.cfe.
Правило:
Есть поведение идентификатора при перемещении объекта https://its.1c.ru/db/metod8dev/content/2291/hdoc, что новые идентификаторы создает только при копировании в буфер обмена объектов и создавать патчи нужно с нуля.
Но что делать с патчами, которые создавали не с нуля? Попросить программистов переделать патчи с нуля? А это пустая трата нервов, здоровья и времени.
Решение:
Предлагаю обработку, которая умеет конвертировать из любого расширения в патч с новым произвольным номером ошибки, внутренними уникальными идентификаторами и идентификатором патча.
Инструкция:
- Выбрать любой файл расширения конфигурации.
Расширение конфигурации бывает простое и подготовленное. Их различие заключается в том, что имя подготовленного расширения начинается с префикса "EF_". - Заполнить поля "Префикс имен", "Описание исправления", "Изменяемые объекты метаданных" и "Версии программ".
Вся информация об объектах метаданных доступна в конфигураторе, если открыть файл расширения конфигурации. - Нажать "Конвертировать в патч".
Если возникают сомнения в том, что файл подготовлен должным образом, можно открыть лог-файл и проверить сообщения об ошибках. Также можно загрузить подготовленное расширение в конфигуратор и поочередно открыть все модули, удаляя ненужные роли. Если требуется создать файл с другим именем или заменить тексты в некоторых файлах, достаточно установить соответствующие флажки в форме. Файл может быть сконвертирован в "EF_00_00000001.cfe", если выбрано только простое расширение конфигурации, а если расширение подготовленное, то будет создан файл с исправлением "_2" или с новым номером патча "EF_00_00000002".
Что делает обработка:
- Подключается к базе, очищает расширение в базе 2, загружает расширение конфигурации в базу 2, выгружает расширение в файлы xml, заменяет все внутренние идентификаторы на новые, добавляет новый общий макет, загружает из файлов xml в расширение конфигурации, выгружает расширение в новый файл cfe и снова очищает расширение.
Проверял в демобазе Управление торговлей 11.5.19.55 в платформе 8.3.25.1394.
Спасибо автору за код из статьи Программное создание расширения.
25.09.2024:
- Теперь атрибут configVersion нового общего макета устанавливается корректно.
- Исправлена ошибка, возникавшая при выборе файла с символом "_" в конце.
16.09.2024:
- Добавлены версии форматов xml для платформы 8.3.29 и ниже.
- Добавлены поля "Назначение". При выборе файла теперь будет отображаться назначение расширения конфигурации.
- Теперь при изменении номера ошибки меняется префикс имен конвертируемого патча.
13.12.2022:
- Добавлены версии форматов xml для платформы 8.3.22 и ниже.
- Убраны настройки подключения базы, подключение будет непосредственно из макета.
19.04.2022:
- Добавлены версии форматов xml для платформы 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:
- Добавлена настройка для подключения к серверной базе.
- Добавлена возможность не изменять номер ошибки и идентификатор патча, кроме внутреннего идентификатора.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.19.55