Массовое изменение режима поддержки объектов конфигурации

Публикация № 1148991 05.11.19

Разработка - Конфигурирование 1С - Структура метаданных

Что делать, если при сравнении/объединении конфигураций нужно изменить режим поддержки для большого количества объектов? Штатного механизма для выполнения подобной задачи в Платформе нет. Изменять режим для всей конфигурации? Описывается способ, позволяющий выполнить изменение режима только для нужных объектов.

Как мы поступаем, если при сравнении/объединении конфигураций нужно изменить объект, находящийся на поддержке? Открываем диалог «Настройка поддержки», меняем нужному объекту режим на «Редактируется с сохранением поддержки» и возвращаемся к сравнению/объединению. А если таких объектов несколько? Повторяем процедуру для каждого из объектов. А если таких объектов, находящихся на поддержке, которые изменены в новой Конфигурации много (даже не известно сколько именно)? Тогда мы поступаем просто – меняем режим для всей конфигурации. Потому что изменить режим для большого количества объектов штатными средствами невозможно, а делать это поштучно – слишком трудо- и время-затратно.

В данной заметке я опишу подход, позволяющий решить эту задачу и другие подобного рода.

Если Вас интересует готовое решение и не важны детали реализации, можно сразу переходить к концу заметки.
 

Изменение режима для всей конфигурации (с флагом "Установить для подчиненных объектов")
 

На днях мне довелось столкнуться с такой ситуацией при встраивании отраслевого решения в типовую конфигурацию, которая нами уже достаточно серьезно дорабатывается под нужды Заказчика и требует регулярного обновления релизами 1С.

В инструкции по встраиванию решения присутствует прямое указание на необходимость перевода всех объектов Конфигурации в режим «редактируется с сохранением поддержки», т.к. изменений вносится много. Точное количество объектов, которым нужно изменить режим, неизвестно. Решение с изменением режима для всех объектов показалось мне, скажем так, не очень красивым. Поэтому решил попробовать найти способ изменить режим только для требуемых объединения объектов. 

Первый вопрос, который потребовалось решить – это понять какие конкретно объекты потребуют изменения режима и сколько их всего. Этот вопрос решается достаточно просто. Производится предварительное сравнение/объединение и выводится отчет о сравнении Конфигураций. Удобнее для данной цели отчет в текстовом виде и кратком формате. В файле отчета все объекты (и реквизиты) что изменены, будут помечены тремя звёздочками. Нужно лишь отфильтровать эти записи каким-нибудь способом – регулярными выражениями, построчным чтением в обработке или любым другим.
В результате имеем список измененных объектов (в моем случае – 509, включая корень конфигурации).
 

Список измененных объектов Конфигурации
 

Следующая задача – решить каким образом все же произвести изменения. Изначально предполагалось, что это удастся сделать посредством выгрузки – загрузки XML-файлов конфигурации. Нужно только найти файл, в котором хранятся данные о режиме поддержки и изменить их.

Просмотр файлов выгрузки глазами не позволил найти места, где в явном виде был бы указан режим поддержки для объектов. Поэтому пришлось ставить эксперимент с использованием GIT-а. Инициализировал в каталоге выгрузки репозиторий, закоммитил исходное состояние, изменил режим объекта и выгрузил заново. GIT показал что изменено два файла - ConfigDumpInfo.xml и Ext/ParentConfigurations.bin. 
 

Изменения репозитория GIT при изменении режима поддержки для объекта
 

В файле ConfigDumpInfo.xml содержатся имена объектов, их идентификаторы и текущие версии - вряд ли это то, что мы ищем.

Заглядываем в ParentConfigurations.bin и видим, что он представляет собой стандартный 1С-овский «скобочный» файл, представляющий собой единственную километровую строку с идентификаторами. В таком файле утилитами сравнения неудобно смотреть, где и что именно изменилось. Поэтому заменяем запятые, разделяющие поля, на комбинацию «,\r\n» и сравниваем в таком виде. Теперь хорошо видно, что изменилось.
 

Результат сравнения файлов ParentConfigurations.bin
 

