воскресенье, 16 октября 2022 г.

1СЗаготовка Строка значение и единица измерения в число

 Простенькая функция приводит "480 г" в "0,48", "10 см" в "0,1" и т.д. 

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


// Функция - Значение в единицу измерения
//
// Параметры:
//  мНаименование	 - Строка - Наименование характеристики - может содержать единицу измерения Пример (Длина в упаковке, кг:)
//  мЗначение		 - Строка - Само значение, может содержать единцу измерения пример (10 грамм)
// 
// Возвращаемое значение:
//  Число - Коэффициент умножения для привидения к КГ или СМ
//
&НаСервере
Функция ЗначениеВЕдиницуИзмерения(мНаименование,мЗначение)
	ЗначЕдИзм=РегЭксп(мЗначение,"ОставитьЦифры",Истина,"");
	МножителиЕдиницИзмерения=Новый Соответствие;
	МножителиЕдиницИзмерения.Вставить("г","0,001");
	МножителиЕдиницИзмерения.Вставить("грамм","0,001");
	МножителиЕдиницИзмерения.Вставить("g","0,001");
	МножителиЕдиницИзмерения.Вставить("gram","0,001");
	МножителиЕдиницИзмерения.Вставить("кг","1");
	МножителиЕдиницИзмерения.Вставить("килограмм","1");
	МножителиЕдиницИзмерения.Вставить("kg","1");
	МножителиЕдиницИзмерения.Вставить("kilogram","1");
	МножителиЕдиницИзмерения.Вставить("т","1000");
	МножителиЕдиницИзмерения.Вставить("тонна","1000");
	МножителиЕдиницИзмерения.Вставить("ton","1000");
	МножителиЕдиницИзмерения.Вставить("мм","0,1");
	МножителиЕдиницИзмерения.Вставить("миллиметр","0,1");
	МножителиЕдиницИзмерения.Вставить("mm","0,1");
	МножителиЕдиницИзмерения.Вставить("milimetre","0,1");
	МножителиЕдиницИзмерения.Вставить("см","1");
	МножителиЕдиницИзмерения.Вставить("сантиметр","1");
	МножителиЕдиницИзмерения.Вставить("cm","1");
	МножителиЕдиницИзмерения.Вставить("centimetre","1");
	МножителиЕдиницИзмерения.Вставить("дм","10");
	МножителиЕдиницИзмерения.Вставить("дециметр","10");
	МножителиЕдиницИзмерения.Вставить("м","100");
	МножителиЕдиницИзмерения.Вставить("метр","100");
	МножителиЕдиницИзмерения.Вставить("m","100");
	МножителиЕдиницИзмерения.Вставить("metre","100");
	МножителиЕдиницИзмерения.Вставить("км","1000");
	МножителиЕдиницИзмерения.Вставить("километр","1000");
	МножителиЕдиницИзмерения.Вставить("km","1000");
	МножителиЕдиницИзмерения.Вставить("kilometre","1000");
	
	НаимЕдИзм="";
	НаимЕдИзмНайдено=Ложь;
	
	РегЭксп= Новый COMОбъект("VBScript.RegExp");
	РегЭксп.IgnoreCase = "True"; //Игнорировать регистр 
	РегЭксп.Global = Истина; //Поиск всех вхождений шаблона 
	РегЭксп.MultiLine = Ложь; //Многострочный режим 

	Для каждого ЭлементСоответствия Из МножителиЕдиницИзмерения Цикл
		РегЭксп.Pattern = строка("(^|[^А-Яа-яA-Za-z])("+ЭлементСоответствия.Ключ+")([^А-Яа-яA-Za-z]|$)");
		НаимЕдИзмНайдено=РегЭксп.Test(мЗначение);
		Если НЕ НаимЕдИзмНайдено Тогда
			НаимЕдИзмНайдено=РегЭксп.Test(мНаименование);
		КонецЕсли;
		Если НаимЕдИзмНайдено Тогда 
			НаимЕдИзм=ЭлементСоответствия.Ключ;
			Прервать;
		КонецЕсли;		
	КонецЦикла;

	Если МножителиЕдиницИзмерения.Получить(НаимЕдИзм)=Неопределено Тогда
		ЗначениеЕдИзм=мЗначение;
	Иначе
		ЗначениеЕдИзм=ЗначЕдИзм*МножителиЕдиницИзмерения[НаимЕдИзм];
	КонецЕсли;
	
	Сообщить(СтрШаблон("Значение ""%1"" => ""%2"" (%3)",мЗначение,ЗначениеЕдИзм,НаимЕдИзм));
	Возврат(ЗначениеЕдИзм);
	 
КонецФункции


Комментариев нет:

Отправить комментарий