Обмен данными через Web Сервисы

02.09.19

Интеграция - Обмен между базами 1C

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

Приветствую вас, друзья! Сегодня я хочу поделиться с вами опытом работы с WS (Web-Servis). 
Для работы веб-сервиса должен быть установлен Apache, либо iis.

Для примера, выгрузим таблицу остатков.

1. Создаем Web -Service в удаленной базе , и назовем его "ObmenWS".

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. После этого необходимо заполнить свойства Web -Сервиса, (Вкладка "Прочее"):

     1) URL Пространства имен - Требуется для идентификации веб-сервиса, по сочетанию его имени и пространству имен, укажем для примера "1.1.1.1";

     2) Пакеты XDTO - это механизм, разработанный фирмой “1С” для обмена данными с другими программными системами посредством XML, позволяющий на уровне языка 1С оперировать не узлами XML, а прикладными понятиями “Сотрудник”, “Счет” и привычными встроенными типами (“ТаблицаЗначений”, “СправочникСсылка” и т.п.). В данном примере не будем создавать собственные пакеты, а будем использовать встроенные пакеты 1С (а именно  - "http://v8.1c.ru/8.1/data/core"). Данный пакет содержит формат "Двоичные данные" - что поможет нам передавать любые типы через хранилище данных.
     3) Имя файла публикации - название файла *.1CWS, имя файла публикации может быть любым, но желательно латинским шрифтом и обязательно с расширением 1cws и желательно должно совпадать с именем каталога на web-сервере. Назовем его как и наш WS - "ObmenWS".

 

 

 

 

 

 

 

 

 

 

 

 


 

Наш Web Сервис готов к работе! Осталось добавить операции в WS для загрузки и выгрузки данных.

2. Создаем операцию с названием "ОстаткиТоваровНаСкладах", и с типом значение -ХранилищеДанных (ValueStorage):

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Создаем параметры для нашей операции. Для примера я создам 3 параметра :

     1) НачалоПериода - с типом Дата (Date);

     2) КонецПериода  -  с типом Дата (Date);

     3) Склад  - С типом Строка (String);

Количество параметров не ограничено, можно создавать сколько необходимо для конкретной задачи (Добавить Организацию например или контрагента и тд.) 

 После добавления параметров, приступаем к добавлению программного кода к нашей операции "ОстаткиТоваровНаСкладах". Нажимаем в свойствах операции на "ИмяПроцедуры" и открываем модуль WS. 

Необходимые данные мы получим запросом, и программный код будет иметь следующий вид:

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование КАК НоменклатураНаименование,
		|	ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
		|	ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
		|	ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
		|	ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Запись, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты";
	
	Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
	Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
	Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоНаименованию(Склад,истина));
	
	ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
	Хранилище = новый ХранилищеЗначения(ТаблицаРезультата);
	Возврат Хранилище;

На этом наш Web Сервис готов! Публикуем наш web сервис и можно подключаться к нему из другой базы.

 

 3. Пример подключения из другой базы  для получения остатков за период по определенному складу:

       1) Создаем внешнюю обработку, в модуле обработки прописываем следующий код:

Процедура ПолучитьТаблицуСДругойБазы()
	НачалоПериода = ТекущаяДата();
	КонецПериода  =  ДобавитьМесяц(ТекущаяДата(),-3);   //3 месяца назад
	Склад = "Основной склад";
	
	Таблица =  ПолучениеДанных(НачПериод,КонПериод,Склад);   //Первый вариант, 
	//Если операций станет много, что бы не писать для каждую операцию свою функцию можно создать одну универсальную
	Таблица =  ПолучениеДанныхОптимизированно("ОстаткиТоваровНаСкладах",НачПериод,КонПериод,Склад); //Второй вариант - оптимизированно!)
	
КонецПроцедуры

Функция ПодключениеКWS()
	МестоположениеWSDL =  			"http://localhost/ObmenWS/ws/ObmenWS.1cws?wsdl" ; //localhost - указываем ваш ip-адрес, где опубликован ws
	ИмяПользователя =   			"Администратор";
	Пароль=             			"Пароль";
	URIПространстваИменСервиса =  	"1.1.1.1 ";
	ИмяСервиса= 					"ObmenWS";
		
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;            
	
	ВСОпределение = Новый WSОпределения(МестоположениеWSDL, ИмяПользователя, Пароль,,,ЗащищенноеСоединение);        	
	ВСПрокси = Новый WSПрокси(ВСОпределение,URIПространстваИменСервиса , ИмяСервиса,ИмяСервиса+"Soap" );     
	
	ВСПрокси.Пользователь = ИмяПользователя;
	ВСПрокси.Пароль = Пароль;
		
	Возврат ВСПрокси;

КонецФункции