Отмечу, что данное изменение относится не к тому идентификатору, который идет непосредственно перед изменением, а к ближайшему следующему (выделен на скриншоте).

Теперь нам известно, что для решения задачи нужно изменить 0 на 1 для всех идентификаторов, соответствующих измененным объектам из списка. Значит, требуется для каждого объекта списка определить его идентификатор. С этим нам поможет уже упоминавшийся файл ConfigDumpInfo.xml, ведь в нём есть и имена объектов, и их идентификаторы. 
 

Файл ConfigDumpInfo.xml
 

Но есть и небольшое затруднение – в файле имена видов объектов – англоязычные. 
Для примера, в списке у нас «ПланОбмена.ОбменУправлениеХолдингомДокументооборот20.Макет.ПодробнаяИнформация», а в файле – «ExchangePlan.ОбменУправлениеХолдингомДокументооборот20.Template.ПодробнаяИнформация». 

В этом месте мне хотелось бы написать, что мы можем взять таблицу соответствий русскоязычных и англоязычных терминов из некоего ресурса Платформы, но, к сожалению, мне пока не удалось найти в каком именно. Пришлось просто составить список соответствий вручную. 

Для поиска идентификаторов в файле и дальнейшего изменения файла ParentConfigurations.bin была создана простенькая обработка. В ней для каждой строки списка измененных объектов производится замена русских терминов на англоязычные, поиск идентификатора объекта в файле ConfigDump.xml, замена вхождения «,0,0,<GUID>,» на «,1,0,<GUID>,» в файле ParentConfigurations.bin.
 

Измененный файл ParentConfigurations.bin
 

Измененный файл с настройками поддержки готов. Осталось загрузить его обратно в Конфигурацию и проверить, получился ли желаемый результат.

Загружать лучше конкретный файл, а не всю выгрузку, т.к. при полной загрузке конфигурации из XML-файлов возможны сюрпризы. К сожалению, в Конфигураторе не предусмотрено интерактивного способа загрузить файлы выборочно. Но возможность сделать это всё же существует. Для выборочной загрузки нужно воспользоваться параметрами ключа /LoadConfigFromFiles пакетного режима запуска Конфигуратора.
Подробности здесь и здесь.
 


 

Закрываем Конфигуратор, выполняем команду в режиме командной строки:
"C:\Program Files\1cv8\<ВашаВерсия>\bin\1cv8.exe" DESIGNER /S<server>\<base> /N<Юзер> /P<Пароль> /LoadConfigFromFiles "<КаталогВыгрузки>" -Files "<КаталогВыгрузки>\Ext\ParentConfigurations.bin"

Здесь есть особенность – после запуска команды сразу же происходит возврат к приглашению ввода следующей, без ожидания завершения текущей команды и можно решить, что команда не работает. На самом деле, если посмотреть диспетчером задач или ProcessExplorer ом, видно, что процесс 1cv8.exe запущен. Нужно дождаться его завершения.
 

Процесс конфигуратора, запущенный в пакетном режиме
 

Вновь запускаем Конфигуратор, видим значок восклицательного знака, указывающий на то, что открытая конфигурация отличатся от конфигурации БД. Выборочно проверяем установленные значения в диалоге «Настройка поддержки» и убеждаемся в том, что желаемый результат достигнут.
 

Успешный результат изменения режима поддержки
 

Задача выполнена. Можно продолжить сравнение/объединение с встраиваемой Конфигурацией. 

Готовое решение

В приложенной обработке реализованы все этапы процесса.

1. Чтение файла отчета о сравнении с фильтрацией записей об изменении Объектов Конфигурации.

2. Чтение файла ConfigDumpInfo.xml и сопоставление идентификаторов измененных Объектов.

3. Изменение режима в файле ParentConfigurations.bin

4. Запуск Конфигуратора в пакетном режиме для обновления измененным файлом.

Обработка для массового изменения режима поддержки объектов Конфигурации

