Передача параметров из одной базы в другую через веб сервис 1с

1. user1671936 1 04.10.21 13:43 Сейчас в теме
Доброго времени суток. Приношу извинения, что в прошлой теме https://forum.infostart.ru/forum9/topic270071/ плохо сформулировал вопрос. Есть две базы (база источник и база приемник). Источник опубликован на веб сервер. В приемнике написан обработчик, который подключается к источнику, забирает данные, сравнивает с данными из двух баз, и заполняет некую таблицу. В обработчике есть выбор даты, и мне нужно чтоб выбранная дата передавалась в качестве параметров запроса в базу источник. Подскажите, пожалуйста, как можно это реализовать. (В базе источника добавлены параметры BeginningDate и EndDate с типом значения DateTime). Ниже представляю код из тестовых баз, так же прикрепляю архив с базами и обработчиком. ЗЫ код может показаться кашей, не кидайтесь камнями =).

////////// Код базы источника/////////////////////

Функция GetData(Data)//, BeginningDate, EndDate)	
	
	Структура = Десериализовать(Data);//, BeginningDate, EndDate);
	СтруктураДанных = Новый Структура;
	Запрос = Новый Запрос;
	//Запрос.УстановитьПараметр("НачалоПериода", BeginningDate);//Дата('2021.09.29 00:00:00'));
	//Запрос.УстановитьПараметр("КонецПериода", EndDate); //Дата('2021.09.30 00:00:00'));
	Запрос.Текст = 
	   "ВЫБРАТЬ
	   |	Документ.Номенклатура.Код КАК Код,
	   |	Документ.Цена КАК Цена,
	   |	Документ.Количество КАК Количество,
	   |	Документ.Сумма КАК Сумма,
	   |	Документ.Номенклатура.Артикул КАК Артикул
	   |ИЗ
	   |	Документ.РеализацияТоваровУслуг.Товары КАК Документ
	   |ГДЕ
	   |	Документ.Ссылка.ПометкаУдаления = ЛОЖЬ
	   |	И Документ.Ссылка.Проведен = ИСТИНА";
	
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	
	КвалификаторСтроки = Новый КвалификаторыСтроки(0);
	Массив = Новый Массив;
	Массив.Добавить(Тип("Строка"));
	ОписаниеТиповСтрок = Новый ОписаниеТипов(Массив, , КвалификаторСтроки);
	
	Данные = Новый ТаблицаЗначений;
	Данные.Колонки.Добавить("Код", ОписаниеТиповСтрок);
	Данные.Колонки.Добавить("Количество", ОписаниеТиповСтрок);
	Данные.Колонки.Добавить("Цена", ОписаниеТиповСтрок);
	Данные.Колонки.Добавить("Сумма", ОписаниеТиповСтрок);
	Данные.Колонки.Добавить("Артикул", ОписаниеТиповСтрок);
	Данные.Очистить();
	
	Пока РезультатЗапроса.Следующий() Цикл
		
		ТекущиеДанные = Данные.Добавить();
		ТекущиеДанные.Код = РезультатЗапроса.Код;
		ТекущиеДанные.Количество = РезультатЗапроса.Количество;
		ТекущиеДанные.Цена = РезультатЗапроса.Цена;
		ТекущиеДанные.Сумма = РезультатЗапроса.Сумма;
		ТекущиеДанные.Артикул = РезультатЗапроса.Артикул;
		
	КонецЦикла;
	
		
	СтруктураДанных.Вставить("ТаблицаСДанными",Данные);
	
	Возврат Сериализовать(СтруктураДанных);	
	
КонецФункции

Функция Десериализовать(Data)//, BeginningDate, EndDate)
	
	ЧтениеXMLДанных = Новый ЧтениеXML;
	ЧтениеXMLДанных.УстановитьСтроку(Data);//, BeginningDate, EndDate);
	ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
	ЧтениеXMLДанных.Закрыть();
	Возврат ТЗ;
	
КонецФункции

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

///////////Код обработчика из базы приемника////////////////////////

