Гарантированный обмен 1С с внешними системами через сервер очередей Microsoft MSMQ

22.09.24

Интеграция - Внешние источники данных

Описание решения задачи организации обмена 1С с внешними системами с условием гарантированной доставки сообщений и независимой поддержкой архивов сообщений. Быстрый ответ: сервер очередей Microsoft MSMQ.

Вводная:

Организовать обмен 1С с внешней системой со следующими условиями и ограничениями:

  • Гарантированная доставка сообщений, когда сообщение не может считаться принятым пока не придет ответ от второй системы
  • Сервис обмена должен поддерживать архивы сообщений и быть независим как от 1С, так и от внешней системы
  • Внешняя система не умеет работать с HTTP сервисами 1С (да бывает и такое)
  • 1 сообщение из 1С может быть предназначено сразу нескольким разным внешним системам

В процессе поиска подходящего решения наткнулся на интересные примеры в демо конфигураций 1С «Обмен данными», где приложены примеры работы с сервером очередей сообщений Microsoft MSMQ.

MSMQ – компонент любой современной ОС от Microsoft даже не серверной. Из преимуществ MSMQ: бесплатный, поддерживает транзакции, имеется архив принятых/переданных сообщений, параллельные очереди для разных систем и случаев, тригеры сообщений, возможность авторизации отправителей и получателей сообщений, включая доменную аутентификацию.

Описание решения

В первую очередь нужно инсталировать компонент MSMQ на том компьютере, где будет висеть служба сервера очередей, это может быть, как локальный компьютер, так и любой в сети.

После добавления компонента он будет доступен в разделе Управление компьютером – Службы и приложения – Очередь сообщений.

Создаем частную очередь – имя очереди на английском, без пробелов и спец символов. Как настроить сервер MSMQ: права доступа, место хранения, транзакции, триггеры, размер сообщений, размер хранилища – см. разделы помощи на сайте Microsoft и внимательно читайте в отладке какие ответы будете получать от сервера MSMQ в 1С. Так выглядит очередь сервера MSMQ в который мы из 1с отправили сообщение.

Как реализовано в 1С:

Регистрацию изменений я сделал на своем Плане обмена 1С с ручной регистрацией изменений. Далее примеры кода в модуле объекта Плана Обмена, когда произошло событие регистрации или по расписанию нужно прочитать изменения с сервера сообщений.

Формируем строку XML и передаем серверу MSMQ.

 
 Поместить Данные Обмена В Очередь MSMQ

Чтение сообщений для 1С с сервера MSMQ похоже, но имеет свои нюансы, т.к. удалять(архивировать) сообщение из очереди мы можем только после успешного его чтения. Сначала читаем очередь, затем читаем сообщение и данные в нем и только после успешного чтения удаляем(архивируем) сообщение из очереди.

 
 Получить Прочитать Сообщение Из Очереди MSMQ

В заключение:

Разработка велась на версиях Платформы 8.3.14.ххх. Приведенные примеры должны работать на любой конфигурации, желательно с БСП 2.4.4.166

Другие мои публикации на Инфостарте:

планобмена msmq обмен гарантированная доставка

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    23096    25    49    

39

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

19.08.2020    26576    26    1    

28

Внешние источники данных Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Готовая интеграция для управляемых форм. Встраивается в вашу 1С как расширение. Реализует автоматический обмен данными между 1С (1С:Фитнес клуб и аналогов) и СКУД RusGuard, автоматизирует бизнес-процессы по созданию и учету сотрудников в СКУД. Значительно упрощает работу специалистов отдела кадров и отдела безопасности: избавляет от двойного ввода информации в 1С и СКУД.

94999 руб.

11.07.2024    1328    1    0    

3

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    48725    98    106    

70

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Налоговый учет Платные (руб)

Представлена обработка для импорта документов из розничной программы учета товара в торговых точках и аптеках, необходимых для ведения бухгалтерского и налогового учёта, в Бухгалтерию 3.0. При загрузке данных в бухгалтерию переносятся документы поступлений, реализации, возвратов и перемещений в торговых точках и формируются все бухгалтерские и налоговые отчеты с учетом этих документов для любой системы налогообложения. Обработка позволяет загрузить данные из ПО ТрейдФарм. Имеются варианты для других розничных программ (ПО Manuscript Solution, Е-Фарма и S-Market).

18000 руб.

09.04.2020    18708    13    8    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Mkonst 58 10.02.20 04:57 Сейчас в теме
Надо было написать про ограничение на объем отправляемых данных через MSMQ....
2. da_1c 189 10.02.20 09:01 Сейчас в теме
(1) с каким Вы столкнулись ограничением?
6. =Kollega= 6 11.02.20 13:36 Сейчас в теме
(2) в документации написано, максимальный размер сообщения 4Мб. Можно ужать текст во временный файл zip, который потом уже преобразовать в текст.
PS. Месье знает толк в извращениях ©
devtelscargo; +1 Ответить
9. da_1c 189 11.02.20 21:42 Сейчас в теме
(6) Проверил, да действительно до 4Мб пролазит, а если выше пишет "Недостаточно ресурсов для выполнения операции". Спасибо за информацию.
3. awk 745 10.02.20 09:24 Сейчас в теме
qinfo.FormatName = "DIRECT=OS:"+ОчередьОбменаMSMQ;


Это плохая идея. Т.к. вместо OS может стоять TCP, UDP, HTTP, HTTPS, плюс отправлять можно сразу в N очередей (если адреса перечислить через запятую).
4. kirill_sh 2 10.02.20 09:46 Сейчас в теме
лучше кролик использовать, с другой стороны это уже есть в системе.
5. kiruha 388 11.02.20 11:31 Сейчас в теме
Да, вопрос - почему не RabbitMQ?
Есть какие то причины ?
o.nikolaev; +1 Ответить
7. =Kollega= 6 11.02.20 13:39 Сейчас в теме
(5) MSMQ уже есть в системе - стандартная штука. А RabbitMQ еще поставить надо.
8. =Kollega= 6 11.02.20 13:46 Сейчас в теме
Чтение сообщений для 1С с сервера MSMQ


Если обмен нечастый, то ИМХО лучше использовать триггеры, чем регламентное задание. Чтобы при появлении нового сообщения в очереди, происходил запуск 1с и его разбор. А не постоянно на сервере 1с болталось бы задание регулярно проверяя, а не пришло ли нам что-нибудь....
10. Cyberhawk 135 14.02.20 18:40 Сейчас в теме
Зачем у метода "ПоместитьДанныеОбменаВОчередьMSMQ" второй параметр?
11. da_1c 189 14.02.20 20:32 Сейчас в теме
(10) Спасибо, что заметил. ))) Примеры резал из реального проекта и не все "почикал". Используется так: из номера сообщения получаю представление, которое мне нужно для удобного разбора потом при поддержке и присваиваю это представление сообщению

т.е. код в примере статьи Сообщение.Label = "Message" + СокрЛП(УзелИсточник.Код) + "_" + СокрЛП(УзелПриемник.Код) + СокрЛП(Постфикс) + ".xml";

можно дополнять номером сообщения.
12. poyson 18.11.21 16:25 Сейчас в теме
Подскаите, а с Azure Queue Storage не работали случайно?
Оставьте свое сообщение