Заметки из Зазеркалья

14.10.2016

Инкрементальная выгрузка конфигурации в XML

Реализовано в версии 8.3.10.2168.

Мы продолжаем развивать механизм выгрузки / загрузки конфигурации в файлы XML. Некоторое время назад мы уже рассказывали о том, что реализовали частичную загрузку конфигурации. Теперь мы реализовали обратную операцию – частичную (инкрементальную) выгрузку конфигурации.

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

Изменение логики выгрузки

Главное изменение заключается в том, что при выгрузке конфигурации в файлы XML теперь формируется (или обновляется) специальный служебный файл ConfigDumpInfo.xml, который называется файлом версий. Он хранится в каталоге выгрузки вместе с остальными файлами XML, и содержит информацию о формате выгрузки, о версии выгрузки, и о версиях всех объектов, которые были выгружены.

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

На практике это выглядит следующим образом.

Если выгрузка выполняется в первый раз (или если в каталоге выгрузки отсутствует файл версий), то выполняется полная выгрузка, генерируется файл версий.

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

В качестве примера фрагмент файла версий может выглядеть следующим образом:

<ConfigDumpInfo format="Hierarchical" version="2.1">
   <ConfigVersions>
      <Metadata name="CommonAttribute.ОбластьДанныхОсновныеДанные"
         id="5BDAD865-F2C5-434B-8041-BA4AAD3B6687"
         configVersion="0x230b7fe18c916f0cf161734d63ba5cfc6bda9cfc" />
      <Metadata name="Role.АдминистраторСистемы.Rights"
         id="5BDAD865-F2C5-434B-8041-BA4AAD3B6689.1"
         configVersion="0xf543960146ba71301564ab0331f5f4a754fd450" />
      </ConfigVersions>
   </ConfigDumpInfo>  

Сценарии использования

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

Оптимизация работы 1C:Enterprise Development Tools

Эта возможность не требует от вас каких-либо усилий, потому что реализуется на уровне платформы. Конечно же, инкрементальную выгрузку в файлы XML мы, прежде всего, задействуем в новой среде разработки. Это должно ускорить работу с большими конфигурациями, на которые эта среда и рассчитана. Благодаря тому, что теперь есть возможность выгружать только изменённые объекты, должны ускориться операции получения изменений из информационной базы.

Интерактивная выгрузка

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

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

Автоматическое обновление XML выгрузки

Это вариация предыдущего сценария, когда изменения, выполненные вами за день, автоматически сохраняются в XML выгрузке. Тут вам понадобится написать скрипт, который запускается после окончания рабочего дня, и выполняет, например, такую команду:

1cv8.exe config /DumpConfigToFiles C:\xml –update    

В результате в каталог выгрузки (C:\xml) будут сохранены только те изменения (-update), которые сделаны с момента предыдущей выгрузки, то есть в течение дня.

update это новый ключ, который позволяет обновить выгрузку, то есть выгрузить только те файлы, версии которых отличается от версий в каталоге выгрузки.

Автоматическая модификация или контроль конфигурации

Существует целый ряд задач, когда выгрузка конфигурации в файлы XML используется для автоматической проверки конфигурации или для выполнения «регламентных» действий, не связанных с прикладной логикой. Это может быть, например, автоматизированная проверка конфигурации на соответствие стандартам разработки, принятым в компании. Или автоматическая модификация ролей для новых объектов.

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

Контроль изменений в конфигурации

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

1cv8.exe config /DumpConfigToFiles C:\xml -getChanges C:\diff.txt    

В результате будет сформирован файл (C:\diff.txt), содержащий изменения конфигурации (-getChanges) относительно эталонной выгрузки(C:\xml). Если изменений нет, то файл diff.txt будет пустым.

getChanges это новый ключ, который позволяет вывести в указанный далее файл изменения текущей конфигурации относительно той выгрузки, каталог которой указан перед этим ключом.

Работа с системами контроля версий

Ещё один сценарий групповой разработки предполагает то, что выгрузка конфигурации в виде файлов XML хранится во внешней системе контроля версий, с которой работают все разработчики.

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

  • Получить обновления (Update) выгрузки конфигурации из системы контроля версий (если они есть);
  • Выгрузить измененные объекты из локальной информационной базы, например, такой командой:
1cv8.exe config /DumpConfigToFiles C:\xml -update
  • Зафиксировать изменения (Commit) выгрузки конфигурации в системе контроля версий.

После этого другие разработчики смогут обновить (Update) свои копии XML выгрузки конфигурации.

Получение «патча» для конфигурации

И, наконец, последний сценарий использования частичной выгрузки конфигурации в файлы XML позволяет создавать своеобразные «патчи» из XML файлов конфигурации.

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

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

1cv8.exe config /DumpConfigToFiles C:\xml_patch -update –configDumpInfoForChanges C:\xml_source\ConfigDumpInfo.xml    

Здесь C:\xml_source\ConfigDumpInfo.xml это файл версий эталонной конфигурации, а C:\xml_patch – каталог, в который будут выгружены только те XML файлы, которые исправляют обнаруженные ошибки.

configDumpInfoForChanges это новый ключ, который позволяет указать конкретный файл версий, от которого нужно «отсчитывать» изменения.

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

1cv8.exe config /DumpConfigToFiles C:\xml_patch -update –configDumpInfoForChanges C:\xml_source\ConfigDumpInfo.xml -getChanges C:\diff.txt    

Тогда информация об изменениях будет записана в файл C:\diff.txt.


Рассказать друзьям: