Теория обмена, как правильно спроектировать механизм обмена?

1. bubus 13.12.15 16:23 Сейчас в теме
Привет! Вопрос такой. Как бы вы реализовали обмен мобильного приложения со стационарной базой 1С, например Ут 10.3 С приходом 8.3.7 можно JSON я так понимаю, который позиционируется как замена олдовому xml. Но суть не в этом, как сделать полноценный обмен между моб. и стационарной базой? Выгружаю я к примеру из стационарки в мобильную базу файл со справочниками номенклатура и контрагенты. Все прелестно, но вдруг на моб. агент затрет пару контриков или номенклатур? Как бы вы сделали проверку "синхронизованности" номенклатуры на стационарной и моб. конфигурациях? При загрузке в моб. версию тупо проверять весь список, что есть а чего затерли?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dj_serega 393 13.12.15 17:58 Сейчас в теме
(1) bubus, Так почему не запретить изменение на мобильном?
3. bubus 13.12.15 21:01 Сейчас в теме
Ну это же теория))) И потом, к примеру все запретили агенту, но одна номенклатура ушла из оборота. Надо ее же с моб. удалить тоже. Опять все номенклатуру скидывать и проверять по элементно?
4. dj_serega 393 13.12.15 22:20 Сейчас в теме
(3) bubus, Я такое через xml передаю. Чтото типа:
<УдалениеОбъектов>
<ОбъектУдаления GUID=sdfsfs-dsf34-fs ТипОбъекта="СправочникСсылка.Номенклатура">
<ОбъектУдаления GUID=wdf3sd-sdf3f-fd ТипОбъекта="СправочникСсылка.Номенклатура">
</>
5. reazek 14.12.15 09:52 Сейчас в теме
(3) А почему бы не реализовать нечто типа планов обмена , в который писать изменения в основной конфиге, потом анализировать данные при обмене с мобильной базой?
Запрет кастати насколько я помню можно сделать для интерактивного изменения - т.е. вручную изменить определенные реквизиты не смогет, программно все будет ок.
Либо грузить только нужные элементы клиентов - нафига например мобильному агенту поставщики....
6. NightGod 13.01.16 10:57 Сейчас в теме
Сделал обмен через веб-сервисы и планы обмена, если интересно могу показать.
9. dj_serega 393 14.01.16 20:39 Сейчас в теме
(6) NightGod,
планы обмена
я планы обмена не использую, очень много багов всплыло. Решил через рег.св. куда регистрирую ссылки на обмен.
15. NightGod 27.01.16 10:36 Сейчас в теме
Код мобильного приложения

&НаСервере
Процедура ОбменЧерезПланыНаСервере()
	
	Соединение = WSСсылки.ObmenPoPlanamWending.СоздатьWSПрокси("ObmenPoPlanamWending","ObmenPoPlanamWending","ObmenPoPlanamWendingSoap"); //ВсСыслка
	Операция   = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("Sync"); //ВебСервис 	
	
	ТекстХМЛ = СформироватьСообщениеСерверу();
	КодУзлаОтправителя = ПланыОбмена.WendingExchang.ЭтотУзел().Код;
	
	СтруктураПосылаемыхДанных = Новый Структура;
	СтруктураПосылаемыхДанных.Вставить("ТекстХМЛ",ТекстХМЛ);
	СтруктураПосылаемыхДанных.Вставить("КодУзлаОтправителя",КодУзлаОтправителя);
	
	Данные = Новый ХранилищеЗначения(СтруктураПосылаемыхДанных, Новый СжатиеДанных(9)); 
	Ответ = Соединение.Sync(Данные);
	ПринятьИзменениеПоПлану(Ответ.Получить());
	
КонецПроцедуры

&НаСервере
Функция СформироватьСообщениеСерверу()
	ЗаписьХМЛ = Новый ЗаписьXML; 
	ЗаписьХМЛ.УстановитьСтроку(); 
	ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
	Узел = ПланыОбмена.WendingExchang.НайтиПоКоду("ЦБ");
	ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ,Узел); 
	ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел,ЗаписьСообщения.НомерСообщения); 
	Пока ВыборкаИзменений.Следующий() Цикл    
		ОбъектОбмена = ВыборкаИзменений.Получить(); 
		ЗаписатьXML(ЗаписьХМЛ,ОбъектОбмена);    
	КонецЦикла;      
	ЗаписьСообщения.ЗакончитьЗапись();  
    Возврат ЗаписьХМЛ.Закрыть();   
