«1С:Предприятие» предоставляет распространенную платформу для малого и среднего бизнеса. Для нее разработано большое количество финансовых, аналитических, статистических форм и отчетов. Некоторые отчеты имеют сложную форму и нетривиальный алгоритм по ее заполнению. С точки зрения повышения потенциала корпоративной платформы «1С:Предприятия» становится весьма актуальной задача создания надежного механизма для организации ее взаимодействия с веб-сервисами платформы Microsoft .NET.
Интеграция дает дополнительную функциональность и расширяет границы использования программ разработок. Как известно, язык программирования «1С: Предприятия» предоставляет возможность программно вызывать отчеты и сохранять их в формате HTML или XLS (Microsoft Excel), создавать документы и проводить их, получать текущие остатки на складе.
При интеграции «1С:Предприятия» и веб-сервисов удастся повысить фунциональность и предоставить универсальный доступ к БД «1С:Предприятия». Такая интеграция обеспечивается механизмом OLE Automation, обменом файлами или внешним компонентом, расширяющим средства встроенного языка. Рассмотрим их подробнее.
Подход OLE Automation дает полный доступ к объектам «1С: Предприятия». К его недостаткам можно отнести сложность программирования и отладки бизнес-логики. Созданный OLE-объект работает на компьютере, где запущен веб-сервис, что ограничивает производительность последнего. При аварийном останове веб-сервиса в памяти сохраняется объект «1С:Предприятия». Приходится придумывать алгоритмы для принудительной выгрузки OLE-объекта.
Схема взаимодействия «1С:Предприятия» и веб-сервиса |
Обмен файлам работает по следующему алгоритму. Создается обработка на языке «1С:Предприятия», читающая в цикле каталог входящих запросов. При вызове метода веб-сервиса формируется XML-файл запроса. 1С-обработка читает файл запроса, определяет его тип, выполняет соответствующий алгоритм и выдает результат операции в каталог исходящих сообщений. Потом файл входящего запроса удаляется. Веб-сервис читает результат операции и выдает его внешней программе. Для несложных запросов длительность всего цикла от поступления запроса до получения результата не превышает 0,1 с. Для веб-запроса это довольно быстрая реакция. Чтобы повысить производительность, можно запустить несколько экземпляров «1С:Предприятия», и тогда они будут параллельно читать каталог входящих запросов. Но для этого потребуется применение надежного механизма блокировок, чтобы один запрос не выполняли несколько экземпляров «1С:Предприятия».
Еще одним способом интеграции «1С:Предприятия» и веб-сервиса является создание внешнего компонента. Ее алгоритм может быть следующим. При поступлении запроса веб-сервис формирует XML-сообщение и сохраняет его в Message Queue, что дает нам надежный механизм доставки сообщений и обеспечивает транзакционность. Используя внешний компонент, 1C-обработка в цикле опрашивает очередь сообщений. При поступлении сообщения 1C-обработка выполняет заложенный алгоритм и записывает результат в выходную очередь. Веб-сервис получает результат запроса и выдает его внешнему приложению. Преимущество применения внешнего компонента по сравнению с обменом файлами — в масштабируемости решения. А для обработки очереди входящих сообщений допускается запуск нескольких экземпляров «1С:Предприятия».
В данной статье мы рассмотрим еще один способ интеграции «1С:Предприятия» и веб-сервисов, позволяющий параллельно выполнять несколько экземпляров «1С:Предприятия» на разных компьютерах. На каждом из них запускается обработка, обеспечивающая обмен данными с веб-сервисом. Параллельный режим работы повышает скорость обработки запросов и надежность системы. Под запросом понимается XML-сообщение, и на его основании 1C-обработка формирует результат. В случае долгой обработки запроса или зависания экземпляра «1С:Предприятия» оставшиеся экземпляры будут взаимодействовать с веб-сервисом. Простые отчеты создаются в среде «1С:Предприятия» за несколько секунд, а в это время новые запросы будут обрабатываться свободными экземплярами «1С:Предприятия». Чтобы получить сложные запросы, время формирования которых превышает 3—5 с, можно реализовать механизм почтовой подписки. После длительных вычислений «1C:Предприятие» отправляет пользователю получившийся отчет по электронной почте.
Рассмотрим, как реализуется такой подход. Вместе с программой «1С:Предприятие» поставляется внешний компонент V7Plus. dll, предоставляющий доступ к объектам V7Mail, V7SysInfo, V7HttpReader и XMLParser. Используя V7HttpReader, мы обеспечим обмен данными с веб-сервисом. Общая схема взаимодействия «1С:Предприятия» и веб-сервиса представлена на рисунке.
Внешнее приложение вызывает метод веб-сервиса. Для поступившего запроса формируется XML-сообщение и выделяется уникальный номер. XML-сообщение сохраняется в очереди запросов, представляющей собой хэш-таблицу (Hashtable). Роль ключа к ней играет сформированный уникальный номер. 1С-обработка периодически опрашивает веб-сервис на наличие сообщений, ожидающих обработку. Если в очереди запросов имеется сообщение, оно передается 1C-обработке и около него выставляется флаг InProcess.
По окончании вычисления заложенного алгоритма 1C-обработка передает результат веб-сервису. Это может быть статус успеха операции или готовый отчет. Сообщению выставляется статус завершения (Completed). Теперь веб-метод может удалить обработанное сообщение из очереди запросов и выдать результат внешнему приложению. У каждого сообщения, находящегося в очереди, есть время жизни, по окончании которого оно удаляется из очереди и считается необработанным. Внешнее приложение исключает невыполненное сообщение. Механизм с использованием времени жизни сообщения предохраняет очереди сообщений от потока большого количества запросов, а также в случае незапущенных 1C-обработок.
Результаты тестирования скорости выполнения запросов показали, что применение запуска 1C-обработок на распределенных в сети компьютерах существенно повышает производительность и надежность веб-сервиса. Кроме того, кэшированием данных на стороне веб-сервиса удается также увеличить производительность системы.