Разъяснение внешних компонент

17.06.21

Разработка - Разработка внешних компонент

Более пятилетки назад, еще в 2015 году я написал свою внешнюю компоненту на Visual Basic 6. По сути, это была простая обертка для доступа к функция DLL. Потом написал еще одну обертку уже для другой DLL, от другого оборудования. На этом моё писательство внешних компонент и ограничилось. И вот в 2020 году существенно изменилось SDK оборудования, для которого было написано SDK. А Visual Basic прекратил свое существование. На нем еще можно писать внешние компоненты, но уже только под 32 разряда. Пришлось искать новые средства для разработки, поддерживающие 64-разрядные платформы. И на этом пути пришлось потратить более 6 часов для выбора инструмента и его настройки.

Скачать файлы

Наименование Файл Версия Размер
Образец внешней компоненты
.zip 12,98Mb
7
.zip 12,98Mb 7 Скачать

Отличие ВК, COM и Native

Удивительно, но я, столько лет использовавший в практике внешние компоненты, и даже являющийся их разработчиком, так до конца и не понимал различиям между их реализациями.

Объясню по-простому. Есть COM-объекты, например когда вы пишете Новый COMобъект(«Excel.Application»), создается COM-объект со своими свойствами и методами. Это хорошо знакомые любому 1С-нику сущности. Здесь «Excel.Application» — название COM-класса. Такие COM-объекты можно использовать в любом приложении, не только в 1С.

ВК, написанная по технологии COM, тоже имеет название COM-класса. Если написать Новый COMобъект(«AddIn.MyVK»), то тоже будет создан COM-объект, но получить через него доступ к методам внешней компоненты нельзя. Методы ВК описываются в специальном формате и становятся доступны только после подключения по функции ПодключитьВнешнююКомпоненту( «AddIn.MyVK»), которая возвращает уже НеизвестныйОбъект, а не COMОбъект.

ВК по технологии COM соблюдают свой стандарт еще со времен 1C 7.7, поэтому работают одинаково хорошо в 1С 7.7 и 1С 8. Разумеется, такую компоненту нельзя будет использовать за пределами 1С, потому что этот стандарт COM разработан и применяется только в 1С.

В 1С 8 применили новую технологию написания ВК — Native. Она позволяет обойтись без COM-обвязки, 1С разбирает DLL Native компоненты, определяет свойства и методы и подключает ее к использованию. Здесь уже не используется имя класса, ВК подключается из DLL.

Native компоненты тоже можно использовать только в 1С.

Использование ВК на сервере

В моей практике нужно было организовать доступ для обслуживания оборудования через ВК по расписанию. Для этого планировалось использовать регламентные задания на сервере 1С.

Но из-за особенностей реализации на сервере 1С могут использоваться только Native-компоненты. Поэтому COM-компонента не запускалась на сервере.

Выход был найден в том, что по расписанию запускалось приложение 1С, а из него уже — необходимая обработка обслуживания. В приложении компонента прекрасно подключалась.

От ВК назад к COM

Но вот что удивительно, на сервере 1С можно использовать обычные COM-объекты.

Поэтому если для компоненты важно, чтобы она работала на сервере, можно добавить в COM-компоненту обычные методы COM-объекта, важные на сервере. Ну или целиком отказаться от технологии ВК-компонент и реализовать COM-Объект.

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

Но в моем случае мне нужно было написать простую обертку, которая вызывала бы функции из DLL. Когда я разрабатывал COM-ВК, я не знал, что можно просто написать COM-объект и я получил бы тот же результат.

32 и 64 разряда

В принципе, можно было бы написать компоненту и на Visual Basic, но он не умеет генерировать 64-разрядные компоненты. А учитывая, что у 1С появилось 64-разрядное клиентское приложение, которое уже довольно широко используется, пришлось бы только ради ВК, написанной по 32-разрядной технологии, использовать 32-разрядную версию клиента 1С. Это неудобно, поэтому, как бы хорош не был VB, от него нужно отказаться.

Отказываться надо и по другой причине. VB больше не сопровождается, поэтому начинать на нем новые проекты просто не имеет смысла. Нужно идти «в ногу со временем».

Net или C++

Реальность такова, что Visual Basic был вытеснен C# (Си Шарп). А этот язык требует для выполнения своих приложений платформу Net.

