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

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

Функция Количество единиц прописью

Функция Количество единиц прописью
Я
   kobzon2
 
05.01.19 - 11:35
Приветствую всех!
Никак не могу сообразить как с помощью "ЧислоПрописью" получить из целого числа, значение прописью типа: (Одной) единицы, (двух) единиц... и.т.д.
Например, купили телевизор, в количестве 1(Одной) единицы.

У меня получается только Один единиц))

п.с. Сильно не ругайтесь)
 
 
   Масянька
 
1 - 05.01.19 - 11:37
(0) Ройся :)
    Если (Корень = "наименован") Тогда
        Если (мЧисло >= 10) и (мЧисло <= 20) Тогда
            ЧислоПрописью     = Нрег(Формат(мЧисло, "ЧП"));
            Корень            = Корень + "ий";
            Фраза             = стрПерваяБукваЗаглавная(ЧислоПрописью) + " " + Корень;
        Иначе
            
            ВсеЧислоПрописью         = НРег(Формат(мЧисло, "ЧП"));
            
            Если мЧисло > 20 Тогда
                ПоследняяЦифраЧислом    = мЧисло % 10;
                ПервыеЦифрыПрописью        = стрПолучитьСловаДоПоследнегоИзСтроки(ВсеЧислоПрописью);
                ПоследняяЦифраПрописью    = стрПолучитьПоследнееСловоИзСтроки(ВсеЧислоПрописью);
            ИначеЕсли мЧисло < 10 Тогда
                ПоследняяЦифраЧислом    = мЧисло;
                ПервыеЦифрыПрописью        = "";
                ПоследняяЦифраПрописью    = Нрег(Формат(мЧисло, "ЧП"));
            КонецЕсли;
            
            Если ПоследняяЦифраЧислом = 1 Тогда
                ПоследняяЦифраПрописью    = "одно";
                Корень                    = Корень + "ие";
            ИначеЕсли (ПоследняяЦифраЧислом >= 2) и (ПоследняяЦифраЧислом <= 4) Тогда
                Корень = Корень + "ия";
            Иначе
                Корень = Корень + "ий";
            КонецЕсли;
            
            ВсеЧислоПрописью = СокрЛП(ПервыеЦифрыПрописью + " " + ПоследняяЦифраПрописью);
            
            Фраза = СокрЛП(стрПерваяБукваЗаглавная(ВсеЧислоПрописью) + " " + Корень);
            
        КонецЕсли;
   kobzon2
 
2 - 05.01.19 - 11:38
(1) Это реально?)
   Масянька
 
3 - 05.01.19 - 11:40
(2) Что?
У меня в качестве корня реализовано 5 слов.
Работает - никто не жалуется.
   kobzon2
 
4 - 05.01.19 - 11:41
(3) Ок, Спасибо! Пошел рыться)
   kobzon2
 
5 - 05.01.19 - 11:47
(1) Видимо не хватает функций:
стрПерваяБукваЗаглавная
стрПолучитьСловаДоПоследнегоИзСтроки
стрПолучитьПоследнееСловоИзСтроки

Ругается)
   Масянька
 
6 - 05.01.19 - 11:49
Функция стрПерваяБукваЗаглавная(мСтрока) Экспорт

    мНоваяСтрока     = "";
    мДлина             = СтрДлина(мСтрока);
    мПерваяБуква     = ВРег(СокрЛП(Сред(мСтрока, 1, 1)));
    мОстаток          = Нрег(СокрЛП(Сред(мСтрока, 2, СтрДлина(мСтрока))));
    мНоваяСтрока    = мПерваяБуква + мОстаток;

    Возврат мНоваяСтрока; 
    
КонецФункции    //стрПерваяБукваЗаглавная()


Функция стрПолучитьСловаДоПоследнегоИзСтроки(Слово) Экспорт
    
    мСтрока         = Слово;

    ДлинаСтроки = СтрДлина(мСтрока);
    ПоследСлово = стрПолучитьПоследнееСловоИзСтроки(Слово);
    ДлинаПоследСлова     = СтрДлина(ПоследСлово);
    ДлинаСтрокиДоСлова     = ДлинаСтроки - ДлинаПоследСлова;
    
    мСтрока = Сред(мСтрока, 1, ДлинаСтрокиДоСлова);

    Возврат СокрЛП(мСтрока);
    
КонецФункции    // стрПолучитьСловаДоПоследнегоИзСтроки()


Функция стрПолучитьПоследнееСловоИзСтроки(Слово) Экспорт
    
    мСтрока = Слово;
    
    Пока СтрЧислоВхождений(СокрЛП(мСтрока), " ") > 0 Цикл
        мСтрока = Сред(мСтрока, Найти(мСтрока, " ") + 1, СтрДлина(мСтрока));
    КонецЦикла;
    
    Возврат СокрЛП(мСтрока);
    
КонецФункции// стрПолучитьПоследнееСловоИзСтроки()


Чёт я сегодня добрая...
   kobzon2
 
7 - 05.01.19 - 11:50
(6) Так праздники же ж. Вот и добрая)
Спасибо!
   RomanYS
 
8 - 05.01.19 - 12:20
Стандартный функционал корректно работает, по крайней мере до 20:

    ФормСтрока = "Л = ru_RU; НД  = Ложь";
    ПарПредмета="единица,единицы,единиц,ж,,,,,0";
    
    Для инд = 1 По 20 Цикл
        Сообщить(инд);
        Рез = ПолучитьСклоненияСтроки(ЧислоПрописью(инд, ФормСтрока, ПарПредмета),,"ПД = Родительный");
        Для каждого Эл Из Рез Цикл
            Сообщить("    "+Эл);        
        КонецЦикла; 
    КонецЦикла;
   RomanYS
 
9 - 05.01.19 - 12:24
+(8)  и дальше тоже:
    Двух тысяч девятисот пятидесяти единиц
    Двух тысяч девятисот пятидесяти одной единицы
    Двух тысяч девятисот пятидесяти двух единиц
    Двух тысяч девятисот пятидесяти трех единиц
    Двух тысяч девятисот пятидесяти четырех единиц
    Двух тысяч девятисот пятидесяти пяти единиц
    Двух тысяч девятисот пятидесяти шести единиц
    Двух тысяч девятисот пятидесяти семи единиц
    Двух тысяч девятисот пятидесяти восьми единиц
    Двух тысяч девятисот пятидесяти девяти единиц
   kobzon2
 
10 - 05.01.19 - 12:31
(8) Стандартный, в смысле такая функция есть в типовых?
 
 Рекламное место пустует
   RomanYS
 
11 - 05.01.19 - 12:35
(10) в платформе. Тестировал на 8.3.13.1513
   kobzon2
 
12 - 05.01.19 - 12:39
(11) В 8.3.12.1790 что то не находится даже ПолучитьСклоненияСтроки
   RomanYS
 
13 - 05.01.19 - 12:49
(12) вывод очевиден)

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