2

Многопоточность 1C и обратная связь из .Net Framework

by Elisy 2. November 2009 05:53

Многопоточность 1С:Предприятия 7.7/8.0/8.1/8.2 будет реализована в новой версии Elisy .Net Bridge 3.0.

Свершилось давно задуманное. Начиная с третьей версии Elisy .Net Bridge добавляет многопоточность во все популярные версии 1С:Предериятие. Конечно не родными командами 1С, а средствами .Net framework, но многопоточность - настоящая.

Многие скажут, что 1С давно анонсировала выполнение асинхронных фоновых заданий. Но эти фоновые задания реализуются с разными оговорками и особенностями, которые омрачают жизнь разработчикам. В данном случае, например, это касается различия при выполнении фоновых заданий в клиент-серверном и файловом режиме работы 1С. Другой вопрос - что делать пользователям более ранних версий 1С?

Вторым важным нововведением в третьей версии .Net Bridge стала возможность передавать данные из .Net Framework обратно в 1С по инициативе .Net. В 1й и 2й версии связь была в одну сторону, то есть 1С вызывала методы и получала значения свойств объектов .Net framework. Эта возможность открывает дорогу обработке событий .Net из кода 1С.

Сейчас вышла только Альфа-версия компонента для ознакомления, которую можно скачать бесплатно с сайта 1centerprise.com.

Обработка для 1С 8.1, которая прилагается к статье, демонстрирует две обозначенные выше фичи на простейшем примере с таймером. Нужно нажать на кнопку "Выполнить". Таймер запускается и вызывает 1С функцию с интервалом 2 секунды. Количество вызовов контролируется кодом 1С. Параллельно с работой таймера не "замораживается" работа интерфейса 1С.

Обработка 1С 8.1, демонстрирующая реализацию многопоточности

Теперь подробнее о примере. Работа примера начинается с вызова процедуры КнопкаВыполнитьНажатие. Происходит инициализация компонента Elisy .Net Bridge:

AttachAddIn("AddIn.ElisyNetBridge");
AddIn = New("AddIn.ElisyNetBridge");
net = AddIn.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");

Переменной исходныйКод присваивается определение класса C# Пример.Обработчик и код компилируется вызовом процедуры СкомпилироватьИсходныйКод. Подробнее об определении классов С# из 1С можно узнать в статье: "Определение классов .Net и работа с ними в 1С:Предприятие"

Класс Пример.Обработчик реализует 2 свойства: _timer – объект таймера, ThisForm – объект родной 1С-формы и 3 метода RunTimer – запускает таймер, OnTimedEvent – обработчик события для таймера и ClearResources – останавливает таймер и освобождает ресурсы.

Дополнительно о C#-коде можно сказать следующее: ThisForm реализует интерфейс IExpando, который позволяет обращаться к IDispatchEx COM-объектам, которыми являются родные объекты 1С. Из программы 1С можно выполнить присваивание: обработчик.ThisForm = ЭтаФорма. А также обратно получить значение ссылки на форму, например, форма = обработчик.ThisForm. "обработчик" – это объект класса Пример.Обработчик.

Вызов процедуры или функции объекта 1С из C# реализован в методе OnTimedEvent. Для этого процедура или функция 1С должна быть помечена ключевым словом Экспорт. В примере такой процедурой является СобытиеТаймера, которая вызывается с параметрами, переданными из кода C#.

Следует отметить, что после окончания работы программы необходимо освободить занимаемые КОМ-ресурсы в программе C#. В данном случае – это ThisForm-свойство. Методом C# ClearResources() останавливается таймер и выполняется такое освобождение. Если этого не сделать, то после закрытия 1C процесс 1С продолжает работать в невидимом режиме.

Представленная здесь статья открывает новые горизонты в 1С-программировании. Например, решает проблему параллельной работы и получения большого числа писем встроенным клиентом 1С.

Остаются еще вопросы, связанные с использованием методики, например: не затрещит ли по швам сама 1С от такой нагрузки? Одинаково ли будут вести себя все версии 1С 7.7/8.0/8.1/8.2, на которые рассчитан компонент .Net Bridge? Достаточно ли традиционных средств .Net framework для организации многозадачности или есть особенности использования пары 1С и .Net? На все эти вопросы со временем найдутся ответы.

Multithreading.epf (7,38 kb) - внешняя обработка

Tags: ,

1C.Net | C#

Comments

Ionich
Ionich
11/6/2009 11:12:05 PM #

    Хороший сайт, спасибо творцу.

Maryuta
Maryuta
1/26/2010 9:10:35 AM #

хорошие нововведения

Powered by BlogEngine.NET 1.6.0.0
Original Design by Laptop Geek, Adapted by onesoft

Indonesia Furniture Handicraft Wholesale Marketplace : Bisnis Online Rahasia Dahsyat Hidup Sukses dan Uang Melimpah : Travelling : Salehdbrent Sgdashhousedotcom : Used Stationary Bikes : Salehdbrent Sgdashhousedotcom : Used Stationary Bikes : Used Stationary Bikes : Travel Jakarta Bandung: Blogger Indonesia Dukung Internet Aman, Sehat & Manfaat : Hosting Murah Indonesia Indositehost.com : Indonesia Furniture Handicraft Wholesale Marketplace