| 
    
        
     
     | 
    
    
  | 
Число прописью | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        G751    
     22.03.18 
            ✎
    09:00 
 | 
         
        Как получить число прописью в родительном падеже?
 
        Конкретно: 5 - пяти, 10- десяти и т.д. К функции ЧислоПрописью() отсылать меня не надо(перепробовал). Просто покажите, пожалуйста на примере. Спасибо.  | 
|||
| 
    1
    
        lodger    
     22.03.18 
            ✎
    09:04 
 | 
         
        (0) если не хватает функционала ЧислоПрописью(), тогда в пределах 1ц это решается муторно и долго.
 
        обычно используют внешние компоненты, иногда даже прибегают к веб-сервису склонений.  | 
|||
| 
    2
    
        lodger    
     22.03.18 
            ✎
    09:04 
 | 
         
        (0) в своей конфе поищите модули СтроковыеФункции...     
         | 
|||
| 
    3
    
        jsmith82    
     22.03.18 
            ✎
    09:05 
 | 
||||
| 
    4
    
        jsmith82    
     22.03.18 
            ✎
    09:06 
 | 
||||
| 
    5
    
        spiller26    
     22.03.18 
            ✎
    09:09 
 | 
         
        Это попробуй
 
        https://helpf.pro/faq8/view/38.htm  | 
|||
| 
    6
    
        spiller26    
     22.03.18 
            ✎
    09:11 
 | 
         
        Или воспользуйся morpher.ru
 
        http://1clenta.ru/pattern/79  | 
