Отследить изменение документов и оповещение через HTTP

1. virtex3 20 24.02.17 21:07 Сейчас в теме
А можно ли с помощью расширения конфигурации отслеживать допустим создание, изменение, отмену проводки, пометки на удаление и удаление определенные виды документов и инициировать http запрос на сторонний сервер с указанием данных, например uuid документа и тип операции?

Почему с помощью расширения? — Не хочется снимать с поддержки конфигурацию.

Задача информировать внешние интеграционные системы об изменениях в базе, нежели регулярно опрашивать по ODATA.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. starik-2005 3038 24.02.17 23:03 Сейчас в теме
(1) не факт. Покопался - не смог открыть в расширении модуль документа. Подписку на событие можно вроде как перенести в расширение, но изменить ее у меня не получилось.

В принципе, чтобы не снимать с поддержки все, можно добавить подписку на события при проведении и записи нужных объектов, а в подписке писать данные в какое-нибудь очень быстрое хранилище (например, в REDIS), чтобы не тормозить проведение документа, а уже оттуда периодически читать данные об измененных документах и передавать в сторонние системы каким-нить PHP-скриптом. В тот же REDIS можно быстро писать через redis-cli --pipe <1.txt, где в 1.txt скрипт типа RPUSH key:doctype GUID\r\n, где RPUSH - вставка в стек, key:doctype - ключ и тип документа (например, key:rtu), GUID - гуид документа. На стороне PHP можно через while(!($s = $redis->lpop("key:doctype"))) sendtoservice($s); оповещать внешний сервис.

В общем все достаточно просто можно запилить и работать будет быстро.
5. virtex3 20 25.02.17 17:04 Сейчас в теме
(3) в принципе и запилил.

1. Создал в расширении новую константу.
2. Для константы организовал форму, чтобы сохранять настройки соединения.
3. В Подписках на события создал две подписки: ПриЗаписи и ПередУдалением, хотя в принципе можно обойтись одной подпиской.
4. Для подписки создал обработчик, который получает оповещение, что тот или иной документ создан или изменен и отправляет на сторонний сервер тип документа, его uuid, номер, состояние проводки и флаг удаления.

Так как 1с и сторонний сервер находятся в одной интранет сети и даже на одной гипервизоре, то сделал без хранилища.

Все запилил через расширение, работает на ура!
Прикрепленные файлы:
2. Fox-trot 158 24.02.17 22:40 Сейчас в теме
имхо правильнее опрашивать
хотя если есть решение нересурсоемкое на сервере, то мона и на сервере инициировать оповещение
4. virtex3 20 25.02.17 16:58 Сейчас в теме
(2) вовсе не правильно. Если необходима актуальность данных, то только через оповещение
6. virtex3 20 01.03.17 07:42 Сейчас в теме
Единственное, что обнаружилось, если подписываться на событие ПриЗаписи и делать запрос информер через HTTP о том, что данные изменились, а потом вытаскивать через ODATA, то данные, полученные через ODATA будут старыми, так как ПриЗаписи на самом деле работает как ДоЗаписи, а не ПослеЗаписи.

Тем не мене обработчик события ПриЗаписи получает объект с новыми данными. То есть надо делать сериализацию объекта и передавать в HTTP запросе.

Не верный алгоритм
-> Подписка
  -> ПриЗаписи
    -> ОбработчикСобытия
      -> HTTP запрос с передачей GUID -> запрос по ODATA -> получаем старые данные
        -> запись объекта в базу


Правильный алгоритм
-> Подписка
  -> ПриЗаписи
    -> ОбработчикСобытия
      -> HTTP запрос с сериализацией текущего объекта
        -> запись объекта в базу
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот