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

       Результат = Результат + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1];
   КонецЦикла;
   
   Если ПустаяСтрока(Результат) Тогда
       Результат = Фраза;
       Возврат Ложь;
   КонецЕсли;
   
   Попытка
       Если Пол = Перечисления.ПолФизическихЛиц.Мужской Тогда
           Результат = Компонента.Просклонять(Результат, Падеж, 1) + " ";
           
       ИначеЕсли Пол = Перечисления.ПолФизическихЛиц.Женский Тогда
           Результат = Компонента.Просклонять(Результат, Падеж, 2) + " ";
           
       Иначе
           Результат = Компонента.Просклонять(Результат, Падеж) + " ";
           
       КонецЕсли;
       
   Исключение
       Результат = Фраза;
       Возврат Ложь;
       
   КонецПопытки;
   
   // Остальные символы добавим без склонения
   Для Номер = НомерНесклоняемогоСимвола По МассивСтрок.Количество() Цикл
       Результат = Результат + " " + МассивСтрок[Номер-1];
   КонецЦикла;
   
   Результат = СокрЛП(Результат);
   
   Возврат Истина;
   
КонецФункции // Просклонять()
2 iceman2112
 
16.01.12
18:39
Спасибо!
3 V_V_V
 
16.01.12
18:45
:))
Кто сегодня не склонял никого и ничего - отзовитесь!!!
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.