Отследить изменение документов и оповещение через HTTP
А можно ли с помощью расширения конфигурации отслеживать допустим создание, изменение, отмену проводки, пометки на удаление и удаление определенные виды документов и инициировать http запрос на сторонний сервер с указанием данных, например uuid документа и тип операции?
Почему с помощью расширения? — Не хочется снимать с поддержки конфигурацию.
Задача информировать внешние интеграционные системы об изменениях в базе, нежели регулярно опрашивать по ODATA.
Почему с помощью расширения? — Не хочется снимать с поддержки конфигурацию.
Задача информировать внешние интеграционные системы об изменениях в базе, нежели регулярно опрашивать по ODATA.
По теме из базы знаний
- Эффективный управленческий учет как цель автоматизации
- Многопоточный CI-контур для 1С c Packer, Vagrant и Jenkins. Часть 1. Описание системы и обзор инструментария
- Взаимодействие с сотрудниками и клиентами из одного окна конфигурации 1С (Телеграм, ВКонтакте, Facebook, Discord). Преимущества, технические особенности, подводные камни
- КонструкторБизнесПроцессов. Общий пример
- Что нам стоит обмен настроить, или Как кролик спас «зоопарк»
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(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); оповещать внешний сервис.
В общем все достаточно просто можно запилить и работать будет быстро.
В принципе, чтобы не снимать с поддержки все, можно добавить подписку на события при проведении и записи нужных объектов, а в подписке писать данные в какое-нибудь очень быстрое хранилище (например, в 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); оповещать внешний сервис.
В общем все достаточно просто можно запилить и работать будет быстро.
(3) в принципе и запилил.
1. Создал в расширении новую константу.
2. Для константы организовал форму, чтобы сохранять настройки соединения.
3. В Подписках на события создал две подписки: ПриЗаписи и ПередУдалением, хотя в принципе можно обойтись одной подпиской.
4. Для подписки создал обработчик, который получает оповещение, что тот или иной документ создан или изменен и отправляет на сторонний сервер тип документа, его uuid, номер, состояние проводки и флаг удаления.
Так как 1с и сторонний сервер находятся в одной интранет сети и даже на одной гипервизоре, то сделал без хранилища.
Все запилил через расширение, работает на ура!
1. Создал в расширении новую константу.
2. Для константы организовал форму, чтобы сохранять настройки соединения.
3. В Подписках на события создал две подписки: ПриЗаписи и ПередУдалением, хотя в принципе можно обойтись одной подпиской.
4. Для подписки создал обработчик, который получает оповещение, что тот или иной документ создан или изменен и отправляет на сторонний сервер тип документа, его uuid, номер, состояние проводки и флаг удаления.
Так как 1с и сторонний сервер находятся в одной интранет сети и даже на одной гипервизоре, то сделал без хранилища.
Все запилил через расширение, работает на ура!
Прикрепленные файлы:



Единственное, что обнаружилось, если подписываться на событие ПриЗаписи и делать запрос информер через HTTP о том, что данные изменились, а потом вытаскивать через ODATA, то данные, полученные через ODATA будут старыми, так как ПриЗаписи на самом деле работает как ДоЗаписи, а не ПослеЗаписи.
Тем не мене обработчик события ПриЗаписи получает объект с новыми данными. То есть надо делать сериализацию объекта и передавать в HTTP запросе.
Не верный алгоритм
Правильный алгоритм
Тем не мене обработчик события ПриЗаписи получает объект с новыми данными. То есть надо делать сериализацию объекта и передавать в HTTP запросе.
Не верный алгоритм
-> Подписка
-> ПриЗаписи
-> ОбработчикСобытия
-> HTTP запрос с передачей GUID -> запрос по ODATA -> получаем старые данные
-> запись объекта в базу
Правильный алгоритм
-> Подписка
-> ПриЗаписи
-> ОбработчикСобытия
-> HTTP запрос с сериализацией текущего объекта
-> запись объекта в базу
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот