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

25.12.20

Разработка - Инструментарий разработчика

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

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

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

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

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

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

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159651    875    399    

862

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7856    58    23    

69

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    23488    68    45    

117

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8500 руб.

10.11.2023    10460    36    25    

61

SALE! 15%

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 19980 руб.

06.10.2023    15424    35    7    

70

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3120 руб.

14.01.2013    188041    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17317    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7715    8    35    

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

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

Еще в какой-то момент появилась надежда, что можно обойти проблему рус/англ терминологии, если изначально сравнение конфигураций проводить (и файл сравнения выгружать) в англ. интерфейсе.
Но, увы , не получилось: интерфейс и названия видов объектов отображаются правильно - на англ, в окне сравнения в том числе, а файл выгружается всё равно на русском, почему - вообще не понятно. Так что после ряда безуспешных попыток плюнула и тоже сделала переводы.
7. VKislitsin 1013 24.08.21 17:42 Сейчас в теме
Добавлю кейс для применения метода:
Повышение режима совместимости до 8.3.14 для конфигурации потребовало (наряду с другими действиями) замены во всех модулях наименования типа для управляемых форм Тип("УправляемаяФорма") на Тип("ФормаКлиентскогоПриложения"). Всего 124 вхождения в 84 объектах конфигурации. Менять режим поддержки для каждого из этих объектов вручную было бы несколько скучно.
9. PolAlex2 118 13.10.21 02:55 Сейчас в теме
(7) Добрый день!
А где сама обработка? не вижу возможности ее получить..
10. VKislitsin 1013 18.10.21 10:34 Сейчас в теме
(9) Добрый день. Спасибо за интерес!
Я удалил файл из публикации из-за странной политики Инфостарта: если к публикации добавлен файл для скачивания, считается что начислять СМ как за статью не нужно - только за скачивания. А так как мои разработки весьма специфические и не предполагают большого количества скачиваний, поступления от них не покрывают неначисленных СМ за статью и пороги рейтинга.
Выложил обработку на ЯндексДиск: https://disk.yandex.ru/d/Cha8TjjMaHEBZg (надеюсь не удалят ссылку).
amiralnar; user1473880; lebedovskiy; -Denton-; so-quest; PolAlex2; +6 Ответить
11. PolAlex2 118 20.10.21 15:42 Сейчас в теме
(10) Большое спасибо!
P.S. "VKislitsin 666" - красивый рейтинг )))
12. VKislitsin 1013 20.10.21 15:52 Сейчас в теме
(11) да, маячит такой пару дней уже. Жду когда кто-нибудь что-нибудь еще отплюсовал, чтобы ушла такая цифра.
8. vugluscr1991 12 26.08.21 12:19 Сейчас в теме
А где обработка-то .. пролистал страницу и не нашел глазами.
Scroudge; solbol; +2 Ответить
13. PerlAmutor 155 25.03.23 19:15 Сейчас в теме
Хотелось бы уточнить пару моментов.
Есть такая статья https://wonderland.v8.1c.ru/blog/inkrementalnaya-vygruzka-konfiguratsii-v-xml/ где описан подход получения патчей как разницу между файлами ConfigDumpInfo через ключи getChanges и configDumpInfoForChanges
На выходе получим файл с изменениями. Соответственно все, что не изменилось - ставим на поддержку.

Замки на объектах позволяют сильно ускорить трехстороннее сравнение конфигураций при обновлении.

А что там с комплексными объектами типа Форм, где элементы форм могут быть не изменены, а код изменен, а замочек то общий?

Хотелось бы увидеть эту обработку реализованную в виде скрипта для интеграции с git, например на onescript, 1С:Исполнитель или Python.
VKislitsin; +1 Ответить
14. PerlAmutor 155 26.03.23 07:27 Сейчас в теме
Кому будет интересен внутренний формат ParentConfigurations.bin оставлю ссылку https://github.com/1c-syntax/supportconf
amiralnar; VKislitsin; +2 Ответить
15. petrov_2015 16.05.23 14:50 Сейчас в теме
Спасибо за статью и интересное решение.
А есть ли возможность изменить правила поддержки в пакетном режиме для конфигурации, подключенной к Хранилищу? В режиме конфигуратора опция "Загрузить конфигурацию из файлов" недоступна.
16. VKislitsin 1013 16.05.23 16:02 Сейчас в теме
(15) Думаю что можно. Но придется еще раз залезть туда, куда компания 1С лазить не рекомендует :)
Информация о подключении к хранилищу содержится в информационной базе, но не в самой конфигурации. Предположительно (надо разбираться) в одной из таблиц: dbo.Params, dbo.Files
Это сложный путь.
Путь попроще: сделать всё на копии базы, а потом сравнением-объединением перенести на подключенную к храну.
17. petrov_2015 16.05.23 22:58 Сейчас в теме
Путь попроще: сделать всё на копии базы, а потом сравнением-объединением перенести на подключенную к храну

Задача состоит в том, чтобы хранилище Прода обновить из cf, выгруженного из хранилища Разработки.
В пакетном режиме определяются и захватываются нужные объекты конфигурации, подключенной к хранилищу Прода. Далее производится объединение конфигурации (/MergeCfg) с cf-файлом и с учетом подготовленного файла настроек объединения. В результате обновляются только те из захваченных объектов - у которых установлено разрешающее правило поддержки. Приходится предварительно устанавливать объектам правило поддержки "Объект редактируется с сохранением поддержки", после чего запускать пакетное объединение повторно. Причем, в файле настроек объединения есть секция "<SupportRules>" с установленными правилами "ObjectIsEditableSupportEnabled",- но они не срабатывают. На партнерском форуме этот вопрос застыл в 2016 году. Остается надежда на альтернативные варианты.
18. milkers 2920 28.09.24 15:39 Сейчас в теме
[0] С согласия автора выкладываю доработанный вариант, с возможностью снимать с поддержки по подсистеме https://infostart.ru/1c/tools/2196198/
Оставьте свое сообщение