Синхронизация через веб-сервисы

25.04.14

Интеграция - WEB-интеграция

Как синхронизировать основную базу 1С с мобильным приложением веб-сервисами? Как передать таблицу значений через веб-сервис? На эти и другие вопросы мы найдем ответы в этой публикации.

Скачать исходный код

Наименование Файл Версия Размер
ЦБ
.cf 9,34Kb
42
.cf 9,34Kb 42 Скачать
МП
.cf 9,41Kb
36
.cf 9,41Kb 36 Скачать

Довелось как-то поучаствовать в одном проекте. Суть участия была настройка синхронизации между мобильным устройством на Android и основной базой. Одним из главных условий было динамическое количество устройств, поэтому планы обмена не подходили. Решено было использовать веб-сервисы.

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

Итак, создадим в чистой конфигурации справочники Номенклатура и, например, Категории. В номенклатуру добавим реквизит Категория с типом СправочникСсылка.Категории.

screen1

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

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

Итак, наша задача передать данные обоих справочников на мобильное устройство с учетом того, что реквизит справочника является ссылкой на элемент другого справочника. Введем немножко сокращений: мобильное приложение - МП, главная база - ЦБ(центральная база).

В ЦБ создаем объект конфигурации XDTO-пакет следующего вида

screen2

В данном пакете мы описываем структуру передаваемых нами данных. Свойства типов Code и Name у нас имеют тип string и означают Код и Наименование соответственно. Сами типы CategoryString и ProducString соответствуют строке элемента справочника. Типы ProductTable и CategoryTable представляют из себя массивы строк соответствующих справочников. Для того, чтобы тип стал массивом, в свойствах его свойства(ProductStr например) необходимо максимальное значение указать как "-1". Свойства CategoryStr и ProductStr имеют тип CategoryString и ProducString соответственно. И последнее оставшееся свойство это Category, которое имеет тип CategoryStr. Далее нам необходимо создать веб-сервис и операцию с типом возвращаемого объекта ProductTable. почему именно с этим типом, потому что он содержит необходимые нам категории.

screen3

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

Функция Synchronize()
	//получим запросом все элементы справочника Номенклатура, кроме помеченных на удаление
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	Номенклатура.Код,
	               |	Номенклатура.Наименование,
	               |	Номенклатура.Категория
	               |ИЗ
	               |	Справочник.Номенклатура КАК Номенклатура
	               |ГДЕ
	               |	НЕ Номенклатура.ПометкаУдаления";
	//получим XDTO типы
	ТипСтрокаНоменклатуры = ФабрикаXDTO.Тип("http://synchro.ru","ProductString");
	ТипТаблицаНоменклатуры = ФабрикаXDTO.Тип("http://synchro.ru","ProductTable");
	
	ТипСтрокаКатегории = ФабрикаXDTO.Тип("http://synchro.ru","CategoryString");
	
	//далее создадим таблицу номенклатуры
	ТаблицаНоменклатуры = ФабрикаXDTO.Создать(ТипТаблицаНоменклатуры);
	
	//начнем теперь эту таблицу заполнять результатом запроса
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	
	Пока РезультатЗапроса.Следующий() Цикл
		//создадим строчку номенклатуры
		СтрокаНоменклатуры = ФабрикаXDTO.Создать(ТипСтрокаНоменклатуры);
		//и заполним свойства
		СтрокаНоменклатуры.Code = РезультатЗапроса.Код;
		СтрокаНоменклатуры.Name = РезультатЗапроса.Наименование;
		
		//теперь нам надо заполнить свойство Category, но мы помним, что у нас там созданный тип, 
		//поэтому создадим строчку категории
		СтрокаКатегории = ФабрикаXDTO.Создать(ТипСтрокаКатегории);
		//и тоже заполним свойства
		ТекущаяКатегория = РезультатЗапроса.Категория;
		СтрокаКатегории.Code =ТекущаяКатегория.Код;
		СтрокаКатегории.Name = ТекущаяКатегория.Наименование;
		
		//ну и добавим нашу категорию в строку номенклатуры
		
		СтрокаНоменклатуры.Category = СтрокаКатегории;
		
		//и в конце всех операций добавим нашу строчку номенклатуры в таблицу в свойство ProductStr
		ТаблицаНоменклатуры.ProductStr.Добавить(СтрокаНоменклатуры);
	КонецЦикла;
	
	//и после цикла заполнения функция должна вернуть результат, т.е. таблицу номенклатуры
	
	Возврат ТаблицаНоменклатуры;
КонецФункции

Теперь наш веб-сервис готов к публикации и после этого, можно приступать к настройке МП. Напомню, там мы на данный момент имеем только два справочника аналогичных ЦБ. Для простоты, в МП создадим объект обработка из которой и будем вызывать нашу синхронизацию. Добавим на форме обработки всего одну кнопку, которая и будет вызывать процедуру синхронизации, на это подробно останавливаться не буду. Код процедуры ниже:

&НаКлиенте
Процедура Синхронизировать(Команда)
	СинхронизироватьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СинхронизироватьНаСервере()
	//создаем определение нашего веб-сервиса
	Определение = Новый WSОпределения(ЗдесьАдресWSDL);
	//по полученному определению создаем прокси
	Прокси = Новый WSПрокси(Определение, "http://synchro.ru","Synchronyzer","SynchronyzerSoap",,10);
	
	//теперь вызываем нашу операцию и получаем свойство ProductStr
	ТаблицаНоменклатуры = Прокси.Synchronize().ProductStr;
	
	//теперь разберем полученный результат
	Для Каждого Номенклатура Из ТаблицаНоменклатуры Цикл
		//сначала получим категорию номенклатуры и проверим по коду, есть ли она у нас в базе
		ПолученнаяКатегория = Номенклатура.Category;
		КатегорияВБазе = Справочники.Категории.НайтиПоКоду(ПолученнаяКатегория.Code);
		Если КатегорияВБазе.Пустая() Тогда
			//запишем категорию в базу
			НоваяКатегория = Справочники.Категории.СоздатьЭлемент();
			НоваяКатегория.Код = ПолученнаяКатегория.Code;
			НоваяКатегория.Наименование = ПолученнаяКатегория.Name;
			НоваяКатегория.Записать();
			КатегорияВБазе = НоваяКатегория.Ссылка;
		КонецЕсли;
		
		//теперь поищем номенклатуру в справочнике
		НоменклатураВБазе = Справочники.Номенклатура.НайтиПоКоду(Номенклатура.Code);
		Если НоменклатураВБазе.Пустая() Тогда
			//запишем номенклатуру в базу
			ТекНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
		Иначе
			//или исправим существующую
			ТекНоменклатура = НоменклатураВБазе.ПолучитьОбъект();
		КонецЕсли;
		ТекНоменклатура.Код = Номенклатура.Code;
		ТекНоменклатура.Наименование = Номенклатура.Name;
		ТекНоменклатура.Категория = КатегорияВБазе;
		ТекНоменклатура.Записать();
	КонецЦикла;
КонецПроцедуры

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

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15910    14    18    

12

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17845    6    15    

13

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25854    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88877    162    216    

318

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16464    42    49    

23
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. wtlz 272 25.04.14 13:17 Сейчас в теме
Ну вообще-то можно было просто сериализовать при выдаче и десериализовать при приеме.
и как-то странно это появилось сразу после курса "Мобильное приложение" )))) - там разобрано более всесторонне.
Но все равно молодец.
Да - и скрины можно по-меньше делать, а то много пустого места по центру остается.
kasper076; +1 Ответить
2. jigourt 31 25.04.14 13:47 Сейчас в теме
(1) wtlz,
это появилось сразу после курса "Мобильное приложение"

не более чем совпадение и с курсами никак не связано, просто действительно стечение обстоятельств )) вообще я подумал о том же и признаюсь честно, курсы еще сам не смотрел ))
3. Bukaska 140 25.04.14 15:00 Сейчас в теме
(1) wtlz, Всё равно материал редкий. Так что только +
4. user_2010 891 24.06.16 11:28 Сейчас в теме
вопрос может быть неправильный... но нет четкого понимания - только мысли...

может быть не нужно создавать свои XDTO для организации обмена?
у нас, в каждой 1С есть пространство имен в котором определены типы всех объектов? его и использовать?

или все-таки нужно создавать свои XDTO?
5. Rollam 31.05.17 11:59 Сейчас в теме
Сами типы CategoryString и ProducString соответствуют строке элемента справочника.

А можно поподробнее? Какой именно тип нужно указать, непонятно.
6. evgaid 145 18.04.19 12:46 Сейчас в теме
АдресWSDL - какой он имеет вид
Оставьте свое сообщение