Новая версия 1С:Предприятие 8.2 конфликтует с C# и .Net framework
Суть конфликта 1С 8.2 с C# и .Net framework в следующем. В версии 8.2 1С анонсировала новый способ написания внешних компонент 1С с использованием так называемого Native API. Самое интересное, что на C# предложенный подход реализовать невозможно, а реализация Native API на VC++/CLI теоретически возможна, но при попытке подключения DLL, скомпилированных с опцией /CLR, происходит зависание 1С (версия 8.2.13.202). Еще один конфликт – в новой версии 1С нет поддержки технологии ActiveX, на основе которой многие разработчики вставляли в формы 1С свои WinForms-приложения.
- Описание
- Подробнее
Описание
Многие слышали о выходе новой версии 1С:Предприятие 8.2 и знают о планах отказаться от поддержки 8.1 в первом квартале 2011 года. Мое мнение – 1С 8.2 – это сырой недоработанный продукт, который можно отнести к пре-бета/бета стадии. А с 8.1 разработчикам проще перейти на Asp.Net (например, через Elisy LinqTo1C), чем на управляемые формы 8.2. К такому выводу я пришел после 2 недельной попытки перевести наши .Net-проекты с версии 8.1 на более новую версию 1С 8.2. Заметка эта написана больше не для критики, а чтобы определить новую для определенного круга .Net-разработчиков проблему, попытаться донести ее до 1С и постараться совместно решить в текущей или новых версиях популярного продукта 1С:Предприятие 8.2.
Суть конфликта 1С 8.2 с C# и .Net framework в следующем. В версии 8.2 1С анонсировала новый способ написания внешних компонент 1С с использованием так называемого Native API. Самое интересное, что на C# предложенный подход реализовать невозможно, а реализация Native API на VC++/CLI теоретически возможна, но при попытке подключения DLL, скомпилированных с опцией /CLR, происходит зависание 1С (версия 8.2.13.202). Еще один конфликт – в новой версии 1С нет поддержки технологии ActiveX, на основе которой многие разработчики вставляли в формы 1С свои WinForms-приложения.
Простейший способ воспроизвести проблему зависания: включить опцию /CLR на проект-пример от 1С про таймер NativeAPI. Зазиповать DLL вместе с файлом MANIFEST.xml в макет кофигурации 1С 8.2 и выполнить следующий код на форме:
&НаКлиенте
Процедура TestNativeApi(Команда)
УстановитьВнешнююКомпоненту("ОбщийМакет.ElisyNetBridge4");
Сообщить(ПодключитьВнешнююКомпоненту("ОбщийМакет.ElisyNetBridge4", "ElisyNetBridge", ТипВнешнейКомпоненты.Native));
TestNativeApiServer();
КонецПроцедуры
&НаСервере
Процедура TestNativeApiServer()
Сообщить(ПодключитьВнешнююКомпоненту("ОбщийМакет.ElisyNetBridge4", "ElisyNetBridge", ТипВнешнейКомпоненты.Native));
КонецПроцедуры
Комментируя код, относящийся к клиенту или серверу, можно понять, что проблема характерна как для клиента, так и для сервера.
Еще одна проблема – отказ от поддержки ActiveX на управляемых формах 1С 8.2. Раньше многие .Net-разработчики писали WinForms проекты, которые можно было вставлять на формы 1С в версии 8.1. Сейчас нужно использовать какие-то обходные маневры, чтобы добиться одинакового со старой версией результата.
Я не хочу сказать, что больше не осталось способов работать с .Net-проектами из 1С, я хочу показать, что новая версия 1С недружелюбно относится к .Net, ограничивая поддержку и переводя свои API на заведомо неподдерживаемый формат.
Последняя важная проблема – это отсутствие заявленной функциональности в технологии написания внешних компонент (ВК) для ВК на основе веб-браузера. Начал делать реализацию ВК для веб-клиента. Долго разобраться не мог, почему не работает, начал копать вглубь исходных кодов JScript. Оказалось функциональность в 1С просто недореализована. В 8.2.10.73 для веб-браузера в коде JScript на команды, например, writeValue, registerProfileAs, readValue стоят тупо заглушки. А addError — вместо того, чтобы выводить ошибку в окно сообщений, как в предыдущих версиях 1С — выводит модальное диалоговое окно. Такие ошибки можно находить в бета-версии, но никак не в официальном релизе.