|||
| 
    7
    
        Масянька    
     22.03.18 
            ✎
    09:13 
 | 
         
        Докатились...
 
        Там делов на полчаса с перекурами... Функция стрФразаПрописью(мЧисло, Корень) Экспорт Если (Корень = "наименован") Тогда Если (мЧисло >= 10) и (мЧисло <= 20) Тогда ЧислоПрописью = Нрег(Формат(мЧисло, "ЧП")); Корень = Корень + "ий"; Фраза = стрПерваяБукваЗаглавная(ЧислоПрописью) + " " + Корень; Иначе ВсеЧислоПрописью = НРег(Формат(мЧисло, "ЧП")); Если мЧисло > 20 Тогда ПоследняяЦифраЧислом = мЧисло % 10; ПервыеЦифрыПрописью = стрПолучитьСловаДоПоследнегоИзСтроки(ВсеЧислоПрописью); ПоследняяЦифраПрописью = стрПолучитьПоследнееСловоИзСтроки(ВсеЧислоПрописью); ИначеЕсли мЧисло < 10 Тогда ПоследняяЦифраЧислом = мЧисло; ПервыеЦифрыПрописью = ""; ПоследняяЦифраПрописью = Нрег(Формат(мЧисло, "ЧП")); КонецЕсли; Если ПоследняяЦифраЧислом = 1 Тогда ПоследняяЦифраПрописью = "одно"; Корень = Корень + "ие"; ИначеЕсли (ПоследняяЦифраЧислом >= 2) и (ПоследняяЦифраЧислом <= 4) Тогда Корень = Корень + "ия"; Иначе Корень = Корень + "ий"; КонецЕсли; ВсеЧислоПрописью = СокрЛП(ПервыеЦифрыПрописью + " " + ПоследняяЦифраПрописью); Фраза = СокрЛП(стрПерваяБукваЗаглавная(ВсеЧислоПрописью) + " " + Корень); КонецЕсли; ИначеЕсли (Корень = "картридж") Тогда Если (мЧисло >= 10) и (мЧисло <= 20) Тогда ЧислоПрописью = Нрег(Формат(мЧисло, "ЧП")); Корень = Корень + "ей"; Фраза = стрПерваяБукваЗаглавная(ЧислоПрописью) + " " + Корень; Иначе ВсеЧислоПрописью = НРег(Формат(мЧисло, "ЧП")); Если мЧисло > 20 Тогда ПоследняяЦифраЧислом = мЧисло % 10; ПервыеЦифрыПрописью = стрПолучитьСловаДоПоследнегоИзСтроки(ВсеЧислоПрописью); ПоследняяЦифраПрописью = стрПолучитьПоследнееСловоИзСтроки(ВсеЧислоПрописью); ИначеЕсли мЧисло < 10 Тогда ПоследняяЦифраЧислом = мЧисло; ПервыеЦифрыПрописью = ""; ПоследняяЦифраПрописью = Нрег(Формат(мЧисло, "ЧП")); КонецЕсли; Если ПоследняяЦифраЧислом = 1 Тогда ПоследняяЦифраПрописью = "один"; ИначеЕсли (ПоследняяЦифраЧислом >= 2) и (ПоследняяЦифраЧислом <= 4) Тогда Корень = Корень + "а"; Иначе Корень = Корень + "ей"; КонецЕсли; ВсеЧислоПрописью = СокрЛП(ПервыеЦифрыПрописью + " " + ПоследняяЦифраПрописью); Фраза = СокрЛП(стрПерваяБукваЗаглавная(ВсеЧислоПрописью) + " " + Корень); КонецЕсли; ИначеЕсли (Корень = "день") Тогда Если (мЧисло >= 10) и (мЧисло <= 20) Тогда ЧислоПрописью = Нрег(Формат(мЧисло, "ЧП")); Корень = "дней"; Фраза = стрПерваяБукваЗаглавная(ЧислоПрописью) + " " + Корень; Иначе ВсеЧислоПрописью = НРег(Формат(мЧисло, "ЧП")); Если мЧисло > 20 Тогда ПоследняяЦифраЧислом = мЧисло % 10; ПервыеЦифрыПрописью = стрПолучитьСловаДоПоследнегоИзСтроки(ВсеЧислоПрописью); ПоследняяЦифраПрописью = стрПолучитьПоследнееСловоИзСтроки(ВсеЧислоПрописью); ИначеЕсли мЧисло < 10 Тогда ПоследняяЦифраЧислом = мЧисло; ПервыеЦифрыПрописью = ""; ПоследняяЦифраПрописью = Нрег(Формат(мЧисло, "ЧП")); КонецЕсли; Если ПоследняяЦифраЧислом = 1 Тогда ПоследняяЦифраПрописью = "один"; ИначеЕсли (ПоследняяЦифраЧислом >= 2) и (ПоследняяЦифраЧислом <= 4) Тогда Корень = "дня"; Иначе Корень = "дней"; КонецЕсли; ВсеЧислоПрописью = СокрЛП(ПервыеЦифрыПрописью + " " + ПоследняяЦифраПрописью); Фраза = СокрЛП(стрПерваяБукваЗаглавная(ВсеЧислоПрописью) + " " + Корень); КонецЕсли; ИначеЕсли (Корень = "чек") Тогда Если (мЧисло >= 10) и (мЧисло <= 20) Тогда ЧислоПрописью = Нрег(Формат(мЧисло, "ЧП")); Корень = "чеков"; Фраза = стрПерваяБукваЗаглавная(ЧислоПрописью) + " " + Корень; Иначе ВсеЧислоПрописью = НРег(Формат(мЧисло, "ЧП")); Если мЧисло > 20 Тогда ПоследняяЦифраЧислом = мЧисло % 10; ПервыеЦифрыПрописью = стрПолучитьСловаДоПоследнегоИзСтроки(ВсеЧислоПрописью); ПоследняяЦифраПрописью = стрПолучитьПоследнееСловоИзСтроки(ВсеЧислоПрописью); ИначеЕсли мЧисло < 10 Тогда ПоследняяЦифраЧислом = мЧисло; ПервыеЦифрыПрописью = ""; ПоследняяЦифраПрописью = Нрег(Формат(мЧисло, "ЧП")); КонецЕсли; Если ПоследняяЦифраЧислом = 1 Тогда ПоследняяЦифраПрописью = "один"; ИначеЕсли (ПоследняяЦифраЧислом >= 2) и (ПоследняяЦифраЧислом <= 4) Тогда Корень = "чека"; Иначе Корень = "чеков"; КонецЕсли; ВсеЧислоПрописью = СокрЛП(ПервыеЦифрыПрописью + " " + ПоследняяЦифраПрописью); Фраза = СокрЛП(стрПерваяБукваЗаглавная(ВсеЧислоПрописью) + " " + Корень); КонецЕсли; ИначеЕсли (Корень = "кассов") Тогда ВсеЧислоПрописью = НРег(Формат(мЧисло, "ЧП")); Если мЧисло > 20 Тогда ПоследняяЦифраЧислом = мЧисло % 10; ПервыеЦифрыПрописью = стрПолучитьСловаДоПоследнегоИзСтроки(ВсеЧислоПрописью); ПоследняяЦифраПрописью = стрПолучитьПоследнееСловоИзСтроки(ВсеЧислоПрописью); ИначеЕсли мЧисло < 10 Тогда ПоследняяЦифраЧислом = мЧисло; ПервыеЦифрыПрописью = ""; ПоследняяЦифраПрописью = Нрег(Формат(мЧисло, "ЧП")); КонецЕсли; Если ПоследняяЦифраЧислом = 1 Тогда ПоследняяЦифраПрописью = "один"; Корень = Корень + "ый"; Иначе Корень = Корень + "ых"; КонецЕсли; ВсеЧислоПрописью = СокрЛП(ПервыеЦифрыПрописью + " " + ПоследняяЦифраПрописью); Фраза = СокрЛП(стрПерваяБукваЗаглавная(ВсеЧислоПрописью) + " " + Корень); КонецЕсли; Возврат Фраза; КонецФункции // стрФразаПрописью()  | 
|||
| 
    8
    
        Fish    
     гуру 
    22.03.18 
            ✎
    09:16 
 | 
         
        (7) Если (Корень = "наименован") Тогда
 
        ... ИначеЕсли (Корень = "картридж") Тогда ... ИначеЕсли (Корень = "день") Тогда ... ИначеЕсли (Корень = "кассов") Тогда Что это за ад?  | 
|||
| 
    9
    
        spiller26    
     22.03.18 
            ✎
    09:41 
 | 
         
        Вся фишка в том, что не только цифры явно нужно склонять, но и наименование того что за ними.
 
        Пример: пять рублей пяти рублей пятью рублями и т.д.  | 
|||
| 
    10
    
        Малыш Джон    
     22.03.18 
            ✎
    09:41 
 | 
         
        (0) в русском языке всего тридцать шесть слов обозначающих числительные на промежутке от 1 до 999, на следующем промежутке - то же самое , только прибавляется слово "тысяч", на следующем - "миллионов".
 
        Поставь в цикле эти 36 условий и перебирай по цифрам. Алгоритм практически копипастом пишется, только названия числительных меняй  | 
|||
| 
    11
    
        spiller26    
     22.03.18 
            ✎
    09:46 
 | 
         
        (10) Как вариант, если нужно склонять только цифры, то можно загнать в несколько соответствий по падежам, юзабельней будет перебирать     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |