IE 2016

RexV8

Опубликовал orefkov в раздел Программирование - Внешние компоненты

Компонента для использования скрытых в v8 регулярных выражений.
Более мощная альтернатива VBScript.RegExp.

Для работы с юникодом V8 использует кроссплатформенную библиотеку ICU, которая помимо прочего, содержит и функционал по работе с регулярными выражениями. По какой-то неизвестной причине, 1С не "вытащила" этот функционал "наружу", и пользоваться им из языка 1С возможности нет.

Однако, как всегда, на помощь приходят ВК.

Представляю свою разработку, которая строит "мостик" из библиотеки ICU в язык 1С. Она может работать и как Native ВК, и как аддин к Снегопату.

Разработка выполнена по технологии "real native", т.е. не просто нативная по терминологии 1С, а использует "родные" методы движка 1С и притворяется штатным объектом 1С. (В семерке так работали 1С++, Rainbow и пр.)

Работа проверялась в толстом и тонком клиенте, и на серверах 32 и 64 бит. Поддерживаются релизы 8.2, 8.3.

Для работы в релизах 8.2 младше 14ого, необходимо скопировать в папку bin файлы icuXXX46.dll из каталогов bin более старших релизов 1С.

Подробнее о регулярных выражениях в ICU можно посмотреть здесь. 

Если сравнивать их с обычно используемыми VBScript.RegExp - регулярки от ICU:

  • Поддерживает look behind
  • Поддерживает поиск по unicode-свойствам символов
  • Поддерживает комментарии в выражении
  • Более полный и гибкий набор флагов поиска
  • Всегда есть с 1С, даже под linux
  • Быстрее работает

Для упрощения перехода, часть методов компоненты сделана совместима с VBScript.Regexp.
Таким образом, в существующем коде достаточно поменять создание объекта с Новый COMОбъект("Vbscript.RegExp") на Новый("V8RegEx").
После этого можно пользоваться и остальными методами компоненты, в том числе и split - разбиением строки на части по регулярному выражению.

В поставку входит два файла:

  • rex32.dll - для работы в 32-битных клиентах и сервере
  • rex64.dll - для работы в 64-битном сервере

Также имеется полная документация в html и текстовом формате.

 

 

Основные планы на ближайшее будещее - сделать linux-версию.

 

Обновлено:

выложена версия 1.0.0.3, в которой устранен ряд ошибок, иногда приводящих к вылету программы.

Файлы

Наименование Файл Версия Размер Кол. Скачив.
RexV8 - 1.0.0.3
.zip 145,30Kb
16.05.13
169
.zip 145,30Kb 169 Скачать

См. также

Лучшие комментарии

2. orefkov 15.04.2013 20:52
(1)
Планирую, как линукс версию сделаю.
Ответили: (3) (4)
# Ответить
28. StepByStep 18.04.2013 10:12
Вопрос по производительности:
Быстрее работает

На сколько (%)?
Ответили: (29)
+ 1 [ wowik; ]
# Ответить
71. orefkov 02.07.2016 01:30
(70) Pupkindt,
Дело то на самом деле не в исходниках. Эта ВК - костыли, причём релизо-зависимые. Как одинэсники-то докатились до жизни такой, что стоя уже обеими ногами в 21 веке - не имеют в своём распоряжении такого элементарного инструмента, как регулярные выражения? Они сейчас чуть не в каждой микроволновке есть. Даже С++ - и то уже включил их в стандарт языка - да, даже в С++ они теперь уже не сторонняя библиотека, а часть языка. И как я показал, внутри движка они есть. Но партия решила - одинэсники обойдутся.
+ 1 [ cool.vlad4; ]
# Ответить

Комментарии

