Выгрузка сотрудников из 1C ЗУП в Битрикс24 или правдивая история о том как настроить интеграцию 1С-Битрикс24 c 1С ЗУП

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В жизни так бывает, причём бывает чаще чем хотелось бы, хоть в целом и довольно редко – надо интегрировать Битрикс24 с ЗУП. Сими дружественными компаниями заявлена штатная интеграция (но только для коробки Б24), которая осуществляется по следующей принципиальной схеме:

  1. Обмен инициирует всегда 1С. Это либо штатный, либо устанавливаемый самостоятельно и доступный модуль обмена, который посылает запросы.

  2. На стороне Б24 имеем в качестве точки обмена скрипт, если быть точнее скрипты (но об этом будет ниже), в одном из которых вызов метода IncludeComponent, который подключает контроллер. Он и таит в себе логику обмена.

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

Пролог

Нам же это скучно, поэтому ввязываемся в авантюру по интеграции ЗУП с Б24 Enterprise, а чтобы было интереснее – берем закрытый объект, почти совсем не бизнес даже, а учреждение с многоуровневой и чудно ветвленой системой безопасности.

В общем, на руках бэкап Б24 с обезличенными данными и обезличенный же XML-файл обмена из ЗУП.

Итак, сама задача… Хотя, нет. До самой задачи ещё далеко – не помешало бы сначала наладить тестовый механизм для того, чтобы по заверениям работающий штатный алгоритм проверить.

Инструментарий:

  • Виртуальная машина VMBitrix – 1 шт.

  • 1С-Битрикс24 (копия для разработки) – 1 шт.

  • Файл обмена, выгруженный предположительно штатным модулем обмена 1С – 1 шт.

  • VS Code + SSH FS плагин на будущее – 1 комплект.

  • Postman – 1 шт.

Виртуальная машина VMBitrix

По правде говоря, это никакая не виртуальная и даже не машина, а CentOS 7 (ну, или 6) со всеми вытекающими. Можно из чистой центоси сделать своеобразный и уже сконфигурированный LAMP+ для Битрикс несколькими командами.

wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh

# chmod +x bitrix-env.sh

# ./bitrix-env.sh

Для дотошных читателей следует рассказать, что виртуальная машина в реальности всё же существует. На клиентском сайте вендора в разделе скачать. Образы уже сконфигурированных ОС под популярные виртуализации выложены и в корне сайта по умолчанию уже лежит скрипт установки демо и скрипт восстановления. Именно скрипт восстановления был использован для создания локальной копии портала.

Следует ещё отметить, что VMBitrix не единственное, но самое быстро-разворачиваемое универсальное окружение для Б24.

1С-Битрикс24 Enterprise

Не буду много распространяться про то, что отличает Энтерпрайз от других коробок. Наверное, в данном повествовании хватит акцента на цене и уровне ответственности. Тем более, модули связанные с масштабированием не используются. Впрочем, как и многосайтовость.

Файл обмена из 1С ЗУП

Если вы хоть раз занимались интеграцией двух систем, будучи ответственным только на одном продукте, то вам знакомо как велик соблазн спихнуть на ту сторону любую мелочь, которую лень проверять на своей стороне. Этот недуг поражает даже самых ответственных людей, выступающих в любой роли и с любым уровнем погружения. Поддавался недугу и я.

Попытка повлиять на то чтобы пришли нужные данные сами чудесным образом, догадавшись, куда и в какой последовательности записываться, для очистки совести тоже осуществлена.

VS Code + SSH FS плагин

Итак, вооружившись доступом к файловой системе проекта, мы начинаем свое путешествие в увлекательный мир не задокументированных интеграций.

Не зря в самом начале статьи была реплика про то, что «Обмен инициирует всегда 1С». Для понимания архитектуры это был первый шаг, в модуле обмена на стороне 1С прописан адрес скрипта, выступающего узлом обмена в Б24 – по умолчанию это /bitrix/admin/1c_intranet.php.

В нем, согласно правилам системы ничего не хранится. Подключается один из служебных скриптов системного модуля Интранет(intranet) /bitrix/modules/intranet/tools/1c_intranet.php.

Именно этот модуль нам дает программный интерфейс для организации работы с сотрудниками и структурой на портале. Модули в BitrixFramework занимают место модели в архитектуре MVC.