Функция ПолучениеДанныхОптимизированно(ИмяФункцииWS, П1 = Неопределено,
						П2 = Неопределено,
						П3 = Неопределено,
						П4 = Неопределено,
						П5 = Неопределено,
						П6 = Неопределено,
						П7 = Неопределено,
						П8 = Неопределено)
						
	Подключение = ПодключениеКWS();
	Данные = Вычислить("Подключение."+ИмяФункцииWS+"("+?(П1=Неопределено,"","П1")
													 +?(П2=Неопределено,"",",П2")
													 +?(П3=Неопределено,"",",П3")
													 +?(П4=Неопределено,"",",П4")
													 +?(П5=Неопределено,"",",П5")
													 +?(П6=Неопределено,"",",П6")
													 +?(П7=Неопределено,"",",П7")
													 +?(П8=Неопределено,"",",П8") + ")");
	Ответ = Данные;
	Возврат Ответ;
КонецФункции

Функция ПолучениеДанных(НачПериод,КонПериод,Склад)
						
	Подключение = ПодключениеКWS();
	Хранилище = Подключение.ОстаткиТоваровНаСкладах(НачПериод,КонПериод,Склад);
	Таблица = Хранилище.Получить();
	Возврат Таблица;
КонецФункции

На этом всё, Спасибо за внимание! 
Открыт для критики и наиболее изящных методов ! (=

Web Сервисы

См. также

SALE! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

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

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) в продаже с 2015 года, постоянно работаем над их развитием | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

45650 36520 руб.

04.08.2015    159689    363    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134938    723    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68418    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34169    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46301    196    64    

158

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231411    124    327    

296

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9208    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20252    132    38    

90
Отзывы
37. VPanin56 528 25.03.20 09:02 Сейчас в теме
У нас тоже активно используется Web Сервис, но помимо функций обмена есть еще и процедуры "Выполнения кода" и "Выполнения запроса"

#Область Сериализаци
Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();  
	Возврат ТЗ;
КонецФункции

Функция Сериализовать(ОбъектСериализации)
	ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
	Возврат МойXML.Закрыть();
КонецФункции
#КонецОбласти

Функция ВыполнитьЗапрос(ТекстЗапроса, Параметры, ТипОбходаЗапроса)
		
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	
	ТабПараметры = Десериализовать(Параметры); 
	Для Каждого Стр из ТабПараметры Цикл
		Запрос.УстановитьПараметр(Стр.Ключ, ПолучитьПараметрЗапроса(Стр));
	КонецЦикла;
	
	Таб = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса[ТипОбходаЗапроса]);
	
	результат = Сериализовать(Таб);
	
	Возврат Результат;
	
	
КонецФункции

Функция ПолучитьПараметрЗапроса(Строка)
	
	Если Строка.Тип="Вычислить" тогда
		Возврат Вычислить(Строка.Значение);
	ИначеЕсли Строка.Тип="Выполнить" тогда
		ДопПараметры = Строка.ДопПараметры;
		Значение = Неопределено;
		Выполнить(Строка.Значение);
		Возврат Значение;
	Иначе
		Возврат Строка.Значение;
	КонецЕсли;	
	
КонецФункции



Функция ВыполнитьКод(ТекстКода, Параметры)
	
	Ошибка_ = Ложь;
	ТекстОшибки_ = "";
	РезультатВыполнения = Неопределено;
		
	Попытка
		Выполнить(ТекстКода);
	Исключение
		Ошибка_ = Истина;
		ТекстОшибки_ = ОписаниеОшибки();
	КонецПопытки;
	
	Возврат Сериализовать(Новый Структура("Ошибка, ТекстОшибки, Результат", Ошибка_, ТекстОшибки_, РезультатВыполнения));
	
КонецФункции

Показать


Очень удобно использовать для разных задач. Web сервис уже не переписывается, а отправляется в него то что нужно выполнит, или Запрос, или Код 1С
mistervoron; user649057_89194416094; user682948_rusmaxval; user1027191; Gipatalamus; Noveng; 4ed; wowik; Andry2004; wunderland; maksal; user5300; +12 Ответить
40. VPanin56 528 07.04.20 15:34 Сейчас в теме
Вот пример куска кода из самописки по обслуживанию БАЗ. Кусок где именно вызывается "Выполнить Запрос" не нашел. Но при вызове "Выполнить Код" так же передается и текст запроса и параметры для этого запроса. Оптимально использовать именно его.
WebСервисБух - название нашего расширения подключенного в Бух базах и опубликованного.
.....
....
		Параметры = Новый СТруктура;
		Параметры.Вставить("ДатаВключенияПросрочкиПользователей", Дата("20180101"));
		Параметры.Вставить("ПросрочкаРаботыВПрограммеДоЗапрещенияВхода", Константы.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода.Получить());

		ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(Параметры);
		МойXML = Новый ЗаписьXML;
		МойXML.УстановитьСтроку();
		ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
		Параметры = МойXML.Закрыть();
		
			Пользователь = Константы.ПользовательДляПодключения.Получить();
			Пароль		 = Константы.ПарольДляПодключения.Получить();
			
			ВСОпределение = Новый WSОпределения(База.WSСсылка, Пользователь, Пароль);
			Соединение = Новый WSПрокси(ВСОпределение, "WebService1", "WebСервисБух", "WebСервисБухSoap");

			Соединение.Пользователь = Пользователь;
			Соединение.Пароль 		= Пароль;

			ОтветWS = Соединение.ВыполнитьКод(ТекстКонтрольАктивностиПользователей(), Параметры);

			ЧтениеXMLДанных = Новый ЧтениеXML;
			ЧтениеXMLДанных.УстановитьСтроку(ОтветWS);
			Ответ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
			ЧтениеXMLДанных.Закрыть();
			
			Если Ответ.Ошибка тогда
				ЗаписьЖурналаРегистрации("РегЗаписьЖурналаРегистрации", УровеньЖурналаРегистрации.Ошибка,,, СокрЛП(База)+" : "+Ответ.ТекстОшибки);
			КонецЕсли;

Функция ТекстКонтрольАктивностиПользователей() Экспорт
	
	ТекстКода = "
	|	УстановитьПривилегированныйРежим(Истина);
	|
	|	ЧтениеXMLДанных = Новый ЧтениеXML;
	|	ЧтениеXMLДанных.УстановитьСтроку(Параметры);
	|	Параметры = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	|	ЧтениеXMLДанных.Закрыть();
	|
	|	Запрос = Новый Запрос;
	|	Запрос.Текст = ""
	|		|ВЫБРАТЬ
	|		|	Пользователи.Ссылка КАК Пользователь,
	|		|	ВЫБОР
	|		|		КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата
	|		|			ТОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <= &НачалоДняТекущейДатыСеанса
	|		|		ИНАЧЕ ЛОЖЬ
	|		|	КОНЕЦ КАК СрокДействияИстек
	|		|ИЗ
	|		|	Справочник.Пользователи КАК Пользователи
	|		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
....
....
....
	|	Запрос.УстановитьПараметр(""ПустаяДата"", '00010101');
	|	Запрос.УстановитьПараметр(""НачалоДняТекущейДатыСеанса"",               	НачалоДня(ТекущаяДатаСеанса()));
	|	Запрос.УстановитьПараметр(""ДатаВключенияПросрочкиПользователей"",      	Параметры.ДатаВключенияПросрочкиПользователей);
	|	Запрос.УстановитьПараметр(""ПросрочкаРаботыПользователей"",             	Параметры.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода);
	|	Запрос.УстановитьПараметр(""ДатаВключенияПросрочкиВнешнихПользователей"",	Параметры.ДатаВключенияПросрочкиПользователей);
	|	Запрос.УстановитьПараметр(""ПросрочкаРаботыВнешнихПользователей"",        	Параметры.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода);
	|
	|   Выборка = Запрос.Выполнить().Выбрать();
	|   
	|   ИнформацияОбОшибке = Неопределено;
	|   Пока Выборка.Следующий() Цикл
	|   	Пользователь = Выборка.Пользователь;
	|	КонецЦикла;
	|
	|	РезультатВыполнения = Истина;
	|";

	Возврат ТекстКода;
	
КонецФункции

Показать
user682948_rusmaxval; user1027191; Gipatalamus; 4ed; +4 Ответить
41. VPanin56 528 07.04.20 16:12 Сейчас в теме
Или вот кусок кода по формированию параметров для передачи

Таб = Новый ТаблицаЗначений;
			Таб.Колонки.Добавить("Ключ");
			Таб.Колонки.Добавить("Тип");
			Таб.Колонки.Добавить("Значение");
			Таб.Колонки.Добавить("ДопПараметры");
			
			// ОРГАНИЗАЦИЯ
			Стр = Таб.Добавить();
			Стр.Ключ = "Организация";
			Если СокрЛП(ОфициальнаяОрганизация.ВнешняяСсылка) = "" Тогда
				Стр.Тип = "Выполнить";
				Текст = "Значение = Справочники.Организации.НайтиПоНаименованию(ДопПараметры.Организация)";
				ДопПар = Новый Структура("Организация", СокрЛП(ОфициальнаяОрганизация.Наименование));
				Стр.ДопПараметры = ДопПар;
			Иначе
				Стр.Тип = "Выполнить";
				Текст = "Значение = ЗначениеИзСтрокиВнутр(ДопПараметры.ВнешняяСсылка)";
				ДопПар = Новый Структура("ВнешняяСсылка", СокрЛП(ОфициальнаяОрганизация.ВнешняяСсылка));
				Стр.ДопПараметры = ДопПар;
			КонецЕсли;
			Стр.Значение = Текст;
			
			// НачалоПериода
			Стр = Таб.Добавить();
			Стр.Ключ = "НП";
			Стр.Тип = "Дата";
			Стр.Значение = НачалоПериода;
			
			// НачалоПериода
			Стр = Таб.Добавить();
			Стр.Ключ = "КП";
			Стр.Тип = "Дата";
			Стр.Значение = КонецДня(КонецПериода);
Показать
user682948_rusmaxval; user1027191; Gipatalamus; 4ed; +4 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Boyborodin 03.09.19 08:18 Сейчас в теме
Советую делать один параметр входящий типа string и исходящий такой же. В строку кидать текст JSON. В JSON можно запаковывать любое количество параметров, даже таблицы значений. Без муторной работы с XDTO, а сама запаковка и распаковка занимает несколько строк кода. Так же если при доработке придется добавлять входные/выходные параметры сам web-сервис можно уже не перенастраивать.
kabantus; user1549775; user682948_rusmaxval; Izumov; user5300; KolBbl4; Артано; akR00b; wunderland; user774630; danjer74; duhin; ybatiaev; hakerxp; Jeka44; Lazio; kuzyara; marat3581525; TODD22; Robbi; wowik; Jokemas; TeMochkiN; Glebb_NSK; Fox-trot; +25 2 Ответить
2. user5300 1000 03.09.19 08:22 Сейчас в теме
(1) Хорошая идея! Спасибо за совет !)
3. AlX0id 03.09.19 08:37 Сейчас в теме
(1)
Тут только один нюанс - в пользу использования того же XDTO - не будет автоматической проверки корректности того, что же вы запихали в этот JSON..
В принципе, сам использую похожий способ - для работы с внешними источниками - на вход беру строки xml, кодированные в base64. Не очень красиво, зато внешним кодерам удобно и понятно.
Andreeei; +1 Ответить
6. Boyborodin 03.09.19 09:02 Сейчас в теме
(3)

Запаковываем

	 ЗаписьJSON = Новый ЗаписьJSON;
	 ЗаписьJSON.УстановитьСтроку();
	 СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, СтруктураДанных, НазначениеТипаXML.Явное);
	 StringJS = ЗаписьJSON.Закрыть();


Распаковываем

	ЧтениеJS = Новый ЧтениеJSON;
	ЧтениеJS.УстановитьСтроку(StringJS);
	СтруктураДанных = СериализаторXDTO.ПрочитатьJSON(ЧтениеJS);
	ЧтениеJS.Закрыть();


JSON автоматически всё сериализует. Удобнее чем XML. Можно еще пожать, если данные объемные.
user682948_rusmaxval; zannv; KolBbl4; Артано; wunderland; duhin; ybatiaev; user5300; wowik; +9 Ответить
7. user5300 1000 03.09.19 09:05 Сейчас в теме
(6) Кстати, а если структура баз отличается ? Допустим если выгрузить физ лица с ЗУП в УТ, у них же разные структуры... Реквизиты и тд., Ошибки не будет ?)
8. Boyborodin 03.09.19 09:14 Сейчас в теме
(7)

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

Для вашего примера:

СтруктураДанных = Новый Структура;
СтруктураДанных.Добавить("КонецПериода", КонецПериода);
СтруктураДанных.Добавить("НачалоПериода", НачалоПериода);
СтруктураДанных.Добавить("Склад", Склад);


