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

28.12.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Конфигурация внешнее хранилище
.cf 87,93Kb ver:0.9
3
3 Скачать (2 SM) Купить за 2 150 руб.
Просморт и сравнение версий
.erf 36,45Kb ver:1
3
3 Скачать (1 SM) Купить за 1 850 руб.
просмотр истории печати
.epf 8,90Kb ver:1
2
2 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

См. также

SALE! 50%

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

Использования систем контроля версий — стандарт современной разработки. На курсе научимся использованию Хранилища 1С и GIT при разработке на 1С:Предприятие 8. Разберем подходы и приемы коллективной разработки, научимся самостоятельно настраивать системы и ориентироваться в них.

4900 2450 руб.

29.06.2022    11931    99    4    

131

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

Когда в хранилище одновременно разрабатывают несколько команд, сортировка сделанного и несделанного при формировании релиза и проведение code review по задачам превращаются в непроходимый квест. В таких случаях нужен бранчинг. Расскажем об опыте перехода на новую схему хранения кода для ИТ-департамента.

23.09.2024    2831    kraynev-navi    2    

25

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

Называть Git новой технологией – уже смешно, но для многих 1С-ников это действительно «новое и неизведанное». Расскажем о плюсах и минусах двух главных систем контроля версий в мире 1С: Git и хранилища.

17.09.2024    7281    Golovanoff    69    

26

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

Во многих командах незаслуженно забывают о том, что в базе меняются расширения (как от вендора, так и собственные) и внешние отчеты и обработки. Вплоть до того, что релиз происходит каждый день – меняются печатные формы, отчеты, обработки. Расскажем о том, как выгружать в Git не только изменения конфигурации рабочего контура, но и файлы внешних обработок и расширений.

05.09.2024    2171    ardn    12    

15

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

Заказчики любят EDT+Git за прозрачность и контроль качества. А у разработчиков есть две основные причины не любить EDT – это тормоза и глюки. Расскажем о том, что нужно учесть команде при переходе на EDT+Git.

14.08.2024    7625    lekot    34    

8

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

В «долгоиграющих» проектах стандартный захват объектов 1С в хранилище может привести к длительным простоям других разработчиков. Но и создавать под каждую доработку отдельное хранилище, чтобы использовать технологию разветвленной разработки конфигураций от фирмы «1С» – избыточно. Расскажем о том, как разрабатывать в отдельной базе без ожиданий, а потом с легкостью перенести изменения в хранилище, используя основную идею технологии 1С – конфигурацию на поддержке хранилища.

05.08.2024    4232    sinichenko_alex    16    

25

Групповая разработка (Git, хранилище) Программист Руководитель проекта Стажер Бесплатно (free)

Про изменения и новинки в агрегаторе открытых проектов OpenYellow, которые появились с момента его создания: про портал, Github и Telegram

15.07.2024    3229    bayselonarrend    8    

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