Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tapapax/Addin1C
Small wrapper for 1C:Enterprise 8.x NativeAPI interface.
https://github.com/tapapax/Addin1C
Last synced: about 2 months ago
JSON representation
Small wrapper for 1C:Enterprise 8.x NativeAPI interface.
- Host: GitHub
- URL: https://github.com/tapapax/Addin1C
- Owner: tapapax
- Created: 2013-05-02T14:17:38.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2015-11-05T15:01:48.000Z (about 9 years ago)
- Last Synced: 2024-08-01T05:20:03.790Z (5 months ago)
- Language: C++
- Size: 247 KB
- Stars: 37
- Watchers: 8
- Forks: 19
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-1c - Small Wrapper AddIn 1C - пример работы с Native API (Внешние компоненты)
- awesome-1c - Small Wrapper AddIn 1C - пример работы с Native API (Интеграции / Внешние компоненты)
README
Эта библиотека является враппером для интерфейса компонент, использующих технологию NativeAPI, для платформы 1С:Предприятия 8.x.
Каталог Example содержит **пример компоненты**. Его можно взять за основу создания своего AddIn'а.
Использование:
Для определения класса, публикующегося компонентой, необходимо определить класс-наследник шаблонного класса AddinObject, указав в качестве его параметра шаблона имя определяемого класса. Класс должен содержать статическую функию getMetadata, в которой компонента описывает свой интерфейс, состоящий из методов и свойств.
Пример маленького класса:```c++
#includeclass Multiplier : public Addin1C::AddinObject {
public:
static void getMetadata(Metadata& md) {
md.addFunction(L"Multiply5", L"УмножитьНа5", 1, &Multiplier::MultiplyWith5);
}static std::wstring getName() {
return L"Calculator";
}Addin1C::Variant MultiplyWith5(Addin1C::VariantParameters& parameters) {
long param = parameters[0];
return param * 5;
}
};
```Обязательными для реализация являются статические методы getMetadata и getName.
Кроме определения класса, необходимо определить функцию addinInitialization, выглядеть которая должна примерно так:
```c++
void addinInitialization(Addin1C::AddinManager& manager) {
manager.registerObject();
}
```Перечисленные в ней классы будут доступны для создания в коде 1С.
Для передачи значений используется тип Addin1C::Variant.
Поддерживаемые типы данных в объекте Addin1C::Variant:
bool - булево
long - число (целое)
double - число (дробное)
string* - строка
wstring - строка
Undefined - неопределено
BinaryData* - ДвоичныеДанные
* - только в направлении [компонента -> 1С].Получение значения из этого объекта осуществляется с помощью шаблонного метода getValue<тип> (или преобразования). Если объект содержит значение другого типа, будет сгенерированно исключение BadCast.
Получить идентификатор типа, хранящегося в объекте Variant, можно с помощью метода type.VariantParameters - это коллекция значений Variant. В нем всегда ровно столько значений, сколько было указано при заполнении метаданных. Функция может изменить значение своих аргументов, все параметры передаются "по ссылке".
По-умолчанию все параметры считаются обязательными. Можно определить часть параметров метода необязательными, указав 5-м аргументом функции addFunction их количество. Необязательными могут быть только последние параметры метода. В случае, если в коде на встроенном языке 1С какие-то параметры будут опущены, в качестве их значения компонента получит объект Undefined.Использование компоненты в коде 1С: Предприятие
===============================================
```
ЛюбоеИмяКомпоненты = "ЛюбоеИмяКомпоненты";
Если НЕ ПодключитьВнешнююКомпоненту(ПутьККомпонентеИлиМакетуСНей, ЛюбоеИмяКомпоненты, ТипВнешнейКомпоненты.Native) Тогда
ВызватьИсключение "Подключить компоненту не удалось!";
КонецЕсли;Объект = Новый("AddIn." + ЛюбоеИмяКомпоненты + ".ИмяОбъекта"); // ИмяОбъекта - возвращаемая getName() строка
Попытка
Результат = Объект.РазвернутьСтроку("Тестовая строка");
Исключение
ВызватьИсключение ОписаниеОшибки() + ": " + Компонента.ОписаниеОшибки();
КонецПопытки;
```