1. andrewks 15.04.2013 20:39
зачёт. а исходники потом выложить не планируете?
Ответили: (2)
# Ответить
2. orefkov 15.04.2013 20:52
(1)
Планирую, как линукс версию сделаю.
Ответили: (3) (4)
# Ответить
3. andrewks 15.04.2013 21:30
(2) orefkov, отлично, будет очень интересно подглядеть :)
# Ответить
4. MarSeN 15.04.2013 21:39
(2) orefkov,
Я бы тоже глянул, как делается real native.
# Ответить
5. ADirks 16.04.2013 08:10
Ну так то может и хорошо, что просто спрятали, а не как с SQL. Прикинь, Регулярные Выражения от 1С... страшно же...
Ответили: (6)
# Ответить
6. andrewks 16.04.2013 08:19
(5) ADirks, в том и цимус, что они не от 1С :)
это, типа, как в 7.7 zlibeng для архивации - приаттачили опенсорсовую длл-ку для внутренних нужд
# Ответить
7. Evil Beaver 16.04.2013 11:33
А есть ли вообще в сети документация по SCOM? Я так понимаю, "притворяться" объектом 1С можно, если библиотека реализует этот одинэсовский креатив? Интересно, как можно вызвать, скажем moxel.dll из стороннего кода..
Ответили: (8)
# Ответить
8. orefkov 16.04.2013 11:42
(7)
Откуда ж документации-то в сети взяться?
Да и нет никакого SCOM на самом деле. Внутри там обычный COM - куча интерфейсов от IUnknown отнаследована, а объекты реализуют кучу интерфейсов, все через QueryInterface получается.
Ответили: (9)
+ 1 [ steban; ]
# Ответить
9. Evil Beaver 16.04.2013 12:17
(8) orefkov, а в линукс-дистрибутиве же то же самое, скорее всего? Я так думал, SCOM, это Sамодельный COM, с целью абстрагироваться от обычного.
Откуда ж документации-то в сети взяться?

Ну на *.cf и *.1cd откуда-то взялся, так что почему нет...
Ответили: (10) (11)
# Ответить
10. orefkov 16.04.2013 12:28
(9)
Я не могу точно сказать, что в 1С имели ввиду под аббревиатурой SCOM.
Делать его самодельным - ну я не знаю. Сам по себе COM прост как три рубля, и довольно легко имплементируется.
# Ответить
11. andrewks 16.04.2013 12:30
(9) Evil Beaver,
а в линукс-дистрибутиве же то же самое, скорее всего?

в линукс COM нет
Ответили: (12) (13)
# Ответить
12. orefkov 16.04.2013 12:41
(11)
По сути своей (если не брать деталей межпроцессного обмена) - COM очень прост.
Он описывает правила вызова методов интерфейсов, подсчета ссылок на объект, и интерфейс IUnknown.
Вот всё, что я хотел сказать о COM.
Ответили: (14)
# Ответить
13. Evil Beaver 16.04.2013 12:58
(11) andrewks, дык и я про что. COM нет, а SCOM, скорее всего есть.
Помнится, давно, я пытался извлечь из 1С-овской dll набор типов в виде type library. Так вот, ни один инструмент не опознал в ней COM-dll и ничего о внутренностях не сказал. Я это дело забросил, а вообще - жутко интересно, как можно правильно вызвать код из родной 1С-овской dll.
Ответили: (15) (16)
# Ответить
14. andrewks 16.04.2013 13:03
(12) orefkov, да это понятно
# Ответить
15. orefkov 16.04.2013 13:03
(13)
TypeLibrary - это уже OLE, которое базируется на COM.
Сам COM для работы ни в каких type library не нуждается.
# Ответить
16. andrewks 16.04.2013 13:04
(13) Evil Beaver, ну так dll-ка и не обязана всегда иметь COM-интерфейс, в общем случае
# Ответить
17. tormozit (файл скачал) 16.04.2013 13:14
Для совместимости RegExMatch.SubMatches(0) должен возвращать Неопределено в случае, если подгруппа не найдена. Сейчас возвращает пустую строку.
Ответили: (18)
# Ответить
18. orefkov 16.04.2013 13:18
(17)
Хм, странно. Вообще, по моей задумке должно было исключение кидать.
Приведи пожалуйста пример для ясности, я проверю.
Ответили: (19)
# Ответить
19. tormozit (файл скачал) 16.04.2013 13:34
(18) Речь о необязательных подгруппах.
аа = Новый ("V8RegEx");
аа.Pattern = "(\d)?";
Результат = аа.Execute("");
Сообщить(ТипЗнч(Результат.Item(0).SubMatches(0)));
...Показать Скрыть

