Многие слышали о выходе новой версии 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С - выводит модальное диалоговое окно.
Такие ошибки можно находить в бета-версии, но никак не в официальном релизе.