Конфигурация "Внешнее хранилище версий + картинок + печатных форм + отчетов" и обработки для просмотра

28.12.15

Разработка - Групповая разработка (Git, хранилище)

Конфигурация позволяет сохранять в себя и в дальнейшем получать:
1. Версии объектов
2. Картинки
3. Печатные формы
4. Варианты отчетов.

Скачать исходный код

Наименование Файл Версия Размер
Конфигурация внешнее хранилище
.cf 87,93Kb
3
.cf 0.9 87,93Kb 3 Скачать
Просморт и сравнение версий
.erf 36,45Kb
3
.erf 1 36,45Kb 3 Скачать
просмотр истории печати
.epf 8,90Kb
2
.epf 1 8,90Kb 2 Скачать

В связи с излишним распуханием базы от информации, наличие которой в локальной базе совсем не обязательно, увеличением времени выполнения регламентных операций и времени обмена между распределенными базами была разработана эта конфигурация. Все работает посредством Веб-сервисов. Моя база уже благополучно перевалила за 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. Сохранять и получать картинки во внешнем хранилище.

Функционал в хранилище есть, но к живой базе пока не подключался.

Если будут какие-то вопросы с запуском - помогу, чем смогу.

версионирование внешнее хранилище

См. также

Системы контроля версий для 1С-разработчиков.

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Платформа 1С v8.3 Платные (руб)

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9417    78    4    

112

Обновляемый список последних статей Инфостарт для профиля Github

Групповая разработка (Git, хранилище) Бесплатно (free)

Не знаете, чем бы таким заполнить свой профиль Github? Заполните его своими статьями на Инфостарт! Этот простой workflow сам соберет список ваших последних статей и будет периодически обновлять его для актуализации данных.

08.04.2024    930    bayselonarrend    2    

31

Процесс разработки с использованием GIT и расширений для 1С:ERP. Без EDT

Групповая разработка (Git, хранилище) Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Доработки 1С:ERP на крупных проектах можно организовать, не внося изменения в саму типовую конфигурацию, а используя только расширения и отдельные «микроконфигурации». Расскажем о том, как это сделать без EDT, используя процесс разработки GitHub Flow.

02.04.2024    4816    Begemoth80    24    

45

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1588    bayselonarrend    3    

38

Автоматизация процесса разработки с помощью сервиса GitFlic

Групповая разработка (Git, хранилище) Бесплатно (free)

GitFlic – первая в России полностью самостоятельная реализация сервиса для хранения репозиториев с исходным кодом. За три года разработки сервис GitFlic стал полноценным инструментом, которым можно заменить GitLab, GitHub и BitBucket. Расскажем о том, как выстроить в GitFlic процесс автоматического тестирования, статического анализа кода и сборки приложений.

05.03.2024    2100    user1989937    6    

16

OpenYellow - рейтинг открытых GitHub репозиториев для платформы 1С:Предприятие

Групповая разработка (Git, хранилище) Бесплатно (free)

Обновляемый топ GitHub репозиториев для 1С по всем языкам программирования и еще немного рассуждений про open-source.

05.02.2024    4053    bayselonarrend    15    

63

Насколько глубок 1С-ный GitHub?

Групповая разработка (Git, хранилище) Бесплатно (free)

Open-source проекты - важная часть мира программного обеспечения. 1С привычно держится немного в стороне от глобальных трендов, но бросить холодный статистический взгляд на положение дел мне показалось небезынтересным.

22.01.2024    8081    bayselonarrend    50    

87

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    3035    kamisov    17    

60
Оставьте свое сообщение