четверг, 10 декабря 2009 г.

Версионирование в УПП

При выпуске 22 релиза УПП, 1С сообщила нам следующую новость:
Добавлен механизм "Версионирование"
  • Механизм версионирования объектов используется для аудита изменений объектов информационной базы в разрезе времени и позволяет ответить на вопросы КТО, КОГДА и ЧТО изменил. В качестве версионируемых объектов могут выступать справочники и документы
  • Добавлен отчет "История изменения объектов".С помощью отчета можно сравнить любые две версии объекта друг с другом, а так же открыть любую версию объекта
в принципе такого "шага" навстречу "пользователю" я не ожидал. До этого приходилось обходится исключительно журналом регистрации и бекапами, хотя и существовали отдельные подсистемы версионирования. Вот некоторые из них:
  1. Бизнес-Плюс:Журнал изменений ($);
  2. Подсистема регистрации изменений;
  3. Журнал регистрации изменений;
  4. Подсистема восставноления и регистрации изменени данных;
Конечно же все существующие подсистемы значительно превосходят по функциональности и юзабилити типовую. В типовой ставка сделана на скорость эффективность (как консоль запросов, кому нужно тот допилит напильником). Давай те же посмотрим на типовую подсистему.
Ну в принципе все сделано через подписки на события. При записи документа или справочника (в 1С наверно забыли что к ссылочным типам могут относится ПВХ,ПС,ПВР,БизнесОбъекты и Задачи) определяем из регистра "Настройка версионирования объекта" необходимо ли  данный тип версионировать или нет. Если да тогда:
ЗаписьXML = Новый ЗаписьXML;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписатьXML(ЗаписьXML, Источник, НазначениеТипаXML.Явное);
ЗаписьXML.Закрыть();
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные);
Ну и полученное хранилище отправляется в регистр сведений ВерсииОбъектов.  Конечно все эти действия многократно увеличивают размер базы данных (особенно если использовать повсеместно групповые обработки). Поэтому в 24 релизе  у нас появилось регламентное задание  "СжатиеДанныхВерсионирования".   Где уже происходит сжатие записей ХранилищеДанныхFastInfoSet = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); 
Ну будем считать данные мы собрали.
Теперь стоит их показать.  Однако по идеологии 1С это должен делать только пользователь с административными правами, простые "смертные" не допускаются (видимо не заслужили). Вот с этим я категорически не согласен, поскольку в большинстве случаев инициатором подобного рода разбирательств являются недовольные пользователи, а не администратор. 
Зачем пользователям кого-то умолять просить, когда можно получить информацию самостоятельно?  
Да все очень просто. Интерфейс отчета "ИсторияИзмененийОбъектов" очень недружественный и действительно в нем может разобраться только администратор.
Поэтому мы берем напильник и получаем вот такой отчет.  Снабжаем его соответствующей инструкцией и.....  под шумные аплодисменты отдаем пользователям.

P.S. Весь фокус в кнопке "Восстановление"


UPD: Изменена обработка с учетом изменений конфигурации (см. комментарии). Скачать измененную обработку для 1С 8.1 можно здесь