На Хабре уже много статей про 1С и ее «плохую» способность по интеграции с другими системами. И я соглашусь с ними, интегрировать 1С и Megaplan оказалась задачей, куда менее приятность чем я предполагал в начале.
В статье я не расскажу как взять и настроить синхронизацию через API с помощью веб-сервиса от начала и до конца. Но расскажу ключевые моменты после которых найти не достающею информацию будет не проблема.
Я попал в отдел 1С в котором была своя, написанная сотрудниками конфигурация по приему и управлению задачами «PM». Время шло конфигурация развивалась и обрастала новым функционалом и отказаться от нее уже не было возможности, так как она стала единым центром по приему и обработки задач, уже не только отдела 1С, но и всех IT отделов холдинга(на момент написания статьи обсуждается внедрение в систему Административно хозяйственного отдела и отдела эксплуатации зданий). В конфигурации была настроена синхронизация с LDAP, всеми базами холдинга, автоматическими уведомлениями по skype и другое.
Был взят заместитель технического директора, который в красках расписал преимущества Megaplana и убедил руководство, что нам жизненно необходимо его внедрить. После затяжных объяснений, что от «РМ» мы отказаться не можем, мне была поставлена задача синхронизировать нашу конфигурацию и Megaplan. Вооружившись львиной долей терпения я начал изучать возможности и сразу понял, что у Megaplana есть только API и надо копать туда. После нескольких дней поиска и экспериментов было ясно, что только средствами 1С это сделать не возможно.
К сожалению у нас уже был настроен один веб-сервер, к которому я и подключил свой веб-сервис. По этой причине настройку самого веб-сервера я рассказать не смогу.
Спасибо Megaplan, библиотеки api есть и даже все работают, поэтому нам остается только настроить только модели данных. В качестве примера добавление комментария.
Описываем метод которым будем вызывать из 1С
Описываем модель метода
Дальше допустим ваш веб-сервис виден по адресу вашДомен/api/comments/get_wsdl и при переходе вы видите XML с описанием вашего веб-сервиса.
Дальше добавляем веб-сервис в нашу конфигурацию, открываем, смотрим и действительно все методы, что мы описали есть и никуда не делись. У меня конечно методом больше.

И наконец самое увлекательное пишем код на 1С.
Собственно все. Теперь осталось только прикрутить вызов функции куда вам нужно и все. Megaplan получает наши комментарии из 1С.
В статье я не расскажу как взять и настроить синхронизацию через API с помощью веб-сервиса от начала и до конца. Но расскажу ключевые моменты после которых найти не достающею информацию будет не проблема.
Предыстория
Я попал в отдел 1С в котором была своя, написанная сотрудниками конфигурация по приему и управлению задачами «PM». Время шло конфигурация развивалась и обрастала новым функционалом и отказаться от нее уже не было возможности, так как она стала единым центром по приему и обработки задач, уже не только отдела 1С, но и всех IT отделов холдинга(на момент написания статьи обсуждается внедрение в систему Административно хозяйственного отдела и отдела эксплуатации зданий). В конфигурации была настроена синхронизация с LDAP, всеми базами холдинга, автоматическими уведомлениями по skype и другое.
История
Был взят заместитель технического директора, который в красках расписал преимущества Megaplana и убедил руководство, что нам жизненно необходимо его внедрить. После затяжных объяснений, что от «РМ» мы отказаться не можем, мне была поставлена задача синхронизировать нашу конфигурацию и Megaplan. Вооружившись львиной долей терпения я начал изучать возможности и сразу понял, что у Megaplana есть только API и надо копать туда. После нескольких дней поиска и экспериментов было ясно, что только средствами 1С это сделать не возможно.
Тут-то и начинается объяснение почему веб-сервисы это хорошо.
К сожалению у нас уже был настроен один веб-сервер, к которому я и подключил свой веб-сервис. По этой причине настройку самого веб-сервера я рассказать не смогу.
Настройка часть 1: Настройка веб-сервисной части.
Спасибо Megaplan, библиотеки api есть и даже все работают, поэтому нам остается только настроить только модели данных. В качестве примера добавление комментария.
Описываем метод которым будем вызывать из 1С
/** * Marks comment as read * * @access public * @param object $data * @return array */ public function comment_create($data) { $options = array( 'method' => 'post', 'useHttps' => true, ); return $this->send_request(__FUNCTION__, $data, $options); }
Описываем модель метода
require APPPATH.'controllers/common/common_types.php'; $types = array_merge_recursive( $types, array( // api methods 'methods' => array ( 'comment_create' => array( 'type' => 'public', 'returnType' => 'CommentEditReturn', 'description' => 'create comment', 'params' => array( 'data' => array( 'varName' => '$data', 'varType' => 'CommentEditInput', ), ) ), ), // api custom types for api methods 'types' => array( 'CommentCreateModel' => array( 'Text' => 'string', 'Work' => 'int', 'WorkDate' => 'string', 'Attaches' => 'CommentAttachment[]', ), 'CommentAttachment' => array( 'Add' => 'CommentAttachmentItem[]', ), 'CommentAttachmentItem' => array( 'Name' => 'string', 'Context' => 'string', ), ), ) );
Дальше допустим ваш веб-сервис виден по адресу вашДомен/api/comments/get_wsdl и при переходе вы видите XML с описанием вашего веб-сервиса.
Настройка часть 2: Настройка 1С части.
Дальше добавляем веб-сервис в нашу конфигурацию, открываем, смотрим и действительно все методы, что мы описали есть и никуда не делись. У меня конечно методом больше.

И наконец самое увлекательное пишем код на 1С.
//Добавление комментария Функция ДобавитьКомментарий(Задача,Текст,ДатаДобавления=Неопределено,РабочееВремя=Неопределено) Экспорт Попытка Ответственный=ПараметрыСеанса.ТекущийПользователь; ВозвращаемоеЗначение = Мегаплан.АутентификацияПоЗадачам(Ответственный.ЛогинМегаплана,Ответственный.ПарольМегаплана,""); Если ВозвращаемоеЗначение.status.code = "ok" Тогда Сервис = WSСсылки.WSMegaPlanComments.СоздатьWSПрокси("urn:comments","commentsService","commentsPort"); ВходнойПараметрСозданияЗадачи = Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип("urn:comments", "CommentEditInput")); ВходнойПараметрСозданияЗадачи.AccessId = ВозвращаемоеЗначение.data.AccessId; ВходнойПараметрСозданияЗадачи.SecretKey = ВозвращаемоеЗначение.data.SecretKey; ВходнойПараметрСозданияЗадачи.SubjectType="task"; ВходнойПараметрСозданияЗадачи.SubjectId=Формат(ВернутьИдЗадачи(Задача),"ЧГ=0"); СтруктураЗадачи = Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип("urn:comments", "CommentCreateModel")); СтруктураЗадачи.Text= ЗаменитьНедопустимыеСимволыXML(Текст); СтруктураЗадачи.Work=РабочееВремя; СтруктураЗадачи.WorkDate=Формат(ДатаДобавления,"ДФ='dd.MM.yyyy hh:mm:ss'"); ВходнойПараметрСозданияЗадачи.Model=СтруктураЗадачи; ВозвращаемоеЗначение = Сервис.comment_create(ВходнойПараметрСозданияЗадачи); Возврат ВозвращаемоеЗначение; Иначе Возврат "Описание ошибки: Логин или пароль не верны."; КонецЕсли; Исключение Возврат "Описание ошибки:"+ Символы.ПС + ОписаниеОшибки(); КонецПопытки; КонецФункции //Авторизация Функция АутентификацияПоЗадачам(Логин, Пароль, СекретыйКлюч) Экспорт Попытка Сервис = WSСсылки.WSMegaPlanTasks.СоздатьWSПрокси("urn:tasks","tasksService","tasksPort"); ВходнойПараметрАвторизации = Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип("urn:tasks", "AuthorizationData")); ВходнойПараметрАвторизации.Login = Логин; ПреобразованныйПароль = ""; md5(Пароль, ПреобразованныйПароль); ВходнойПараметрАвторизации.Password = ПреобразованныйПароль; ВходнойПараметрАвторизации.OneTimeKey = СекретыйКлюч; Возврат Сервис.authorize(ВходнойПараметрАвторизации); Исключение Причина = ИнформацияОбОшибке(); Возврат "Ошибка авторизации:"+ Символы.ПС + Причина.Описание; КонецПопытки; КонецФункции
Собственно все. Теперь осталось только прикрутить вызов функции куда вам нужно и все. Megaplan получает наши комментарии из 1С.