И не забыть после успешного завершения процедуры вернуть какой-нибудь признак что всё прошло хорошо.
Артано; ybatiaev; user5300; +3 Ответить
10. AlX0id 03.09.19 09:26 Сейчас в теме
(6)
Я не про удобство - автоматического контроля состава данных внутри JSON нет.
XML, кстати, я в итоге разбираю с помощью XDTO все равно.
31. new_user 07.01.20 15:54 Сейчас в теме
(1) только в таком случае wsdl о том что Вы в этот входящий параметр передадите не расскажет( А вроде веб-сервис в том числе для wsdl и используется. Иначе Вам где то описание сервиса размещать надо и руками описывать что можно в этот входящий параметр положить.
user5300; +1 Ответить
4. Fox-trot 156 03.09.19 08:44 Сейчас в теме
каталог базы должен иметь полные права

как тебя понимать, саид? (с)
5. user5300 1000 03.09.19 08:50 Сейчас в теме
(4) Забыл..., если база файловая- каталог базы должен иметь полные права
9. Fox-trot 156 03.09.19 09:24 Сейчас в теме
(5) может все же пользователь должен иметь полные права? тогда какой пользователь?
11. user5300 1000 03.09.19 09:51 Сейчас в теме
(9)
Прикрепленные файлы:
Fox-trot; +1 Ответить
27. Сто27001 05.09.19 08:12 Сейчас в теме
(4) Если с русского перевести на русский, то "каталог базы должен иметь полные права" означает, что пользователь ОС от имени которого запущены IIS или Apache, должен иметь полные права на каталог в котором расположена публикуемая файловая база.
bgazobeton; user5300; elizarovs; Fox-trot; +4 Ответить
12. ellavs 1022 03.09.19 11:12 Сейчас в теме
Довольно часто пользуемся подобным функционалом для обмена данными между базами (только используем HTTP-сервисы). Это в основном, когда мы не хотим пускать пользователей в основную базу, но им нужно поработать с данными. Есть другая конфигурация, например, не содержащая ПДн, куда доступ предоставлен бОльшему количеству пользователей, и в ней получаем данные из основной БД через сервис.
13. logos 208 03.09.19 16:53 Сейчас в теме
А зачем в этой ситуации вообще SOAP? Зачитывание wsdl, сериализация в ХЗ, обратная десериализация. Про json уже написали, так давайте последовательно советовать и http-сервис. Передаем в одном из полей метод, в другом данные. Сериализация/десериализация отлично делается методами ПрочитатьJSON, ЗаписатьJSON. И никакого XDTO вообще не нужно.
ybatiaev; sevushka; +2 Ответить
17. Ndochp 103 04.09.19 09:16 Сейчас в теме
(13)ХДТО нужен исключительно для автоматической проверки входящих данный на соответствие формату. К джейсону такое универсально на коленке не прикрутить.
Andreeei; user5300; +2 Ответить
18. logos 208 04.09.19 09:18 Сейчас в теме
(17) Какая в данном сценарии может быть проверка? Описывается получение произвольных данных запросом (базовых типов). Считаю, что использование SOAP имеет смысл только при работе с "ненадежным" клиентом, от которого можно получить "непредсказуемый" input. А когда пишешь свои сервисы - это избыточная перестраховка, сильно усложняющая разработку.
ybatiaev; Fox-trot; +2 Ответить
19. Ndochp 103 04.09.19 09:36 Сейчас в теме
(18) У меня 8 видов баз под контролем. И они периодически обновляются. Вот тебе и источник непредсказуемого инпута.
Ты же не будешь правила писать для превращения документа в джейсон, правильно? ты сделаешь платформенную сериализацию.
А на стороне приёмника уже сделаешь какой-то алгоритм разбора, если базы не совпадают.

И вот, то что писали в "Реквизит" начали писать в "Реквизит подробно", а в "Реквизит" стали писать укрупненные типы.
В случае SOAP алгоритм на принимающей стороне долбанется от новых реквизитов в которые переложили нужные тебе данные и ты полезешь разбираться. А в разборе джейсона ты проигнорируешь "Реквизит подробно", привычно заберешь все из "Реквизит", и получишь неверный документ.
Vladimir Litvinenko; user5300; +2 Ответить
20. logos 208 04.09.19 12:39 Сейчас в теме
(19) Давайте всё таки на Вы. Если "левая рука" не знает, что делает правая - никто не запрещает использовать SOAP. Однако, в контексте публикации автора, http сервис и JSON сериализатор дадут более аккуратный и более быстрый код.
Артано; ybatiaev; +2 Ответить
21. Ndochp 103 04.09.19 13:00 Сейчас в теме
(20) Давайте на Вы.
Левая рука - Вы. Правая - 1С. Обмена между самописными базами я за свою карьеру не встречал, обычно нетеленка обменивается с доработанной типовой, или две доработанных между собой. В нетленка - 1С непредсказуемость только на стороне приёмника, а вот в 1С-1С - с обеих сторон.

У автора вообще контекста нет. У него есть инструмент и пример использования. Ясно, что код без проверок будет быстрее и компактнее. Как и подшипник без смазки крутится быстрее. Только вот в реальной жизни подшипники смазывают, а в коде делают проверки. И SOAP даёт для них автоматизированный инструмент, а Json оставляет все на откуп пользователю.
В итоге в реальности на до исходить из своего контекста - передача ограниченного числа слабосвязанных объектов легко делается на Jsonе, кусочек базы данных - надежнее на XDTO.
pisarevEV; Vladimir Litvinenko; +2 Ответить
22. logos 208 04.09.19 13:44 Сейчас в теме
(21) Левая рука - клиент, правая - сервер. Я не вижу, где тут код от ООО "1С-Софт", в случае, если мы пишем свой веб-сервис. Если Вы предоставляете сервер сторонним клиентам - я обеими руками за SOAP, когда ошибка в рассинхронизации протокола - это просто ошибка разработчика(ов) информационной системы. Впрочем, настаивать не буду, хотите SOAP - я не в праве Вам этого запретить.
23. Ndochp 103 04.09.19 15:34 Сейчас в теме
(22) Код от 1С вот тут: СериализаторXDTO.ЗаписатьJSON (http://v8.1c.ru/o7/201501json/index.htm) Соответственно в поле "Значение" будет то, что написала 1С.
24. logos 208 04.09.19 16:00 Сейчас в теме
(23) А я предлагаю пользоваться другим сериализатором:
Глобальный контекст (Global context)
ЗаписатьJSON (WriteJSON)
25. Ndochp 103 04.09.19 16:13 Сейчас в теме
(24)
В формате JSON допускается записывать только значения следующих типов:
Строка,
Число,
Булево,
Дата (преобразованная в строку),
Массив,
ФиксированныйМассив,
Структура,
ФиксированнаяСтруктура,
Соответствие,
ФиксированноеСоответствие.

Успехов в передаче документов.
26. logos 208 04.09.19 16:37 Сейчас в теме
(25) Передаются структуры/соответствия и массивы. К этим типам приводятся необходимые получателю объекты. Вы же не будете утверждать, что XDTO (xsd) у Вас волшебным образом самостоятельно заполняется? Платформенным сериализатором многое не передать. В любом случае придётся заполнять "объект xdto".
30. new_user 07.01.20 15:49 Сейчас в теме
(13) В целом - согласен, только:

ЗаписатьJSON
- не может сериализовать таблицу значений, а:

СериализаторXDTO.ЗаписатьJSON
- может.
14. EMelihoff 03.09.19 16:55 Сейчас в теме
у меня наверное профессиональная деградация, при виде переменной "Хранилище" думал минут 5 причём тут хранилище ))
15. nbeliaev 828 04.09.19 06:13 Сейчас в теме
Методы, параметры веб-сервиса на кириллице.
Логин и пароль также.
Если дергать такой веб-сервис не из платформы 1С, то будут проблемы.
16. user5300 1000 04.09.19 07:45 Сейчас в теме
(15) Это пример обмена между базами ) Конечно можно все переделать на латиницу для работы с другими сервисами )
28. alexeypenzin 2 09.10.19 11:08 Сейчас в теме
Статья отличная, но хочется продолжения.
На практике, в основном, нужно выгружать в базу приемник только измененные объекты. Не совсем понятно как это реализовать с помощью веб-сервисов. Как в данном обмене применить планы обмена? Когда и где очищать таблицу измененных объектов?

Коротко вопрос: На клиенте получили данные, как на сервере узнать что клиент принял данные и на сервере удалить данный объект из таблицы измененных объектов?
29. user5300 1000 09.10.19 11:49 Сейчас в теме
(28) Спасибо, статья для общего ознакомления )

Выгрузку и загрузку объектов можно осуществить разными способами, в основном используется чтение\запись xml между нетиповыми конфигурациями , далее можно прикрутить планы обмена под свои задачи. Для обмена между типовыми - придется использовать расширения.

Функции веб сервиса выполняются на сервере, в случае возникновении ошибки - система сообщит об этом ) можно также добавить функцию проверки после записи либо сразу, например:
Функция ЗаписьДокумента(Параметры)
  попытка
    док = новыйДокумент;
    Док.Записать(Проведение);
    Ответ = "Создан новый док: + Док.Ссылка;
  Исключение
    Ответ = "ошибка: "  + ОписаниеОшибки();
  КонецПопытки
  Возврат Ответ;
Конецфункции
Показать

//Пример оповещения пользователя...

Возможно в будущем будет разбор более конкретной задачи с примерами и обработками ...)
32. frkbvfnjh 785 25.03.20 06:53 Сейчас в теме
На мой взгляд Web-сервисы - это самое ужасное, что можно использовать для обмена. Лично я написал на http-сервисах - куда стабильнее и более гибко. При плохом интернете или большом объеме данных web-сервис тупо умирает, часто вызывая блокировки. Web-сервисы сложны в разработке для новичков и вообще в 1С это какая то не-до-технология. Кроме того, при использовании http-сервисов, можно еще и предварительно сжать данные, я уж не знаю как вы это сделаете в web-сервисе.
33. user5300 1000 25.03.20 08:05 Сейчас в теме
(32) в веб сервисе тоже можно сжимать данные типовыми средствами например )

Возврат новый ХранилищеДанных(ТабличнаяЧасть,Новый СжатиеДанных(9));
35. frkbvfnjh 785 25.03.20 08:09 Сейчас в теме
34. user5300 1000 25.03.20 08:06 Сейчас в теме
(32) У каждого свои подходы для решения задач, это всего лишь пример того как можно использовать веб сервисы )
36. frkbvfnjh 785 25.03.20 08:10 Сейчас в теме
(34) да согласен, но боль от использования веб-сервисов не утихнет никогда
38. Sergik_D 20 25.03.20 18:04 Сейчас в теме
(32) У меня 1с обменивается с приложением на Android через Web-сервисы. Думал переходить на HTTP, но не нашел информации о преимуществах. Если есть такая информация, буду благодарен за ссылки. Вот это прям моё: "При плохом интернете или большом объеме данных web-сервис тупо умирает, часто вызывая блокировки"
37. VPanin56 528 25.03.20 09:02 Сейчас в теме
У нас тоже активно используется Web Сервис, но помимо функций обмена есть еще и процедуры "Выполнения кода" и "Выполнения запроса"

