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

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

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

В наличии

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

Категория:

Описание

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

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

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

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

На днях мне довелось столкнуться с такой ситуацией при встраивании отраслевого решения в типовую конфигурацию, которая нами уже достаточно серьезно дорабатывается под нужды Заказчика и требует регулярного обновления релизами 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.

has been added to your cart:
Оформление заказа