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

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С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2742    3    0    

10

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

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

60000 руб.

07.05.2019    34836    68    45    

27

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

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

57600 руб.

26.11.2024    2514    2    3    

5

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

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

36000 руб.

03.08.2020    19154    23    22    

20

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

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

12000 руб.

02.02.2021    18924    54    50    

31

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    935    4    2    

6

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    4249    3    2    

4

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

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

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

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

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

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