#Область Сериализаци
Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();  
	Возврат ТЗ;
КонецФункции

Функция Сериализовать(ОбъектСериализации)
	ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
	Возврат МойXML.Закрыть();
КонецФункции
#КонецОбласти

Функция ВыполнитьЗапрос(ТекстЗапроса, Параметры, ТипОбходаЗапроса)
		
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	
	ТабПараметры = Десериализовать(Параметры); 
	Для Каждого Стр из ТабПараметры Цикл
		Запрос.УстановитьПараметр(Стр.Ключ, ПолучитьПараметрЗапроса(Стр));
	КонецЦикла;
	
	Таб = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса[ТипОбходаЗапроса]);
	
	результат = Сериализовать(Таб);
	
	Возврат Результат;
	
	
КонецФункции

Функция ПолучитьПараметрЗапроса(Строка)
	
	Если Строка.Тип="Вычислить" тогда
		Возврат Вычислить(Строка.Значение);
	ИначеЕсли Строка.Тип="Выполнить" тогда
		ДопПараметры = Строка.ДопПараметры;
		Значение = Неопределено;
		Выполнить(Строка.Значение);
		Возврат Значение;
	Иначе
		Возврат Строка.Значение;
	КонецЕсли;	
	
КонецФункции



Функция ВыполнитьКод(ТекстКода, Параметры)
	
	Ошибка_ = Ложь;
	ТекстОшибки_ = "";
	РезультатВыполнения = Неопределено;
		
	Попытка
		Выполнить(ТекстКода);
	Исключение
		Ошибка_ = Истина;
		ТекстОшибки_ = ОписаниеОшибки();
	КонецПопытки;
	
	Возврат Сериализовать(Новый Структура("Ошибка, ТекстОшибки, Результат", Ошибка_, ТекстОшибки_, РезультатВыполнения));
	
КонецФункции

Показать


Очень удобно использовать для разных задач. Web сервис уже не переписывается, а отправляется в него то что нужно выполнит, или Запрос, или Код 1С
mistervoron; user649057_89194416094; user682948_rusmaxval; user1027191; Gipatalamus; Noveng; 4ed; wowik; Andry2004; wunderland; maksal; user5300; +12 Ответить
39. hoyo 07.04.20 09:47 Сейчас в теме
(37) Если не сложно, приведите пожалуйста пример, как вызвать "ВыполнитьЗапрос" на стороне базы, в которую мы хотим получить данные, а то не очень понятно, в каком виде должны передаваться Параметры, например.
43. Drivingblind 227 18.05.21 06:26 Сейчас в теме
(37) вот статья, почему так делать нельзя: https://infostart.ru/1c/articles/1105734/
40. VPanin56 528 07.04.20 15:34 Сейчас в теме
Вот пример куска кода из самописки по обслуживанию БАЗ. Кусок где именно вызывается "Выполнить Запрос" не нашел. Но при вызове "Выполнить Код" так же передается и текст запроса и параметры для этого запроса. Оптимально использовать именно его.
WebСервисБух - название нашего расширения подключенного в Бух базах и опубликованного.
.....
....
		Параметры = Новый СТруктура;
		Параметры.Вставить("ДатаВключенияПросрочкиПользователей", Дата("20180101"));
		Параметры.Вставить("ПросрочкаРаботыВПрограммеДоЗапрещенияВхода", Константы.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода.Получить());

		ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(Параметры);
		МойXML = Новый ЗаписьXML;
		МойXML.УстановитьСтроку();
		ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
		Параметры = МойXML.Закрыть();
		
			Пользователь = Константы.ПользовательДляПодключения.Получить();
			Пароль		 = Константы.ПарольДляПодключения.Получить();
			
			ВСОпределение = Новый WSОпределения(База.WSСсылка, Пользователь, Пароль);
			Соединение = Новый WSПрокси(ВСОпределение, "WebService1", "WebСервисБух", "WebСервисБухSoap");

			Соединение.Пользователь = Пользователь;
			Соединение.Пароль 		= Пароль;

			ОтветWS = Соединение.ВыполнитьКод(ТекстКонтрольАктивностиПользователей(), Параметры);

			ЧтениеXMLДанных = Новый ЧтениеXML;
			ЧтениеXMLДанных.УстановитьСтроку(ОтветWS);
			Ответ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
			ЧтениеXMLДанных.Закрыть();
			
			Если Ответ.Ошибка тогда
				ЗаписьЖурналаРегистрации("РегЗаписьЖурналаРегистрации", УровеньЖурналаРегистрации.Ошибка,,, СокрЛП(База)+" : "+Ответ.ТекстОшибки);
			КонецЕсли;

