Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема на Линукс #3

Closed
AleksandrSmith7 opened this issue Aug 31, 2023 · 6 comments
Closed

Проблема на Линукс #3

AleksandrSmith7 opened this issue Aug 31, 2023 · 6 comments
Labels
bug Something isn't working help wanted Extra attention is needed

Comments

@AleksandrSmith7
Copy link

AleksandrSmith7 commented Aug 31, 2023

Снимок экрана от 2023-08-31 10-21-17
Добрый день на Линукс так и не хочет работать библиотека, не могу понять в чем дело. Ubuntu 22.04.3 LTS
Тестил на платформе для Линукс. 1С:Предприятие 8.3, учебная версия (8.3.23.1688)
&НаКлиенте
Процедура НаписатьСообщение(Команда)
Попытка
НачатьУстановкуВнешнейКомпоненты(,"ОбщийМакет.VK");
Сообщить("ОК");
Исключение
Сообщить("Нет")
КонецПопытки;
ПодключитьВнешнююКомпонентуАсинх("ОбщийМакет.VK","Test2",ТипВнешнейКомпоненты.Native);
ВК= Новый("AddIn.Test2.Test2");
Результат = ВК.ОбработатьДанные("Тел","ФИО");
Сообщить (Результат);
КонецПроцедуры
Результат на скриншоте
Описание ошибки:
Тип не определен (AddIn.Test2.Test2)
{Документ.СвязьСКлиентом.Форма.ФормаДокумента.Форма(26)}:ВК= Новый("AddIn.Test2.Test2");

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

Тестовый код

use std::{
// fs::{metadata, File},
// io::Read,
sync::Arc,
};
use native_api_1c::{
native_api_1c_core::ffi::connection::Connection,
native_api_1c_macro::AddIn
};

#[derive(AddIn)]
pub struct Test2 {
#[add_in_con] // соединение с 1С для вызова внешних событий
connection: Arc<Option<&'static Connection>>, // Arc для возможности многопоточности

#[add_in_func(name = "Test2", name_ru = "ОбработатьДанные")] 
#[arg(Str)]
#[arg(Str)] 
#[returns(Str, result)] 
read_bytes: fn(&Self, String, String) -> Result<String, Box<dyn std::error::Error>>, 

}

impl Test2 {
pub fn new() -> Self {
Self { connection: Arc::new(None),
read_bytes: Self::read_bytes, }
}

pub fn read_bytes(&self, imya: String, telefon: String) -> Result<String, Box<dyn std::error::Error>> { 
    let k=" Взаимодействие раст и 1С работает".to_string();
    let f=imya+&telefon+&k;
    Ok(f) 
} 

}

@Sebekerga
Copy link
Owner

Sebekerga commented Aug 31, 2023

Пару моментов:

  1. Обверните пж в кодовые блоки, а то читается тяжело. Пример
  2. Можете так же приложить ваш файл Cargo.toml?
  3. И результат команды cargo expand > expand.rs (сохранится в файл expand.rs)

По возможности так же кидайте длинные файлы под спойлер. Пример:

<details>
  <summary>Кодовый блок под сполйером</summary>
  Описание
  
  ```rust
  "Ваш длинный кусок кода"
  ```
</details>

То, что у вас не работает - странно, давайте разбираться. Я не тестил на бубунте, тестил только на манжаре, но не думаю, что там есть какие-то существенно влияющие отличия, так что скорее всего какая-то бага

@Sebekerga
Copy link
Owner

Sebekerga commented Aug 31, 2023

image

У меня вроде б завелся ваш код, хотя обращаться по имени процедуры "ОбработатьДанные" получается почему-то через раз (мб из-за языка системы или чего-то еще), но в любом случае, у вас ошибка не в этом. Поэтому будем смотреть дальше

@Sebekerga Sebekerga added bug Something isn't working help wanted Extra attention is needed labels Aug 31, 2023
@AleksandrSmith7
Copy link
Author

Файлы для разбора.zip
Добавил все файлы в архив. Если хотите могу предоставить Анидеск например.
Спасибо за замечания, учту, я на гит новичок.

@Sebekerga
Copy link
Owner

Sebekerga commented Aug 31, 2023

Да ничего страшного :)

Я кажется увидел у вас проблему в коде на стороне 1С:

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

Вы вызываете асинхронную функцию ПодключитьВнешнююКомпонентуАсинх, но не ожидаете ее завершения, после сразу же пытаетесь создать новый объект компоненты. Добавьте оператор Ждать:

  Ждать ПодключитьВнешнююКомпонентуАсинх("ОбщийМакет.VK","Test2",ТипВнешнейКомпоненты.Native);
//^^^^^
ВК = Новый("AddIn.Test2.Test2");

Если это не исправит проблему, будем копать дальше :)

@AleksandrSmith7
Copy link
Author

AleksandrSmith7 commented Aug 31, 2023

Все оказалось проще чем я думал
image
Нужно было включить режим использования синхронных вызовов в конфигурации. Спасибо за помощь) Работает все на Линукс.

@Sebekerga
Copy link
Owner

Отлично

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants