Интеграция с системами на платформе 1С 7.7


#1

Имеется проблема, как прокинуть сообщение из адаптера - подписчика в 1с 77. То есть написать службу в виде адаптера - подписчика не проблема, но как дальше?
Первое, что приходит в голову - старое доброе ole. Поднимаем при запуске подписчика сеанс 7ки и вроде как можно жить.
Но система ведь может быть и в монопольном режиме (например касса).
Сразу приходят на ум текстовички. Сделали папки-методы водящие и исходящие и поехали меняться. Адаптер получает из очереди и складывает в нужную папку.
Еще приходит в голову вариант ком-клиента и пулинга очередей через него из 77, но тогда такая красота как consume() не получается :smile:
Вот с 8кой все здорово. Выставляем наружу soap\http сервис с набором методов и адаптер легко и просто бомбит его, ориентируясь на ключи маршрутизации.


#2

Ох уж эта семёрка

Но самое смешное, что вариант с файликами сбрасывать не стоит - оказалось что при достаточной стабилизации формата сообщения - это самый здравый вариант. КаталогИБ() то у тебя присутствует и причем штатно.

в итоге связка очередь -> адаптер -> файлик -> какой-то обработчик синхронный в (приЗаписи или еще где-то)

Но я не могу не поделиться другими интересными ссылками.

Итак 7-ка умеет (правда не совсем штатно) обрабатывать события асинхронно http://www.1cpp.ru/forum/YaBB.pl?num=1152684759
просто в адаптере необходимо сделать COMVisible, и обрабатывать через EventProxy

что касается OLE - то тут есть другая ссылка
http://www.1cpp.ru/forum/YaBB.pl?num=1179245025/0
Сервер 1С 7.7 так сказать на стероидах

P.S. Для 8.2 такое тоже можно - http://infostart.ru/public/93643/


#3

Спасибо, теперь я спокоен :slight_smile: Получается не зря выбрал файлы.
Интеграцию с кассами я запустил в таком виде:
На кассе стоит два адаптера - службы(подписчик, провайдер).
В каталоге базы лежат каталоги toCashPlace, fromCashPlace и в них подкаталоги - операции.
Адаптер провайдер подписывается на событие создания файла и отправляет сообщение в очередь.
Адаптер подписчик наоборот, складывает сообщения в папки.
Правда из кассы сообщения едут без задержек, а вот касса в себя файлы загружает раз в 5 секунд.
После запуска, был приятно удивлен, что продажа в основной базе, зачастую происходит в ту же секунду, что и кассовая транзакция. :slight_smile:


#4

Насчет 5 секунд посмотри ссылку про асинхронные события. Возможно стоит добавить дополнительное оповещение о событии. Тем более компонент-адаптер у тебя уже наличествует. ОбработкаВнешнегоСобытия тоже основана “низом” на очереди событий (вроде как). Можно поставить эксперимент - на целевой системе 1С запустить длинный алгоритм (что-нибудь с перебором секунд на 60) в этот момент сканировали много штриховых кодов: важно чтобы ни один штрихкод событие не потерялся.

То есть нисходящая очередь будет выглядеть следующим образом

  1. пришел файл - положили в папочку
  2. оповестили кассу - забери мол файл
  3. касса забрала файл - если все хорошо: кладет ACK файл в ту-же папочку
  4. забрали ACK - оповестили инициатора о доставке, очистили исходный файл (а то переполнение диска тоже бывает)
  5. не наблюдает ACK в течении минуты после события - оповещаем инициатора о проблеме типа warning
  6. пробуем еще раз оповестить кассу о событии
  7. не наблюдаем ACK в течении трех минут - оповещаем иницатора о проблеме типа critical

P.S. Я недеюсь ты не забыл про очереди ошибок и предупреждений.
P.S.S. Но должен предупредить - без 1Сpp.dll тут не обойдётся