Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Число прописью

Число прописью
Я
   G751
 
22.03.18 - 09:00
Как получить число прописью в родительном падеже?
Конкретно: 5 - пяти, 10- десяти и т.д.
К функции ЧислоПрописью() отсылать меня не надо(перепробовал).
Просто покажите, пожалуйста на примере.
Спасибо.
 
 
   lodger
 
1 - 22.03.18 - 09:04
(0) если не хватает функционала ЧислоПрописью(), тогда в пределах 1ц это решается муторно и долго.
обычно используют внешние компоненты, иногда даже прибегают к веб-сервису склонений.
   lodger
 
2 - 22.03.18 - 09:04
(0) в своей конфе поищите модули СтроковыеФункции...
   jsmith82
 
3 - 22.03.18 - 09:05
   jsmith82
 
4 - 22.03.18 - 09:06
   spiller26
 
5 - 22.03.18 - 09:09
Это попробуй
https://helpf.pro/faq8/view/38.htm
   spiller26
 
6 - 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 Тогда
            ПоследняяЦифраПрописью    = "один";
            Корень                    = Корень + "ый";
        Иначе
            Корень = Корень + "ых";
        КонецЕсли;
        
        ВсеЧислоПрописью = СокрЛП(ПервыеЦифрыПрописью + " " + ПоследняяЦифраПрописью);
        
        Фраза = СокрЛП(стрПерваяБукваЗаглавная(ВсеЧислоПрописью) + " " + Корень);
        
    КонецЕсли;
    
    Возврат Фраза;
    
КонецФункции// стрФразаПрописью()
   Fish
 
8 - 22.03.18 - 09:16
(7) Если (Корень = "наименован") Тогда
...
ИначеЕсли (Корень = "картридж") Тогда
...
 ИначеЕсли (Корень = "день") Тогда
...
   ИначеЕсли (Корень = "кассов") Тогда


Что это за ад?
   spiller26
 
9 - 22.03.18 - 09:41
Вся фишка в том, что не только цифры явно нужно склонять, но и наименование того что за ними.
Пример:
  пять рублей
  пяти рублей
  пятью рублями 
  и т.д.
   Малыш Джон
 
10 - 22.03.18 - 09:41
(0) в русском языке всего тридцать шесть слов обозначающих числительные на промежутке от 1 до 999, на следующем промежутке - то же самое , только прибавляется слово "тысяч", на следующем - "миллионов".

Поставь в цикле эти 36 условий и перебирай по цифрам. Алгоритм практически копипастом пишется, только названия числительных меняй
 
 Рекламное место пустует
   spiller26
 
11 - 22.03.18 - 09:46
(10) Как вариант, если нужно склонять только цифры, то можно загнать в несколько соответствий по падежам, юзабельней будет перебирать

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует