Введение
Статья обновлена для работы с версией АИТП не ниже 1.0.0.0
Поскольку практически в любой компании сотрудники так или иначе взаимодействуют с ИТ-инфраструктурой предприятия, существует масса задач по настройке этой самой инфраструктуры, чтобы пользователи могли эффективно ею пользоваться для выполнения своих служебных обязанностей. И чем больше организация и разнообразнее ИТ-ландшафт предприятия, тем больше таких повседневных задач появляется у ИТ-отдела и тем больше драгоценного времени и ресурсов тратится на их выполнение. Конечно, автоматизация выполнения этих задач может сэкономить ваше время и ресурсы, однако, для того, чтобы она была возможна на должном уровне, система автоматизации должна обладать актуальной информацией о сотрудниках компании. Пожалуй, самым распространенным источником актуальной информации такого рода, является прикладное решение Зарплата и управление персоналом (ЗУП), поэтому настоящая статья посвящена демонстрации настройки взаимодействия конфигурации АИТП (проект на GitHub) с прикладным решением ЗУП 3.1, с целью получения актуальной информации о сотрудниках.
В настоящее время существует масса различных способов (раз, два, три, четыре, пять, шесть и др.), для организации обмена данными как между прикладными решениями на платформе 1С:Предприятие, так и между прикладными решениями и внешними системами. Все они с успехом могут быть применены для озвученной задачи с той или иной степенью “допилки”, однако в настоящем демонстрационном примере мы организуем такой обмен средствами конфигурации АИТП, использовав ее как инфраструктуру, для управления транспортом сообщений.
Системные требования
ОС Windows или Linux.
Платформа 1С:Предприятие версии не ниже 8.3.12 (пример создавался на платформе 8.3.13.1809)
Демонстрационная конфигурация ЗУП 3.1, развернутая в клиент-серверном режиме (пример создавался на ЗУП 3.1.9.205).
Конфигурация АИТП версии не ниже 1.0.0.0
Механизм обмена
Суть используемой технологии не отличается какой-либо новизной или оригинальностью и заключается в том, что при наступлении какого-либо события, на отправляющей стороне формируется пакет с данными об этом событии, который простым http-запросом отправляется получателю. Принимающая сторона анализирует этот пакет и выполняет некие действия (см. рис. 1).
Рисунок 1. Схема обмена данными.
Поскольку, в момент возникновения события получатель может быть недоступен или занят, вместо непосредственной отправки запроса в момент возникновения события, создается соответствующий бизнес-процесс, который содержит необходимые для отправки данные. Таким образом отправка http-запросов происходит асинхронно и не препятствует работе.
В качестве формата, для передачи данных используется JSON, так как он является одним из самых распространенных простых форматов, для работы с которым, имеются штатные функции платформы.
Поскольку в нашем случае, обмен сообщениями производится между конфигурациями 1С:Предприятие, мы можем использовать для их формирования механизм XDTO, однако, с целью демонстрации возможностей обмена с не 1С системами, будем формировать сообщения самостоятельно.
Подготовка конфигурации ЗУП
Для реализации вышеизложенного механизма обмена, внедрим часть подсистем АИТП в конфигурацию ЗУП. Для этого, необходимо разрешить редактирование конфигурации с сохранением поддержки, настроить правила редактирования как на рис. 2, а также разрешить изменения у корня конфигурации см. рис. 3.
Рисунок 2. Настройка правил поддержки.
Рисунок 3. Правило редактирования для корня конфигурации.
Внедрение производится путем сравнения/объединения текущей конфигурации, с конфигурацией АИТП. Для внедрения, необходимо выбрать подсистему БазовыеПодсистемыАИТП (см. рис. 4), ОбменДаннымиАИТП, а также можно выбрать подсистему ОбновлениеСистемыАИТП. Затем дополнительно отметить подсистемы БазовыеПодсистемыПрикладныеРолиАИТП и НеБлокируемыеПриОбновленииРегламентныеЗаданияАИТП, в случае, если была выбрана подсистема ОбновлениеСистемыАИТП.
Дабы не переизобретать пользовательский интерфейс, также можно отметить подсистемы ПользовательскийИнтерфейсАдминистрированиеАИТП, ПользовательскийИнтерфейсОркестраторАИТП, а также ПользовательскийИнтерфейсОбновлениеСистемыАИТП.
Рисунок 4. Выбор по подсистемам из файла.
Рисунок 5. Дополнительные подсистемы.
Поскольку внедренные подсистемы никак не пересекаются с основной конфигурацией, каких-либо неудобств, кроме отсутствия автоматического обновления быть не должно, однако есть пара проблем, которые необходимо решить:
Конфигурация АИТП использует собственный сеанса ТекущийПользовательАИТП, обработчик которого надо внедрить в основную конфигурацию.
По каким-то причинам, разработчики типовой конфигурации решили, что все бизнес-процессы должны иметь определенный набор обязательных реквизитов, что отражено в обработчике подписки ЗаписатьВСписокБизнесПроцессов см. код ниже.
Для решения этих проблем создадим расширение, в котором переопределим стандартный обработчик ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса нижеследующим образом:
Для решения второй проблемы, переопределим обработчик подписки на нижеследующий:
Также, для увеличения производительности были переопределены обработчики некоторых других подписок способом, аналогичным вышеприведенному (см. рис. 6).
Рисунок 6. Расширение для внедрения АИТП в ЗУП 3.1.
На этом, подготовка конфигурации ЗУП завершена.
Передаваемые данные
Для автоматизации настройки ИТ-систем предприятия, в общем случае нас будет интересовать информация, о ФИО сотрудника, его должности, подразделения и организации в которых он работает, а также факты изменения этих данных.
Для нашего демонстрационного примера, в качестве источников данных, выберем регистры сведений ФИОФизическихЛиц и КадроваяИсторияСотрудников, справочники ФизическиеЛица, Сотрудники, Организации, ПодразделенияОрганизаций, Должности.
Реализация обмена
Сторона ЗУП
Для минимизации влияния на основную конфигурацию, реализуем механизм обмена с использованием расширений. Факты изменения соответствующих объектов будем отслеживать по наступлению события ПриЗаписи для соответствующих объектов.
Создадим расширение ОбменСАИТП с общим модулем ОбменСАИТП_СлужебныеФункции, в котором определим обработчики интересующих нас событий.
Для справочников, в общем случае нас будут интересовать реквизиты Наименование, Ссылка и ПометкаУдаления (Для справочника ПодразделенияОрганизаций также Родитель и Владелец).
Типичный код обработчика события ПриЗаписи для элемента справочника представлен ниже:
Как можно увидеть, первым параметом процедуры ОтправитьСообщение является ссылка на элемент справочника ПолучателиСообщенийОбменаАИТП или строка, соответствующая коду элемента (в противном случае, сообщение не будет отправлено). Также, переопределим событие ПриЗаписи в модулях объектов соответствующих справочников примерно нижеследующим образом:
Аналогичным образом, поступим с регистрами сведений. Пример кода для регистра сведений ФИОФизическихЛиц представлен ниже:
Также, для начальной синхронизации, создадим обработку, которая выполняет чтение всех элементов соответствующих объектов конфигурации, с последующим формированием сообщений для отправки:
Поскольку иногда, документы изменяющие кадровую историю могут быть отменены, создадим соответствующий обработчик:
И привяжем его к событию ОбработкаУдаленияПроведения соответствующих документов, примерно следующим образом:
На этом, реализация на стороне отправителя завершена.
Сторона АИТП
Включаем возможность изменения объектов конфигурации с сохранением поддержки аналогично тому, как это было сделано для конфигурации ЗУП.
Поскольку конфигурация АИТП не содержит каких-либо объектов, связанных с организациями, должностями, подразделениями и т.п., создадим соответствующие объекты конфигурации (см. рис. 7).
Рисунок 7. Объекты конфигурации в АИТП.
Для приема сообщений, разрешим редактирование общего модуля ОбменДаннымиПереопределяемыйАИТП и переопределим процедуру ОбработатьВходящееСообщение нижеследующим образом:
Определим в модуле ОбменДаннымиЗУП соответствующие процедуры, изменяющие данные в системе-получателе:
Опубликуем web-сервис ExchangeITPA и http-сервис ОбменДаннымиПоУмолчанию на web-сервере. В продуктивной среде необходимо также создать пользователя информационной базы, с учетными данными которого будут вызываться web или http-сервисы и настроить соответствующие разрешения, однако данные вопросы выходят за рамки настоящей публикации.
Тестирование обмена
Запустим модифицированную конфигурацию ЗУП и конфигурацию АИТП в пользовательском режиме (ранее созданные в базе АИТП http-сервисы должны быть опубликованы на web-сервере).
В базе ЗУП, разрешим старт процессов (Администрирование АИТП -> Общие настройки).
В обеих базах, создадим узел обмена, для конфигурации ЗУП с кодом “001” (Обмен данными -> Узлы обмена данными).
В базе ЗУП, сделаем созданный узел текущим узлом обмена (Обмен данными -> Настройки обменов данными).
Настроим получателей сообщений. Для этого, в базе ЗУП перейдем в раздел Обмен Данными и выберем пункт Получатели сообщений обмена. В системе имеется предопределенный элемент ПолучательПоУмолчанию. Воспользуемся им для настройки получателя наших сообщений (см. рис. 8.).
Рисунок 8. Настройка получателя сообщений с http транспортом.
Откроем созданную ранее обработку Начальная синхронизация с АИТП и запустим синхронизацию.
Рисунок 9. Обработка начальной синхронизации.
Убедимся, что в конфигурации АИТП появились интересующие нас данные.
Рисунок 10. Результаты в конфигурации АИТП.
Также мы можем просмотреть тело отправленного сообщения (см. рис. 11.), а также время его отправки и автора (см. рис. 12).
Рисунок 11. Тело отправленного сообщения.
Рисунок 12. Дополнительные реквизиты процесса
Перенастроим получателя сообщений для работы с web-сервисом:
Изменим ФИО какого-либо сотрудника и убедимся, что изменения отреплицировались.
Таким образом, мы можем использовать в качестве транспорта сообщений как http так и web-сервисы без изменения конфигурации.
При соответствующей настройке адресации задач и оповещений, ИТ-специалисты смогут получать оповещения о проблемах и своевременно реагировать на них. Так как крайне желательно, чтобы ИТ-специалисты имели доступ только к тем данным, которые нужны для устранения проблем, настроим его.
Для этого, создадим пользователя штатными средствами ЗУП, в конфигураторе добавим ему роль Базовые права БСП и добавим его в пользователи подсистем АИТП с соответствующими правами. Как можно увидеть, при входе пользователя в информационную базу, его права будут ограничены соответствующими правами на подсистемы АИТП (см. рис 13).
Рисунок 13. Интерфейс IT-специалиста для работы с ЗУП.
Заключение
Вот таким-вот нехитрым способом, с использованием “дедовских” методов, мы реализовали возможность получения актуальной информации о сотрудниках компании, которая может быть использована для автоматизации настройки ИТ-систем предприятия.
Надеюсь, что настоящая публикация окажется полезной, для тех, кто хочет автоматизировать ИТ-процессы и избавить себя от ручного труда.