Должно выдавать Неопределено, а не Строка.
Ответили: (23)
# Ответить
20. orefkov 16.04.2013 13:53
Нет, все правильно выдает "Строка".
Найдено одно совпадение, захвачена группа - пустая строка.
В javascript себя так же ведет:
Код
typeof "".match(/(\d)?/)[1]
"string"
Показать полностью
Ответили: (22) (24)
# Ответить
21. tormozit (файл скачал) 16.04.2013 13:59
Ну я говорю про VBScript.RegExp, который очень распространен в коде 1С. Так вот он работает именно так, как я описал, что легко проверить в моем примере, заменив первую строку.

Кстати для новых типов объектов неплохо бы обеспечить преобразование к строке. Модифицировав мой пример
аа.Pattern = "(\d)?";
Результат = аа.Execute("");
Для Каждого Элемент Из Результат Цикл
	Сообщить("" + Элемент);
КонецЦикла;
...Показать Скрыть

получаем исключение
Преобразование значения к типу Строка не может быть выполнено
# Ответить
22. tormozit (файл скачал) 16.04.2013 14:03
(20) orefkov, Я конечно не специалист в JavaScript, но возможно в твоем коде сообщается тип первой Группы, а не первой Подгруппы первой Группы.
Ответили: (23)
# Ответить
23. orefkov 16.04.2013 14:15
(22)
В javascript - если регэксп не глобальный, возвращает объект, где [0] - все совпадение, [1] и далее - подгруппы.

А с (19) я наверное не смогу ничего делать.
Налицо разная реализация самих регекспов в разных библиотеках.
То есть ICU и javascript считают, что захвачена подгруппа - пустая строка, VBScript считает, что подгруппа не захвачена. Я же не полезу внутрь ICU переделывать реализацию самих регэкспов. Или VBScript всегда для подгрупп - пустых строк возвращает Неопределено? Если это так, то можно и сделать в этом частном случае.

Преобразование одного результата в строку - как его сделать? Выдавать значение свойства Value? Или выдавать "COMОбъект", как у VBScript?
Ответили: (25)
+ 1 [ cool.vlad4; ]
# Ответить
24. cool.vlad4 (файл скачал) 16.04.2013 14:22
(20) orefkov, а у меня undefined, что в html страничке, что в phantomjs.
Ответили: (26)
# Ответить
25. tormozit (файл скачал) 16.04.2013 14:30
(23) Преобразование к строке есть насколько я знаю у всех типов 1С. Раз уж имитировать родной тип, то и эту особенность следует учесть. По умолчанию для всех типов платформы преобразование к строке возвращает имя типа. Думаю в нашем случае нужно сделать также.

> VBScript всегда для подгрупп - пустых строк возвращает Неопределено?
Нет. Неопределено возвращается в качестве подгруппы, если она необязательная и была не найдена. Для пустых строк возвращается пустая строка. Что очень логично, т.к. есть возможность различать
- не найденную необязательную подгруппу
- найденную пустую подгруппу

Такой код для VBScript.RegExp
аа.Pattern = "()?";
Результат = аа.Execute("");
Сообщить(ТипЗнч(Результат.Item(0).SubMatches(0)));
аа.Pattern = "(\d)?";
Результат = аа.Execute("");
Сообщить(ТипЗнч(Результат.Item(0).SubMatches(0)));
...Показать Скрыть
выдает

Строка
Не определено
# Ответить
26. orefkov 16.04.2013 14:41
(24)
Ну тут уже в-принципе, не так важно, что в разных реализациях javascript выдает, важно, как себя ведет ICU.
А в ICU вообще невозможно отследить, захватилась или нет группа, ибо она всегда захватывается. Так что это тот порог, на котором борьбу за совместимость придется остановить.
+ 1 [ cool.vlad4; ]
# Ответить
27. wirg 17.04.2013 15:17
Супер
# Ответить
28. StepByStep 18.04.2013 10:12
Вопрос по производительности:
Быстрее работает

На сколько (%)?
Ответили: (29)
+ 1 [ wowik; ]
# Ответить
29. orefkov 18.04.2013 17:00
(28)
На некоторых тестах первая версия RexV8 обгоняла VBScript.Regexp не на проценты, а в 5 раз, а на других тестах - проигрывала в 2 раза. Вот жду, когда tormozit сделает замеры на новой версии.
# Ответить
30. DrAku1a 20.04.2013 11:57
Офигеть! :)
# Ответить
31. coder1cv8 23.04.2013 13:56
Класс!
"Просмотра назад" в VBScript.RegExp бывало очень не хватало, да..
# Ответить
32. Andry.Boris 25.04.2013 00:29
Хорошая вещь... автору +
# Ответить
33. It-developer 26.04.2013 18:01
Какая цель? Что с помощью этого можно делать?
Ответили: (48)
# Ответить
34. tormozit (файл скачал) 01.05.2013 12:22
Провел сравнительный замер новой версии следующим кодом в консоли кода ИР
ПодключитьВнешнююКомпоненту("D:\Program Files\1cv82\common\rex32.dll", "V8RegEx", ТипВнешнейКомпоненты.Native);
текст = "луоалаокоащроощурагк кашгкаршгукрашгукр 87677 ыолвраылораыолршгр 8777 ыолвапаоыпорыпа рыпарваорпаырпа 999";
Количество = 100000;

ре = Новый("V8RegEx");
ре.Global = Истина; 
ЛксНачатьЗамер(Количество);
Для К = 1 По Количество Цикл
	результат1 = Новый Массив;
	ре.Шаблон = "";
	ре.Шаблон = "(\d+)";
	Вхождения = Ре.Execute(Текст);
	Для Каждого Вхождение Из Вхождения Цикл
	    результат1.Добавить(Вхождение.SubMatches(0));
	КонецЦикла;
КонецЦикла;
ЛксКончитьЗамер();

ре = Новый COMОбъект("Vbscript.RegExp");
ре.Global = Истина; 
ЛксНачатьЗамер(Количество);
Для К = 1 По Количество Цикл
	результат2 = Новый Массив;
	ре.Pattern = "";
	ре.Pattern  = "(\d+)";
    Вхождения = ре.Execute(текст);
	Для Каждого Вхождение Из Вхождения Цикл
        результат2.Добавить(Вхождение.SubMatches(0));
    КонецЦикла;
КонецЦикла;
ЛксКончитьЗамер();

///////////////////////////////////////

ре = Новый("V8RegEx");
ре.Global = Истина; 
ре.Шаблон = "(\d+)";
ЛксНачатьЗамер(Количество);
Для К = 1 По Количество Цикл
	результат1 = Новый Массив;
	Вхождения = Ре.Execute(Текст);
	Для Каждого Вхождение Из Вхождения Цикл
	    результат1.Добавить(Вхождение.SubMatches(0));
	КонецЦикла;
КонецЦикла;
ЛксКончитьЗамер();

ре = Новый COMОбъект("Vbscript.RegExp");
ре.Global = Истина; 
ре.Pattern  = "(\d+)";
ЛксНачатьЗамер(Количество);
Для К = 1 По Количество Цикл
	результат2 = Новый Массив;
    Вхождения = ре.Execute(текст);
	Для Каждого Вхождение Из Вхождения Цикл
        результат2.Добавить(Вхождение.SubMatches(0));
    КонецЦикла;
КонецЦикла;
ЛксКончитьЗамер();
...Показать Скрыть

Получил
Окончание замера "Замер_30" - Длительность = 1.135с, Среднее = 0.00001135с
Окончание замера "Замер_31" - Длительность = 2.849с, Среднее = 0.00002849с
Окончание замера "Замер_32" - Длительность = 1.08с, Среднее = 0.0000108с
Окончание замера "Замер_33" - Длительность = 2.538с, Среднее = 0.00002538с

