Шаг 1. Установка web-сервера
Допускается использование любого другого web-сервера.
Для передачи заказов из RetailCRM в 1С в режиме реального времени необходимо опубликовать базу 1С. Для этого потребуется выполнить следующие действия:
Важно!
Для установки требуются полномочия системного администратора.
- Установите web-сервер Apache.
- В трее появится значок запущенного сервиса -
Если Apache не работает, то, скорее всего, другая программа занимает стандартный 80 порт прослушки Apache (например, Skype).
В таком случае исправьте файл по адресу C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf
. Для этого найдите строчку Listen 80
и замените на любой адрес порта (например, Listen 81
)
В шаблонном решении указан порт 8080. Поэтому, если будете использовать другой – поменяйте в свойствах web-сервиса URL пространства имен по пути RetailCRM Интеграция → Общие → Web-сервисы → crm_WebRetailCRM
(открыть через правую кнопку мыши).
Также можно указать здесь внешний IP-адрес.
- Сохраните файл и перезапустите Apache (нажимаем левой кнопкой мыши):
- Проверяем работу Apache в браузере по адресу:
http://127.0.0.1/
. В случае, если вы изменили порт, то адрес будет таким:http://127.0.0.1:81
.
В случае успеха вы увидете следующее:
Теперь необходимо настроить публичный IP-адрес у сервера, на котором осуществляется публикация web-сервиса.
Шаг 2. Публикация web-сервиса на web-сервере
- Открываем конфигуратор базы
Важно!
Запуск 1С обязательно от имени администратора
- В 1С необходимо завести пользователя с паролем на латинице (например,
Admin/admin
). Публиковать базу следует под этим пользователем. - Перейдите в пункт меню Администрирование → Публикация на веб-сервере....
- Заполните имя латинскими буквами без пробелов (можно использовать подчеркивание).
- Выбирите веб-сервер из списка.
- Укажите путь к каталогу для публикации. Каталог – произвольный каталог с файлами веб-сервера для текущей базы. Желательно, чтобы название каталога совпадало с названием базы для удобства. Путь должен включать только латинские буквы, цифры и символ подчеркивания.
Важно!
Не следует в качестве пути указывать корень диска (C:), 1C может начать удалять папки на этом диске.
- Устанавите галочку «Публиковать web-сервисы расширений по умолчанию».
- Нажимаем «Опубликовать». Если при нажатии опубликовать вы видите сообщение
Невозможно записать c:\Program Files (x86)\Apache ....
значит, вы запустили 1С не от имени администратора. Закройте 1С и заново запустите «от имени администратора». - Опубликованный веб-сервис будет доступен по адресу
http://127.0.0.1:8080/1C_base/ws/ws1.1cws?wsdl
- Вместо
UT_demo_rasshir
подставляем имя, указанное в публикации. Имя файла публикации в шаблонном решении «ws1.1cws».
Важно!
У сервера, на котором осуществляется публикация web-сервиса, должен быть публичный IP-адрес (доступен через интернет). В конечном итоге url должен выглядеть таким образом
http://<публичный адрес>:81/<имя базы>/ws/ws1.1cws
Шаг 3. Создание триггера
Создание и настройка триггеров осуществляется в разделе Автоматизация → Триггеры.
- Укажите название триггера и символьный код.
- Добавьте событие, для этого нажмите + Событие. В появившейся шторке справа выбирите «Изменение заказа» и нажмите Добавить.
- В режиме редактора добвьте следующее условие срабатывания триггера:
((changeSet.isUpdate() and not last_run("5 seconds")) or (changeSet.isCreate() and not last_run("30 seconds", null, order))) and (not changeSet.hasChangesWithSource("api") or (changeSet.hasChangesWithSource("api") and not changeSet.hasChangedField('custom_update_api1c')))
Если не планируется передача изменений из 1С в RetailCRM и соответствующая настройка не включена, то условие будет таким:
(changeSet.isUpdate() and not last_run("5 seconds")) or (changeSet.isCreate() and not last_run("30 seconds", null, order))
С таким условием триггер будет срабатывать на каждое создание заказа и на каждое изменение заказа (не чаще, чем раз в 30 сек), то есть, если триггер отработает по заказу и следующее изменение в заказе будет в течение 30 секунд, триггер не сработает повторно. Это необходимо для того, чтобы 1С успела получить и обработать запрос от RetailCRM, отправить новый запрос на получение данных по заказу и обработать его в 1С. В противном случае могут создаваться дубли заказов. Время 30 секунд можно изменять в зависимости от скорости загрузки заказа. Также в триггере установлено условие на изменения по API. Если при изменении заказа по API изменяется поле update_api1c
, значит изменения были переданы из 1С и возвращать обратно их не нужно, триггер не сработает.
Условия триггера можно дорабатывать в соответствии с вашим бизнес-процессом. Пользовательское поле можно будет добавить командой из 1С.
- Добавьте действие, кликнув на + Действие. В открывшейся шторке выберите «Выполнить HTTP-запрос». Данный вариант позволяет выполнить HTTP-запрос по определенному методу. Для этого необходимо указать адрес ресурса, HTTP-метод, и в каком виде передавать параметры.
В поле «Адрес» укажите http://<публичный адрес>:81/<имя базы>/ws/ws1.1cws
.
В поле «HTTP-метод» выберите POST.
Добавьте HTTP-заголовки. Укажите заголовок Authorization
с содержимым вида Basic <base64>
. Строку base64
можно получить в онлайн генераторе по ссылке . В полях Username и Password следует указать имя пользователя, под кем публиковалась база, и пароль для входа в 1С.
Затем необходимо добавить заголовок Content-Type со значением application/soap+xml; charset=utf-8
.
В поле «Передавать параметры» выбираем значение «Указать тело запроса самостоятельно».
В теле запроса прописываем:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://127.0.0.1:8080">
<SOAP-ENV:Body>
<ns1:EditOrder>
<ns1:Order>{{order.id}}</ns1:Order>
</ns1:EditOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Важно!
Вместо
http://127.0.0.1:8080
прописываем URL пространства имен из свойств web-сервиса в 1С. Там может быть как внешний IP-адрес, так и локальный, зависит от настроек сети. Значения в теле запроса и в URL пространства имен обязательно должны совпадать.
- Сохраните триггер.