Добавлен механизм "Версионирование"
- Механизм версионирования объектов используется для аудита изменений объектов информационной базы в разрезе времени и позволяет ответить на вопросы КТО, КОГДА и ЧТО изменил. В качестве версионируемых объектов могут выступать справочники и документы
- Добавлен отчет "История изменения объектов".С помощью отчета можно сравнить любые две версии объекта друг с другом,
а так же открыть любую версию объекта
- Бизнес-Плюс:Журнал изменений ($);
- Подсистема регистрации изменений;
- Журнал регистрации изменений;
- Подсистема восставноления и регистрации изменени данных;
Ну в принципе все сделано через подписки на события. При записи документа или справочника (в 1С наверно забыли что к ссылочным типам могут относится ПВХ,ПС,ПВР,БизнесОбъекты и Задачи) определяем из регистра "Настройка версионирования объекта" необходимо ли данный тип версионировать или нет. Если да тогда:
ЗаписьXML = Новый ЗаписьXML;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписатьXML(ЗаписьXML, Источник, НазначениеТипаXML.Явное);
ЗаписьXML.Закрыть();
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные);
Ну и полученное хранилище отправляется в регистр сведений ВерсииОбъектов. Конечно все эти действия многократно увеличивают размер базы данных (особенно если использовать повсеместно групповые обработки). Поэтому в 24 релизе у нас появилось регламентное задание "СжатиеДанныхВерсионирования". Где уже происходит сжатие записей ХранилищеДанныхFastInfoSet = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
Ну будем считать данные мы собрали.
Теперь стоит их показать. Однако по идеологии 1С это должен делать только пользователь с административными правами, простые "смертные" не допускаются (видимо не заслужили). Вот с этим я категорически не согласен, поскольку в большинстве случаев инициатором подобного рода разбирательств являются недовольные пользователи, а не администратор.
Зачем пользователям кого-то умолять просить, когда можно получить информацию самостоятельно?
Да все очень просто. Интерфейс отчета "ИсторияИзмененийОбъектов" очень недружественный и действительно в нем может разобраться только администратор.
Поэтому мы берем напильник и получаем вот такой отчет. Снабжаем его соответствующей инструкцией и..... под шумные аплодисменты отдаем пользователям.
P.S. Весь фокус в кнопке "Восстановление"
UPD: Изменена обработка с учетом изменений конфигурации (см. комментарии). Скачать измененную обработку для 1С 8.1 можно здесь
Спасибо огромное за статью!
ОтветитьУдалитьОна очень и очень полезна!
Хотелось, чтоб и обработка History.erf тоже работала, но увы, при сравнении объектов выходит такая ошибка:
{ВнешнийОтчет.ИсторияИзмененийОбъектов(1375)}: Ошибка при вызове метода контекста (Прочитать): Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Invalid document structure
Пока ЧтениеXML.Прочитать() Цикл
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Invalid document structure
Как можно это исправить?
Возможно ли тот ресурс(путь к нему храниться в СтрокаXML), к которому обращается 1С в ЧтениеXML.Прочитать() просто сохранить в файл? Если да, то как получить это файл?
ОтветитьУдалитьПроблемы происходят после обновления конфигурации. Видимо изменился состав объектов конфигурации. Сейчас доработаем.
ОтветитьУдалитьВ общем проблема в следующем, при записи в переменную СтрокаXML записывает данные в таком формате, что потом невозможно прочитать ЧтениеXML.Прочитать()
ОтветитьУдалитьПри открытии временного файла (если его в xml сохранять) ругается на символы, которые невозможно прочитать.
Если надо могу скинуть срин, того, что передается в переменную СтрокаXML ;)
АААА, это я сама ступила, простите, пожалуйста, я перенесла весь блок версионности из УПП в УТ и все было замечательно, кроме одного: я не обратила внимания на один момент, в УПП типовой работа с хранилищем идет через FastInfoSet, а в Вашем варианте через XML, все исправила, и все заработало!!!
ОтветитьУдалитьЕще раз приношу извинения за свою глупость.
После изменения конфигурации может быть изменен порядок реквизитов объекта, или вообще изменен состав, поэтому метод ПрочитатьXML() не работал.
ОтветитьУдалитьВнесены изменения теперь, версию можно будет восстановить даже если исходный объект не соответствует сохраненному, по структуре реквизитов
Скачать обработку для 8.1 можно тут http://code.google.com/p/1c-epf/downloads/detail?name=History2.erf&can=2&q=#makechanges
Кстати, после инсталляции системы версионирования в какую-либо конфигурацию, неплохо было бы провести предварительную инициализацию. А именно - зафиксировать текущие версии всех объектов, чтобы было с чем, впоследствии, сравнивать новые версии. Надо такую обработочку прикрутить.
ОтветитьУдалить