КонецФункции

&НаСервере
Процедура ПринятьИзменениеПоПлану(СтруктураПосылаемыхДанных) 	
	ТекстХМЛ = СтруктураПосылаемыхДанных.ТекстХМЛ;
	ТекстОшибки = СтруктураПосылаемыхДанных.ТекстОшибки;
	Если Не ТекстОшибки = "" тогда
		Сообщить("Произошла ошибка");
		Возврат;
	КонецЕсли;	
	ЧтениеХМЛ = Новый ЧтениеXML; 
	ЧтениеХМЛ.УстановитьСтроку(ТекстХМЛ); 
	ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();  
	ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);      
	Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл      
		Данные = ПрочитатьXML(ЧтениеСообщения.ЧтениеXML); 
		//Данные = ПрочитатьXML(ЧтениеХМЛ);  
		Если Не Данные = Неопределено Тогда 
			Если Не ТипЗнч(Данные) = Тип("ДокументОбъект.ДанныеОтТП") Тогда 
				Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; 
				Данные.ОбменДанными.Загрузка = Истина;				
				Данные.Записать();  
			КонецЕсли;
		КонецЕсли; 
	КонецЦикла;  
	ЧтениеСообщения.ЗакончитьЧтение();
КонецПроцедуры

Показать
16. NightGod 27.01.16 10:38 Сейчас в теме
Код веб сервиса В центральной базе

Функция Sync(DataStorage)
	ТекстОшибки = "";
	Попытка
		ТекстХМЛ = ЗарегистрироватьВыгрузку(DataStorage.Получить());
	Исключение
		ТекстОшибки = ОписаниеОшибки();
	КонецПопытки;
	
	СтруктураПосылаемыхДанных = Новый Структура;
	СтруктураПосылаемыхДанных.Вставить("ТекстХМЛ",ТекстХМЛ);
	СтруктураПосылаемыхДанных.Вставить("ТекстОшибки",ТекстОшибки);

	Возврат Новый ХранилищеЗначения(СтруктураПосылаемыхДанных, Новый СжатиеДанных(9)); 
КонецФункции

Функция ЗарегистрироватьВыгрузку(СтруктураПосылаемыхДанных)
	
	КодУзлаОтправителя = СтруктураПосылаемыхДанных.КодУзлаОтправителя;
	ТекстХМЛ = СтруктураПосылаемыхДанных.ТекстХМЛ;
	
	УзелПолучатель = ПланыОбмена.WendingExchang.НайтиПоКоду(КодУзлаОтправителя);
	
	Если Не ЗначениеЗаполнено(УзелПолучатель) Тогда 
		УзелПолучатель = ПланыОбмена.WendingExchang.СоздатьУзел();
		УзелПолучатель.Код = КодУзлаОтправителя;
		УзелПолучатель.Наименование = КодУзлаОтправителя;
		//УзелПолучатель.ПрефиксИБ = ПолучитьНомерИБ();
		УзелПолучатель.Записать();
		ПланыОбмена.ЗарегистрироватьИзменения(УзелПолучатель.Ссылка);		
	КонецЕсли;	
	
 	ЧтениеХМЛ = Новый ЧтениеXML; 
 	ЧтениеХМЛ.УстановитьСтроку(ТекстХМЛ); 	
	ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); 
	ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);  
	Узел = ЧтениеСообщения.Отправитель;	
	
	ПрефиксИБ = УзелПолучатель.ПрефиксИБ;
	ПользовательИБ = УзелПолучатель.Пользователь;
	Пока ВозможностьЧтенияXML(ЧтениеХМЛ) ИЛИ (ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеХМЛ.Имя = "info") Цикл         
		Если ЧтениеХМЛ.Имя = "info" Тогда
			// читаем дополнительную информацию
			ЧтениеХМЛ.Прочитать();
			// значением свойства ЧтениеXML.ТипУзла должно быть значение ТипУзлаXML.Текст
			// ЧтениеXML.Значение должна быть строка "дополнительная информация"
			ДопИнформация = ЧтениеХМЛ.Значение;            
			// читаем завершение дополнительной информации
			ЧтениеХМЛ.Прочитать();            
			// переходим к следующему элементу
			ЧтениеХМЛ.Прочитать();            
		Иначе            
			// Читаем элемент данных стандартным способом
			ЭлементДанных = ПрочитатьXML(ЧтениеХМЛ);
			Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.ДанныеОтТП") Тогда 
				ЭлементДанных.Номер = ПрефиксИБ + ЭлементДанных.Номер;
				ЭлементДанных.Ответственный = ПользовательИБ;
				ЭлементДанных.Записать();
			КонецЕсли;        
		КонецЕсли;         
	КонецЦикла;
	
	ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,ЧтениеСообщения.НомерПринятого); 
	ЧтениеСообщения.ЗакончитьЧтение(); 
	
	ЗаписьХМЛ = Новый ЗаписьXML;  
	ЗаписьХМЛ.УстановитьСтроку(); 
	ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();	
	ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ,Узел); 
	
	ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел,ЗаписьСообщения.НомерСообщения);  
	Пока ВыборкаИзменений.Следующий() Цикл    
		ОбъектОбмена = ВыборкаИзменений.Получить();  
		ЗаписатьXML(ЗаписьХМЛ,ОбъектОбмена);    
	КонецЦикла;     
	ЗаписьСообщения.ЗакончитьЗапись();  
	Возврат ЗаписьХМЛ.Закрыть();