И именно для взаимодействия с ним написанный системный компонент intranet.users.import.1c вызывается из служебного скрипта при помощи метода IncludeComponent. Компоненты в BitrixFramework занимают место контроллера в архитектуре MVC. На вход компонента подается массив параметров, если не вдаваться в тонкости, то – настройки из модуля Интранет, которые задаются в административной части корпортала.

Postman

При упоминании должности почтальона в наших широтах перед глазами встает образ скорее Печкина из Простоквашино, нежели герой Кевина Костнера из одноименного заокеанского фильма.

Но наш герой – программа, адрес тоже известен: postman.com [ссылка удалена модератором].

Эпилог

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

Что важно знать про обмен:

  • Протокол обмена – GET

  • Нужно несколько последовательных запросов с разными параметрами

Если файл выгрузки 1С ЗУП в архиве, то нужно использовать галочку «Использовать сжатие zip, если доступно» в настройках модуля Интранет в админке. И наоборот – если XML без архивной оболочки – галочку нужно снять.

Первый запрос, авторизация по логину и паролю:

GET http://портал/bitrix/admin/1c_intranet.php?mode=checkauth

Возвращает PHPSESSID. Его необходимо в последующем передавать с каждым запросом.

Второй запрос:

GET http://портал/bitrix/admin/1c_intranet.php?mode=init

Подготавливает/вычищает папку для загрузки файла. Возвращает что-то вроде zip=no

file_limit=204800, если всё отработало.

Третий запрос:

GET http://портал /bitrix/admin/1c_intranet.php?mode=file&PHPSESSID=tmfi6bf67llse3akv7cv13m6h8&filename=import.xml

В случае успешной передачи и записи файла на сервер возвращает success. Будьте бдительны – нужно передать в Body сам файл бинарно, и указать его название в GET-параметре filename.

Четвертый запрос:

GET http://портал /bitrix/admin/1c_intranet.php?mode=import&PHPSESSID=tmfi6bf67llse3akv7cv13m6h8&filename=import.xml

Надо отсылать несколько раз с теми же параметрами, пока не пройдут последовательно все шаги импорта. Все эти шаги также можно вычитать в коде вышеуказанного компонента, осуществляющего импорт. Возвращаемые значения:

progress

Временные таблицы удалены.

progress

Временные таблицы созданы.

progress

Файл импорта прочитан.

progress

Временные таблицы проиндексированы.

progress

Проверка структуры успешно пройдена.

progress

Метаданные импортированы успешно.

progress

Обработано 2 из 2 пользователей.

progress

Загрузка пользователей завершена.

progress

Обработано 11 из 11 записей графика отсутствий.

progress

Загрузка графика отсутствий завершена.

success

Импорт успешно завершен.

Постскриптум

Наверняка, кто-то из комментаторов укажет на другие инструменты, или сможет поделиться похожим опытом. Возможно, кто-то проведет параллели с импортом каталога из УТ в БУС.

По правде говоря, сам тоже, хоть в статье и опустил, но руководствовался аналогичным опытом. Продолжение следует – в следующей статье расскажу как решалась сама задача породившая такую хитроумную организацию труда.

Источник: https://habr.com/ru/post/541694/


Интересные статьи

Интересные статьи

Субботний вечер омрачен скандалом - сайт не работает, провайдер негодяй, админы - не специалисты, а сервера - решето. Вызов принят, или почему при всей нелюбви к 1С-Битри...
Всем привет. Когда я искал информацию о журналировании (аудите событий) в Bitrix, на Хабре не было ни чего, в остальном рунете кое что было, но кто же там найдёт? Для пополнения базы знаний...
Роб Бредоу — исполнительный креативный директор и глава ILM. Около двух десятков лет назад он был ведущим аниматором эффектов фильма «Стюарт Литтл» в Sony Pictures Imageworks — студии, в которо...
Эта публикация написана после неоднократных обращений как клиентов, так и (к горести моей) партнеров. Темы обращений были разные, но причиной в итоге оказывался один и тот же сценарий, реализу...
Мир суровый, но маленький и возможности его изменить есть у каждого. В 1996 году начиная изучать только что появившийся Delphi, я не мог себе представить, какая будет судьба у этого языка, которы...