Меню

1с внешние компоненты windows 10

Создание и использование внешней компоненты на C++


Общее описание

Внешние компоненты – это сторонние библиотеки, которые подключаются к системе «1С:Предприятие» для расширения ее возможностей. Внешние компоненты используются для решения задач, которые сложно или невозможно реализовать на встроенном языке «1С:Предприятия».

К таким задачам можно отнести:

  • подключение торгового оборудования, например, сканера штрихкодов или принтера этикеток;
  • обработку большого объема данных, например, код обработки больших текстов во внешней компоненте отработает в разы быстрее аналогичного кода на встроенном языке, и другие.

Внешние компоненты в системе «1С:Предприятие» используются как для сервера (Windows и Linux, 32 или 64 бит), так и для клиента («тонкий» и веб-клиент).

Порядок создания и подключения внешней компоненты


Создание внешней компоненты

Создание внешней компоненты выполняется в программе Microsoft Visual Studio. В качестве примера рассмотрим создание компоненты, которая вырезает часть изображения для распознавания.
Скачать шаблон внешней компоненты (шаблон разработан для сервера Windows, 32 бит).

Самый простой способ создания компоненты — это заменить нижеперечисленные функции в готовом шаблоне внешней компоненты:

  1. Присвоить классу C1CGetImageFragment новое имя, например MyAddIn .
  2. Также пеименовать файлы, например 1CGetImageFragment.h на MyAddIn.h и 1CGetImageFragment.cpp на MyAddIn.cpp .
  3. В файле MyAddIn.h в перечислении enum Methods указать свои имена перечисления (помимо eVersion). Копировать в буфер обмена
  4. В массивах строк g_MethodNames и g_MethodNamesRu указать названия своих функций на английском и русском языках. Рекомендуется оставить функцию Версия , в дальнейшем она пригодится для поддержки работы компоненты.
  5. В строковом литерале g_kClassNames указать свое имя класса, например MyAddIn .
  6. В функции GetNParams указать число аргументов для своих методов.
  7. При необходимости в функции GetParamDefValue указать аргументы по умолчанию для своих методов.
  8. В функции HasRetVal указать, возвращает ли ваша функция значение. Например: Копировать в буфер обмена
  9. В функции CallAsFunc добавить код одной или нескольких новых функций.

После замены функций необходимо выполнить следующие шаги:

Шаг 1. Скомпилировать компоненту в Release-варианте и получить файл в виде dll-библиотеки, например MyAddIn.dll . Этот файл необходимо разместить рядом с файлом Manifest.xml .

Шаг 2. В файл Manifest.xml необходимо внести следующие изменения:

  • вписать название компоненты в поле path=» MyAddIn.dll» ;
  • при необходимости изменить разрядность в поле arch=»i386″ , значение по умолчанию — 32 бит;
  • указать операционную систему в поле os=»Windows» .

Шаг 3. Файлы MyAddIn.dll и Manifest.xml поместить в zip-архив с произвольным именем, например MyAddIn.zip .

Подключение внешней компоненты

Подключение внешней компоненты выполняется в конфигураторе и состоит из следующих шагов:

Шаг 1. Добавить общий макет с типом ДвоичныеДанные и назвать его, например МойМакет . Далее загрузить в макет файлы из подготовленного архива с внешней компонентой с помощью команды карточки макета Загрузить из файла — MyAddIn.zip .

Шаг 2. Если компонента еще не установлена (метод ПодключитьВнешнююКомпоненту возвращает Ложь ),нужно приступить к установке. Для этого предусмотрен вызов:

После установки компоненты не обходимо перейти к ее подключению.

Шаг 3. Подключение внешней компоненты выполняется в том месте конфигурации, где ее планируется использовать. Пример подключения внешней компоненты можно посмотреть в модуле РаботаСКартинкамиКлиент типовой конфигурации. Пример кода подключения:

Текст МойМакетAddIn — произвольный. Единственное условие — он должен совпадать в приведенных выше вызовах.
Строка AddInNativeExtension — уже указана в шаблоне компоненты ( RegisterExtensionAs ), ее не надо менять.
Переменную МояКомпонен та рекомендуется описать в мод уле управляемого и обычного приложения как Перем МояКомпонента Экспорт .

Шаг 4. Вызов кода внешней компоненты.

Скачать пример внешней компоненты в архиве 1CGetImageFragment.zip . Компонента вырезает часть изображения с заданными координатами и размером и предназначена только для работы в 32-разрядном Windows, в тонком клиенте.

Порядок тестирования и отладки

При написании внешней компоненты как правило возникает необходимость отладки. Самый простой способ отладки – это логирование в текстовый файл.
Более продвинутый способ – отладка в программе Microsoft Visual Studio. Для отладки в Microsoft Visual Studio необходимо:

  1. Создать компоненту в Debug-варианте, например MyAddIn.pdb .
  2. Расположить pdb-файл в каталог установки внешних компонент вида C:\Users\Имя пользователя\AppData\Roaming\1C\1Cv82\ExtCompT\ ;
  3. В режиме конфигуратора запустить «тонкий» клиент «1С:Предприятия»( 1cv8c.exe );
  4. Поставить в конфигураторе точку останова перед вызовом МояКомпонента.МояФункция и дождаться ее срабатывания.
  5. В Microsoft Visual Studio подключиться отладчиком к 1cv8c.exe .
  6. В Microsoft Visual Studio создать точку останова.
  7. В «1С:Предприятии» выполнить вызов МояКомпонента.МояФункция , при этом в Microsoft Visual Studio должна сработать точка останова.
  8. В Microsoft Visual Studio отладить работу компоненты.

Важно: при перекомпиляции внешней компоненты, нужно не только заново подготовить zip-файл ( dll компоненты + manifest.xml ) и загрузить его в общий макет, но и стереть закешированную компоненту dll в каталоге вида C:\Users\Имя пользователя\AppData\Roaming\1C\1Cv82\ExtCompT\ .

Варианты работы компоненты

При разработке внешней компоненты необходимо решить, в каких вариантах она будет работать: Windows/Linux, 32/64 бита, сервер/тонкий клиент/веб-клиент (разные браузеры).

Чтобы компонента работала на сервере, необходимо решить, будет ли она предназначена только для вашей организации или будет использоваться как тиражируемое решение. Для разработки тиражируемого решения необходимо предусмотреть четыре варианта работы – Windows 32бит, Windows 64бит, Linux 32бит, Linux 64бит. Подробнее .

Чтобы компонента работала на клиенте, необходимо решить, будет ли она предназначена только для вашей организации или будет использоваться как тиражируемое решение. Для разработки тиражируемого решения необходимо предусмотреть четыре варианта работы – Windows 32бит, Linux 32бит, Linux 64бит, сборки для разных веб-браузеров. Подробнее .

Источник статьи: http://its.1c.ru/db/content/metod8dev/src/developers/doc8dev/i8105887.htm

1с внешние компоненты windows 10

В отличие от 7.7 необходимо указывать полный путь к DLL (или положить файл DLL в папку BIN платформы 1С:Предприятие). Вместо СоздатьОбъект(«Addin.Имя») используется Новый(«Addin.Имя»), использовать при этом ключевое слово COMОбъект не нужно.

Хранение записей о внешних компонентах в реестре Windows

Зарегистрированная внешняя компонента хранится в реестре следующим образом.
Предположим, что у нас есть внешняя компонента E:\Events\Events.dll.
В 1С мы пишем:

Теперь зайдем в программу regedit.exe (Пуск-Выполнить-Regedit.exe).

Если регистрация прошла успешно, то в реестре мы увидим следующие записи (я сделал поиск по подстроке «AddIn.Events» в редакторе реестра regedit.exe, нажав сочетание клавиш Ctrl-F):

Значение <2E5E6B2C-EFE0-4872-9AB6-DF187B9CE397>является уникальным для каждого OLE-объекта идентификатором (CLSID). Его должен явно задать разработчик в коде внешней компоненты.

Значение ProgID, которое в нашем случае — «AddIn.Events» также задает разработчик внешней компоненты.

Чтобы в реестре появились эти записи, необходимы права доступа

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

Где 1С ищет внешнюю компоненту?

Если при загрузке внешней компоненты вы не указываете полный путь, такой как E:\Events\Events.dll или сетевой путь наподобие \\ВашСервер\ПапкаГдеЛежатВК\Events.dll, то 1С ищет внешние компоненты

-относительно папки 1Cv7\BIN (КаталогПрограммы())
-относительно каталога информационной базы (КаталогИБ())

Метод ЗагрузитьВнешнююКомпоненту(), обнаружив ВК по новому пути, обновляет ее регистрацию в реестре

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

В 1С:Предприятие 8.0 убрана возможность загрузки ВК относительно каталога ИБ.

В 7.7 же, чтобы избежать проблем, всегда убирайте ВК из каталога ИБ, и прописывайте полные пути (или складывайте DLL в общую для всех пользователей папку BIN).

Кардинальное решение проблемы — VKLoader

Имеется компонента VKLoader.dll (автор — Александр Орефков), которая позволяет решить проблемы с регистрацией компонент.

Цитата:
«vkloader (далее ВК) — внешняя компонента для 1С-Предприятия 7.7, которая может загружаться без ее регистрации в реестре, и загружать другие внешние компоненты без их регистрации. Предназначена для беспроблемной загрузки внешних компонент пользователями, не имеющими прав на запись в HKCR ветку реестра.
Принцип работы основан на перехвате обращения 1С к WinAPI функциям CLSIDFromProgID и CoCreateInstance.
Также ВК решает проблему «зависания» процесса 1С в памяти при закрытии программы при использовании несовсем корректно написанных сторонних внешних компонент».

Пример использования vkloader:

Замечу, что сама vkloader «умеет» загружать себя без прав доступа к реестру.

Еще одно решение: RegsvrEx

Автор — AlexQC.
Регистрирует компоненты (OLE-объекты) в пользовательской ветке реестра.
http://infostart.ru/projects/index.php?id=559

Самая простая причина неполадок

Очень часто причиной неработоспособности любого электронного прибора является отсутствие вилки в розетке. Аналогичная ситуация возникает с внешними компонентами, поэтому при их загрузке полезно проверять, а есть ли в наличии указанный файл DLL (к сожалению, этого не делает сам движок 1С:Предприятие 7.7).

Источник статьи: http://kb.mista.ru/article.php?id=419


Adblock
detector