Поэтому ВК, разработанные на C# (и вообще под Net), даже для требуют требуют regasm. Кроме того, там возникает чехарда с версиями Net, рекомендуется делать сборки под стабильные версии Net.

Для разработки простой обертки над DLL Net избыточна и излишня. С другой стороны, разработка на C# проще, чем на C++, но, увы, Net будет мешать прозрачности решения.

Однако важно понимать, что на C++ намного более сложно программировать, чем на C#, особенно для 1С-ника, который привык к Basic-подобному языку. Сопровождать вашу компоненту будет проще, если она будет написана на C#, да и Net сейчас распространена во всей экосистеме Windows.

На чем разрабатывать ВК в 2020

Под Windows из вменяемых средств разработку можно вести только в Visual Studio. Для индивидуальных разработчиков (не компаний) этот инструмент бесплатный.

Удивительно, но на ИТС в разделе «Технология внешних компонент» 1С в своих примерах разработки ВК на Visual Studio выкладывает только проект Native-ВК и то под довольно древний релиз Visual Studio, поэтому просто так его не запустить.

Хотя сам по себе Visual Studio довольно сложный инструмент, чтобы им пользоваться, начинающему нужно потратить несколько часов на его предварительную настройку.

Первоначально у меня получилось скомпилировать пример COM-ВК на C# отсюда. Но потом я решил, что для моих целей Net — излишня.

Тогда я использовал статью по разработке COM-объекта с нуля на Visual Studio 10. К сожалению, в новых версиях VS отключен мастер по добавлению свойств и методов в COM-объект, но удалось их добавить вручную:

Место, куда добавлять методы, выделил. Свойства не использую.

Статья написана по результатам обсуждения на Мисте. Поиск адекватного решения для задачи написания ВК в 2020 году длился более недели. Но в итоге инструмент был найден и первая тестовая ВК с одним методом написана.

Прикладываю файл с тестовой ВК из одного метода: anvizcchex-cpp-com-s-edinstvennym-metodom-test

Компоненту AnvizCCHEX.dll надо зарегистрировать стандартно через regsvr32.exe и потом можно проверить ее работоспособность кодом на 1С:

тест = Новый COMОбъект(«AnvizCCHEX.Device»);
рез = тест.Test();
Сообщить(рез); //Должно быть выведено 1

Заключение

Для меня разработка внешней компоненты для 1С в 2020 году стало настоящим испытанием, вызову моему упорству.

Хорошо, что у меня был заказ от клиента, для себя я может быть и сдался бы. А так мне просто необходимо было найти решение.

Для меня этот проект стал еще одним подтверждением моей способности добиваться результата в сложных условиях. А также немного прокачал терпение к людям, потому что программисты, которые сталкивались с ВК, немного снисходительно относились в консультациях к новичку в теме. И мне было немного обидно, что со мной, опытным программистом 1С, общаются как с зеленым юнцом. Но я поборол эти психологические проблемы, потому что по сути да, в технологиях ВК я «мало пороху нюхал».

Хочу также выразить признательность Serginio1 за поддержку и консультации на Мисте, иногда даже непрошенные, но всегда полезные.

Проект успешно завершил, компоненту сдал заказчику.

См. также

Внешняя компонента WebSocket для 1С (c поддержкой Authorization token bearer)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента в виде библиотеки (.dll файл), позволяющая посылать команды и получать ответы по протоколу WebSocket из 1С. Компонента работает только на стороне "клиента".

4440 руб.

22.06.2020    15998    13    33    

19

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    51450    32    69    

41

Компонента ExchangeStruc (Структура Обмена). Прямой обмен данными между потоками, сессиями и окнами.

Разработка внешних компонент Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 Платформа 1С v8.1 Россия Платные (руб)

Аддон "Структура Обмена" (ExchangeStruc) - это компонента, которая обеспечивает доступ к разделяемым процессом структурам, аналогичным структурам 1С. Обеспечивает прозрачную передачу данных примитивных типов, в том числе Двоичных данных, в режиме Реального времени между разными контекстами (формами) или потоками одного процесса. В перспективе функционал будет расширен для обмена между процессами, даже разных версий платформ. Совместим с версиями Windows рабочих станций и серверов, с платформами 1С разных версий и релизов в режиме Native начиная с 8.2, и в режиме COM начиная с версий 7.7. По скорости чтения и записи лишь немногим уступает стандартной структуре 1С. НОВОЕ: Добавлен функционал регистрации компоненты COM в качестве OLE Auto (COMОбъект) для поддержки её работы в серверах старых версий 1С: 8.0 и 8.1, где работа с компонентами исключена. Теперь можно коммуникацию с Фоновыми заданиями на этих версиях проводить.

7200 руб.

19.04.2023    4632    1    0    

3

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    24990    129    93    

78

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44103    115    64    

58

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    34266    100    123    

107

Внешняя компонента для работы с Apach Kafka

Инструментарий разработчика Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример взаимодействия 1С с Apach Kafka посредством внешней компоненты, разработанной на основе официальной библиотеки librdkafka (the Apache Kafka C/C++ client library).

22.11.2023    2145    41    ivan1703    25    

37

Внешняя компонента GraphQL клиент для 1С

Разработка внешних компонент Платформа 1С v8.3 Платформа 1C v8.2 Платные (руб)

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    2245    1    0    

1
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 87 15.09.21 15:39 Сейчас в теме
Поэтому ВК, разработанные на C# (и вообще под Net), даже для требуют требуют regasm.

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

Колхоз
Первоначально у меня получилось скомпилировать пример COM-ВК на C# отсюда.

Нерабочая ссылка
Статья написана по результатам обсуждения на Мисте.

Нерабочая ссылка
2. user626743_2mugik 14.10.21 14:17 Сейчас в теме
С++ как то ближе к телу что-ли .Ну его етот Нет.
3. Serginio 933 13.12.21 18:53 Сейчас в теме
>>Правда, в такой реализации не будут доступны ВнешниеСобытия, дескриптор окна от 1С, AppDispatch от 1С, возможность отказаться от изменения реестра, многопоточность.

Для Сервера это и не нужно

Если обязательно хочется ВК на .Net то можно использовать
Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux

Правда писалось это давно. Нужно подправить
Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
https://infostart.ru/1c/articles/534901/
Но как то она не особо пользовалась спросом.
Сейчас нужно пересобрать под новые версии https://docs.microsoft.com/ru-ru/dotnet/core/tutorials/netcore-hosting
А для линукса добавить условную компиляцию

Интерфейсы API среды выполнения .NET Core находятся в coreclr.dll (в Windows), в libcoreclr.so (на платформе Linux) или в libcoreclr.dylib (в macOS). Первым шагом для размещения .NET Core является загрузка библиотеки CoreCLR. Некоторые основные приложения проверяют разные пути или используют входные параметры для поиска библиотеки, пока другие могут загрузить ее по заранее определенному пути (рядом с основным приложением, например, или из известного расположения на компьютере).
После обнаружения библиотека загружается с помощью LoadLibraryEx (в Windows) или dlopen (в Linux или macOS).
sh00m; kote; +2 Ответить
4. sh00m 45 07.08.22 11:47 Сейчас в теме
(3) Сергей, если у вас получится пересобрать либы (и обновить исходники) для использования c клиентом 32/64 да еще и под Linux, это будет просто великолепно. Признаться, я сейчас даже собрать NetObjectToNative в свежей студии с установленным core SDK 6.0.101 не могу ... да чего уж там собрать, он его даже не открывает, говорит, что xproj давно не работает.
5. sh00m 45 08.08.22 11:34 Сейчас в теме
Получилось у меня пересобрать под современной visual studio 2022 проекты NetObjectToNative и AddInNetObjectToNative, а вот что с ними делать под linux чтобы заставить 1С использовать свою DLL, как я это делаю с помощью NetObjetToIDispatch45 сейчас под виндой - совершенно не понятно :) Свою DLL переписал под .NET 6.0, опубликовал в виде nuget-пакета со всеми зависимостями...
6. sh00m 45 09.08.22 06:26 Сейчас в теме
Пытаюсь взлететь под виндой, 1С-ка ругается на строку: рез = Новый("AddIn.NetObjectToNative.NetObjectToNative");
говорит:
Тип не определен (AddIn.NetObjectToNative.NetObjectToNative)

P.S. Странно, что Врап = Новый("AddIn.NetObjectToNative.LoaderCLR"); из этой же либы отрабатывает совершенно нормально
Оставьте свое сообщение