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

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    7085    65    4    

87

Jenkins на службе 1С

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

Основная специализация Jenkins – это, прежде всего, CI/CD. Но его можно использовать и для других важных задач: разбора хранилищ, настройки копий баз данных, раздачи прав пользователям, рестарта кластера и проверки кода проектов.

19.07.2023    1214    yukon    4    

11

Приемы быстрой работы в EDT/Git

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

Статья даёт ответы на некоторые вопросы, возникающие у разработчиков, которые погружаются в океан технологий EDT и Git, омывающий царство DevOps... Сколько и какие ветки нужны? Какой репозиторий выбрать? Кто должен сливать доработки в мастер ветку или ветку версии? Как не тратить время в EDT на ресурсоёмких операциях? Зачем нам сборочный конвейер и как его построить? Зачем нам нужно тестирование и как его реализовать? Как вести разработку, если есть разработчики, не умеющие вести разработку в EDT или не имеющие технической возможности, но нам нужны их skills в 1С? Что такое фантомы и нужно ли с ними бороться? Как слить 20 доработок с конфликтами и уложиться в 4 часа? Опыт использования модных технологий в реальных проектах.

30.03.2023    6269    check2    10    

82

Получаем статистику по git-репозиторию в разрезе разработчиков

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

Итак! Представим, что наступил момент, когда разработка через исходный код реализована на предприятии в полном объеме. Мы разрабатываем в EDT или конфигураторе (но выгружаем конфигурацию в исходный код), версионируем внешние отчеты и обработки и расширения, собираем релизы, проверяем код статическим анализом, в разработке царит гармония и мир. Красота! Но менеджерам этого мало, всегда хочется чего-то еще, и вот мне прилетает задача - дай статистику по вкладу в код каждого разработчика.

13.03.2023    1940    ardn    3    

27

Формула успешного внедрения DevOps и Agile в 1С: от неудачи к неудаче без потери энтузиазма

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

На конференции Infostart Event 2021 Post-Apocalypse выступил директор практики БИТ:ERP компании Первый БИТ Глеб Стальной. В ходе доклада он рассмотрел трансформацию проектного подхода в продуктовый, рассказал про имплементацию «современных» практик DevOps и продемонстрировал инструменты для разработки, взаимодействия с бизнесом и клиентами, применяемые в его команде.

27.02.2023    1674    glebushka    2    

13

Кровь, пот и GIT

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

Ведущий разработчик 1С Андрей Карпов на конференции Infostart Event 2021 Post-Apocalypse поделился ошибками, которые совершают новички в работе с GIT. В докладе четыре кейса с пошаговыми инструкциями, которые позволят не допускать конфликтов в разработке.

17.01.2023    7681    karpik666    45    

65

Прокси хранилища 1С (IIS, OneScript)

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

Избавляемся от версионной зависимости, проверяем комментарии, вызываем веб-хуки, делаем красивые пути. И все это на привычном IIS и понятном OneScript.

08.12.2022    6484    kamisov    56    

91

Что, если Continuous Integration – это прежде всего практика, а не набор инструментов?

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

Рано или поздно многие компании приходят к практикам DevOps. И начало этому – Continuous Integration. О том, что происходит в команде специалистов 1С, когда они переходят на Git, и почему простое внедрение CI-инструментов не решает проблему подходов к разработке, в докладе на Infostart Event 2021 Post-Apocalypse рассказал руководитель компании ПрогТехБизнес Александр Анисков.

07.12.2022    1923    vandalsvq    0    

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