Протестировано на версиях Платформы 8.3.10.2561, 8.3.14.1630.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Жолтокнижниг 254 08.11.19 22:44 Сейчас в теме
Отлично написано, все по полочкам, зачем почему и как.
2. Xershi 1255 08.11.19 22:49 Сейчас в теме
А какой смысл менять 99 из 200?
Все объекты меняются. Затем создается хранилище. И делай что хочешь.
Но ваш случай скорее в обратном. Когда старый разработчик вот так тыкался и вообще с поддержки снял! И чтобы не тыкаться поднимая поддержку можно использовать ваш метод загрузки из файлов.
3. VKislitsin 09.11.19 11:03 Сейчас в теме
(2) Максим, смысл и целесообразность каждый для себя может определить самостоятельно.
Цель публикации - продемонстрировать один из возможных подходов, и поделиться инструментом, который сделал для себя.

Насчет возврата на поддержку, не всё так просто. Я проводил этот эксперимент, конечно же. Загрузка из файла вернет значки замка на все объекты, которым будет установлен 0, но определять были ли изменены объекты, и при необходимости, загружать их из Конфигурации Поставщика, всё-таки придется сравнением с этой КонфигурациейПоставщика.
4. 7OH 32 12.11.19 11:49 Сейчас в теме
На днях обновлял БУХУ.
Тоже снимал с поддержки.
Только выписал имена объектов нужных и снял с мультивыделением.
Есть некоторые но - чтобы снимать рекурсивно - все выделенные объекты должны иметь внутренности, иначе галка рекурсии недоступна.
5. Olenevod 27 17.11.19 18:19 Сейчас в теме
Здорово! Возьму а заметку. Бывали случаи когда надо было восстанавливать замки.
6. athena 23.11.19 00:18 Сейчас в теме
Спасибо! Воспользовалась идеей, чтоб вернуть объекты на поддержку.
Ошибочно было включено редактирование всех объектов конфигурации, хотя изменения были не такими значительными.

Еще в какой-то момент появилась надежда, что можно обойти проблему рус/англ терминологии, если изначально сравнение конфигураций проводить (и файл сравнения выгружать) в англ. интерфейсе.
Но, увы , не получилось: интерфейс и названия видов объектов отображаются правильно - на англ, в окне сравнения в том числе, а файл выгружается всё равно на русском, почему - вообще не понятно. Так что после ряда безуспешных попыток плюнула и тоже сделала переводы.
7. VKislitsin 669 24.08.21 17:42 Сейчас в теме
Добавлю кейс для применения метода:
Повышение режима совместимости до 8.3.14 для конфигурации потребовало (наряду с другими действиями) замены во всех модулях наименования типа для управляемых форм Тип("УправляемаяФорма") на Тип("ФормаКлиентскогоПриложения"). Всего 124 вхождения в 84 объектах конфигурации. Менять режим поддержки для каждого из этих объектов вручную было бы несколько скучно.
9. PolAlex2 118 13.10.21 02:55 Сейчас в теме
(7) Добрый день!
А где сама обработка? не вижу возможности ее получить..
10. VKislitsin 669 18.10.21 10:34 Сейчас в теме
(9) Добрый день. Спасибо за интерес!
Я удалил файл из публикации из-за странной политики Инфостарта: если к публикации добавлен файл для скачивания, считается что начислять СМ как за статью не нужно - только за скачивания. А так как мои разработки весьма специфические и не предполагают большого количества скачиваний, поступления от них не покрывают неначисленных СМ за статью и пороги рейтинга.
Выложил обработку на ЯндексДиск: https://disk.yandex.ru/d/Cha8TjjMaHEBZg (надеюсь не удалят ссылку).
PolAlex2; +1 Ответить
11. PolAlex2 118 20.10.21 15:42 Сейчас в теме
(10) Большое спасибо!
P.S. "VKislitsin 666" - красивый рейтинг )))
12. VKislitsin 669 20.10.21 15:52 Сейчас в теме
(11) да, маячит такой пару дней уже. Жду когда кто-нибудь что-нибудь еще отплюсовал, чтобы ушла такая цифра.
8. vugluscr1991 13 26.08.21 12:19 Сейчас в теме
А где обработка-то .. пролистал страницу и не нашел глазами.
Оставьте свое сообщение