Т.е. этот объект в 2-3 раз быстрее работает, чем VBScript.RegExp.
Ответили: (35)
# Ответить
35. orefkov 01.05.2013 12:32
(34)
Огромное спасибо за тесты!
Результаты радуют.
# Ответить
36. tormozit (файл скачал) 02.05.2013 13:05
Такой код приводит к недопустимой операции (переполнению стека?). 8.2.18.51
ПодключитьВнешнююКомпоненту("D:\Program Files\1cv82\common\rex32.dll", "V8RegEx", ТипВнешнейКомпоненты.Native);
текст = "луоалаокоащроощурагк кашгкаршгукрашгукр 87677 ыолвраылораыолршгр 8777 ыолвапаоыпорыпа рыпарваорпаырпа 999";
Количество = 1000;
ре = Новый("V8RegEx");
ре.Global = Истина; 
Для К = 1 По Количество Цикл
	ре.Шаблон = "(\d+)" + новый УникальныйИдентификатор;
	Ре.Заменить(текст, "$1");
КонецЦикла;
...Показать Скрыть

Problem signature:
Problem Event Name: APPCRASH
Application Name: 1CV8.exe
Application Version: 8.2.18.51
Application Timestamp: 513e4ca9
Fault Module Name: icudt46.dll
Fault Module Version: 4.6.1.5
Fault Module Timestamp: 50751a3d
Exception Code: c0000005
Exception Offset: 0029007a
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1049
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Видимо внутренний кэш не имеет контроля роста.
Ответили: (39) (41)
# Ответить
37. orefkov 16.05.2013 10:56
Выложил версию 1.0.0.3.
Устранен ряд ошибок, иногда приводящий к вылету программы.
# Ответить
38. tormozit (файл скачал) 16.05.2013 11:08
Будет хорошо, если в описании указать про неполную совместимость с VB (пустая строка против Неопределено для не найденных необязательных подгрупп). Речь про этот фрагмент
Таким образом, в существующем коде достаточно поменять создание объекта с Новый COMОбъект("Vbscript.RegExp") на Новый("V8RegEx").
Дальше я бы дописал "Однако следует учитывать, что при получении не найденных необязательных подгрупп метод SubMatches в VBScript возвращает Неопределено, а в V8RegExp возвращает пустую строку".
# Ответить
39. tormozit (файл скачал) 16.05.2013 11:28
В новой версии 1.0.0.3 тест (36) по-прежнему приводит к падению.
Ответили: (40)
# Ответить
40. orefkov 16.05.2013 11:31
(39)
Странно, у меня не падает.
Напиши версию 1С и архитектуру (32/64)
Ответили: (41)
# Ответить
41. tormozit (файл скачал) 16.05.2013 11:59
(40) Да. Теперь в чистом виде (36) не воспроизводится, но в грязном воспроизводится. Пока могу лишь описание ошибки предоставить (ОС Win7 32b)
Problem signature:
Problem Event Name: APPCRASH
Application Name: 1CV8.exe
Application Version: 8.2.18.51
Application Timestamp: 513e4ca9
Fault Module Name: V8RegEx32.dll
Fault Module Version: 1.0.0.3
Fault Module Timestamp: 5194801f
Exception Code: c0000005
Exception Offset: 00006bb7
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1049
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
Позже выясню детально, какое еще условие нужно для воспроизведения.
# Ответить
42. tormozit (файл скачал) 17.05.2013 09:55
Несколько часов пытался, но не удалось сделать чистый пример. Ошибка точно есть (остаток от первоначальной). Сделал демо-базу из ИР, где в включен режим использования этого RegExp, и снял 2 видеоролика для демонстрации багов, насколько было возможно отвязал от логики ИР. http://rghost.ru/46054911. Я готов показать более подробно teamviewer'у, если есть желание.
# Ответить
43. tormozit (файл скачал) 20.05.2013 23:20
Вывел в чистом виде остаток бага. Так
ПодключитьВнешнююКомпоненту("D:\Program Files\1cv82\common\rex32.dll", "V8RegEx", ТипВнешнейКомпоненты.Native);
текст = "луоалаокоащроощурагк кашгкаршгукрашгукр 87677 ыолвраылораыолршгр 8777 ыолвапаоыпорыпа рыпарваорпаырпа 999";
Количество = 1000;
ре = Новый("V8RegEx");
ре.Global = Истина; 
ре.IgnoreCase = Истина;
Для К = 1 По Количество Цикл
	ре.Шаблон = "(\d+)" + Новый УникальныйИдентификатор + "";
	Ре.Заменить(текст, "$1");
КонецЦикла;
...Показать Скрыть

возникает недопустимая операция
Problem signature:
Problem Event Name: APPCRASH
Application Name: 1CV8.exe
Application Version: 8.2.18.51
Application Timestamp: 513e4ca9
Fault Module Name: rex32.dll
Fault Module Version: 1.0.0.3
Fault Module Timestamp: 5194801f
Exception Code: c0000005
Exception Offset: 00006bb7
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1049
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
Ответили: (44)
# Ответить
44. tormozit (файл скачал) 28.05.2013 10:14
Ну что, есть надежда на исправление бага (43)?
# Ответить
45. tormozit (файл скачал) 10.06.2013 08:58
При выполнении поиска с таким шаблоном
\[(DisplayName\("(\w+")\)\s*:\s*\w+,)?Description\("(.*?)"\)\s*[^\n]+\]\s*class\s+(\w+)\s*:\s*\w+\s*{(.*?)};
ругается

Ошибка при вызове метода контекста (Выполнить): Не удалось создать регулярное выражение. Строка 1, Позиция 106, текст до: '+)\s*:\s*\w+\s*', после: '{(.*?)};'
Ответили: (63)
# Ответить
46. orefkov 10.06.2013 09:29
Так фигурные скобки тоже надо экранировать
Код
\{(.*?)\};
Показать полностью
Ответили: (47)
# Ответить
47. tormozit (файл скачал) 10.06.2013 09:52
(46) orefkov, еще одно отличие от MS реализации. Там это не вызывает ошибки. Теперь вспомнил, что фигурные скобки для числа повторов используются. Но видимо в зависимости от контекста они автоматом распознаются в других реализациях как символы. Ок, буду везде их экранить для надежности.
# Ответить
48. BorovikSV 29.06.2013 11:17
(33) It-developer,
подумай, ты же как никак It-developer
# Ответить
49. tormozit (файл скачал) 23.08.2013 09:53
Ждать ли нам стабильной версии?
# Ответить
50. tormozit (файл скачал) 27.12.2013 08:18
Ну что, когда? =)
# Ответить
51. GreenLab (файл скачал) 02.01.2014 09:44
У кого-нибудь работает под 8.3.4. ? При подключении компоненты под 8.3.4.389 падает платформа. ОС:Win7 Pro x64.
# Ответить
52. helgi 28.01.2014 14:03
(0) orefkof,

а почему не Новый("V8RegExp") ? :)
# Ответить
53. manaxov83 06.02.2014 16:45
Платформа 8.3.4.408, при подключение ВК(ПодключитьВнешнююКомпоненту(ПутьКВК, "RegEx", ТипВнешнейКомпоненты.Native)) платформа вылетает в дамп!!!.
Можно ли как нить исправить этот косяк?
# Ответить
54. UncleVader (файл скачал) 18.06.2014 21:22
Отличная штука!
Странно что в 1С нет штатного объекта для регулярок.
Мне не хватает до полного счастья только версии под линукс и параметра /U (Ungreedy), его сложно реализовать?
# Ответить
55. deevil 02.09.2014 10:40
Была платформа 8.2.19 - все работало нормально.
Обновились на 8.3.15 - начал падать 1с в момент подключения внешней обработки...
Ответили: (56)
# Ответить
56. orefkov 02.09.2014 11:00
(55)
8.3.15 пока не поддерживается. Следите за обновлениями.
Ответили: (57)
# Ответить
57. deevil 02.09.2014 21:19
(56) orefkov, ну хотя бы ориентир по срокам какой?

