Имя: Пароль:
1C
1С v8
Число прописью
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) Как вариант, если нужно склонять только цифры, то можно загнать в несколько соответствий по падежам, юзабельней будет перебирать
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.