1
0
mirror of https://github.com/Sebekerga/native_api_1c.git synced 2025-06-14 23:45:13 +02:00
Go to file
2023-08-11 11:20:20 +06:00
2023-08-10 14:37:42 +06:00
2023-08-10 12:57:52 +06:00
2023-08-10 10:48:10 +06:00
2023-08-10 10:52:15 +06:00
2023-08-10 12:48:16 +06:00
2023-08-11 11:20:20 +06:00

Описание

Библиотека для простой реализации внешней компоненты для 1С на чистом Rust, основано на примере, созданным пользователем medigor

Библиотека делится на два подмодуля:

  • native_api_1c_core описывает все необходимое для реализации ВК
  • native_api_1c_macro предоставляет инструмент для значительного упрощения описания компоненты, беря на себя реализацию свойства native_api_1c_core::interface::AddInWrapper

Пример реализации простой компоненты:

# Cargo.toml
[package]
name = "my_addin"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib"]

[dependencies]
utf16_lit = "2.0"
native_api_1c = "0.10.1"
// src/lib.rs
use std::sync::Arc;

use native_api_1c::{native_api_1c_core::ffi::connection::Connection, native_api_1c_macro::AddIn};

#[derive(AddIn)]
pub struct MyAddIn {
    // соедиенение с 1С для вызова внешних событий
    #[add_in_con]
    connection: Arc<Option<&'static 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),
            some_prop: 0,
            protected_prop: 50,
            my_function: Self::my_function,
            my_procedure: Self::my_procedure,
            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;
    }
}
Description
Crate for simple implementation of Component for Native API 1C:Enterprise written in rust
Readme 253 KiB
Languages
Rust 100%