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

Публикация № 1116527

Разработка - Обмен данными 1С - Перенос данных из 1C8 в 1C8

Web Сервисы

Ознакомительная статья о том, как загружать\выгружать данные с одной базы в другую, используя 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();
	Хранилище = Подключение.ОстаткиТоваровНаСкладах(НачПериод,КонПериод,Склад);
	Таблица = Хранилище.Получить();
	Возврат Таблица;
КонецФункции

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

Специальные предложения

Лучшие комментарии
37. VPanin56 72 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С
wunderland; maksal; user5300; +3 Ответить
Остальные комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Boyborodin 03.09.19 08:18 Сейчас в теме
Советую делать один параметр входящий типа string и исходящий такой же. В строку кидать текст JSON. В JSON можно запаковывать любое количество параметров, даже таблицы значений. Без муторной работы с XDTO, а сама запаковка и распаковка занимает несколько строк кода. Так же если при доработке придется добавлять входные/выходные параметры сам web-сервис можно уже не перенастраивать.
wunderland; user774630; danjer74; duhin; ybatiaev; hakerxp; Jeka44; Lazio; kuzyara; marat3581525; TODD22; Robbi; wowik; Jokemas; TeMochkiN; Glebb_NSK; Fox-trot; user5300; +18 1 Ответить
2. user5300 365 03.09.19 08:22 Сейчас в теме
(1) Хорошая идея! Спасибо за совет !)
3. AlX0id 03.09.19 08:37 Сейчас в теме
(1)
Тут только один нюанс - в пользу использования того же XDTO - не будет автоматической проверки корректности того, что же вы запихали в этот JSON..
В принципе, сам использую похожий способ - для работы с внешними источниками - на вход беру строки xml, кодированные в base64. Не очень красиво, зато внешним кодерам удобно и понятно.
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. Можно еще пожать, если данные объемные.
wunderland; duhin; ybatiaev; user5300; wowik; +5 Ответить
7. user5300 365 03.09.19 09:05 Сейчас в теме
(6) Кстати, а если структура баз отличается ? Допустим если выгрузить физ лица с ЗУП в УТ, у них же разные структуры... Реквизиты и тд., Ошибки не будет ?)
8. Boyborodin 03.09.19 09:14 Сейчас в теме
(7)

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Возврат новый ХранилищеДанных(ТабличнаяЧасть,Новый СжатиеДанных(9));
35. frkbvfnjh 574 25.03.20 08:09 Сейчас в теме
34. user5300 365 25.03.20 08:06 Сейчас в теме
(32) У каждого свои подходы для решения задач, это всего лишь пример того как можно использовать веб сервисы )
36. frkbvfnjh 574 25.03.20 08:10 Сейчас в теме
(34) да согласен, но боль от использования веб-сервисов не утихнет никогда
38. Sergik_D 17 25.03.20 18:04 Сейчас в теме
(32) У меня 1с обменивается с приложением на Android через Web-сервисы. Думал переходить на HTTP, но не нашел информации о преимуществах. Если есть такая информация, буду благодарен за ссылки. Вот это прям моё: "При плохом интернете или большом объеме данных web-сервис тупо умирает, часто вызывая блокировки"
37. VPanin56 72 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С
wunderland; maksal; user5300; +3 Ответить
Оставьте свое сообщение

См. также

Механизмы проведения документов при обмене по универсальному формату

Статья Программист Нет файла v8 Бесплатно (free) Перенос данных из 1C8 в 1C8 БСП (Библиотека стандартных подсистем)

Как проводятся документы при обмене по универсальному формату. Пример доработки типовых правил обмена с переносом состояния документа: проведен/не поведен/пометка удаления.

04.03.2020    1649    partizand    5       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Автоматический обмен при появлении файла, по регламентному заданию создаёт файл выгрузки, даже если файл загрузки не появлялся

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Перенос данных из 1C8 в 1C8

Заметил, что "Автоматический обмен при появлении файла" каждый раз создаёт файл выгрузки данных, даже если файл для загрузки данных не появлялся. Данный код проверит, что файл появился, только после чего создаст файл выгрузки данных.

20.02.2020    944    wau8824ru    4       

Онлайн-интенсив "1C:Предприятие для программистов: Бухгалтерские задачи" с 22 июня по 8 июля 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для решения задач бухгалтерского учета. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Бухгалтерия” и прочих прикладных решений, в которых реализованы соответствующие механизмы для автоматизации бухгалтерских задач.

4900 рублей

Бесшовная интеграция через обмен по правилам - миссия выполнима

Статья Программист Нет файла v8 ДО ERP2 Бесплатно (free) Практика программирования Интеграция Перенос данных из 1C8 в 1C8

При организации работы с договорами в ERP 2, с помощью бесшовной интеграции с Документооборотом, «типовой» методикой является создание договоров в ЕРП. После создания договора в ЕРП, пользователь «отправляет» договор в ДО по бесшовной интеграции. На практике, весьма часто пользователи хотят видеть обратную схему: вводить договоры в ДО и при этом получать их в ЕРП без «лишних телодвижений». Или даже вводить их независимо в обеих системах – так, чтобы потом «стыковать» по каким-то определенным правилам.

24.01.2020    2232    e-9    2       

Конвертация ставок НДС: из Перечисления в Справочник (правила обмена в конвертации 2.0)

Статья Программист Нет файла v8 КД Россия НДС Бесплатно (free) Перенос данных из 1C8 в 1C8

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

09.11.2019    3670    vikulinamari    1       

Время учиться: до 3 апреля скидки на курсы до 40%! Промо

Для тех, кто решил провести самоизоляцию с пользой, Инфостарт запускает акцию «Время учиться». С 30 марта до 3 апреля 2020 года наши курсы и видеозаписи докладов INFOSTART EVENT 2019 INCEPTION продаются со скидкой!

Настройка синхронизации между конфигурациями Бухгалтерия для Беларуси 2.1 и Управление торговлей для Беларуси 3.4

Статья no Нет файла v8 БП3.0 УТ11 Беларусь Бесплатно (free) Перенос данных из 1C8 в 1C8

Пошаговое описание настройки типового обмена между конфигурациями Бухгалтерия для Беларуси 2.1 и Управление торговлей для Беларуси 3.4

21.10.2019    4425    OlesiaM    1       

Объединение организаций в ЗУП при реорганизации с переносом данных из ЗУП 2.5 в ЗУП 3.1

Статья Программист Нет файла v8 v8::СПР ЗУП2.5 ЗУП3.x БУ Бесплатно (free) Зарплата Управление персоналом (HRM) Перенос данных из 1C8 в 1C8

В этой статье описан опыт объединения 2-х организаций при реорганизации в ЗУП 3.1 с переносом данных одной организации из ЗУП 2.5 (релизы баз более или менее свежие, но не самые последние на момент перехода, примерно двух- и трехмесячной давности). За основу было взято решение из этой статьи https://infostart.ru/public/833658/, в которой описан алгоритм решения задачи, за что автору статьи огромная благодарность! Здесь же даны некоторые комментарии и пояснения к алгоритму переноса и объединения, описаны выявленные мною ошибки. Также приведена небольшая инструкция по использованию обработки ирПодборИОбработкаОбъектовБД — она будет полезна для пользователей — «не программистов», впервые работающих в не управляемых формах.

09.10.2019    4495    Neti    1       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

EnterpriseData: простой способ защиты данных в базе получателя при одностороннем обмене

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Перенос данных из 1C8 в 1C8

Очень часто бухгалтеры ругаются, когда уже отраженные документы в бухгалтерском учета меняются сотрудниками.

04.10.2019    4529    handscenter    12       

Дозагрузка измененных данных при помощи КД2

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Иногда во время каких-то регламентных действий по обслуживанию базы(например, при обновлении измененной базы на много релизов) требуется обеспечить бесперебойность работы пользователей. Если конфигурации баз до и после идентичны, то тут сам Бог велел воспользоваться обработкой "ВыгрузкаЗагрузкаДанныхXML", либо такой же но с отбором(на Инфостарте есть такая). Но что если конфигурации баз различаются/значительно различаются? Ниже опишу, как вышел из положения я.

12.09.2019    3199    al_zzz    2       

Базовый курс для начинающих 1С-программистов. Онлайн-интенсив со 2 июня по 2 июля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500-9500 рублей

Конвертация Данных. Нюансы использования конструкции "НеЗамещатьОбъект = Истина" в обработчике события "ПриЗагрузке"

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8

У конвертации данных есть «особенности», которые «пьют кровь» программистов. Эта статья про очередную обнаруженную «особенность».

10.09.2019    5736    ivanek    21       

Выгрузка и загрузка документов с движениями

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8

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

02.09.2019    4283    human_new    7       

Онлайн-курс «Автоматизация процессов управления МТО: методика сбора и формализации требований» с 1 апреля по 13 мая 2020 года. Промо

Цель курса - повысить полноту и качество сбора и формализации требований к автоматизации процессов управления материально-техническим обеспечением. Курс основан на процессном подходе, позволяет в полном объеме выявить и учесть все факторы, влияющие на специфику процессов управления МТО. Участники курса получают теоретические знания в области организации процессов управления МТО и готовый инструментарий для сбора и формализации требований по автоматизации этих процессов (шаблоны, опросники, модели).

40000 рублей

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Статья Программист Нет файла v8 v8::УФ 1cv8.cf ОС Бесплатно (free) Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8 Разработка

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    9159    ids79    7       

Перенос дополнительных реквизитов в Конвертации данных 2.0

Статья Программист Нет файла v8 КД Россия УУ Бесплатно (free) Перенос данных из 1C8 в 1C8

Пример написания правил обмена (КД 2.0) для переноса дополнительных реквизитов справочника "Номенклатура", в том числе перенос ПВХ с разными типами значений.

13.08.2019    6713    vikulinamari    7       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Синхронизация данных между 1С: ЗУП 3.1 и Бухгалтерией 3.0 через файл

Статья Программист Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Перенос данных из 1C8 в 1C8

Публикация описывает последовательность синхронизации данных между 1С: ЗУП 3.1 и Бухгалтерией 3.0 через файл.

23.04.2019    8138    saveliev    3       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 20 апреля по 15 мая 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

Как прикрутить ГУИД к регистру сведений

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

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

16.04.2019    14379    m-rv    16       

Работа с ComОбъектом 1С 8.2; 8.3

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Перенос данных из 1C8 в 1C8

Определение типов и значений через COM соединение между конфигурациями.

15.04.2019    15983    vik070777    12       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Обмен данными между УПП 1.3.64.х и БП 3.0 по расписанию через Универсальный обмен данными + План обмена

Статья Программист Нет файла v8 УПП1 Россия Windows Бесплатно (free) Обмен через XML Перенос данных из 1C8 в 1C8

Описание доработки конфигурации УПП 1.3.64.х для выполнения обмена данными по расписанию в БП 3.0. через обработку Универсальный Обмен Данными XML и План Обмена.

09.04.2019    5167    mrcamomile    12       

RabbitMQ + Конвертация Данных 3.0

Статья Системный администратор Программист Бизнес-аналитик Руководитель проекта Нет файла v8 КД Бесплатно (free) Внешние источники данных Обмен через XML Интеграция Перенос данных из 1C8 в 1C8

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

21.03.2019    19456    barelpro    82       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

Конвертация данных 2.1: поиск по условию

Статья Программист Нет файла v8 КД ERP2 Windows Бесплатно (free) Перенос данных из 1C8 в 1C8

Задача. При обмене документами "Реализация товаров и услуг", поиск контрагента осуществлять по полям "ИНН", "КПП". Если вид договора с комиссионером, то поиск осуществлять по полям "ИНН", "КПП", "Наименование".

15.01.2019    10534    wowik    13       

Заметки КД 2.1: Как передать файл, динамически создаваемый в источнике, в справочник присоединенных файлов приемника

Статья Программист Нет файла v8 КД Россия Windows Бесплатно (free) Перенос данных из 1C8 в 1C8

В БП 3.0 есть документ "Книга Продаж Для Передачи В ЭлектронномВиде" из которого выгружается XML файл. Задача: Нужно из БП 3.0 посредством правил обмена, вместе с документом книга продаж сформировать и перенести XML файл в базу приемник. В приемнике файл будет храниться в справочнике "Книга Продаж Присоединенные Файлы".

10.10.2018    7610    Viktor_Ermakov    6       

Коронавирус COVID-19. Промо

Коронавирус COVID-19. Статистика по странам

Бесплатно

Планы обмена 1С

Статья Программист Нет файла v8 Бесплатно (free) Перенос данных из 1C8 в 1C8 Интеграция

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

10.09.2018    44690    zhichkin    25       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Альтернатива переноса ТЗ в конвертации данных 2.1

Статья Программист Нет файла v8 КД Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Здравствуйте уважаемые. Решил выложить альтернативный способ переноса данных в конвертации данных из источника к приемнику, с последующим сбором их в ТЗ в месте ПослеЗагрузки. Т.е.можно готовый перенесенный объект доработать либо создать что-то еще на базе данных. Метод сам разработан с учетом простого понимания Конвертации без использования всех её многочисленных тонкостей и сложностей. В примере рассматривается перенос Операции. И вот еще что. Я не привожу тут готовое решение, я всего лишь показываю концепцию того, как можно делать в КД. Без использования глобальных переменных.

20.08.2018    5792    dinopopyys    6