alexkmbk / RegEx1CAddin

Native API component for executing regular expressions on 1C: Enterprise platform / Внешняя Native API компонента для выполнения регулярных выражений на платформе 1С:Предприятие 8
The Unlicense
173 stars 32 forks source link

Как установить библиотеку/компонент и привязать к 1с? #15

Open idleGH opened 2 years ago

idleGH commented 2 years ago

Подскажите, как установить данный компонент? Имеет ли он зависимости? 5 часов бьюсь. Спасибо!

alexkmbk commented 2 years ago

@idleGH Никаких внешних зависимостей у компоненты нет. Подключение компоненты выполняется стандартным образом, как и любые другие внешние NativeAPI компоненты. Вы подключаете на клиенте или на сервере? Если на клиенте, то в асинхронном режиме? Может быть на веб клиенте? Какая платформа используется: Linux, Windows, MacOS, Android?

idleGH commented 2 years ago

Спасибо за ответ! Утро вечера мудренее! Вопрос был более банален (на тостом). Описал подключение в статье: https://zen.yandex.ru/media/id/5c3b43cb27f43a00acb0e485/podkliuchenie-regex1caddin-k-1s-s-kartinkami-62107450b0186b70eb604c4c Поправьте, если где накосячил!

alexkmbk commented 2 years ago

Спасибо за ответ! Утро вечера мудренее! Вопрос был более банален (на тостом). Описал подключение в статье: https://zen.yandex.ru/media/id/5c3b43cb27f43a00acb0e485/podkliuchenie-regex1caddin-k-1s-s-kartinkami-62107450b0186b70eb604c4c Поправьте, если где накосячил!

Клево :-) Только шаг с распаковкой *.dll в директорию 1с лишний, достаточно в общий макет "RegEx" загрузить соответствующий zip архив с компонентами: RegEx1CAddin_14.zip - для windows и linux RegEx1CAddin_Android_14.zip - для андроид RegEx1CAddin_Browsers_14.zip - для веб браузера Chrome под Windows RegExMac64_14.so - для MacOS. Но для MacOS не нужно загружать в общий макет, платформа этого не поддерживает, поэтмоу в данном случае нужно загружать из внешнего файла, с помощью метода ПодключитьВнешнююКомпоненту

Если требуется поддержка под все платформы сразу, необходимо все эти файлы объединить в один zip архив (ну кроме MacOS опять же) и дописать расположенный внутри файл MANIFEST.XML

idleGH commented 2 years ago

Проблема и была в том, что пока файлы не перенёс ничего не хотело работать (права доступа под win проверил). Пол ночи бился над этим об стену. В результате сделал и родил статью! За поддержку спасибо!

richdenis86 commented 1 year ago

Кидаете архив в общие макеты , можно весь зип и в модуле формы пишем код связываем команду из моего кода, просто немогу кинуть обработку, отсюда копирнете,сори за тупой редактор так форматирует то что я тут пишу)))

/////////////////////////////////////////////////////////////////////////////// &НаКлиенте Процедура ПроверитьДанныеВывестиСообщение(Команда) ПроверитьДанные(); КонецПроцедуры

&НаКлиенте Функция ПроверитьДанные()

//Получим внешнюю компоненту из общих макетов
Рег = КомпонентаРег();

Если Рег = Неопределено Тогда
    возврат Неопределено;                   
КонецЕсли;

Попытка
   Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)", Истина); 
Исключение
    ВызватьИсключение НСтр("ru = 'Ошибка вызова метода Рег компоненты Regex.'") 
    + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки; 

Сообщить(Рег.Количество()); // 1 - всего один результат   

Сообщить(Рег.КоличествоВложенныхГрупп()); // 2 - две подгруппы (submatches)

Пока Рег.Следующий() Цикл
Сообщить(Рег.ТекущееЗначение); // Hello world
Сообщить(Рег.ПолучитьПодгруппу(0)); // Hello
Сообщить(Рег.ПолучитьПодгруппу(1)); // world
КонецЦикла;

Сообщить(Рег.Количество());
Сообщить(Рег.Совпадает("Hello world", "([A-Za-z]+)\s+([a-z]+)"));
Сообщить(Рег.Заменить("Hello world", "([A-Za-z]+)\s+([a-z]+)", "Текст для замены"));

КонецФункции

&НаКлиенте Функция КомпонентаРег()

КомпонентаДвоичныеДанные = ПолучитьКомпонентуРег();
АдресМакета = ПоместитьВоВременноеХранилище(КомпонентаДвоичныеДанные);

Если ПодключитьВнешнююКомпоненту(АдресМакета, "Component", ТипВнешнейКомпоненты.Native) Тогда
    ВнешняяКомпонента = Новый("AddIn.Component.RegEx");
Иначе
    УстановитьВнешнююКомпоненту(АдресМакета);
    Если ПодключитьВнешнююКомпоненту(АдресМакета, "Component", ТипВнешнейКомпоненты.Native) Тогда
        ВнешняяКомпонента = Новый("AddIn.Component.RegEx");
    Иначе
        Сообщить(ОписаниеОшибки());
        ВнешняяКомпонента = Неопределено;
    КонецЕсли;    
КонецЕсли;    

Возврат    ВнешняяКомпонента;

КонецФункции

&НаСервере Функция ПолучитьКомпонентуРег() Экспорт Возврат ПолучитьОбщийМакет("RegEx"); КонецФункции ///////////////////////////////////////////////////////////////////////////////