Функция ТекстКонтрольАктивностиПользователей() Экспорт
	
	ТекстКода = "
	|	УстановитьПривилегированныйРежим(Истина);
	|
	|	ЧтениеXMLДанных = Новый ЧтениеXML;
	|	ЧтениеXMLДанных.УстановитьСтроку(Параметры);
	|	Параметры = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	|	ЧтениеXMLДанных.Закрыть();
	|
	|	Запрос = Новый Запрос;
	|	Запрос.Текст = ""
	|		|ВЫБРАТЬ
	|		|	Пользователи.Ссылка КАК Пользователь,
	|		|	ВЫБОР
	|		|		КОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <> &ПустаяДата
	|		|			ТОГДА ЕСТЬNULL(СведенияОПользователях.СрокДействия, &ПустаяДата) <= &НачалоДняТекущейДатыСеанса
	|		|		ИНАЧЕ ЛОЖЬ
	|		|	КОНЕЦ КАК СрокДействияИстек
	|		|ИЗ
	|		|	Справочник.Пользователи КАК Пользователи
	|		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
....
....
....
	|	Запрос.УстановитьПараметр(""ПустаяДата"", '00010101');
	|	Запрос.УстановитьПараметр(""НачалоДняТекущейДатыСеанса"",               	НачалоДня(ТекущаяДатаСеанса()));
	|	Запрос.УстановитьПараметр(""ДатаВключенияПросрочкиПользователей"",      	Параметры.ДатаВключенияПросрочкиПользователей);
	|	Запрос.УстановитьПараметр(""ПросрочкаРаботыПользователей"",             	Параметры.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода);
	|	Запрос.УстановитьПараметр(""ДатаВключенияПросрочкиВнешнихПользователей"",	Параметры.ДатаВключенияПросрочкиПользователей);
	|	Запрос.УстановитьПараметр(""ПросрочкаРаботыВнешнихПользователей"",        	Параметры.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода);
	|
	|   Выборка = Запрос.Выполнить().Выбрать();
	|   
	|   ИнформацияОбОшибке = Неопределено;
	|   Пока Выборка.Следующий() Цикл
	|   	Пользователь = Выборка.Пользователь;
	|	КонецЦикла;
	|
	|	РезультатВыполнения = Истина;
	|";

	Возврат ТекстКода;
	
КонецФункции

Показать
user682948_rusmaxval; user1027191; Gipatalamus; 4ed; +4 Ответить
41. VPanin56 528 07.04.20 16:12 Сейчас в теме
Или вот кусок кода по формированию параметров для передачи

Таб = Новый ТаблицаЗначений;
			Таб.Колонки.Добавить("Ключ");
			Таб.Колонки.Добавить("Тип");
			Таб.Колонки.Добавить("Значение");
			Таб.Колонки.Добавить("ДопПараметры");
			
			// ОРГАНИЗАЦИЯ
			Стр = Таб.Добавить();
			Стр.Ключ = "Организация";
			Если СокрЛП(ОфициальнаяОрганизация.ВнешняяСсылка) = "" Тогда
				Стр.Тип = "Выполнить";
				Текст = "Значение = Справочники.Организации.НайтиПоНаименованию(ДопПараметры.Организация)";
				ДопПар = Новый Структура("Организация", СокрЛП(ОфициальнаяОрганизация.Наименование));
				Стр.ДопПараметры = ДопПар;
			Иначе
				Стр.Тип = "Выполнить";
				Текст = "Значение = ЗначениеИзСтрокиВнутр(ДопПараметры.ВнешняяСсылка)";
				ДопПар = Новый Структура("ВнешняяСсылка", СокрЛП(ОфициальнаяОрганизация.ВнешняяСсылка));
				Стр.ДопПараметры = ДопПар;
			КонецЕсли;
			Стр.Значение = Текст;
			
			// НачалоПериода
			Стр = Таб.Добавить();
			Стр.Ключ = "НП";
			Стр.Тип = "Дата";
			Стр.Значение = НачалоПериода;
			
			// НачалоПериода
			Стр = Таб.Добавить();
			Стр.Ключ = "КП";
			Стр.Тип = "Дата";
			Стр.Значение = КонецДня(КонецПериода);
Показать
user682948_rusmaxval; user1027191; Gipatalamus; 4ed; +4 Ответить
42. Shurkec 30.08.20 11:54 Сейчас в теме
Благодарю! Очень полезная информация.
user5300; +1 Ответить
44. user616816_Romeo8044 16.06.21 09:26 Сейчас в теме
На соединение действует ограничение в 900 секунд. Если база за это время не ответила (могла просто не успеть) то соединение отваливается. Где можно поменять это время ожидания - 15 минут это очень мало для больших расчетов?
45. bashhhh 25 29.10.21 10:39 Сейчас в теме
(44) Для таких целей нужно делать асинхронные запросы. Первый запрос отправляет задание на расчет, второй проверят готовность расчета с интервалом, пока не получит положительный результат, третий получает результат расчета, который где то был сохранен
esqado; user616816_Romeo8044; +2 Ответить
Оставьте свое сообщение