Очень часто при разработке используется несколько копий базы одной конфигурации.
Одна для разработчиков, в которой можно накидать изменения и поверхностно их проверить. Другая для тестеров которые уже набили свои данные и хотят их сохранить при очередном обновлении конфигурации. Другая база с оригинальными данными.. Но вообще вот такой зоопарк имеется у меня.
Дак вот все эти копии для плодотворной работы коллектива приходится обновлять каждый раз когда тестеры натыкаются на очередную по их мнению "не преодолимую ошибку".
Немного напомню у том как это можно сделать стандартными методами
Есть два пути .. через распределенку, и через Владивосток.
Через распределенку все просто передаем изменения из главного узла в перефирийные.Чем плох данный способ ..
- Во первых нужно создавать план обмена.
- Во вторых каждый раз при создании копии (не начального образа) переопределять главный узел.
- Ну и читать каждый раз изменения из Xml файла, запуская вначале предприятие и потом конфигуратор.
- Выгрузить конфигурацию (УПП 1.2.9 - 5 мин)
- Загрузить конфигурацию без сравнения (УПП 1.2.9 - 9 мин).
- Обновить конфигурацию (УПП 1.2.9 - 4 мин)
О недостатках этого способа нужно говорить?
Есть еще один путь .. пользуюсь им давно не так давно но поражаюсь почему до этого все ходил мимо и не замечал таких простых вещей.
О том как хранятся данные конфигурации писалось давно и много в том числе и мной.
Обратил я внимание на колонку "Modified" в этой колонке сохраняется дата последней модификации записи конфигурации. Вот это основная наша соломинка
Теперь спустимся ну уровень ниже. Для того что передать изменения в конфигурацию нужно сделать записи в Таблицу ConfigSave. При чем не всей конфигурации (как при загрузке без сравнения), а только измененных. Измененной запись будем считать если дата изменения "Modified" ее в основной конфигурации больше чем в копии. Можно еще сравнивать по размеру ну я считаю что это лишнее.
Ну собственно записи добавляем следующим запросом в EM или Enterprise Integrator
В запросе нужно поменять только названия баз соответствующих вашим.
Имя БД |
Описание |
dogovor_81 | Основная БД из которой передаем изменения конфигурации. |
Dogovor81_Test | Копия БД в которую нужно передать изменения конфигурации. |
INSERT INTO Dogovor81_Test.dbo.ConfigSave
Select ConfigNew.* From dogovor_81.dbo.Config as ConfigNew
Left JOIN
Dogovor81_Test.dbo.Config as ConfigOld
ON ConfigNew.FileName = ConfigOld.FileName
Where ConfigNew.Modified>ConfigOld.Modified or ConfigOld.Modified is Null
Выполняем запрос, перечитываем конфигурацию и обновляемся.
Теперь на сладкое... о достоинствах.
- Запрос выполняет меньше 2 сек.
- Обновление ~~60 сек. записей значительно меньше.
- Устраняется колоссальная избыточность перезаписи одинаковых данных.
- Перед выполнением запроса конфигурация в которую необходимо передать изменения должна соответствовать конфигурации БД.
- Разумеется только для серверного варианта.