Библиотека для простой реализации внешней компоненты для 1С на чистом Rust, основано на примере, созданным пользователем medigor
Библиотека делится на два подмодуля:
- native_api_1c_core
описывает все необходимое для реализации ВК
- native_api_1c_macro
предоставляет инструмент для значительного упрощения описания компоненты, беря на себя реализацию свойства native_api_1c_core::interface::AddInWrapper
#[add_in_prop(...)]
name
- имя свойства в 1Сname_ru
- имя свойства в 1С на русскомreadable
- свойство доступно для чтения из 1Сwritable
- свойство доступно для записи из 1СДоступные типы свойств: i32
, f64
, bool
, String
#[add_in_func(...)]
name
- имя свойства в 1Сname_ru
- имя свойства в 1С на русском
#[arg(...)]
, для каждогоInt
- i32
Float
- f64
Bool
- bool
Str
- String
Date
- chrono::DateTime<chrono::FixedOffset>
Blob
- Vec<u8>
#[returns(...)]
Int
- i32
Float
- f64
Bool
- bool
Str
- String
Date
- chrono::DateTime<chrono::FixedOffset>
Blob
- Vec<u8>
None
- ()
Result<T, ()>
- T
: Одно из выше перечисленных. Необходимо указать result
в атрибуте #[returns(...)]
```toml
[package] name = "my_addin" version = "0.1.0" edition = "2021"
[lib] crate-type = ["cdylib"]
[dependencies] utf16lit = "2.0" nativeapi_1c = "0.10.1" ```
```rust // src/lib.rs use std::sync::Arc;
use nativeapi1c::{nativeapi1ccore::ffi::connection::Connection, nativeapi1cmacro::AddIn};
pub struct MyAddIn { // соедиенение с 1С для вызова внешних событий #[addincon] connection: Arc
// свойство, доступное для чтения и записи
#[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)]
pub some_prop: i32,
// свойство, доступное только для чтения
#[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)]
pub protected_prop: i32,
// функция, принимающая один или два аргумента и возвращающая результат
// в 1С можно вызвать как:
// ОбъектКомпоненты.МояФункция(10, 15); // 2й аргумент = 15
// ОбъектКомпоненты.МояФункция(10); // 2й аргумент = 12 (значение по умолчанию)
// Если функция возвращает ошибку, но не паника, то в 1С будет вызвано исключение
#[add_in_func(name = "MyFunction", name_ru = "МояФункция")]
#[arg(Int)]
#[arg(Int, default = 12)]
#[returns(Int, result)]
pub my_function: fn(&Self, i32, i64) -> Result<i32, ()>,
// Процедура, ничего не получающая, ничего не возвращающая
#[add_in_func(name = "MyProcedure", name_ru = "МояПроцедура")]
pub my_procedure: fn(&mut Self),
private_field: i32,
}
impl MyAddIn { pub fn new() -> Self { Self { connection: Arc::new(None), someprop: 0, protectedprop: 50, myfunction: Self::myfunction, myprocedure: Self::myprocedure, private_field: 100, } }
fn my_function(&self, arg: i32, arg_maybe_default: i64) -> Result<i32, ()> {
Ok(self.protected_prop
+ self.some_prop
+ arg
+ self.private_field
+ arg_maybe_default as i32)
}
fn my_procedure(&mut self) {
self.protected_prop += 1;
}
} ```