&НаКлиенте
Процедура ПолучитьДанные(Команда)
	
	Документ = ВыполнитьЗагрузкуНаСервере();
	
КонецПроцедуры

&НаСервере
Функция ВыполнитьЗагрузкуНаСервере()
	
	Счетчик = 1;
		
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Данные", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150)));	
	
	Соединение = WSСсылки.GetDataDoc.СоздатьWSПрокси("http://localhost/ws/DocCompare", "WebDoc", "WebDocSoap");
	Соединение.Пользователь = "";
	Соединение.Пароль = "";
	
	Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("GetData");
	//Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("BeginningDate");
	//Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("EndDate");
	
	СтруктураДанных = Новый Структура;
	СтруктураДанных.Вставить("ТаблицаДанных", ТЗ);
	//СтруктураДанных.Вставить("BeginningDate", НачалоПериода);
	//СтруктураДанных.Вставить("EndDate", КонецДня(КонецПериода));
	//
	Хранилище = Новый ХранилищеЗначения(СтруктураДанных, Новый СжатиеДанных(9));
	Ответ = Соединение.GetData(Сериализовать(Хранилище));
	Действие = Десериализовать(Ответ);
		
		ЗапросДанных = Действие.ТаблицаСДанными;
		
		Для Каждого Строка Из ЗапросДанных Цикл
			
			Запрос = Новый Запрос;
			Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
			Запрос.УстановитьПараметр("КонецПериода", КонецДня(КонецПериода));
			Запрос.Текст = 
			"ВЫБРАТЬ
			|	Номенклатура.Код КАК Код,
			|	Номенклатура.Наименование КАК Наименование
			|ИЗ
			|	Справочник.Номенклатура КАК Номенклатура";
			
			РезультатЗапроса = Запрос.Выполнить();
			Выборка = РезультатЗапроса.Выбрать();
			
			КвалификкаторСтроки = Новый КвалификаторыСтроки(0);
			Массив = Новый Массив;
			Массив.Добавить(Тип("Строка"));
			ОписаниеТиповСтрок = Новый ОписаниеТипов(Массив, , КвалификкаторСтроки);
			
			Таблица = Новый ТаблицаЗначений;
			Таблица.Колонки.Добавить("Номенклатура", ОписаниеТиповСтрок);
			Таблица.Колонки.Добавить("Код", ОписаниеТиповСтрок);
			Таблица.Очистить();
			Табчасть.Очистить();
			Табчасть.Очистить();

			
			Пока Выборка.Следующий() Цикл
									
					ТекСтр = Таблица.Добавить();
					ТекСтр.Код = СокрЛП(Выборка.Код);
					ТекСтр.Номенклатура = Выборка.Номенклатура;
					
					Для Каждого Стр Из Таблица Цикл
						
						ТекСтр = ТабЧасть.Добавить();
						ТекСтр.Номенклатура = ("Ном из источника:" + Выборка.Номенклатура + ";" + "Ном из приемника" + Строка.Номенклатура);
						
											
						Счетчик = Счетчик+1;
						
					КонецЦикла;
					
				КонецЦикла;
				
			КонецЦикла;	
	
КонецФункции

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

Функция Сериализовать(ОбъектСериализации)
	
	ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
	Возврат МойXML.Закрыть();
	
КонецФункции
Показать
Прикрепленные файлы:
Тестовые базы.7z
По теме из базы знаний
Найденные решения
4. user1671936 1 05.10.21 12:54 Сейчас в теме
Решил задачу так :

////////// Код базы источника/////////////////////

Функция GetData(Data, BeginningDate, EndDate)    
    
НачалоПериода = ЗначениеИзСтрокиВнутр(BeginningDate);
КонецПериода = ЗначениеИзСтрокиВнутр(EndDate);

    Структура = Десериализовать(Data);//, BeginningDate, EndDate);
    СтруктураДанных = Новый Структура;
    Запрос = Новый Запрос;
    //Запрос.УстановитьПараметр("НачалоПериода", BeginningDate);//Дата('2021.09.29 00:00:00'));
    //Запрос.УстановитьПараметр("КонецПериода", EndDate); //Дата('2021.09.30 00:00:00'));
    Запрос.Текст = 



///////Код из обработчика 

&НаСервере
Функция ВыполнитьЗагрузкуНаСервере()
    
    BeginningDate = ЗначениеВСтрокуВнутр(НачалоПериода);
    EndDate = ЗначениеВСтрокуВнутр(КонецПериода);
     
    Счетчик = 1;
        
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Данные", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150)));    
    
    Соединение = WSСсылки.GetDataDoc.СоздатьWSПрокси("http://localhost/ws/DocCompare", "WebDoc", "WebDocSoap");
    Соединение.Пользователь = "";
    Соединение.Пароль = "";
    
    Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("GetData");
    
    СтруктураДанных = Новый Структура;
    СтруктураДанных.Вставить("ТаблицаДанных", ТЗ);
    Хранилище = Новый ХранилищеЗначения(СтруктураДанных, Новый СжатиеДанных(9));
    Ответ = Соединение.GetData(Сериализовать(Хранилище), BeginningDate , EndDate);
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dem0 04.10.21 22:02 Сейчас в теме
Отладкой зайдите в Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("BeginningDate");
Что там?
Я же вам писал - сделайте по моему примеру
ВТочкаВхода = ВСервис.ТочкиПодключения.Получить(СтруктураИменВебСервиса.ПолныйИндекс);
Операция_НачатьОбмен = ВТочкаВхода.Интерфейс.Операции.Получить("НачатьОбмен");
ПериодВыгрузки = ВСПрокси.ФабрикаXDTO.Создать(Операция_НачатьОбмен.Параметры.Получить("ПериодВыгрузки").Тип,"За последнюю неделю");

ВСПрокси у меня - это Новый WSПрокси(Определения.... и далее тра-та-та.
Сделайте по аналогии
user1671936; +1 Ответить
3. user1671936 1 05.10.21 12:50 Сейчас в теме
(2) Спасибо, я разобрался. Не тот тип значения пытался параметрам присвоить, вот и ошибку выдавало, помогла конструкция ЗначениеВСтрокуВнутр .
4. user1671936 1 05.10.21 12:54 Сейчас в теме
Решил задачу так :

////////// Код базы источника/////////////////////

Функция GetData(Data, BeginningDate, EndDate)    
    
НачалоПериода = ЗначениеИзСтрокиВнутр(BeginningDate);
КонецПериода = ЗначениеИзСтрокиВнутр(EndDate);

    Структура = Десериализовать(Data);//, BeginningDate, EndDate);
    СтруктураДанных = Новый Структура;
    Запрос = Новый Запрос;
    //Запрос.УстановитьПараметр("НачалоПериода", BeginningDate);//Дата('2021.09.29 00:00:00'));
    //Запрос.УстановитьПараметр("КонецПериода", EndDate); //Дата('2021.09.30 00:00:00'));
    Запрос.Текст = 



///////Код из обработчика 

&НаСервере
Функция ВыполнитьЗагрузкуНаСервере()
    
    BeginningDate = ЗначениеВСтрокуВнутр(НачалоПериода);
    EndDate = ЗначениеВСтрокуВнутр(КонецПериода);
     
    Счетчик = 1;
        
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Данные", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150)));    
    
    Соединение = WSСсылки.GetDataDoc.СоздатьWSПрокси("http://localhost/ws/DocCompare", "WebDoc", "WebDocSoap");
    Соединение.Пользователь = "";
    Соединение.Пароль = "";
    
    Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("GetData");
    
    СтруктураДанных = Новый Структура;
    СтруктураДанных.Вставить("ТаблицаДанных", ТЗ);
    Хранилище = Новый ХранилищеЗначения(СтруктураДанных, Новый СжатиеДанных(9));
    Ответ = Соединение.GetData(Сериализовать(Хранилище), BeginningDate , EndDate);
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот