Содержание:
Файлы материала
Обработка содержит примеры команд по работе с веб-сервисом DMService, которые описаны в данной статье.
Как устроена интеграция с ДО
Для интеграции с документооборотом через веб-сервисы существует специальная библиотека, которая так и называется «Библиотека интеграции с документооборотом» (БИД), ее можно скачать с сайта 1С и развернуть в виде конфигурации с предустановленными примерами. Последняя версия библиотеки содержит возможности, как для интеграции с ДО 2.1 (веб-сервис DMService), так и ДО 3 (веб-сервис DMILService, который кстати в отличии от DMService нужно публиковать с обоих сторон обмена). Более подробно из официальных источников можно почитать в статьях: БИД 1.1.18, БИД 3.0.1, Механизм интеграции. Так же, полный перечень веб-сервисов с подробным описанием можно посмотреть в разделе Главное -> Описание веб-сервисов 1С: Документооборота данных библиотек.

Кроме того, БИД уже встроена в большинство типовых конфигурации (Например ЗУП 3.1 и БП 3.0). Для примера в конфигураторе ЗУП поставим фильтр по подсистемам и посмотрим, какие объекты метаданных входят состав библиотеки. Видим, что они делятся на ДО2 и ДО3.

В данной статья будут рассмотрены некоторые возможности веб-сервиса DMService, которые были использованы на практике. Кроме того, примеры можно найти на ИТС в описании БИД по ссылкам приведённым выше.
Примеры по работе с веб-сервисом DMService используя БИД
Обращение к веб-сервисам ДО 2 в примерах тестировалось из конфигурации ЗУП 3.1. Для работы примеров, необходимо в разделе Администрирование -> Интеграция с 1С:Документооборотом указать URL опубликованного веб-сервиса «Документооборота».