И желательно в описании написать до какой версии поддерживается...
Ответили: (58)
# Ответить
58. orefkov 03.09.2014 16:48
(57)
Проверяй - https://snegopat.ru/downloads/rex83.zip
Для 8.3.4.x, 8.3.5.x.
Я наскоро проверял на 8.3.5.823, на клиенте. На 64битном сервере не проверял.
Ответили: (59) (60) (62)
+ 1 [ deevil; ]
# Ответить
59. deevil 04.09.2014 02:44
(58) orefkov, да теперь все работает.
64х битного сервера к сожалению нет, поэтому не могу проверить.
А на 32х битном все работает отлично.

Спасибо за оперативность)

PS Касательно линукс версии - тоже было бы круто поскорей увидеть)
# Ответить
60. Поручик (файл скачал) 04.09.2014 11:41
(58) Спасибо. Я тоже сейчас использовал на 8.3.4.
+ 1 [ deevil; ]
# Ответить
61. kolayuk 18.12.2014 11:27
Здравствуйте, не могли бы вы предоставить исходники данной компоненты? Очень интересует работа real native компонент, необходимо интегрировать свое окно в существующую форму 1С, через FindWindowEx это сделать проблематично, тк там куча окон с одинаковыми классами у всех ЭУ, нужно хотя бы получить HWND конкретной формы, судя по FormEx это возможно. Нашел исходники 1С++, но они для 7.7 и там, судя по инициализации компоненты с IDispatch она загружается как COM-объект, а не как Native... Собственно интересуют даже не столько исходники конкретной компоненты, сколько технология создания real-native компонент. Спасибо! Мои контакты: kolayuk at gmail.com
# Ответить
62. Поручик (файл скачал) 17.02.2015 20:41
(58) Компонента успешно проработала с сентября месяца, а вчера внезапно началась валиться без выдачи каких-либо сообщений и исключений, просто программа тупо завершает работу. Пришлось в срочном порядке переключать на виндовый VBScript.RegExp.
Если интересно, вот набор регулярок

МассивШаблонов.Добавить("(евро[а-яa-z]{0,5}\s{0,1}[а-яa-z]{0,15}\s{0,1}отдел[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(итальян[а-яa-z]{0,5}\s{0,1}[а-яa-z]{0,10}\s{0,1}кафел[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(встроен[а-яa-z]{0,5}\s{0,1}[а-яa-z]{0,10}\s{0,1}шкаф[а-яa-z]{0,5}\s{0,1}купе[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(отдел[а-яa-z]{0,5}\s{0,1}[а-яa-z]{0,15}\s{0,1}евро[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(тепл[а-яa-z]{0,5}\s{0,1}[а-яa-z]{0,10}\s{0,1}пол[а-яa-z]{0,5}\s{0,1})");
		
