Имя: Пароль:
1C
 
Склонение фамилий в БП 2.0
0 Ната48
 
17.08.15
22:28
Подскажите, пожалуйста, как можно (если можно)) в БП 2.0 реализовать склонение ФИО контрагентов в документе ПКО? (от: ФИО (кого?))
1 trooba
 
17.08.15
22:31
(0) использовать namedecl.dll и механизм склонения из ЗУП (например), хотя он не всегда корректно работает
2 Ната48
 
17.08.15
22:44
Спасибо, буду пробовать))) других, похоже, способов нет (или я не нашла)))
3 Ната48
 
17.08.15
23:43
Ну, вот я зарегистрировала эту компоненту. И что мне дальше с ней делать? Что бы в строке "от" было ФИО В Винительном падеже?
4 Джинн
 
17.08.15
23:47
(3) Посмотреть как это сделано в ЗУП не предлагать?
5 Ната48
 
17.08.15
23:51
))) спасибо за пинок в нужном направлении)))
6 trooba
 
18.08.15
10:11
(5) // Функция склоняет переданую фразу
// Параметры:
//  Фраза (обязательный), тип строка
//   Параметр должен содержать фразу. Каждое слово фразы будет просклонено отдельно
//
//  Падеж (обязательный), тип число
//   Падеж, в который необходимо поставить ФИО.
//   1 - Именительный
//   2 - Родительный
//   3 - Дательный
//   4 - Винительный
//   5 - Творительный
//   6 - Предложный
//
Функция Просклонять(Компонента, Знач Фраза = "", Падеж = 1, Пол = Неопределено, Результат) Экспорт
    
    Если Компонента = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Результат = "";
    
    МассивСтрок = ОбщегоНазначенияЗК.РазложитьСтрокуВМассивПодстрок(Фраза, " ");
    
    // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов
    НомерНесклоняемогоСимвола = 4;
    Для Номер = 1 По Мин(МассивСтрок.Количество(), 3) Цикл
        Если Не ФИОНаписаноВерно(МассивСтрок[Номер-1], Истина) Тогда
            НомерНесклоняемогоСимвола = Номер;
            Прервать;
        КонецЕсли;

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