КонецФункции 
Показать
11. bubus 16.01.16 10:04 Сейчас в теме
(6) NightGod, покажите пожалуйста. Я раньше вообще с ними не сталкивался, обмены делал только через КД. Сейчас у Радченко почитал, не врубился вообще что к чему
14. PRoman 73 26.01.16 13:20 Сейчас в теме
Сделал через XDTO, планы обмена, регистры сведений и обращение по веб сервису

(6) NightGod, Покажи, интересно :)
7. bubus 14.01.16 09:06 Сейчас в теме
У меня вот конфы разные. Моб одна, УТП другая. тут планы обмена не пойдут. И вебсервисы не очень как то, http интересней и проще.
8. NightGod 14.01.16 15:53 Сейчас в теме
Если конфы разные, то планы обмена подойдут ;) Не путайте планы обмена и РИБ
10. NightGod 15.01.16 08:18 Сейчас в теме
Какие баги например? Можно подробнее?
12. dj_serega 393 16.01.16 15:28 Сейчас в теме
(10) NightGod, Давно было. Может и поправили. Я документы регистрировал через "ПланыОбмена.ЗарегистрироватьИзменения(Узел, Ссылка)". Регистрировались ВСЕ объекты типа.
13. flyer 233 18.01.16 10:10 Сейчас в теме
по своему опыту у меня так получилось:
1) у одного из клиентов большая база больше 10 000 позиций и каждый раз данные увеличиваются. в этом случае оставил планы обмена и использую http, обычные веб сервисы убрал. 2) у других сейчас использую практику (если немного справочников) на мобилу гружу все справочники и меняю их если были изменения. спр. товаров стараюсь грузить в регистр сведений. все изменения на мобиле фиксирую в регистр сведений и выгружаю эти данные.
dj_serega; +1 Ответить
17. NightGod 27.01.16 10:47 Сейчас в теме
Создаем планы обмена в центральной базе и в базе мобильного приложений. Состав планов и структура передаваемых данных идентична. В центральной базе код предопределенного узла делаем "ЦБ". Создаем веб сервис и WS ссылку в центральной базе и ws ссылку в мобильной. Типы входящего и исходящего значений веб сервиса - ValueStorage (http://v8.1c.ru/8.1/data/core). Подробнее про веб-сервисы и ws-ссылки лучше посмотреть в бесплатных курсах на (не реклама ;), сам там смотрел)
18. PRoman 73 28.01.16 09:26 Сейчас в теме
(17) NightGod, Спасибо! Выглядит просто, пожалуй позаимствую пару строчек ;)
Оставьте свое сообщение

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