В связи с излишним распуханием базы от информации, наличие которой в локальной базе совсем не обязательно, увеличением времени выполнения регламентных операций и времени обмена между распределенными базами была разработана эта конфигурация. Все работает посредством Веб-сервисов. Моя база уже благополучно перевалила за 10 гигов версий.
Внимание!!! База работает в связке с УПП. Совместимость с другими конфигурациями потребует их доработоку которая скорее всего не будет соответствовать примерам. + и в примерах и в обработке сравнения будет необходимо изменить части кода, которые отвечают за место хранения информации о подключении к внешнему хранилищу. А именно: адрес веб сервиса, пространство имен, адвес ВСДЛ определения и некоторые сервисные функции которых скорее всего в вашей конфе не будет (напр: мОбщегоНазначения.ПолучитьИмяБази() или мСервер.ТекущаяДатаСервер() )
Для запуска необходим апач и публикация вебсервисов.
Она позволяет:
1. Онлайн сохранять версии объектов во внешнее хранилище а также получать сохраненные версии для объекта метаданных для их анализа и сравнения. Использует стандартный механиз версионирования но требует небольших изменений в модуле ВерсионированиеОбъектовПривилегированный процедура ЗаписатьВерсиюОбъекта
При сохранении в внешнее хранилище версии с одинаковым хешем сливаются (только идущие подряд с одинаковым хешем).
УдаленноеХранилище=ТутКонстантаКотораяОпределяетКакойМеханизмВерсионированияИспользовать(Истина,Ложь);
Если УдаленноеХранилище=Истина Тогда
//// пишем в удаленное хранилище
попытка
Определение=Новый WSОпределения(СокрЛП(Константы.ВерАдресВДСЛ.Получить()));
Прокси=Новый WSПрокси(Определение,СокрЛП(Константы.ВерПространствоИмен.Получить()),СокрЛП(Константы.ВерСервис.Получить()),СокрЛП(Константы.ВерСервис.Получить())+"Soap");
ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
ЭтоДокумент = Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка));
Если ЭтоСправочник=Истина Тогда
Код=Ссылка.Код;
Название=Ссылка.Наименование;
ИначеЕсли ЭтоДокумент=Истина Тогда
Код=Ссылка.Номер;
Название=Строка(Ссылка);
Иначе
Код="";
Название=Строка(Ссылка);
КонецЕсли;
Результат=прокси.Save(Ссылка.УникальныйИдентификатор(),мСервер.ТекущаяДатаСервер(),ПараметрыСеанса.ТекущийПользователь.Наименование, ХранилищеДанных,Код,Название,Ссылка.Метаданные().Представление(),Строка(Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить()),мОбщегоНазначения.ПолучитьИмяБази());
Исключение
Сообщить("Попытка записи версии в удаленное хранилище неудалась");
КонецПопытки;
Иначе
//// пишем по старому в регистр
МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписиВерсииОбъектов.Объект = Ссылка;
МенеджерЗаписиВерсииОбъектов.ДатаВерсии = мСервер.ТекущаяДатаСервер();//ТекущаяДата();
МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных;
МенеджерЗаписиВерсииОбъектов.НомерВерсии = ЧислоВерсийОбъекта + 1;
МенеджерЗаписиВерсииОбъектов.АвторВерсии = ПараметрыСеанса.ТекущийПользователь;
МенеджерЗаписиВерсииОбъектов.УдалитьСжато = Истина;
МенеджерЗаписиВерсииОбъектов.База = Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить(); //м13(2014.07.23)
МенеджерЗаписиВерсииОбъектов.Записать();
КонецЕсли;
Измененная обработка просмотра и сравнения версий из удаленного хранилища в приложении. ()
Пример процедуры для переноса версии обьекта из локального хранилища в удаленное. Перечень объектов можно подобрать, например, обработкой "подбор и обработка объектов" из ИР и в нем, выполнив произвольный алгоритм. вызвать эту функцию и слить версии в удаленную базу.
Процедура ПеренестиВерсииВоВнешнееХранилище(СсылкаНаОбъект) Экспорт
НаборВерсий=РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
НаборВерсий.Отбор.Объект.Использование=Истина;
НаборВерсий.Отбор.Объект.Значение=СсылкаНаОбъект;
НаборВерсий.Прочитать();
ТаблицаВерсий=Новый ТаблицаЗначений;
ТаблицаВерсий=НаборВерсий.Выгрузить();
ТаблицаВерсий.Сортировать("ДатаВерсии Возр");
попытка
Определение=Новый WSОпределения(СокрЛП(константы.ВерАдресВДСЛ.получить()));
Прокси=Новый WSПрокси(Определение,СокрЛП(Константы.ВерПространствоИмен.Получить()),СокрЛП(Константы.ВерСервис.Получить()),СокрЛП(Константы.ВерСервис.получить())+"Soap");
ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(СсылкаНаОбъект));
ЭтоДокумент = Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(СсылкаНаОбъект));
Для каждого Версия Из ТаблицаВерсий Цикл
Если ЭтоСправочник=Истина Тогда
Код=СсылкаНаОбъект.Код;
Название=СсылкаНаОбъект.Наименование;
ИначеЕсли ЭтоДокумент=Истина Тогда
Код=СсылкаНаОбъект.Номер;
Название=Строка(СсылкаНаОбъект);
Иначе
Код="";
Название=Строка(СсылкаНаОбъект);
КонецЕсли;
Значение=Версия.ВерсияОбъекта.Получить();
Если ТипЗНЧ(Значение)=Тип("ДвоичныеДанные") Тогда
ИФ=ПолучитьИмяВременногоФайла();
Значение.Записать(ИФ);
ТД=Новый ТекстовыйДокумент;
ТД.Прочитать(ИФ, КодировкаТекста.UTF8);
СтрокаХМЛ=ТД.ПолучитьТекст();
Иначе
СтрокаХМЛ=Значение;
КонецЕсли;
ХранилищеДанных = Новый ХранилищеЗначения(СтрокаХМЛ, Новый СжатиеДанных(9));
Результат=прокси.Save(СсылкаНаОбъект.УникальныйИдентификатор(),Версия.ДатаВерсии,Версия.АвторВерсии.Наименование,ХранилищеДанных,Код,Название,СсылкаНаОбъект.Метаданные().Представление(),Версия.База);
КонецЦикла;
НаборВерсий.Очистить();
НаборВерсий.Записать();
Исключение
Сообщить("Попытка переноса "+СсылкаНаОбъект+" в удаленное хранилище неудалась");
КонецПопытки;
КонецПроцедуры
2. Сохранять печатные формы документов которые выводились пользователями на печать.
Для этого нужно в коде который отвечает за вывод печатной формы на экран или запуск напрямуя на принтер влепить кусочек кода который вызывает функцию
Функция СохранитьПечать(Юид,Таб) Экспорт
попытка
Определение=Новый WSОпределения(СокрЛП(Константы.ПечФАдресВДСЛ.получить()));
Прокси=Новый WSПрокси(Определение,СокрЛП(Константы.ПечФПространствоИмен.получить()),СокрЛП(Константы.ПечФСервис.получить()),СокрЛП(Константы.ПечФСервис.получить())+"Soap");
Хранилище=Новый ХранилищеЗначения(Таб);
Результат=прокси.SaveForm(Юид,Хранилище,параметрыСеанса.ТекущийПользователь.Наименование,ТекущаяДата(),мОбщегоНазначения.ПолучитьИмяБази());
//Сообщить("регистрация печати выполнена");
Возврат результат;
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
Обработка для просмотра истории печати в локально базе прикреплена в приложениях. (замечания те же что и для версий. придется подправить код для чтения констант).
3. Сохранять варианты отчетов
Например я сохраняю туда отчет по складу и по взаиморасчетам каждый день. В связи с тем что пользователи любят подергать документы задним числом. Вариант сохраниния можно выбрать самому. Я использую схему компоновки данных которая зашита в общем макете и по регламенту програмно обрабатываю эту схему и сохраняю отчет.
Функция СохранитьОтчет(Объект,Таблица) экспорт
попытка
Определение=Новый WSОпределения(СокрЛП(константы.ОтчАдресВДСЛ.получить()));
Прокси=Новый WSПрокси(Определение,СокрЛП(Константы.ОтчПространствоИмен.Получить()),СокрЛП(константы.ОтчСервис.Получить()),СокрЛП(Константы.ОтчСервис.Получить())+"Soap");
Хранилище=Новый ХранилищеЗначения(Таблица);
Результат=прокси.SaveReport(Объект.Метаданные().Имя,Объект.Метаданные().Представление()+" "+ТекущаяДата(),ТекущаяДата(),Хранилище,параметрыСеанса.ТекущийПользователь.Наименование,мОбщегоНазначения.ПолучитьИмяБази());
Возврат результат;
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
4. Сохранять и получать картинки во внешнем хранилище.
Функционал в хранилище есть, но к живой базе пока не подключался.
Если будут какие-то вопросы с запуском - помогу, чем смогу.