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

17.06.21

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Образец внешней компоненты
.zip 12,98Mb
9
9 Скачать (1 SM) Купить за 1 850 руб.

Отличие ВК, 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 за поддержку и консультации на Мисте, иногда даже непрошенные, но всегда полезные.

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

См. также

Разработка внешних компонент 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 и маркетинг Управленческий учет Платные (руб)

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

18000 руб.

30.05.2017    53810    9    69    

46

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

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

2400 руб.

04.05.2018    46960    123    66    

66

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

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

3000 руб.

12.05.2020    28389    138    100    

90

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

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    958    2    3    

2

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

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

4600 руб.

27.06.2023    3468    2    0    

4

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

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

4440 руб.

22.06.2020    18224    18    33    

22

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

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    77352    72    257    

191

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

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    3630    kovalevdmv    26    

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

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

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

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

Нерабочая ссылка
2. user626743_2mugik 14.10.21 14:17 Сейчас в теме
С++ как то ближе к телу что-ли .Ну его етот Нет.
3. Serginio 941 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 39 07.08.22 11:47 Сейчас в теме
(3) Сергей, если у вас получится пересобрать либы (и обновить исходники) для использования c клиентом 32/64 да еще и под Linux, это будет просто великолепно. Признаться, я сейчас даже собрать NetObjectToNative в свежей студии с установленным core SDK 6.0.101 не могу ... да чего уж там собрать, он его даже не открывает, говорит, что xproj давно не работает.
5. sh00m 39 08.08.22 11:34 Сейчас в теме
Получилось у меня пересобрать под современной visual studio 2022 проекты NetObjectToNative и AddInNetObjectToNative, а вот что с ними делать под linux чтобы заставить 1С использовать свою DLL, как я это делаю с помощью NetObjetToIDispatch45 сейчас под виндой - совершенно не понятно :) Свою DLL переписал под .NET 6.0, опубликовал в виде nuget-пакета со всеми зависимостями...
6. sh00m 39 09.08.22 06:26 Сейчас в теме
Пытаюсь взлететь под виндой, 1С-ка ругается на строку: рез = Новый("AddIn.NetObjectToNative.NetObjectToNative");
говорит:
Тип не определен (AddIn.NetObjectToNative.NetObjectToNative)

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