Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Строка шаблона для поиска регулярного выражения , Создать шаблон для RegExp.Pattern          
AnryMc Подменю пользователя
сообщение 02.03.23, 12:38
Сообщение #1

Оратор
Иконка группы
Группа: Местный
Сообщений: 331
Спасибо сказали: 96 раз
Рейтинг: 97.6

Добрый день!

Не могу собрать в мозгах шаблон для RegExp.Pattern

Ситуация: есть куча номенклатуры (название вноситься как в накладной поставщика), поэтому куча элементов по сути одно и тоже, но с разными названиями...

Например:
Болт 10 * 5 мм.
Болт 10,0 х 5.0 mm
БОЛТ 10Х5,0мм
bolt 10/5 mm
...
И куча прочих вариантов...

Задача отбор динамического списка где ищется:

Два числа (могут быть дробными с разделителем . или ,)
Между ними укр. х eng. x (возможно в верхнем регистре), ещё возможны знаки * и / - этот "разделитель" может (или нет) отделятся от чисел пробелами...
После второго числа через пробел (или без пробела) следует "мм" или "mm" (возможно в верхнем регистре)

Помогите с созданием шаблона для поиска RegExp.Pattern

Спасибо


P.S. Предполагается, что пользователь вводит два числа, например: 10 и 5
Нужно отобрать всю номенклатуру с данными парамерами...

Сообщение отредактировал AnryMc - 02.03.23, 12:38

zay Подменю пользователя
сообщение 02.03.23, 12:57
Сообщение #2

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 163
Из: Киев
Спасибо сказали: 131 раз
Рейтинг: 137.1

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

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

То-есть это в основном административное решение. Запретить забивать справочник номенклатуры "мусором"

AnryMc Подменю пользователя
сообщение 02.03.23, 17:01
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 331
Спасибо сказали: 96 раз
Рейтинг: 97.6

zay @ Сегодня, 12:57 * ,


Полностью своя конфа...
В день до 1500 наименований с "оЧеПатками" как у поставщика...
а потом нужно во всём этом "мусоре" найти нужные типоразмеры...
так что только RegExp

Нужна строка патерна для такой ситуации:

ПервоеЧисло введенное пользователем
+ может быть разделитель дробной части «.» или «,» если есть разделитель, то должна быть ещё одна цифра
+ может быть (или не быть) один или два разделителя (пробел)
+ знак «х» укр., «x» eng. (возможно в верхнем регистре) или «*» или «/»
+ может быть (или не быть) один или два разделителя (пробел)
+ ВтороеЧисло введенное пользователем
+ может быть разделитель дробной части «.» или «,» если есть разделитель, то должна быть ещё одна цифра
+ может быть (или не быть) один или два разделителя (пробел)
+ текст «мм» (укр.) или «mm» (eng.) (возможно в верхнем регистре)





Для чисел (второе 1-но разрядное) без десятичных

\d{1,3}\s{0,2}[xх\*]\s{0,2}\d\s{0,2}[mм][mм

Решение:

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЗаполнитьШаблоны();
    
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьШаблоны()
    
    Объект.СтрокаПоиска = "Болт 10,2 * 5.1 Mm. и прочее";
    Объект.ШаблонПоиска = "ЧЧЧ1\s{0,2}[xх\*\/]\s{0,2}ЧЧЧ2\s{0,2}[mм][mм].?";
    Объект.Число1 = "10.2";
    Объект.Число2 = "5,1";
    
КонецПроцедуры

&НаСервере
Процедура ВыполнитьПоискНаСервере()
    
    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.MultiLine = ЛОЖЬ; //Многострочный
    RegExp.Global = Истина;
    RegExp.IgnoreCase = Истина; //Регистр верхний/нижний или не учитывать
    
    Число1_1 = СтрНайти(СокрЛП(Объект.Число1), ".");
    Число1_2 = СтрНайти(СокрЛП(Объект.Число1), ",");
    Число1_Длина = СтрДлина(СокрЛП(Объект.Число1));
    Число2_1 = СтрНайти(СокрЛП(Объект.Число2), ".");
    Число2_2 = СтрНайти(СокрЛП(Объект.Число2), ",");
    Число2_Длина = СтрДлина(СокрЛП(Объект.Число2));
    
    Если Число1_1 <> 0 Тогда
        
        СтрокаЧЧЧ1 = Лев(СокрЛП(Объект.Число1), Число1_1-1)+"[\.,]"+Прав(СокрЛП(Объект.Число1),Число1_Длина - Число1_1);
        
    ИначеЕсли Число1_2 <> 0 Тогда
        
        СтрокаЧЧЧ1 = Лев(СокрЛП(Объект.Число1), Число1_2-1)+"[\.,]"+Прав(СокрЛП(Объект.Число1),Число1_Длина - Число1_2);
        
    Иначе
        
        СтрокаЧЧЧ1 = СокрЛП(Объект.Число1);
        
    КонецЕсли;
    
    Если Число2_1 <> 0 Тогда
        
        СтрокаЧЧЧ2 = Лев(СокрЛП(Объект.Число2), Число2_1-1)+"[\.,]"+Прав(СокрЛП(Объект.Число2),Число2_Длина - Число2_1);
        
    ИначеЕсли Число2_2 <> 0 Тогда
        
        СтрокаЧЧЧ2 = Лев(СокрЛП(Объект.Число2), Число2_2-1)+"[\.,]"+Прав(СокрЛП(Объект.Число2),Число2_Длина - Число2_2);
        
    Иначе
        
        СтрокаЧЧЧ2 = СокрЛП(Объект.Число2);
        
    КонецЕсли;
    
    СтрокаШаблона = СтрЗаменить(СтрЗаменить(Объект.ШаблонПоиска, "ЧЧЧ1", СтрокаЧЧЧ1), "ЧЧЧ2", СтрокаЧЧЧ2);
    
    RegExp.Pattern = СокрЛП(СтрокаШаблона);
    
    Matches=RegExp.Execute(СокрЛП(Объект.СтрокаПоиска));
    
    Если Matches.Count > 0 Тогда
        
        SubMatch = Matches.Item(0);
        //Получаем значение первой захваченной группы
        ЭтоНашли = SubMatch.Value;
        Объект.РезультатПоиска = ЭтоНашли;
        
    Иначе
        
        Объект.РезультатПоиска = "";
        
    КонецЕсли;
    
КонецПроцедуры

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.04.24, 9:19
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!