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

25.04.14

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ЦБ
.cf 9,34Kb
42
42 Скачать (1 SM) Купить за 1 850 руб.
МП
.cf 9,41Kb
36
36 Скачать (1 SM) Купить за 1 850 руб.

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

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

См. также

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

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

57600 руб.

26.11.2024    830    1    1    

4

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

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

36000 руб.

03.08.2020    18172    20    22    

18

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20364    13    19    

18

Обмен с ГосИС 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    91666    179    217    

333
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wtlz 275 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 955 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 - какой он имеет вид
Оставьте свое сообщение