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










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

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

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

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

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

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

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

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

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

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

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

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

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

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

Результат сравнения файлов 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 Files1cv8<ВашаВерсия>in1cv8.exe" DESIGNER /S<server><base> /N<Юзер> /P<Пароль> /LoadConfigFromFiles "<КаталогВыгрузки>" -Files "<КаталогВыгрузки>ExtParentConfigurations.bin"

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

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

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

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

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

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

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

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

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

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

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

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

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

6 Comments

  1. Жолтокнижниг

    Отлично написано, все по полочкам, зачем почему и как.

    Reply ↓
  2. Xershi

    А какой смысл менять 99 из 200?

    Все объекты меняются. Затем создается хранилище. И делай что хочешь.

    Но ваш случай скорее в обратном. Когда старый разработчик вот так тыкался и вообще с поддержки снял! И чтобы не тыкаться поднимая поддержку можно использовать ваш метод загрузки из файлов.

    Reply ↓
  3. -vito-

    (2) Максим, смысл и целесообразность каждый для себя может определить самостоятельно.

    Цель публикации — продемонстрировать один из возможных подходов, и поделиться инструментом, который сделал для себя.

    Насчет возврата на поддержку, не всё так просто. Я проводил этот эксперимент, конечно же. Загрузка из файла вернет значки замка на все объекты, которым будет установлен 0, но определять были ли изменены объекты, и при необходимости, загружать их из Конфигурации Поставщика, всё-таки придется сравнением с этой КонфигурациейПоставщика.

    Reply ↓
  4. 7OH

    На днях обновлял БУХУ.

    Тоже снимал с поддержки.

    Только выписал имена объектов нужных и снял с мультивыделением.

    Есть некоторые но — чтобы снимать рекурсивно — все выделенные объекты должны иметь внутренности, иначе галка рекурсии недоступна.

    Reply ↓
  5. Olenevod

    Здорово! Возьму а заметку. Бывали случаи когда надо было восстанавливать замки.

    Reply ↓
  6. athena

    Спасибо! Воспользовалась идеей, чтоб вернуть объекты на поддержку.

    Ошибочно было включено редактирование всех объектов конфигурации, хотя изменения были не такими значительными.

    Еще в какой-то момент появилась надежда, что можно обойти проблему рус/англ терминологии, если изначально сравнение конфигураций проводить (и файл сравнения выгружать) в англ. интерфейсе.

    Но, увы , не получилось: интерфейс и названия видов объектов отображаются правильно — на англ, в окне сравнения в том числе, а файл выгружается всё равно на русском, почему — вообще не понятно. Так что после ряда безуспешных попыток плюнула и тоже сделала переводы.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *