Документооборот ПРОФ
Документооборот КОРП
Документооборот государственного учреждения
01.08.2016

Создание и использование внешней компоненты на 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). Копировать в буфер обмена
    {
    eVersion = 0, // 
    eGetImageFragment, // 
    eMethLast // Always last
    };
  4. В массивах строк g_MethodNames и g_MethodNamesRu указать названия своих функций на английском и русском языках. Рекомендуется оставить функцию Версия, в дальнейшем она пригодится для поддержки работы компоненты.
  5. В строковом литерале g_kClassNames указать свое имя класса, например MyAddIn.
  6. В функции GetNParams указать число аргументов для своих методов.
  7. При необходимости в функции GetParamDefValue указать аргументы по умолчанию для своих методов.
  8. В функции HasRetVal указать, возвращает ли ваша функция значение. Например: Копировать в буфер обмена
    case eGetImageFragment:
    return true;
    
  9. В функции CallAsFunc добавить код одной или нескольких новых функций.

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

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

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

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

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

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

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

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

Копировать в буфер обмена
НачатьУстановкуВнешнейКомпоненты((ОписаниеОповещения, "ОбщийМакет.КомпонентаВырезанияКартинки"); 

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

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

Копировать в буфер обмена
 
ПодключитьВнешнююКомпоненту("ОбщийМакет. МойМакет", "МойМакетAddIn", ТипВнешнейКомпоненты.Native);
МояКомпонента = Новый("AddIn.МойМакетAddIn.AddInNativeExtension");	

Текст МойМакет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бит, сборки для разных веб-браузеров. Подробнее.