Внешняя компонента для выполнения регулярных выражений

Публикация № 940766 12.11.18

Интеграция с оборудованием и сервисами - Разработка внешних компонент

Регулярные выражения RegEx Внешняя компонента

Внешняя Native API компонента для выполнения регулярных выражений на платформе 1С:Предприятие 8. Написана на C++. Используется движок PCRE2 версии 10.36 (до версии 13, использовался boost::regex v 1.69). Версия синтаксиса Perl Compatible Regular Expressions.

Текущая версия собрана для следующих платформ:
Windows 32bit 

Windows 64bit 

Linux 32bit 

Linux 64bit

MacOS 64bit

Android ARMv7-A

Android x86-64

Google Chrome (Windows)

Тестировалось на платформе 8.3.12.1567 (Windows 7, Windows Server 2008 R2, Ubuntu 14 32-64bit, MacOS Sierra 10.12, Android 8)

Адрес open-source проекта на GitHub: https://github.com/alexkmbk/RegEx1CAddin

Бинарные файлы можно скачать также с GitHub: https://github.com/alexkmbk/RegEx1CAddin/releases

Архив содержит скомпилированный набор компонент, предназначенный для загрузки в общий макет конфигурации.

Сборка осуществлялась с использованием следующих инструментов:

Под Windows: Microsoft Visual Studio Community 2017

Под Linux: GCC 6

Под Mac OS: Clang 9   

Под Android: Android Studio NDK 19.2

Использовалась статическая сборка, поэтому компонента не требует установки каких-либо дополнительных библиотек.

Компонента реализует следующие методы и свойства:

Метод НайтиСовпадения / Matches(<Текст для анализа>, [<Регулярное выражение>], [<ИерархическийОбходРезультатов>])

Метод выполняет поиск в переданном тексте по переданному регулярному выражению.

Результатом выполнения метода будет массив результатов поиска.

Здесь, <ИерархическийОбходРезультатов> - определяет то, как будет осуществлен обход результатов. По умолчанию = Ложь. Если ИерархическийОбходРезультатов=Ложь, тогда каждый элемент массива результатов поиска - найденная подгруппа поиска. Если подгрупп нет, то массив будет содержать один элемент - найденную строку. Если ИерархическийОбходРезультатов=Истина, тогда, каждый элемент массива результатов поиска будет содержать только найденную строку, а значение подгруппы при их наличии, можно будет получить методом ПолучитьПодгруппу.

Возвращаемое значение: Ничего не возвращает.

Для того, чтобы получить результаты выполнения метода (массив результатов), необходимо выполнить метод Следующий/Next(), и после этого, в свойстве ТекущееЗначение/CurrentValue будет доступно значение текущей подгруппы результата выполнения (текущий элемент массива результатов). Идея похожа на обход результата запроса.

Пример:

Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)");

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

Результат будет содержать 3 элемента:

Hello world
Hello
world

Пример с иерархическим обходом:

Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)", Истина);

Пока Рег.Следующий() Цикл 

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

Результат будет содержать 1 элемент и 2 подгруппы, а вывод будте таким же:

Hello world

Hello

world

Метод Количество \ Count()

Возвращает количество результатов поиска, после выполнения метода НайтиСовпадения / Matches

Метод КоличествоВложенныхГрупп() \ SubMatchesCount()

Метод возвращает количество групп (подгрупп\SubMatches) если в шаблоне были заданы группы, например, для шаблона ([A-Za-z]+)\s+([a-z]+) будет возвращено значение 2. Метод возвращает значение только после выполнения метода НайтиСовпадения \ Matches.

Метод ПолучитьПодгруппу \ GetSubMatch(<ИндексПодгруппы>)

Метод возвращает строковое значение подгруппы из результатов поиска методом НайтиСовпадения \ Matches. У метода один параметр - Индекс группы, он задает индекс группы, который следует получить(доступны значения от 0 до КоличествоВложенныхГрупп - 1).

Метод НайтиСовпаденияJSON \ MatchesJSON(<Текст для анализа>, [<Регулярное выражение>])

Метод выполняет поиск в переданном тексте по переданному регулярному выражению.

Результатом выполнения метода будет строка в формате JSON представляющая собой массив структур.

Метод позволяет значительно быстрее получить и обработать результат поиска (за счет минимизации вызовов методов через NativeAPI).

Метод Заменить \ Replace(<Текст для анализа>, [<Регулярное выражение>], <Значение для замены>).

Заменяет в переданном тексте часть, соответствующую регулярному выражению, значением, переданным третьим параметром.

Возвращаемое значение: Строка, результат замены.

Метод Совпадает \ IsMatch \ Test(<Текст для анализа>, [<Регулярное выражение>])

Делает проверку на соответствие текста регулярному выражению.

Возвращаемое значение: Булево. Возвращает значение Истина если текст соответствует регулярному выражению.

Метод Версия \ Version()

Возвращает номер версии компоненты в виде строки.

Возвращаемое значение: Строка

Свойство ВсеСовпадения \ Global

Тип: Булево.

Значение по умолчанию: Ложь.

Если установлено в Истина, то поиск будет выполняться по всем совпадениям, а не только по первому.

 

Свойство Multiline \ Многострочный

Тип: Булево.

Значение по умолчанию: Истина.

Если установлено в Истина, то началом строки считаются также и символы перевода строки.

 

Свойство ИгнорироватьРегистр \ IgnoreCase

Тип: Булево.

Значение по умолчанию: Ложь.

Если установлено в Истина, то поиск будет осуществляться без учета регистра.

Свойство Шаблон \ Pattern

Тип: Строка.

Значение по умолчанию: пустая строка.

Задает регулярное выражение которое будет использоваться при вызове методов компоненты, если в метод не передано значение регулярного выражения.

 

Свойство FirstIndex

Тип: Число.

Аналог свойства FirstIndex из VBScript.RegExp. Возвращает индекс (начинается с 0) первого символа найденного текста в исходной строке.

 

Свойство UCP

Тип: Булево.

Значение по умолчанию: Ложь.

Свойство устанавливает флаг PCRE2_UCP в методе pcre2_compile, что включает обработку всех символов Unicode для директив \W и \w (а не только ASCII).

 

Свойство ОписаниеОшибки \ ErrorDescription

Тип: Строка.

Значение по умолчанию: пустая строка.

Содержит текст последней ошибки. Если ошибки не было, то пустая строка.

Свойство ВызыватьИсключения \ ThrowExceptions

Тип: Булево.

Значение по умолчанию: Ложь.

Если установлена в Истина, то при возникновении ошибки, будет вызываться исключение, при обработке исключения, текст ошибки можно получить из свойства ErrorDescription\ОписаниеОшибки.

Пример использования:

Предполагается что архив с компонентами был загружен в общий макет "RegEx"

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

Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)", Истина);

Сообщить(Рег.Количество()); // 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]+)", "Текст для замены"));

 

Пример в асинхронном режиме с использованием обещаний (доступно с версии платформы 8.3.18):

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

&НаКлиенте
Асинх Процедура Асинхронно(Команда)
	
	Подключено =  Ждать ПодключитьРегулярныеВыражения();
	Если Подключено Тогда
		
		Рег = Новый("AddIn.Component.RegEx"); 
		
		Ждать Рег.УстановитьШаблонАсинх("([A-Za-z]+)\s+([a-z]+)");		
		Ждать Рег.НайтиСовпаденияАсинх("Hello world");
		
		Пока Истина Цикл

			Результат = Ждать Рег.СледующийАсинх();   
			
			Если НЕ Результат.Значение Тогда
				Прервать;        
			КонецЕсли;  
			
			Результат = Ждать Рег.ПолучитьТекущееЗначениеАсинх();
			Сообщить(Результат);    
			
		КонецЦикла; 
	КонецЕсли; 
	
КонецПроцедуры

 

Скачать файлы

Наименование Файл Версия Размер
RegEx1CAddin_14.zip

.zip 516,42Kb
35
.zip 14 516,42Kb 35 Скачать
RegExMac64_14.so

.so 426,45Kb
4
.so 14 426,45Kb 4 Скачать
RegEx1CAddin_Android_14.zip

.zip 316,12Kb
3
.zip 14 316,12Kb 3 Скачать
RegEx1CAddin_Browsers_14.zip