МассивШаблонов.Добавить("(евро\s?ремон[а-яa-z]{0,5}\s?)|(evro\s?ремон[а-яa-z]{0,5}\s?)");
МассивШаблонов.Добавить("(ремон[а-яa-z]{0,5}\s{0,1}[а-яa-z]{0,10}\s{0,1}евро[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(сост[а-яa-z]{0,5}\s{0,1}[а-яa-z]{0,15}\s{0,1}отлич[а-яa-z]{0,5}\s{0,1})|(отлич[а-яa-z]{0,5}\s{0,1}[а-яa-z]{0,15}\s{0,1}сост[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(отлич[а-яa-z]{0,5}\s{0,1}[а-яa-z ]{0,35}\s{0,1}ремон[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("([а-яa-z]{0,15}качествен[а-яa-z]{0,5}\s{0,1}[а-яa-z ]{0,35}\s{0,1}ремон[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(соврем[а-яa-z]{0,5}\s{0,1}[а-яa-z ]{0,35}\s{0,1}ремон[а-яa-z]{0,5}\s{0,1})|(ремон[а-яa-z]{0,5}\s{0,1}[а-яa-z ]{0,35}\s{0,1}соврем[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(дорогой[а-яa-z]{0,5}\s{0,1}[а-яa-z ]{0,35}\s{0,1}ремон[а-яa-z]{0,5}\s{0,1})|(ремон[а-яa-z]{0,5}\s{0,1}[а-яa-z ]{0,35}\s{0,1}дорогой[а-яa-z]{0,5}\s{0,1})");
МассивШаблонов.Добавить("(дизайн[а-яa-z]{0,5}\s{0,1}[а-яa-z ]{0,35}\s{0,1}ремон[а-яa-z]{0,5}\s{0,1})|(ремон[а-яa-z]{0,5}\s{0,1}[а-яa-z ]{0,35}\s{0,1}дизайн[а-яa-z]{0,5}\s{0,1})");

Для каждого ЭлементМассива Из МассивШаблонов Цикл    
	RegExp.Pattern = ЭлементМассива;
	Результат = RegExp.Test(ТекстовоеСодержимое);
	Если Результат Тогда //Результат.Count > 0
............ здесь что-то делаем
	КонецЕсли; 
КонецЦикла; //Для каждого ЭлементМассива Из  
...Показать Скрыть


Платформа 8.3.5.1383. Очень странно. Виндовый объект отрабатывает спокойно, причём ТекстовоеСодержимое предварительно очищается от всех небуквенно-цифровых символов.
Ответили: (63)
+ 1 [ artbear; ]
# Ответить
63. tormozit (файл скачал) 18.02.2015 07:38
(62) Так я же еще в (41),(45) предупреждал. Автор до сих пор динамит багу =)
+ 1 [ artbear; ]
# Ответить
64. sashocq (файл скачал) 28.07.2015 23:50
Давно ещё приметил эту разработку, а сейчас вот случай представился. И первый же случай не работает :-( На выражение
(?<Code>BD-?\d+).*

ругается:
Не удалось создать регулярное выражение. Строка 1, Позиция 4, текст до: '(?<', после: 'Code>BD-?\d+).*'

Прикрепленные файлы:

Expresso.png
# Ответить
65. grumagargler 04.10.2015 19:40
на 1С:Предприятие x32 сервере 8.3.x, в многопользовательском режиме, использование этой компоненты приводит к падению рабочих процессов 1с, пришлось вернуться на regexp
# Ответить
66. Петров-Водкин (файл скачал) 23.10.2015 13:53
А как можно ПодключитьВнешнююКомпоненту через макет?
# Ответить
67. Петров-Водкин (файл скачал) 23.10.2015 16:12
Отвечаю сам себе.
Отлично подключается zip-архив с манифестом из общего макета.
# Ответить
68. q4a 28.10.2015 11:20
Выложите исходники, пожалуйста!
Версии под Linux очень не хватает =(
Ответили: (69)
# Ответить
69. orefkov 01.11.2015 01:15
(68)
Сейчас глянул исходники - это ужас. Я сейчас сам там с трудом разберусь - что нужно, что не нужно, что можно выкладывать, а что нет.
Давайте я постараюсь до Нового Года как-то решить вопрос. Сейчас есть мысль на базе нового снегопата сделать по аналогии работу в предприятии, там и регулярки тогда будут.
# Ответить
70. Pupkindt (файл скачал) 02.06.2016 13:22
На сервере х64 Дерево результата заполняется мусором (8.3.7), на x32 все в порядке. Дело явно в ерунде! Может все-таки имеет смысл выложить исходники? Компонента крайне полезная! Автору Большое спасибо!
Ответили: (71)
# Ответить
71. orefkov 02.07.2016 01:30
(70) Pupkindt,
Дело то на самом деле не в исходниках. Эта ВК - костыли, причём релизо-зависимые. Как одинэсники-то докатились до жизни такой, что стоя уже обеими ногами в 21 веке - не имеют в своём распоряжении такого элементарного инструмента, как регулярные выражения? Они сейчас чуть не в каждой микроволновке есть. Даже С++ - и то уже включил их в стандарт языка - да, даже в С++ они теперь уже не сторонняя библиотека, а часть языка. И как я показал, внутри движка они есть. Но партия решила - одинэсники обойдутся.
+ 1 [ cool.vlad4; ]
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016