1. Подключение к ДО
Пример подключения к ДО с запросом логина и пароля при первом запуске. Полученные данные сохранятся в параметрах сеанса и будут использованы в дальнейшем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
&НаКлиенте Процедура ПодключитьсяКДО(Команда) // Установка подключение к ДО с запросом Логина и Пароля от пользователя ОписаниеОповещения = Новый ОписаниеОповещения("ПодключениеКДОЗавершение", ЭтотОбъект); ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ПроверитьПодключение(ОписаниеОповещения, ЭтотОбъект, Истина); КонецПроцедуры &НаКлиенте Процедура ПодключениеКДОЗавершение(Результат, Параметры) Экспорт Если Результат = Неопределено Тогда Возврат; КонецЕсли; Сообщить("Подключение установлено"); КонецПроцедуры |
Так же можно прописать данные логина и пароля напрямую в параметры сеанса, без запроса данных от пользователя.
1 2 3 |
ПараметрыСеанса.ИнтеграцияС1СДокументооборотИмяПользователя = "Администратор"; ПараметрыСеанса.ИнтеграцияС1СДокументооборотПароль = ""; |
2. Создание контрагента в ДО
Упрощённый пример по созданию контрагента в ДО 2 из другой конфигурации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
&НаСервере Процедура СоздатьКонтрагентаВДОНаСервере() ВнешнийОбъект = Объект.Контрагент; Прокси = ИнтеграцияС1СДокументооборотБазоваяФункциональностьПовтИсп.ПолучитьПрокси(); // Создаем объект XDTO (DMCorrespondent - описывает "Контрагента" в документообороте) ОбъектXDTO = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьОбъект(Прокси, "DMCorrespondent"); // Заполниение свойств объекта XDTO ИнтеграцияС1СДокументооборот.ЗаполнитьСвойствоXDTOизСтруктурыРеквизитов(Прокси, ОбъектXDTO, "name", ВнешнийОбъект, "Наименование"); ИнтеграцияС1СДокументооборот.ЗаполнитьСвойствоXDTOизСтруктурыРеквизитов(Прокси, ОбъектXDTO, "fullName", ВнешнийОбъект, "НаименованиеПолное"); ИнтеграцияС1СДокументооборот.ЗаполнитьСвойствоXDTOизСтруктурыРеквизитов(Прокси, ОбъектXDTO, "inn", ВнешнийОбъект, "ИНН"); ИнтеграцияС1СДокументооборот.ЗаполнитьСвойствоXDTOизСтруктурыРеквизитов(Прокси, ОбъектXDTO, "kpp", ВнешнийОбъект, "КПП"); ID = ""; Если ЗначениеЗаполнено(ID) Тогда // Обновление существующего объекта Иначе // Создание нового описания контрагента в документообороте ОбъектXDTO.objectID = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьObjectID(Прокси, ID, "DMCorrespondent"); ОбъектXDTO.name = ВнешнийОбъект.Наименование; // externalObject - заполняется для устновления связей на стороне ДО ВнешнийОбъектXDTO = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьОбъект(Прокси, "ExternalObject"); ВнешнийОбъектXDTO.ID = Строка(ВнешнийОбъект.УникальныйИдентификатор()); ВнешнийОбъектXDTO.type = ВнешнийОбъект.Метаданные().ПолноеИмя(); ВнешнийОбъектXDTO.name = Строка(ВнешнийОбъект); ОбъектXDTO.externalObject = ВнешнийОбъектXDTO; // DMCreateRequest - создает новый объект Документооборота и записывает его Запрос = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьОбъект(Прокси, "DMCreateRequest"); Запрос.object = ОбъектXDTO; Результат = ИнтеграцияС1СДокументооборотБазоваяФункциональность.ВыполнитьЗапрос(Прокси, Запрос); // Проверка результата ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПроверитьВозвратВебСервиса(Прокси, Результат); Сообщить("Контрагент создан в ДО"); КонецЕсли; КонецПроцедуры |
Данный пример не учитывает существующие связи объектов ДО с внешними системами (которые для ДО 2.1 хранятся в регистре сведений «ОбъектыИнтегрированныеСДокументооборотом» на стороне ДО 2).
3. Получение контрагента в ДО по ID
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
&НаСервере Процедура ПолучитьКонтрагентаВДОНаСервере() ВнешнийОбъект = Объект.Контрагент; Прокси = ИнтеграцияС1СДокументооборотБазоваяФункциональностьПовтИсп.ПолучитьПрокси(); // Вариант 1 ОбъектXDTO = ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПолучитьОбъект(Прокси, "DMCorrespondent", Строка(ВнешнийОбъект.УникальныйИдентификатор())); // Вариант 2 - более подробно //Запрос = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьОбъект(Прокси, "DMRetrieveRequest"); //СписокОбъектов = Запрос.objectIDs; // СписокXDTO // //ОбъектИд = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьObjectID(Прокси, Строка(ВнешнийОбъект.УникальныйИдентификатор()), "DMCorrespondent"); //СписокОбъектов.Добавить(ОбъектИд); // //Результат = ИнтеграцияС1СДокументооборотБазоваяФункциональность.ВыполнитьЗапрос(Прокси, Запрос); //ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПроверитьВозвратВебСервиса(Прокси, Результат); // //ОбъектXDTO = Результат.objects[0]; Сообщить("Получен ОбъектXDTO - "+ОбъектXDTO.name); КонецПроцедуры |
4. Поиск контрагента в ДО по имени
1 2 3 4 5 6 7 8 9 10 11 |
&НаСервере Процедура НайтиКонтрагентаВДОНаСервере() ВнешнийОбъект = Объект.Контрагент; Прокси = ИнтеграцияС1СДокументооборотБазоваяФункциональностьПовтИсп.ПолучитьПрокси(); ОбъектXDTO = ИнтеграцияС1СДокументооборотБазоваяФункциональностьВызовСервера.НайтиОбъектВДОПоИмени("DMCorrespondent", ВнешнийОбъект.Наименование); Сообщить("Найден ОбъектXDTO - "+ОбъектXDTO.name); КонецПроцедуры |
5. Получение контрагента ДО с чтением в форму
Если в конфигураторе найти обработку «ИнтеграцияС1СДокументооборот» и раскрыть ветку «Формы», то можно увидеть, что все основные формы документооборота, так же существуют и в конфигурации с БИД.
Пример получения контрагента ДО 2 при помощи встроенных форм. При записи формы будет автоматически установлена связь контрагентов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
&НаКлиенте Процедура ПолучитьКонтрагентаДОВФорму(Команда) ВнешнийОбъект = Объект.Контрагент; ДополнительныеПараметры = Новый Структура; ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьКонтрагентаЗавершение", ЭтотОбъект, ДополнительныеПараметры); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ID", Строка(ВнешнийОбъект.УникальныйИдентификатор())); ОткрытьФорму("Обработка.ИнтеграцияС1СДокументооборот.Форма.Контрагент", ПараметрыФормы,,ВнешнийОбъект.УникальныйИдентификатор(),,,ОписаниеОповещения); КонецПроцедуры &НаКлиенте Процедура СоздатьКонтрагентаЗавершение(Результат, Параметры) Экспорт Если Результат = Неопределено Тогда Возврат; КонецЕсли; Сообщить("Контрагент записан"); КонецПроцедуры |
6. Очистка связи контрагента в ДО
Удаление связи контрагента текущей конфигурации с контрагентом ДО 2
1 2 3 4 5 6 7 8 9 10 |
&НаКлиенте Процедура УдалитьСвязьВДО(Команда) ВнешнийОбъект = Объект.Контрагент; ИнтеграцияС1СДокументооборотБазоваяФункциональностьВызовСервера.УдалитьСвязь(Строка(ВнешнийОбъект.УникальныйИдентификатор()), "DMCorrespondent", Объект.Контрагент); Сообщить("Связь удалена"); КонецПроцедуры |