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

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! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

13000 10400 руб.

02.09.2020    122137    670    389    

714

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7288    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3531    11    1    

34

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177744    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99345    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18109    6    8    

39

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28108    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23601    15    15    

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

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

Еще в какой-то момент появилась надежда, что можно обойти проблему рус/англ терминологии, если изначально сравнение конфигураций проводить (и файл сравнения выгружать) в англ. интерфейсе.
Но, увы , не получилось: интерфейс и названия видов объектов отображаются правильно - на англ, в окне сравнения в том числе, а файл выгружается всё равно на русском, почему - вообще не понятно. Так что после ряда безуспешных попыток плюнула и тоже сделала переводы.
7. VKislitsin 960 24.08.21 17:42 Сейчас в теме
Добавлю кейс для применения метода:
Повышение режима совместимости до 8.3.14 для конфигурации потребовало (наряду с другими действиями) замены во всех модулях наименования типа для управляемых форм Тип("УправляемаяФорма") на Тип("ФормаКлиентскогоПриложения"). Всего 124 вхождения в 84 объектах конфигурации. Менять режим поддержки для каждого из этих объектов вручную было бы несколько скучно.
9. PolAlex2 118 13.10.21 02:55 Сейчас в теме
(7) Добрый день!
А где сама обработка? не вижу возможности ее получить..
10. VKislitsin 960 18.10.21 10:34 Сейчас в теме
(9) Добрый день. Спасибо за интерес!
Я удалил файл из публикации из-за странной политики Инфостарта: если к публикации добавлен файл для скачивания, считается что начислять СМ как за статью не нужно - только за скачивания. А так как мои разработки весьма специфические и не предполагают большого количества скачиваний, поступления от них не покрывают неначисленных СМ за статью и пороги рейтинга.
Выложил обработку на ЯндексДиск: https://disk.yandex.ru/d/Cha8TjjMaHEBZg (надеюсь не удалят ссылку).
user1473880; lebedovskiy; -Denton-; so-quest; PolAlex2; +5 Ответить
11. PolAlex2 118 20.10.21 15:42 Сейчас в теме
(10) Большое спасибо!
P.S. "VKislitsin 666" - красивый рейтинг )))
12. VKislitsin 960 20.10.21 15:52 Сейчас в теме
(11) да, маячит такой пару дней уже. Жду когда кто-нибудь что-нибудь еще отплюсовал, чтобы ушла такая цифра.
8. vugluscr1991 12 26.08.21 12:19 Сейчас в теме
А где обработка-то .. пролистал страницу и не нашел глазами.
13. PerlAmutor 129 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 129 26.03.23 07:27 Сейчас в теме
Кому будет интересен внутренний формат ParentConfigurations.bin оставлю ссылку https://github.com/1c-syntax/supportconf
VKislitsin; +1 Ответить
15. petrov_2015 16.05.23 14:50 Сейчас в теме
Спасибо за статью и интересное решение.
А есть ли возможность изменить правила поддержки в пакетном режиме для конфигурации, подключенной к Хранилищу? В режиме конфигуратора опция "Загрузить конфигурацию из файлов" недоступна.
16. VKislitsin 960 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 году. Остается надежда на альтернативные варианты.
Оставьте свое сообщение