.zip 440,11Kb
0
.zip 14 440,11Kb Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Dzenn 665 12.11.18 10:45 Сейчас в теме
Буду гадом ;-) На инфостарте есть что-то про регулярные выражения в 1С на основе механизмов работы с XML. То есть, помещаем в поле-HTML нашу строку, обёрнутую в тэги, запускаем встроенную функцию и получаем ответ. Но не уверен, что это аналог, с регулярками особо не приходилось работать.
4. ImHunter 230 12.11.18 12:39 Сейчас в теме
(1) Есть такое, через XDTO делается. Но такой прием работы предназначен только для валидации строки к паттерну.
Т.е. количество и/или место вхождения паттерна - так не найти.
starik-2005; AlX0id; mivari; 🅵🅾️🆇; A_Max; +5 Ответить
6. A_Max 18 12.11.18 12:47 Сейчас в теме
(1) Там ОООООООЧЕНЬ ограниченный функционал.
2. zykov_vitaliy 77 12.11.18 11:36 Сейчас в теме
Использую
Regexp = Новый COMОбъект("VBScript.RegExp");
3. KAV2 132 12.11.18 11:47 Сейчас в теме
(2) Данная компонента работает также под Linux. В планах собрать под MacOS если будут время и силы.
7OH; starik-2005; A_Max; +3 Ответить
14. 🅵🅾️🆇 504 12.11.18 17:45 Сейчас в теме
(3) Не думаю, что стоит под огрызок собирать.
Такие компоненты лучше подключать на сервере, вряд ли есть извращенцы хостящиеся на macos (да пусть даже и файловые базы).
41. KAV2 132 19.12.18 18:43 Сейчас в теме
(14) Ну так или иначе, а сборка под Mac OS уже доступна :-)
leoxz; 🅵🅾️🆇; +2 Ответить
5. A_Max 18 12.11.18 12:46 Сейчас в теме
(2) этой штуки нет в linux, а так всё необходимое имеем при себе в базе!
Давно у самого чесались руки самому написать "универсальную" внешнюю компоненту.
7. nixel 1065 12.11.18 15:35 Сейчас в теме
Спасибо огромное!
sashocq; Labotamy; iliabvf; s_vidyakin; +4 2 Ответить
8. Ershov Mikhail 12.11.18 16:13 Сейчас в теме
Идея хорошая, но поясните один момент:
Текст для анализа, препологается передавать в виде параметра внешней компоненты.
например у меня есть лог файл размером 30 Гб. (Txt), правильно ли я понимаю, что перед тем как передать этот текст внешней компоненте, мне необходимо загрузить его в оперативную память ? ... а в чём тогда смысл этой компоненты ? ведь одно из основных преимуществ регэкспа - это поточная обработка текста, вне зависимости от размера файла, т.е "Часть прочитал, часть отпустил"... а тут получается сначала загрузи всё в оперативную память а потом запускай свой конвеер Regex ... как то "не айс", а текстовым файлом в 100 ГБ я также как и без регекспа имею возможность положить сервер по недостатку памяти. Получается "Кайф" от Regexpa потерян ...
... или я неправ ?
9. KAV2 132 12.11.18 16:19 Сейчас в теме
(8) В данном случае можно использовать объект ЧтениеТекста\TextReader. Этот объект может читать не весь файл целиком , а построчно.
Ershov Mikhail; +1 Ответить
10. Ershov Mikhail 12.11.18 16:22 Сейчас в теме
(9) т.е. сначала я построчно его читаю 1С-ом, а потом передаю Regex компоненте ... но ведь тогда скорость обработки будет примерна такаяже как и без Regexa ... узкое место получается чтение 1С ... а может сделать возможность передавать компоненте путь к файлу ?
11. KAV2 132 12.11.18 16:29 Сейчас в теме
(10)Может быть, но пока не готов по этому поводу ответить.
15. 🅵🅾️🆇 504 12.11.18 17:49 Сейчас в теме
(10) Тут надо работу с потоками придумывать или разбирать ваш файл построчно/поблоково.

Вот 2 варианта для работы с текущей компонентой:
1) воспринимаете ваш файл как ТектовыйДокумент с заданым разделителем и читаете "построчно"
2) с помощью СтрНайти последовательно выгрызаете кусочки с заданым отступом

Ну или вы вовсе не правильно воспринимаете задачу, если это некий xml документ, то вам надо, наверное, смотреть в сторону XPath
17. Ershov Mikhail 12.11.18 17:59 Сейчас в теме
(15) Задача гепотетчиеская, из серии "Разобрать файл тех журнала" ... файл может быть большим, 30-50 ГБ.
Почему именно она ? потому что чаще приходится пользоваться Regex'ом именно для её решения.
В Bash - это делается просто, вопрос в том что если есть компонента, которая смогла бы это делать из 1С, минуя Bash - было бы круто и стало бы платформой для тех или иных решений. Но читать текстовый документ построчно и передавать его в ВК с методами Regexa, в рамках этой задачи - скорее всего сильно проиграет Bash'у по скорости и стабильности работы. Как бы исходя из этих мыслей и попросил пояснить возможно ли на текущий момент, используя эту ВК реализовать нечто подобное.
18. 🅵🅾️🆇 504 12.11.18 18:04 Сейчас в теме
(17) Почему проиграет то?
Не думаю, что кто то будет таким заниматься ради весьма необычной задачи.

Если у вас большой файл и его просто надо переварить компонентой, особо не заморачиваясь - делайте регламентной операцией или длительной задачей.
Если надо срочно и в кратчайшие сроки определенный файл "кушать", то и регэксп и 1с тут не годятся, тк проиграет по скорости специально написанной для этого дела утилите с нормальной асинхронностью и заточенный под поиск определенных паттернов.

ЗЫ: парсеров технологических журналов - вагон и маленькая тележка
19. Ershov Mikhail 12.11.18 18:11 Сейчас в теме
(18) Возможно я не совсем правильно понял заголовка статьи ...
Там написано : "Внешняя компонента для выполнения регулярных выражений".
Мои мысли: "Ух ты, круто т.е. нечто типа "grep DEADLOCK */*.log" можно выполнить из 1с ? ... было бы прикольно...
По факту я должен сначала все файлы через оперативку прогнать а потом пользоваться функционалом Regex'a.
+ Читать файл придётся тоже из 1С ... что (как мне кажется), будет медленнее чем выполнение этой же процедуры в Bash.
Хотя технически, ВК, созданная на сервере 1Сб уже имеет все права сервера 1С, вопрос только в описании функционала...
Это не в коем случае не претензия, это всего лишь мнение.
20. 🅵🅾️🆇 504 12.11.18 18:20 Сейчас в теме
(19) Почему быстрее или медленее то? Зачем вам целиком файл пихать в оперативу, вы всегда так делаете?

Вам надо:
0) подключить обработчик ожидания
1) подключить компоненту
2) в цикле читать файл либо построчно, либо в некий буфер
3) скармливать компоненте
4) после завершения цикла отключить компоненту
Опционально делать это в несколько потоков.
Оперативы потратите метр-другой.

Если мы говорим про написание "просмотр файлов в реальном времени", то это задача скорее для реактивной асинхронщины (нужно выводить данные в поток по мере чтения, не забывая выбрасывать из потока информацию находящуюся далеко от указателя пользователя), синхронно переваривать весь файл целиком чтоб показать пользователю кусочек - плохая идея (именно на этом сыпится большинство редакторов и ide, пытающихся синхронно обработать и разметить весь файл до конца).

Если вам не надо отображать пользователю в реальном времени - то парсите по ночам, как бог пошлет и не парьтесь.
12. azhilichev 202 12.11.18 16:45 Сейчас в теме
(8) Уважаемый, а как вы иначе хотите? Чтобы компонента вам еще и файл читала? Отделяйте мух от котлет.

Автор, если эта компонента работает так, как описал в статье, мысленно жму руку!
13. Ershov Mikhail 12.11.18 16:48 Сейчас в теме
(12) Ну если бы компонента имела возможность читать файл, (А если немного обнаглеть то ещё и маску путей как это работает в Bash) был бы вообще огонь ... но для начала тоже неплохо, ничего против не имею ... это всего лишь идея к развитию проекта ...
Darklight; +1 Ответить
26. Dmitryiv 146 14.11.18 10:22 Сейчас в теме
(8) А может не стоит файлы такого размера обрабатывать средствами 1С? Ну совсем не тот инстумент.
27. Ershov Mikhail 14.11.18 15:49 Сейчас в теме
(26) Создатели конфигурации ЦУП и ЦКК из Корпоративного пакета, считают иначе ... Они пошли дальше, не только парсят их в 1С, ещё и хранят их в РС ... в разобранном виде. На продуктивной БД размером в 1 ТБ, и 200 пользователей в онлайне - Операция "Анализ вызовов кластера" по ТЖ весит 250 Гб , при истории данных в полдня ...
В общем то я их 1Сом и не парсю, для этого используется Bash с Regex'ом. Т.к. это компонента как раз про Regex, думал что может тогда без Bash'a сразу из 1С можно пользоваться Regex'ом ... но видимо не сейчас, возможно когда-нибудь прогресс дойдёт и до полномасштабного Regex'а из 1С.
16. Infactum 303 12.11.18 17:56 Сейчас в теме
А зачем внутри компоненты все эти конвертации типов для linux, если под капотом все работает вокруг шаблонов std::basic_regex и std::basic_string, которые позволяют задать базовый тип (в случае компоненты WCHAR_T)?
22. KAV2 132 13.11.18 05:33 Сейчас в теме
(16) Конвертации лишние и их надо будет убрать. Я оставил это на развитие. Кстати, можно добавлять pull request-ы ;-)
starik-2005; +1 Ответить
21. kraynev-navi 535 12.11.18 20:27 Сейчас в теме
(0) Вещь! Не делали сравнений по быстродействию с тем же популярным COMОбъект("VBScript.RegExp") ?
23. KAV2 132 13.11.18 05:42 Сейчас в теме
(21) VBscript быстрее, но там есть ещё пути для оптимизации. Не все оптимально сделано. Принципиально что уже сейчас компонента работает на несколько порядков быстрее чем реализация на 1С в конфигурации 1С:Translator.
kraynev-navi; +1 Ответить
39. KAV2 132 18.12.18 17:31 Сейчас в теме
(21) В компоненте версии 5 теперь не все так однозначно со скоростью. Во первых, если вызывается метод один раз, и в него передать большой текст, то компонента теперь может обходить по скорости VBScript.RegExp, но вот если в цикле часто вызывать методы компоненты, передавая каждый раз небольшой текст для анализа, то VBScript.RegExp быстрее. Связано это с тем, что у платформы 1С высокие накладные расходы на вызов методов Native API внешней компоненты. Даже вызов пустого метода отрабатывает медленнее чем вызов метода COM сервера. Во всяком случае на платформах 8.3.12 и 8.3.13. Похоже что разработчик компоненты на это никак повлиять не может.
24. ayuplotnikov 14.11.18 09:51 Сейчас в теме
Отличная задумка! Успехов вам!
Подскажите, пожалуйста, как управлять флагами i, g, m?
29. KAV2 132 14.11.18 16:41 Сейчас в теме
(24) Честно сказать ни разу не пользовался подобными флагами. Надо будет изучить вопрос.
34. KAV2 132 17.11.18 20:57 Сейчас в теме
(24) В общем, реализация из стандартной библиотеки С++ не поддерживает эти флаги в синтаксисе регулярных выражений. Можно добавить установку этих флагов отдельно, если в них реальная есть потребность, либо за основу взять реализацию не стандартной библиотеки, а скажем boost.
35. ayuplotnikov 18.11.18 09:38 Сейчас в теме
(34) Конкретно для меня критически важен регистронезависимый режим.
Я сейчас в 1С использую VBScript.RegExp. У него эти параметры задаются через булевы свойства Global, IgnoreCase, Multiline. В std::regex - через аргумент конструктора. Существенной разницы между способами я не вижу.
Можно добавить необязательные аргументы к существующим методам или добавить метод, который устанавливает флаги. Все варианты обратно совместимы с текущей реализацией.
38. KAV2 132 18.12.18 17:26 Сейчас в теме
(24) Выложена новая версия компоненты, где кроме всего прочего добавлены свойства Global\ВсеСовпадения и IgnoreCase\ИгнорироватьРегистр.

Также, реализована возможность задавать модификаторы синтаксиса perl, описанные здесь (синтаксис отличается JavaScript) - https://www.regular-expressions.info/modifiers.html
starik-2005; ayuplotnikov; +2 Ответить
25. Darklight 27 14.11.18 10:15 Сейчас в теме
Большое Вам спасибо. Компонента, конечно, замечательная - и я обязательно найду ей применение в своих проектах. А ещё, появление данной публикации, оказалось для меня, как нельзя кстати, я как раз делал свою первую Native компоненты С++ (я совсем не С++ программист) - и уже отчаялся - примеры/шаблоны с ИТС не компилировались, а если заставлял компилироваться - не подключались в 1С. Всё перепробовал. И другие компоненты скачивал - тоже либо не компилировались либо не подключались (на разных платформах и компьютерах и x86 и x64). Думал уже забить на это дело. И тут увидел эту публикацию - и О ЧУДО - она заработала - и на основе шаблона вашей компоненты я сделал свою - и она тоже заработала - АЛИЛУЯ! Но отличия в двух шаблонах так и не нашёл (кроме, разве что не был установлен у меня набор инструментов VS 2017 для XP, использовал набор VS 2013 для XP - но его установка и применение в старом проекте всё-равоно так и не решило проблему), хотя было ещё одно - внешние C++ SDK зависимости (cpp и h) у меня в старом проекте тянулись из каталога SDK версии 7.1, а вашем проекте из SDK версии 8.1 - где и как это настраивается я так и не нашёл (в настройках проекта каталоги в обоих проектах вели именно в SDK версии 7.1). А при применении SDK версии 7.1 с одним из примеров компоненты, скачанной в исходниках из интернета, вообще не компилировался и выдавал ошибку про термы которые "не известны" внутри этого SDK (но мой старый проект, как ни странно, всё-таки компилировался, но компонента не подключалась). В общем, как же это тяжко писать компоненты на VS C++ - спасибо Вам за то, что ваша, вовремя, подоспевшая публикация, помогла мне выбраться из этого тупика! Вот бы ещё разобраться как этот SDK в создаваемых в VS 2017 проектах настроить чтобы знать где же выбирается каталог SDK, откуда должны подтягиваться внешние зависимости (cpp и h).
KAV2; kraynev-navi; +2 Ответить
30. KAV2 132 14.11.18 16:47 Сейчас в теме
(25) Спасибо большое за теплый отзыв! Кстати компонента, собранная на SDK 8 работает и на XP, по крайней мере с SP3 (кажется в одном из сервис паков расширялся формат исполняемых файлов).
28. zakiap 14.11.18 15:58 Сейчас в теме
Похожа на RexV8 только работает медленнее, но зато есть исходники и работа по linux
31. KAV2 132 14.11.18 17:01 Сейчас в теме
(28) Да с производительностью есть куда расти, надеюсь поработать над этим в следующих версиях компоненты.
32. Darklight 27 15.11.18 11:03 Сейчас в теме
(28)
(31) Там в осуждении писали про нестабильную работу RexV8. Проверьте у себя регулярки из поста 62 и ещё нескольких более ранних постов от tormozit.
33. KAV2 132 16.11.18 22:44 Сейчас в теме
(32) Ну на указанных сценариях компонента не падает.
49. Trener 08.05.19 15:36 Сейчас в теме
(28)да, я тоже сразу подумал о RExV8 ,реально очень похоже. Вот только медленно все просто ужас(
50. KAV2 132 08.05.19 15:58 Сейчас в теме
(49) Относительно низкая скорость работы объясняется высокими накладными расходами на вызов методов внешней компоненты, это особенность работы текущих версий платформы. Если передавать большой объем данных за один вызов, тогда скорость работы должна быть на уровне, по крайнее мере точно быстрее чем VBScript.RegExp.
Данная компонента работает на несколько порядков быстрее реализации движка на языке 1С, и при этом доступна почти на всех платформах, включая Mac OS и Android.
36. KAV2 132 18.11.18 17:40 Сейчас в теме
Добавлена в список загрузок отдельным файлом, внешняя компонента, собранная для Mac OS ( тестировалась и собиралась на версии Sierra 10.12).
К сожалению загрузка компоненты из макета не работает (пока не разобрался в чем дело), поэтому компонента и выложена отдельно, без включения в общий архив, предназначенный для загрузки в макет.
Подключить компоненту можно с помощью метода ПодключитьВнешнююКомпоненту:

ПодключитьВнешнююКомпоненту("<Путь к файлу компоненты>/RegExMac64_4.so", "Component", ТипВнешнейКомпоненты.Native)
37. KAV2 132 18.12.18 17:18 Сейчас в теме
Новая версия компоненты - 5

Изменения в версии:
- переезд на boost::regex (за счет этого повышена стабильность работы)
- добавлено свойство Global\ВсеСовпадения
- добавлено свойство IgnoreCase\ИгнорироватьРегистр
- добавлено свойство Template\Шаблон
- добавлено свойство ErrorDescription\ОписаниеОшибки
- добавлено свойство ThrowExceptions\ВызыватьИсключения
- добавлена обработка исключений
- добавлен метод Version\Версия
- оптимизирована производительность
- потеряна совместимость с WindowsXP
starik-2005; +1 Ответить
40. karpik666 3435 19.12.18 16:39 Сейчас в теме
Молодец, этого действительно не хватало, в своей разработке для работы в linux использовал обработку регулярок чисто кодом 1С, штука крутая, но скрость просто убивала.
42. KAV2 132 24.12.18 13:56 Сейчас в теме
Новая версия компоненты - 6

Изменения в версии:
- Добавлена поддержка наименований методов и свойств без учета рЕгИсТрА.
- Исправлена ошибка задвоения результатов, если установлен флаг Global под Linux или Mac OS.
- Исправлена утечка памяти под Linux или Mac OS.
43. KAV2 132 13.02.19 20:13 Сейчас в теме
Новая версия компоненты - 7

Изменения в версии:
- Исправлена утечка памяти при работе под Linux и MacOS
- Удалена зависимость (статическая, при линковке) от библиотеки iconv при работе под Linux и MacOS
- Удален лишний программный код и выполнена небольшая оптимизация.
- Уменьшен размер файла компоненты для MacOS
44. KAV2 132 14.02.19 17:08 Сейчас в теме
Новая версия компоненты - 8

Изменения в версии:
- Исправлены ошибки
- Оптимизация
45. KAV2 132 22.04.19 19:50 Сейчас в теме
Новая версия компоненты - 9

Изменения в версии:
- Исправлены ошибки
- Оптимизация
- Уменьшен размер файлов компоненты
46. KAV2 132 27.04.19 14:26 Сейчас в теме
Добавлен отдельным файлом тестовый архив внешних компонент для Android.
47. KAV2 132 05.05.19 19:15 Сейчас в теме
Добавлена отдельным файлом сборка для 64-битной версии Google Chrome под Linux
48. KAV2 132 06.05.19 12:39 Сейчас в теме
Добавлена сборка для Google Chrome под Windows.
51. GorDAn 29.05.19 23:25 Сейчас в теме
Компонента при обходе результата (ВсеСовпадения = Истина) пропускает пустые подгруппы. Из за этого непонятно, когда заканчивается одно совпадение и начинается другое. Можно настроить, чтобы выводились все группы?
52. KAV2 132 14.06.19 08:21 Сейчас в теме
(51) Нет, настроить требуемое поведение в текущей версии нельзя. Если можно, скинье пожалуйста пример шаблона и пример данных к которым этот шаблон применяется.
53. huxuxuya 25.07.19 13:16 Сейчас в теме
А в возвращаемом значении вы могли бы возвращать еще SubMatches?
54. KAV2 132 25.07.19 13:20 Сейчас в теме
(53) все найденные группы, включая вложенные возвращаются последовательно.
55. huxuxuya 25.07.19 14:41 Сейчас в теме
(54)не очень понимаю как этой последовательностью пользоваться... например

"яблоко красное и тыква черная и еще одно яблоко фиолетовое и еще одно яблоко белое"
яблоко[\s](\S+)


ожидаю что будет 3 найденных:
яблоко красное
яблоко фиолетовое
яблоко белое

и в каждом вхождении был бы цвет в SubMatches, но если он последовательно выводит то как предполагается использовать группировки?
В шаблоне искать сколько открытых и закрытых скобочек и после первого вывода отсчитывать их количество, что бы понять когда закончилась группа и началась строка поиска?
56. KAV2 132 25.07.19 18:06 Сейчас в теме
(55) Этот момент оставил на развитие. Если предложите вариант и удасться его реализовать то постараюсь оперативно тестовую сборку отправить. Ну и опять же это опенсорс, так что всегда можно доработать под свои нужды.
Более детально можно обсудить в личных сообщениях (или в gitter).

Как вариант:
Добавить пустой результат между группами, то есть:
яблоко красное
красное
(пустая строка в результате)
яблоко фиолетовое
фиолетовое
(пустая строка в результате)
яблоко белое
белое
(пустая строка в результате)
59. cprit 710 29.02.20 12:37 Сейчас в теме
(56) Предлагаю два варианта.
Второй на мой взгляд проще в использовании.

Первый вариант. Реализовать метод Выбрать(), который будет производить выборку в текущей группе. И обходить группу уже существующим методов следующий(). На 1С код по обходу примерно следующий будет

Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)");

//Обходим MatchCollection
Пока Рег.Следующий() Цикл
ТекстMatch=Рег.ТекущееЗначение;

 //Обходим SubMatches
Рег.Выбрать();
Пока Рег.Следующий() Цикл
 ТекстSubMatch=Рег.ТекущееЗначение;
КонецЦикла;

КонецЦикла;
Показать


Второй вариант. Реализуем еще один метод СледующийПодчиненный(), Который будет обходить коллекцию SubMatches. Код в 1С по обходу примерно следующий

Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)");

//Обходим MatchCollection
Пока Рег.Следующий() Цикл
ТекстMatch=Рег.ТекущееЗначение;

 //Обходим SubMatches
Пока Рег.СледующийПодчиненный() Цикл
 ТекстSubMatch=Рег.ТекущееЗначение;
КонецЦикла;

КонецЦикла;
Показать
60. KAV2 132 29.04.20 21:03 Сейчас в теме
(55)

Выложена тестовая сборка версии 11, где опционально добавлен новый метод обхода результата поиска. Подробнее - в описании изменений к новой версии.
61. etorpov 06.05.20 14:24 Сейчас в теме
(60)на пару недель пораньше б) благодаря 11 версии сократил костыльный код в 2 раза)
в 11 и 10 версии(в других не проверял) не работает свойство "ИгнорироватьРегистр" - всегда пишет "ошибка чтения значения" приходится переписывать немного строку шаблона
А так все ок, вроде:)
62. KAV2 132 06.05.20 15:37 Сейчас в теме
(61) Спасибо большое за фидбэк!

Ошибка с ИгнорироватьРегистр у меня не воспроизводиться.
Может быть в личных сообщениях спишемся и попробуем устранить проблему?
57. aleks_p99 16.09.19 20:53 Сейчас в теме
Полезный компонент.
Спасибо)
58. 5H1 27.02.20 07:11 Сейчас в теме
Здравствуйте. Как убрать сообщение "Внешняя компонента успешно установлена"?
65. KAV2 132 17.04.21 15:10 Сейчас в теме
(58)
Попробуйте такой код:
Если Не	ПодключитьВнешнююКомпоненту("ОбщийМакет.RegEx", "Component", ТипВнешнейКомпоненты.Native) Тогда
	УстановитьВнешнююКомпоненту("ОбщийМакет.RegEx");
	ПодключитьВнешнююКомпоненту("ОбщийМакет.RegEx", "Component", ТипВнешнейКомпоненты.Native);
КонецЕсли;
63. KAV2 132 31.12.20 17:23 Сейчас в теме
Новая версия компоненты - 11
Изменения в версии:

- Добавлен метод КоличествоВложенныхГрупп\SubMatchesCount

Метод возвращает количество групп (подгрупп\SubMatches) если в шаблоне были заданы группы, например, для шаблона ([A-Za-z]+)\s+([a-z]+) будет возвращено значение 2. Метод возвращает значение только после выполнения метода НайтиСовпадения \ Matches.

- Добавлен метод ПолучитьПодгруппу \ GetSubMatch (<ИндексПодгруппы>)

Метод возвращает строковое значение подгруппы из результатов поиска методом НайтиСовпадения \ Matches. У метода один параметр - Индекс группы, он задает индекс группы, который следует получить(доступны значения от 0 до КоличествоВложенныхГрупп - 1).

- У метода НайтиСовпадения \ Matches добавлен третий, необязательный параметр типа булево, включающий\отключающий иерархический обход результатов поиска.
Полный пример иерархического обхода:

Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)", Истина); // Истина -  иерархический обход

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

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

- Исправлено: на некоторых сборках Android не работали вызовы методов на кириллице

- Исправлен ряд ошибок и выполнена оптимизация.
64. KAV2 132 03.01.21 09:49 Сейчас в теме
Новая версия компоненты - 12
Изменения в версии:
- Исправлены ошибки.
66. unichkin 1417 25.04.21 14:36 Сейчас в теме
Добрый день. А где это можно проверять? Сейчас попробовал вместо com-объекта, разница по результатам поиска разительная. И не могу понять в чем проблема. И на сайте где я обычно отлаживаю регулярки https://regex101.com/ - ни в одной из сред исполнения данный результат не повторился.
67. KAV2 132 25.04.21 15:36 Сейчас в теме
(66) Ну во первых отличие может быть в дефолтных флагах. На regex101.com по дефолту включен флаг global (/g) - поиск всех вхождений, на компоненте по дефолту он выключен (устанавливается отдельным свойством см. описание) и выполняется поиск только первого вхождения.

Во вторых, если есть в шаблоне группы, то получение результата может отличаться, в зависимости от флага ИерархическийОбходРезультатов в функции НайтиСовпадения (см. описание выше). То есть результат будет зависеть от того, как осущетвляется обход.

В третьих, может отличаться и ситаксис используемого движка, на самом regex101.com доступно в данный момент 6 различных диалектов и они отрабатывают по разному. В текущей версии компоненты, используется библиотека boost::regex с perl совместимым синтаксисом, но даже несмотря на то, что разработчики этой библиотеки заявляют о совместимости с perl, все равно могут быть какие-то небольшие отличия с другими подобными реализациями.

На данный момент, в разработке переход на другой движок - PCRE2. И уже доступна тестовая сборка компоненты под Linux и Windows - https://github.com/alexkmbk/RegEx1CAddin/releases/tag/13.0
И по предварительным результатам можно сказать, что уже известные расхождения в реализации синтаксиса на этом движке отсутствуют (что не удивительно, ведь судя по всему на regex101.com используется таже библиотека).

Если у вас есть желание,можете написать мне в личку исходные данные для проверки (текст шаблона и текст в котором осуществляется поиск) может быть я смогу подсказать в чем проблема.
68. unichkin 1417 26.04.21 10:36 Сейчас в теме
(67)
Если у вас есть желание,можете написать мне в личку исходные данные для проверки (текст шаблона и текст в котором осуществляется поиск) может быть я смогу подсказать в чем проблема.

Добрый день, спасибо за ответ. Свою проблему уже решил ручным парсингом, воспроизводить нет смысла.
69. KAV2 132 23.05.21 17:45 Сейчас в теме
Новая версия компоненты - 13

Изменения в версии:

- Осуществлен переход на библиотеку PCRE2 версии 10.36, вместо boost::regex. За счет этого, улучшена совместимость с Perl синтаксисом регулярных выражений, а также во многих сценариях существенно улучшена производительность;

- Добавлен метод MatchesJSON\НайтиСовпаденияJSON(<Текст для анализа>, [<Регулярное выражение>]) - возвращает результат в виде JSON текста. Метод позволяет значительно быстрее получить и обработать результат поиска (за счет минимизации вызовов методов через NativeAPI);

- Добавлено свойство FirstIndex - аналог свойства FirstIndex из VBScript.RegExp;

- Добавлено свойство Multiline\Многострочный (По умолчанию = Истина, на движке boost::regex режим Multiline был по умолчанию и его нельзя было отключить);

- Добавлен синоним Test для метода IsMatch.

ВНИМАНИЕ! При переходе с версии 12, рекомендуется проверить работу ваших текущих регулярных выражений на предмет совместимости с новой версией. Поскольку в версии 13 используется новый движок, могут быть расхождения в результатах работы регулярных выражений, поскольку работа boost:regex и PCRE2 не идентична.
70. tormozit 6472 23.05.21 18:08 Сейчас в теме
Эта компонента (версия 13) протестирована и используется в подсистеме "Инструменты разработчика" https://www.hostedredmine.com/issues/889592 в ОС Linux и при выполнении кода на сервере.
sashocq; KAV2; +2 Ответить
71. Dzenn 665 05.06.21 01:15 Сейчас в теме
Всё впечатление от компоненты испортили модальные окна и синхронные вызовы (((
72. KAV2 132 05.06.21 13:01 Сейчас в теме
(71) Так используйте асинхронные вызовы, любая внешняя компонента может быть подключена и использована в асинхронном режиме. Можете воспользоваться готовой подсистемой для этого (правда там на текущий момент не самая актуальная версия компоненты) - https://github.com/cpr1c/RegEx1C_cfe/
73. Dzenn 665 05.06.21 13:02 Сейчас в теме
(72) хмм... попробую, спасибо. Но что делать с модальным окном "Компонента подключена" при подключении?
74. KAV2 132 05.06.21 13:04 Сейчас в теме
(73) Используйте асинхронные методы для установки и подключения: НачатьУстановкуВнешнейКомпоненты, НачатьПодключениеВнешнейКомпоненты.
75. Dzenn 665 05.06.21 13:05 Сейчас в теме
(74) хорошо, попробую, спасибо!
76. Dzenn 665 05.06.21 13:09 Сейчас в теме
(74) Установил успешно, подключил успешно, но НайтиСовпадения всё равно исполняется синхронно, и это я уже не пофиксю, видимо (
77. KAV2 132 05.06.21 13:18 Сейчас в теме
(76) Используйте перед каждым названием метода приставку НачатьВызов<ИмяМетода>, например, НачатьВызовНайтиСовпадения, перед получением свойства НачатьПолучение<ИмяСвойства>, перед установкой свойства НачатьУстановку<ИмяСвойства>.
Но надо понимать что в этом случае, первым параметром должен передаваться объект ОписаниеОповещения.

Поскольку это стандартный функционал платформы и работает одинаково для всех внешних компонент, то этот момент в документации не описан.
78. Dzenn 665 05.06.21 13:20 Сейчас в теме
(77) Спасибо огромное за просвещение! Попробую!
79. Dzenn 665 05.06.21 13:29 Сейчас в теме
(77) Попробовал, как ни крути, а без синхронных вызовов сложновато получается — под каждый вызов функции компоненты, будь то НайтиСовпадения(), Количество(), ТекущееЗначение() нужно писать отдельную процедуру под оповещение
80. KAV2 132 05.06.21 13:38 Сейчас в теме
(79) А попробуйте метод НачатьВызовНайтиСовпаденияJSON, он возвращает в качестве результата строку в формате JSON, которую легко можно распарсить следующим образом:
jsonreader = new JSONReader;
jsonreader.SetString(Результат);
res = ReadJSON(jsonreader, False); 
For Each Item In res Do
	Message(Item.Value); 	// тут Item содержит все свойства + массив подгрупп
EndDo; 


С таким подходом асинхронных вызовов будем меньше, при этом скорость работы даже выше, поскольку вызов методов через NativeAPI довольно медленный.

Правда ReadJSON не доступен на вебклиенте, только на тонком.
81. Dzenn 665 05.06.21 13:40 Сейчас в теме
(80) да, отлично, спасибо за наводку!
119. KAV2 132 19.01.22 08:16 Сейчас в теме
(77) Кстати, начиная с версии платформы 8.3.18 доступен механизм асинхронности с помощью обещаний, что сильно упрощает асинхронные вызовы, см. пример в описании выше.
82. Andreynikus 1429 30.07.21 10:17 Сейчас в теме
При подключении на сервере возникает ошибка "Тип не определен (AddIn.Component.RegEx)"
83. KAV2 132 30.07.21 16:59 Сейчас в теме
(82) А метод ПодключитьВнешнююКомпоненту возвращает Ложь? Если так, то рекомендую проверить какой именно комплект компонент используете для сервера, для сервера под Windows и Линукс необходимо использовать комплект RegEx1CAddin_13.zip.
84. Andreynikus 1429 13.08.21 18:13 Сейчас в теме
(83) да именно он и используется, т.к. у всех остальных клиентов работает кроме одного. Сейчас уже проверить нет возможности, заменил компоненту на VBшную через COM, она хоть и медленнее но стабильнее.
85. QbeeQ 13 02.09.21 22:56 Сейчас в теме
Как заставить компоненту действительно игнорировать регистр?
Прикрепленные файлы:
86. tormozit 6472 02.09.21 23:02 Сейчас в теме
(85) Какая платформа (Win/Linux)? У меня на Windows работает эта опция. Правда я устанавливаю ее через латинский вариант - IgnoreCase
87. QbeeQ 13 02.09.21 23:04 Сейчас в теме
Windows 10 Pro x64 Версия 21H1
1С:Предприятие 8.3 (8.3.18.1289) x86
88. QbeeQ 13 02.09.21 23:05 Сейчас в теме
Увы, смена языка не помогает.
Может быть имеет значение то, что шаблон поиска я задаю через свойство, а не при вызове метода "НайтиСовпадения"?
90. QbeeQ 13 03.09.21 00:11 Сейчас в теме
(88) Нашёл причину!
Оказывается имеет значение в каком порядке устанавливаются значения свойств объекта.
Шаблон поиска нужно задавать после установки флагов поиска
И такая конструкция в результат вернёт Ложь

	Ищейка = Новый("AddIn.Component.RegEx");
	Ищейка.Pattern = "слово";
	Ищейка.Global = Истина;
	Ищейка.Multiline = Ложь;
	Ищейка.IgnoreCase = Истина;
	
	Результат = Ищейка.Test("Слово");
91. tormozit 6472 03.09.21 06:42 Сейчас в теме
92. KAV2 132 03.09.21 08:30 Сейчас в теме
(90) Так сделано из соображений производительности.

При установке шаблона выполняется его компиляция с учетом установленных флагов, если флаги устанавливаются после компиляции шаблона, то по понятным причинам они уже не влияют на работу текущего регулярного выражения.

Если компиляцию делать непосредственно в момент выполнения, то потеряется возможность выноса компиляции регулярного выражения за пределы цикла. То есть сейчас можно сначала скомпилировать шаблон, а потом уже в цикле выполнять поиск по одному и тому же скомпилированному шаблону.

Если же делать компиляцию каждй раз как устанавливается какой-либо флаг, то мы тут тоже потеряем в производительности.
93. QbeeQ 13 03.09.21 08:36 Сейчас в теме
(92) А при смене флага нельзя шаблон перекомпилировать?
Ну или исключение бросить, мол нарушен порядок установки свойств.
А то в заблуждение вводит.
94. KAV2 132 03.09.21 08:39 Сейчас в теме
(93) Надо подумать об этом, спасибо за обратную связь!
96. tormozit 6472 03.09.21 12:23 Сейчас в теме
(92) Чтобы не терять скорость, добавь метод Prepare() и флаг AutoPrepare (по умолчанию Истина). При отключенном флаге пусть пользователь сам решает когда вызывать Prepare(), а при включенном вызывай при любом изменении свойств объекта компоненты.
89. QbeeQ 13 02.09.21 23:49 Сейчас в теме
Ещё момент. Не знаю можно ли считать это ошибкой компоненты...
Я ей случайно число вместо строки для анализа скормил и она всю 1С уронила.
Я конечно понимаю, что сам дурак, но зачем же так жестоко?
95. KAV2 132 03.09.21 08:42 Сейчас в теме
(89) Не удалось воспроизвести, вы не могли бы скинуть код с помощью которого воспроизводится ошибка? (можно в личку или в issue на гитхабе)
97. starik-2005 2580 15.09.21 13:30 Сейчас в теме
98. starik-2005 2580 01.11.21 17:35 Сейчас в теме
Затестил компоненту, она работает медленнее VBScript.RegExp в 3-4 раза. Что я делаю не так?
Оставьте свое сообщение

См. также

Внешняя компонента: Android tools Промо

Мобильная разработка Разработка внешних компонент v8 v8::Mobile Абонемент ($m)

Несколько дополнительных функций для мобильного приложения\клиента под Android. Размер архива внешних компонент под архитектуры ARM и x86 - 230KB.

1 стартмани

12.01.2021    7149    23    KAV2    15    

Внешняя компонента - универсальный, надежный перехватчик клавиатурных событий

Разработка внешних компонент v8 Абонемент ($m)

Перехват нажатия клавиш в 1С реализован с привязкой к фокусу формы. Если форма (или главное окно процесса 1С) теряет фокус, то перехват перестает работать. Чтобы решить эту проблему, была разработана соответствующая внешняя компонента.

1 стартмани

29.11.2021    2588    7    Prometeus2011    5    

Шифрование по алгоритму RSA. Внешняя библиотека (*.dll)

Разработка внешних компонент Защита ПО и шифрование v8 Платформа 1C v8.2 Платформа 1С v8.1 1cv8.cf Абонемент ($m)

Внешняя библиотека для шифрования данных в 1С по алгоритму RSA открытым ключом. Открытый ключ задаем сами, и передаем в качестве параметра.

10 стартмани

07.07.2021    3373    8    itserve    6    

Разъяснение внешних компонент

Разработка внешних компонент v8 Абонемент ($m)

Более пятилетки назад, еще в 2015 году я написал свою внешнюю компоненту на Visual Basic 6. По сути, это была простая обертка для доступа к функция DLL. Потом написал еще одну обертку уже для другой DLL, от другого оборудования. На этом моё писательство внешних компонент и ограничилось. И вот в 2020 году существенно изменилось SDK оборудования, для которого было написано SDK. А Visual Basic прекратил свое существование. На нем еще можно писать внешние компоненты, но уже только под 32 разряда. Пришлось искать новые средства для разработки, поддерживающие 64-разрядные платформы. И на этом пути пришлось потратить более 6 часов для выбора инструмента и его настройки.

1 стартмани

17.06.2021    3480    2    fixin    3    

Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо

Разработка внешних компонент WEB v8 Абонемент ($m)

Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

2 стартмани

30.03.2018    39245    90    Ditron    114    

Внешняя компонента для работы с postgresql

Разработка внешних компонент v8 Россия Абонемент ($m)

Внешняя компонента для работы с сервером postgresql. Использует библиотеки libpqxx и libpq. Была написана для построения отчета по телефонии, так как стандартное подключение внешних источников данных по ODBC работало очень медленно.

1 стартмани

22.04.2021    1972    2    Ma_X_X    5    

Внешняя компонента для работы с SQL запросами

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Уважаемые коллеги, отдаю Вам "на растерзание" (для тестирования) внешнюю компоненту для общения 1C с SQL посредством запросов (драйвер ODBC 3.x).

1 стартмани

03.04.2021    2619    0    ivan1703    9    

Описание работы внешней компоненты 1С SBRFCOM.DLL для обслуживания банковских карт

Эквайринг Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Описание работы внешней компоненты 1С SBRFCOM.DLL для обслуживания банковских карт, приведены методы и функции по работе с данной компонентой.

1 стартмани

09.03.2021    4402    19    artemua    7    

TextRadar - нечеткий поиск в тексте Промо

Разработка внешних компонент Поиск данных v8 1cv8.cf Абонемент ($m)

В отличие от нечеткого сравнения строк, когда обе сравниваемых строки равнозначны, в задаче нечеткого поиска выделяются строка поиска и строка данных, а вычислить необходимо не степень похожести двух строк, а степень присутствия строки поиска в строке данных. Нормированный коэффициент, находящийся между 0 и 1 позволяет отсечь заведомо низкие результаты, организовать поиск по синонимам и т.д. Наглядное отображение результатов в кратком и детальном виде поможет быстро найти интересующий фрагмент.

1 стартмани

19.09.2018    25105    32    TSSV    19    

Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)

Разработка внешних компонент Мобильная разработка v8 Абонемент ($m)

Используя данный драйвер, можно без единой строки кода, просто установив на ТСД мобильный клиент 1С, сразу начать подбирать товары в документах вашей учётной системы. А, адаптировав нужные формы под небольшой размер экрана ТСД, можно просто создать полноценное рабочее место для выполнения операций с помощью ТСД, не прибегая к стороннему софту. Если же на складе плохая связь (или её нет вовсе), то можно использовать возможности мобильного клиента в автономном режиме (потребуется доработка вашей конфигурации). Драйвер также можно использовать и для Android приложения на мобильной платформе. В результате чего можно обойтись без ненужных полей ввода и клавиатуры «на пол-экрана».

3 стартмани

09.10.2020    25677    203    ltfriend    154    

Отрубаем зависшие на сервере процессы

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Вы любите COM объекты? Я их просто обожаю! Практически все, чего не может 1С, можно доделать ими. Но есть у них небольшой косячок: иногда они зависают и висят, пока не отрубишь их через диспетчер задач или до перезагрузки, жрут память и в конце концов перестают запускаться. Что делать? Рубить!

1 стартмани

28.07.2020    5567    1    zarankony    3    

Диагностика контекста выполнения (внешняя компонента)

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Небольшая экспериментальная внешняя компонента для получения дополнительной информации о контексте выполнения.

1 стартмани

24.07.2020    9714    2    YPermitin    14    

Использование сборок .NET в 1С 7. и 8.x. Создание внешних Компонент. Промо

Разработка внешних компонент v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Данная разработка создана для использования сборок .Net в 1С через преобразование объектов и классов в COM-объекты, которые можно использовать в 1С. Достигается это путем создания класса, реализующего методы интерфейса IReflect public class AutoWrap: IReflect.

1 стартмани

28.11.2013    95471    298    Serginio    76    

Универсальная обертка для использования NATIVE компонент на платформе 1С 7.7, 8.0 и 8.1

Разработка внешних компонент v8 Абонемент ($m)

Используете 1С 7.7, 8.0 или 8.1 и вас раздражает, что под вашу 1С уже не выпускаются современные компоненты. А хотелось бы?

1 стартмани

07.07.2020    8061    8    karpik666    5    

Нано HTTP сервер - внешняя компонента для мобильного приложения 1C, на Android

Разработка внешних компонент Мобильная разработка v8 v8::Mobile 1cv8.cf Абонемент ($m)

Нано HTTP сервер на терминале сбора данных "ATOL Smart.Lite android 7.0". Работает только с GET и POST запросами. Аутентификация BASE64. Не поддерживает HTTPS и не передает файлы. В прикрепленном архиве исходники на компоненту (С++ и java для Android Studio 3.6.2), ЦФ - мобильного приложения и тестовая обработка.

1 стартмани

22.06.2020    7768    13    SanyMaga    19    

Получение фото с веб-камеры

Разработка внешних компонент v8 Абонемент ($m)

Получение фото с веб-камеры без ActiveX. Внешняя компонента по технологии Native API.

1 стартмани

25.03.2020    12958    110    berezdetsky    46    

Tool1CD Beta в деле Промо

Разработка внешних компонент v8 Абонемент ($m)

Пс, парень! Не хочешь немного сырых байтов?

1 стартмани

09.05.2018    33099    32    dmpas    31    

Пауза без загрузки процессора. Внешняя компонента Native API на C++

Разработка внешних компонент v8 Абонемент ($m)

Внешняя компонента Native API на C++ для Win32 и Win64 позволяет установить паузу на заданное количество секунд без загрузки процессора.

2 стартмани

21.03.2020    5859    10    Dmitrij-2    28    

Быстрая печать этикеток (ZPL, EPL, TSPL, EZPL, GEPL, TSPL-EZ)

Разработка внешних компонент v8 v8::УФ 1cv8.cf Абонемент ($m)

Качественная и быстрая печать на внутреннем языке принтеров этикеток.

4 стартмани

02.02.2020    14940    60    Johny_v    16    

Сканирование по TWAIN в 1С (обычные и управляемые формы)

Разработка внешних компонент v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка показывает пример, как можно в 1С проводить сканирование с помощью компоненты TWAIN.

3 стартмани

03.01.2020    10748    36    Denr83    0    

NativeDraw: Компонента рисования для 1С [V2.6.2] Промо

Разработка внешних компонент Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Рисуйте в формах 1С, также предлагается небольшое количество нерисовальных функций

1 стартмани

13.07.2015    54683    474    ПерваяСистема    147    

Вставка картинки из буфера обмена (на выбор: JavaScript / внешняя компонента / штатно)

Разработка внешних компонент v8 Абонемент ($m)

Вставка картинки из буфера обмена с помощью JavaScript в поле HTML в web-клиенте, с помощью внешней компоненты в тонком/толстом клиенте и путем преобразования данных картинки формата Base64 из поля HTML в любом клиенте, начиная с платформы 8.3.16. Механизм протестирован на платформах 8.2 и 8.3 Для запуска опубликованной конфигурации требуется платформа релиза не ниже 8.3.14.

1 стартмани

05.12.2019    9151    9    Andreyyy    10    

Клиент событий в «бесконечном» HTTP-соединении для 1С: Предприятие 8

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Native Компонента в отдельном потоке обрабатывает пакеты событий, в "бесконечном" http соединении и передаёт данные в очередь внешних событий.

1 стартмани

02.12.2019    8696    3    starovton    13    

Внешняя компонента 1С Native x32/x64: отправка UDP сообщения

Разработка внешних компонент v8 Россия Абонемент ($m)

Компонента предназначена только для отправки текстовых UDP сообщений. Работает как на клиенте, так и в серверных вызовах в любой разрядности Windows платформы.

1 стартмани

05.11.2019    6325    17    von_de    4    

Компоненты распознавания и печати штрих-кодов Промо

Разработка внешних компонент Сканер штрих-кода v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Комплект программного обеспечения для реализации функций оптического распознавания штрих-кодов различных систем при помощи обычной web-камеры, а также их отображения в печатных формах. Программы могут работать в составе конфигураций, созданных на базе платформ «1С-Предприятие» версий 7.7, 8.2, 8.3. Компонент чтения кодов реализован в виде внешней компоненты 1С с COM-интерфейсом. Компонент отображения создан по стандартной технологии ActiveX для Windows, и может быть встроен в любое приложение, поддерживающее встраивание ActiveX элементов управления, например в документ Word или Excel, или форму VBA. P.S. Добавлена новая версия программы распознавания. Новые функции: обработка видео в реальном режиме (а не по таймеру, как раньше), добавлена возможность распознавания штрих-кодов из графических файлов JPEG, PNG, GIF, BMP, а также передавать для распознавания картинки из 1С, теперь можно получить в 1С захваченное с камеры или файла изображение, как с выделением мест, содержащих коды, так и без, а также отдельные фрагменты изображений, содержащие код. Добавлены новые свойства и методы для программирования. Обновлена документация.

10 стартмани

10.07.2015    78952    91    igorberezhnov    121    

Маленькая и скромная мобильная внешняя компонента

Разработка внешних компонент v8 Абонемент ($m)

Изваять простенькую мобильную компоненту на 1С для android не так-то просто. Посему назло отдельным супостатам, не желающим делится исходниками, представляю весь свой скромный труд на публичный суд.

1 стартмани

21.10.2019    15497    11    ripreal1    34    

Native внешняя компонента для оповещения по UDP или TCP

Разработка внешних компонент v8 Абонемент ($m)

Native внешняя компонента для оповещения по UDP или TCP, которая реализует возможность в 1С передавать сообщения с сервера на клиента. Исходный код компоненты также представлен.

1 стартмани

06.10.2019    16843    39    vdv2701    40    

Внешняя компонента Sundries: несколько полезных системных функций

Разработка внешних компонент v8 Абонемент ($m)

Звук, пауза, буфер обмена, раскладки клавиатуры и т.д.

5 стартмани

30.08.2019    10609    10    sivin-alexey    17    

Полезные приемы при работе с Excel из 1С (Версия 3.1) Промо

Разработка внешних компонент Загрузка и выгрузка в Excel Практика программирования v8 1cv8.cf Абонемент ($m)

Программисту 1С часто приходится работать с таблицами Excel из 1С. Я постарался собрать небольшой FAQ и набор функций для работы с файлами Excel. Надеюсь, кому-то будет полезна данная статья.

1 стартмани

22.09.2015    262666    531    Zerocl    85    

Native внешняя компонента для передачи/получения по UDP (теперь с Base64)

Разработка внешних компонент v8 УТ10 Россия Абонемент ($m)

Внешняя компонента Native-API для организации передачи с использованием UDP.

1 стартмани

29.07.2019    7761    15    axae    2    

Внешняя компонента для работы с драйвером "Атол v.10". 1С:8.3

Разработка внешних компонент Кассовые операции Кассовые операции v8 Абонемент ($m)

Внешняя компонента, для работы с драйвером «Атол v.10», посредством JSON-заданий.

1 стартмани

16.07.2019    18304    35    gortrex    8    

Менеджер буфера обмена. Нативная внешняя компонента win 32/64

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Добавляет возможности получения информации из почтовых вложений или файлов с других рабочих столов (RDP) с помощью операций копирования/вставки. Может «прослушивать»: любые изменения буфера обмена; нажатие клавиш соответствующих вставке (paste); нажатие клавиш копирования (copy); drop операции. Это новая реализация аналогичной компоненты https://infostart.ru/public/379695/, но теперь не C#, а С++ нативно для x32 / x64. (см. http://youtu.be/-PaWWFfbYo4)

1 стартмани

26.06.2019    10506    35    Bww    23    

Снимок экрана для 1С Промо

Универсальные обработки Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Довольно часто люди сталкиваются с необходимостью сделать снимок экрана. Если вы или ваши сотрудники основную часть времени проводят в 1С и у вас есть необходимость прикреплять графические файлы, то эта компонента для вас.

1 стартмани

08.02.2016    33258    34    linkforget    11    

Обработка вывода на печать QR-кода и штрихкодов в различных форматах (одномерные и двумерные)

Разработка внешних компонент Печатные формы v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Обработка предназначена для вывода на печать QR-кода и штрихкодов в различных форматах без установки дополнительных ActiveX компонент. Тестировалась на чистой базе платформы 1С:Предприятие 8.3 (8.3.14.1630), а так же в конфигурациях Бухгалтерия предприятия КОРП, редакция (3.0.69.35) и на Бухгалтерия предприятия (3.0.70.30)

2 стартмани

22.05.2019    16463    54    MGemini    3    

DLL для подключения к Asterisk (32/64 клиенты)

Разработка внешних компонент Телефония, SIP v8 1cv8.cf Абонемент ($m)

Подключение к Астериску и получение событий "Newchannel","BridgeEnter","Hangup" через ОбработкаВнешнегоСобытия.

1 стартмани

19.03.2019    12361    21    xxxAndricxxx    14    

DLL для обмена между 1С (и не только) через UDP порты (32/64 клиенты)

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Библиотеки для создания функционала для прослушивания портов из 1С и отправки сообщений на удаленный udp порт.

1 стартмани

28.02.2019    11352    15    xxxAndricxxx    3    

Native API компонента для использования установленного в системе интерпретатора Python Промо

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Компонента позволяет подключать к платформе 1С python-модули, оформленные в стиле внешней компоненты. Кроме этого, она позволяет запускать небольшие фрагменты python-кода прямо из модулей 1С. На данный момент поддерживаются платформы 8.2 — 8.3 x86 Windows.

1 стартмани

14.05.2013    48651    96    Принт    31    

Эмулятор ККМ по стандарту ФФД 1.1

Разработка внешних компонент Кассовые операции ККМ Кассовые операции v8 Розница УТ11 Россия Абонемент ($m)

Эмулятор драйвера ККМ по стандарту ФФД 1.1 предназначен для использования всех возможностей программы, при отсутствии физической кассы. Подойдет как программистам при разработке интерфейса РМК, например, так и пользователям для тестирования возможностей программы.

1 стартмани

30.12.2018    31207    167    Matveymc    31    

Внешняя компонента для считывателя карт ACS 122/1281 (БПО)

Разработка внешних компонент Ридер магнитных карт v8 1cv8.cf Абонемент ($m)

Внешняя компонента для считывателя бесконтактных карт ACS 122/12 для подсистемы подключаемого оборудования.

1 стартмани

11.12.2018    10368    73    eugenevk    36    

WebSocket Клиент / Сервер. Внешний компонент

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Реализация протокола WebSocket. Клиентская часть для взаимодействия с внешними сервисами. Серверная часть для организации собственного сервера, принимающего клиентские соединения в многопоточном режиме. Возможно взаимодействие RabbitMQ Slack Asterisk и другие

1 стартмани

16.11.2018    25796    117    nomadon    68    

Распознаем штрих-коды QR, EAN-13, Code 128 с помощью 1С и веб камеры Промо

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Внешняя компонента, поможет распознать штрих-код, используя обычную веб камеру. Умеет работать с UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 128, QR Code, Interleaved 2 of 5, Codabar, RSS-14, Data Matrix, PDF 417, Aztec, MaxiCode.

1 стартмани

31.10.2012    85650    254    shakmaev    84    

Native компонента для 8.3, реализующая метод sleep()

Разработка внешних компонент v8 Россия Абонемент ($m)

Внешняя Native 64-битная компонента для 1C 8.3, которая реализует метод sleep() - паузу выполнения кода. Пауза для большой устойчивости сделана платформозависимой и требует WinAPI. Ид компоненты - AddIn.AddInNativeSleep.NativeSleep.

1 стартмани

16.10.2018    11710    5    ripreal1    9    

001. Криптография и цифровая подпись RSA-sha256 на платформе 1С

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Внешняя компонента, исходники, обработка для 1С.

5 стартмани

04.09.2018    22837    62    Nikola23    73    

Программный вызов сенсорной клавиатуры

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Программный вызов сенсорной клавиатуры в ОС Windows, для сенсорных мониторов, которые не определяются системой как hid-совместимый сенсорный экран. Тестировалось на платформе 8.3.9.2033, конфигурация Розница 1.0.16.8.

1 стартмани

04.08.2018    14153    34    dewersia    7    

Внешняя компонента - Запись и воспроизведение .wav файлов. Обработка-иллюстратор. Промо

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Обработка иллюстрирует использование внешней компоненты MMLibrary для записи и воспроизведения звуковых wav файлов. Компонента разработана по технологии Native.

1 стартмани

01.03.2014    21550    33    vozhd    7    

Класс-обработка “Работа с картами Яндекс”

Разработка внешних компонент WEB v8 Абонемент ($m)

Как показать точку или маршрут на карте Яндекс. Как получить координаты по строке адреса (геокодирование).

1 стартмани

01.08.2018    36544    254    RSConsulting    17    

Распознавание лиц (off-line). Демонстрационная база.

Разработка внешних компонент v8 Абонемент ($m)

Распознавание лиц входит в нашу жизнь стремительными темпами, бизнес стремится за событиями. В публикации находится описание и пример использования нейросетей для распознавания лиц.

1 стартмани

17.07.2018    21247    77    nomadon    45    

QR-code полная версия (без шрифта и внешней компоненты для 8.2, 8.3 и любого типа клиента)

Разработка внешних компонент Сканер штрих-кода v8 1cv8.cf Абонемент ($m)

Предназначена для создания QR-code с указанием процента восстановления потерянных данных. Строка кодирования может содержать все печатаемые символы, в том числе и кириллические. Для работы не требуется внешняя компонента или шрифт.

2 стартмани

10.07.2018    16519    16    bobank    6    

ActiveX компонента WebCamX для работы с веб-камерой! Промо

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Искал нормальную компоненту без .NET для работы с Web-камерой, нашел одну, но она платная. Тогда я решил сделать свою ActiveX. Моя компонента умеет: 1. - Получать изображение с камеры. 2. - Писать видео с камеры в файл, в формате (*.asf). 3. - Делать снимок с камеры и сохранять в файл, в форматах (*.bmp; *.jpg; *.png). 4.- Умеет проигрывать видео. Для начало работы необходимо зарегистрировать компоненту в системе. Например: regsvr32 "Полный путь к файлу WebCamX.ocx" Так же имеется обработка пример для 1с8.2. В этой обработке показано как можно работать с этой компонентой. Желаю удачи! Не забываем ставить плюсы и коментить :)

1 стартмани

28.04.2011    57232    893    SerG_121    145    

Внешняя компонента для ping'а

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Внешняя компонента для выполнения ping'а из 1С:Предприятия 8.

1 стартмани

04.07.2018    14714    7    frkbvfnjh    24    

JVM Native API плагин - для запуска в 1С плагинов написанных на Java

Разработка внешних компонент v8 Абонемент ($m)

Запускаем виртуальную машину Java в 1С. Собрана внешняя компонента которая позволяет запускать виртуальную машину java в среде 1С. Позволяет как передавать параметры в java - так и получать уведомление через externalevent. Предпосылкой создания являлся тот факт, что есть много готового функционала которого не хватает в 1С. Язык сpp - довольно сложен для быстрой разработки, и теперь возможно использовать готовые сборки java классов (так называемые jar-файлы) для использования в 1С.

1 стартмани

20.06.2018    18755    44    minimajack    74