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

28.12.15

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

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

22.07.2025    3023    ktb    16    

28

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

Все больше команд начинают использовать при разработке 1С GIT. На самом деле производительность GIT так же ограничена и зависима от различных настроек и подходов, как и всеми нами любимая платформа 1С. Для комфортной работы с GIT в случае больших репозиториев необходимо выполнять оптимизацию алгоритмов взаимодействия. Опишу свой опыт. 

14.07.2025    819    bborisko    0    

8

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

В данной публикации рассматривается пример реализации скрипта, который автоматизирует получение ветки из GIT репозитория и обновление конфигурации, если разработка проекта ведется в EDT.

11.06.2025    2037    AlexF1    4    

7

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

В процессе использования 1С:EDT и репозитория Git для обновлений релизов доработанных конфигураций появилась необходимость в регулярной загрузке конфигураций от вендора 1С в Git-репозиторий. Описанное в статье решение позволяет автоматизировать эту операцию и может быть полезным специалистам, занимающимися обновлениями с использованием 1C:EDT+Git

21.05.2025    3311    vladimir_iclsoft    3    

20

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

Внедряем проверку новых версий прямо в расширение. Оповещайте о новых версиях и показывайте пользователям список изменений. Для разработчиков, которые хотят сэкономить время и повысить лояльность клиентов!

05.02.2025    4958    Nonik    10    

18

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

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

23.09.2024    9366    kraynev-navi    3    

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