http - сервис (выгрузка файлов обработок)

29.07.20

Разработка - Инструментарий разработчика

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
http - сервис (выгрузка файлов обработок):
.epf 7,36Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.
http - сервис (выгрузка файлов обработок):
.cfe 11,90Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

Приветствую,

пишу для разработчиков большей частью, к сожалению, не могу выложить полное решение, но сервис загрузки со стороны принимающей стороны универсален (создан расширением, и использует стандартный БСП механизм работы с дополнительными обработками и отчетами).

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

Что получилось:


	мФайл		=	новый Файл(ПараметрыЗапроса.ПолноеИмяФайла);
	ИмяФайла	=	мФайл.Имя;  	
	
	//Сведения о обработке
	ПараметрыРегистрации	=	новый Структура("ЭтоОтчет,ИмяФайла,АдресДанныхОбработки");
	ПараметрыРегистрации.ЭтоОтчет				=	ВРег(Прав(ИмяФайла,3))="ERF";
	ПараметрыРегистрации.ИмяФайла				=	ИмяФайла;
	ПараметрыРегистрации.АдресДанныхОбработки	=	ПоместитьВоВременноеХранилище(новый ДвоичныеДанные(ПутьФайла));



//Адрес сервиса
	HTTPЗапрос = Новый HTTPЗапрос("/"+ПараметрыЗапроса.ИмяБазы+"/hs/load1c/obj/");
	
	Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	
	// передадим данные на сервер 	
	HTTPЗапрос.Заголовки.Вставить("Content-Type"	, "multipart/form-data");	
	HTTPЗапрос.Заголовки.Вставить("boundary"		, boundary);
	HTTPЗапрос.Заголовки.Вставить("fileName"		, ИмяФайла);
	HTTPЗапрос.Заголовки.Вставить("report"			, Формат(ПараметрыРегистрации.ЭтоОтчет,"БЛ=Ложь; БИ=Истина"));
	HTTPЗапрос.Заголовки.Вставить("name_1c_Object"	, ПараметрыРегистрации.Наименование);
	
	//Формирование тела запроса
	// параметр "file"	
	имяФайлаОтправки 	= ПолучитьимяВременногоФайла("txt");		
	ЗаписьТекста 		= Новый ЗаписьТекста(имяФайлаОтправки,КодировкаТекста.UTF8);	
	
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename="""+ИмяФайла+"""");
	ЗаписьТекста.ЗаписатьСтроку("Content-Type: binary");
	ЗаписьТекста.ЗаписатьСтроку("start_"+Boundary);
	ЗаписьТекста.Записать(Base64Строка(Новый ДвоичныеДанные(ПутьФайла)));
	ЗаписьТекста.ЗаписатьСтроку("end_"+Boundary);	
	ЗаписьТекста.Закрыть();	
	
	HTTPЗапрос.УстановитьИмяФайлаТела(имяФайлаОтправки);
	
	HTTPОтвет	=	Соединение.ОтправитьДляОбработки(HTTPЗапрос);	
	
	ТелоОтвета	=	СокрЛП(HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
	
	Если не ПустаяСтрока(ТелоОтвета) Тогда
		Сообщить( ТелоОтвета);
	КонецЕсли;
	
	
	Если 	HTTPОтвет.КодСостояния	=	200 Тогда
		Сообщить("ок");			
	Иначе
		Сообщить("Ошибка отправки запроса");				
	КонецЕсли;

данный пример выполняется на клиенте, для себя я определил это правило, но можно конечно и на сервер отправить,

Для начала я описываю (заголовки запроса, Имя файла, тип обработки, Имя регистрации в базе, а также переменую boundary)

boundary - Уникальный идентификатор, который служит ключом начало и конца будущего тела запроса

Дальше, создаем текстовый файл для тела запроса, первый абзац это служебная информация, дальше мы кодируем в Base64 наши двоичные данные и встраиваем в файл, обрамляя "тегами" начала и конца.

После устанавливаем полученных текстовый файл в тело запроса и отправляем для обработки.

На стороне отправителя мы закончили.

 

Далее со стороны ХТТП сервиса

типовая функция обработки запроса:




Функция uploadpost(Запрос)
	
	СтруктураОтвета	=	ПоместитьВХранилищеФайлИзТелаСтрокиХТТП(Запрос);	
	ЗагрузитьОбъект1С_в_спр_допОбработок(СтруктураОтвета);
	
	Если ПустаяСтрока(СтруктураОтвета.ОписаниеОшибок) Тогда		
		Ответ 			= Новый HTTPСервисОтвет(200);		
		
	иначе
		Ответ 			= Новый HTTPСервисОтвет(500,СтруктураОтвета.ОписаниеОшибок);	
		Ответ.УстановитьТелоИзСтроки(СтруктураОтвета.ОписаниеОшибок, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
	КонецЕсли;
	
	
	Возврат Ответ;
КонецФункции


Функция ПоместитьВХранилищеФайлИзТелаСтрокиХТТП(Запрос)
	СтруктураОтвета	=	Новый Структура("ИмяФайла,АдресХранилища,ОписаниеОшибок,ЭтоОтчет,ИмяОбъекта");
	
	СтруктураОтвета.ИмяФайла	=	Запрос.Заголовки.Получить("fileName");
	СтруктураОтвета.ЭтоОтчет	=	?(Запрос.Заголовки.Получить("report")="Истина",Истина,Ложь);	
	СтруктураОтвета.ИмяОбъекта	=	Запрос.Заголовки.Получить("name_1c_Object");
	
	boundary					=	Запрос.Заголовки.Получить("boundary");	
	РазмерФайла					=	Запрос.Заголовки.Получить("Content-Lenght");	
	
	
	Если ЗначениеЗаполнено(СтруктураОтвета.ИмяФайла) и ЗначениеЗаполнено(boundary) Тогда
		
		ОписаниеОшибки		=	"";
		
		
		ТелоСтрока		=	Запрос.ПолучитьТелоКакСтроку();		
		МаркерНачала	=	"start_"+Boundary;
		ДлиннаМаркера1	=	СтрДлина(МаркерНачала);
		ПозицияНачала	=	СтрНайти(ТелоСтрока,МаркерНачала)+ДлиннаМаркера1+1;
		
		
		МаркерОкончания	=	"end_"+Boundary;			
		ПозицияОкончания=	СтрНайти(ТелоСтрока,МаркерОкончания);
		
		ТелоФайла		=	Сред(ТелоСтрока,ПозицияНачала,ПозицияОкончания-ПозицияНачала);			
		
		Попытка			
			СтруктураОтвета.АдресХранилища	=	ПоместитьВоВременноеХранилище(Base64Значение(ТелоФайла));
		Исключение			
			ОписаниеОшибки	=	ОписаниеОшибки+ОписаниеОшибки();
		КонецПопытки;
		
		СтруктураОтвета.ОписаниеОшибок	=	ОписаниеОшибки;	
		
	КонецЕсли;
	
	Возврат СтруктураОтвета;
	
КонецФункции

Процедура ЗагрузитьОбъект1С_в_спр_допОбработок(СтруктураЗадания)
	
	УстановитьПривилегированныйРежим(Истина);
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
		|ГДЕ
		|	ДополнительныеОтчетыИОбработки.Наименование = &Наименование";
	
	Запрос.УстановитьПараметр("Наименование", СтруктураЗадания.ИмяОбъекта);
	
	РезультатЗапроса 		= Запрос.Выполнить();	
	ВыборкаДетальныеЗаписи 	= РезультатЗапроса.Выбрать();
	
	ХД	=	Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СтруктураЗадания.АдресХранилища));
	
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
		
		СО						=	ВыборкаДетальныеЗаписи.ссылка.ПолучитьОбъект();
		со.ХранилищеОбработки	=	ХД;
		со.Версия				=	формат(ТекущаяДата(),"ДФ=dd/MM/yy");
		СО.Записать();
	Иначе
		СтруктураЗадания.ОписаниеОшибок	=	"Не найдено в доп.обработках: <"+СтруктураЗадания.ИмяОбъекта+">"
		
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Ложь);
	
КонецПроцедуры

 

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

 

Тестирование: 

  • Платформа (8.3.12.1685) 
  • Бухгалтерия предприятия, редакция 3.0 (3.0.71.83)

http; запрос; сервис; расширение; обработка;post

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169888    939    403    

905

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    12967    100    46    

103

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    26702    90    48    

134

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16912    41    15    

75

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    190694    1151    0    

918

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11444    40    27    

66

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    924    2    0    

5

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    103985    244    100    

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