Выгрузка только измененых файлов из хранилища конфигурации


#1

Как и просили меня Артур, Женя и Андрей, я добавил в Tool_1CD новый ключ -dpc. Он позволяет выгрузить в каталог только измененные файлы заданной версии или диапазона версий из хранилища конфигураций. Файлы выгружаются в распакованном виде (так же, как это делает v8Unpack). Заданный каталог не очищается, но, при необходимости, создается. Файлы root, version и versions не создаются, так как, фактически, они не хранятся в хранилище. Функционал не проверен, гарантировать, что выгружаются только измененные файлы, а также, что выгружаются все измененные файлы, не могу.
Взять можно тут bitbucket.org/awa15/tool_1cd/
Подозреваю, что там же можно создать тикет при желании.


#3

Да, вошли, конечно же.


#4

А как определяется что именно было изменено? Данные берутся из таблицы изменений или с кэша хранилища 1с? Если первый вариант, то откуда именно берутся данные для выгрузки, ведь они там в цельном cf-ке лежат? В общем очень интересны подробности


#5

Для того, чтобы определить, что изменилось, пробегаемся по таблице HISTORY, для каждого OBJID рассматриваем только записи с максимальным VERNUM, попадающие в заданный диапазон версий.

  • Если стоит флажок REMOVED, то смотрим, существует ли запись с тем же OBJID и VERNUM меньше, чем нужный диапазон. Если такая запись есть, добавляем OBJID в файл “deleted” и ищем в таблице EXTERNALS записи с тем же самым OBJID и VERNUM, для каждой найденной записи добавляем в файл “deleted” EXTNAME.
  • Если флажок REMOVED не стоит, то:
  1. Смотрим флажок DATAPACKED. Если DATAPACKED истина, то ищем запись с тем же OBJID и VERNUM меньше, чем нужный диапазон. Если такая запись не найдена, распаковываем в файл с именем OBJID содержимое текущей записи. Если такая запись найдена, сравниваем содержимое двух записей, если содержимое разное, распаковываем в файл с именем OBJID содержимое текущей записи.
  2. Ищем в таблице EXTERNALS записи с тем же самым OBJID и VERNUM, если флаг DATAPACKED ложь, пытаемся найти запись с теми же OBJID, EXTNAME и EXTVERID, но, чтобы VERNUM был в пределах заданного диапазона. Если есть запись с DATAPACKED истина, распаковываем в файл с именем EXTNAME содержимое записи.

Собственно всё. Никакие снэпшоты не используются. При сравнении содержимого двух записей в хранилище версии до 5 включительно (8.0-8.2) сравниваются реальное содержание файлов (поля OBJDATA). В хранилище версии 6 (8.3) сравниваются хэши (поле DATAHASH).


#6

Скорость конечно отменная по сравнению с текущим положением дел.
Другое дело, что теперь этот формат по-хорошему надо как-то в формат выгрузки 1С сконвертировать. Как я понимаю, такого еще никто не делал?


#7

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


#8

Ну теже формы 1С не в таком формате выгружает


#9

У меня кстати немного доделанная Бухгалтерия 3.0 синхронизируется ровно час (всего одно изменение!). Это очень печалит


#10

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


#11

Все отлично видно, чуть исследовал выгрузку и данные. Для тех же форм в описании xml есть uuid формы и toolc_cd с этим uuid-ом и выгружает форму, аналогично и для модуля объекта.
Для обычных форм и модулей объектов это подходит без проблем, для управляемых форм, еще необходимо смотреть, т.к. пока невозможно определить изменилась форма или нет, т.к. с хранилища она выгружается во внутреннем формате, а при выгрузке 8.3 преобразуется в чистый xml, модуль формы можно достать, а саму форму к сожалению пока нет.


#13

файл упр. формы выгружаеться полностью одним файлом, во внутреннем формате, а 8.3 выгружает форму отдельно xml и модуль формы, определить изменение кода мы можем, но точно сказать изменился какой-либо реквизит формы по сравнению с xml представлением, пока не можем.


#14

У Вики Дорохиной есть код разбора упр. формы на модуль и элементы. Я его портировал потом к себе в V8Viewer, он надежный.


#15

Это разбор управляемой формы, как делает 8.3
Это пример управляемой формы, которую мы получаем из хранилища

со 100% вероятностью, я пока не вижу варианта узнать, был ли только изменен модуль формы или же еще была изменена и сама форма…


#16

А если взять код из V8Reader, который выделяет модуль из формы и перенести в v83unpack?


#17

[quote=“EvilBeaver, post:16, topic:90”]
выделяет модуль из формы
[/quote] то мы получим только изменение модуля, но никак не формы.