1С: Склоняем слова

Внешний компонент NameDecl.dll позволяет склонять ФИО и отдельные слова.
Бывает очень пригождается.

Сам NameDecl.dll можно взять на ИТС диске.
Затем надо кинуть в bin каталог 1С`ки (С:Program Files1cv828.****bin) и выполнить команду:
regsvr32 NameDecl.dll
Делать это надо с правами администратора. Иначе вы увидите ошибку при выполнение команды regsvr32.

Попытка
	Компонента = "NameDecl.dll";
	ЗагрузитьВнешнююКомпоненту(компонента);
	КомпонентСклонения = Новый("AddIn.NameDeclension");		
Исключение
	Сообщить("Не удалось загрузить внешнюю компоненту склонения имен по причине: " + ОписаниеОшибки()); 
	Возврат "";
КонецПопытки;	

НомерСклонения = 2; // Родительный падеж
ТекстВРодительном = КомпонентСклонения.Просклонять("Иванов Иван Иваныч",НомерСклонения);
Сообщить(ТекстВРодительном); // Выводит: Иванова Ивана Иваныча 

Склоняем каждое слово в отдельности.

// Разбивает строку ИсходнаяСтрока по разделителям Разделитель
// Вовзразает массив строк
Функция РазбитьСтрокуНаМассив(ИсходнаяСтрока, Разделитель = " ") Экспорт 
	мсСтрок = Новый Массив;	
	МнСтр=СтрЗаменить(ИсходнаяСтрока,Разделитель,Символы.ПС);
	Для н=1 По СтрЧислоСтрок(МнСтр) Цикл
		мсСтрок.Добавить(СтрПолучитьСтроку(МнСтр,н));
	КонецЦикла;				
	Возврат мсСтрок;
КонецФункции	

// Разбивает строку на слова и склоняем
// НомерСклонения - от 1 до 6
// 1-И.; 2-Р.; 3-Д.; 4-В.; 5-Тв.; 6-Пр.
// КомпонентСклонения - внешний компонент NameDecl.dll
Функция ПросклонятьКаждоеСлово(ИсходнаяСтрока,НомерСклонения,КомпонентСклонения=Неопределено) Экспорт 	
	Если КомпонентСклонения=Неопределено тогда
		Попытка
			Компонента = "NameDecl.dll";
			ЗагрузитьВнешнююКомпоненту(компонента);
			КомпонентСклонения = Новый("AddIn.NameDeclension");		
		Исключение
			Сообщить("Не удалось загрузить внешнюю компоненту склонения имен по причине: " + ОписаниеОшибки()); 
			Возврат "";
		КонецПопытки;	
	КонецЕсли;		
	
	мсСтрок = СНОбщий.РазбитьСтрокуНаМассив(Строка(ИсходнаяСтрока));	
	СтрокаРезультат = "";
	Для Н = 0 по мсСтрок.Количество()-1 цикл
		СклоняемТекст = мсСтрок[Н];
		СтрокаРезультат = СтрокаРезультат + КомпонентСклонения.Просклонять(СклоняемТекст,НомерСклонения) + " ";		
	КонецЦикла;	
	СтрокаРезультат = СокрЛП(СтрокаРезультат);
	Возврат СтрокаРезультат;	
КонецФункции

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *