Имя: Пароль:
1C
 
Как просклонять фразу в 1с 8.2 в зависимости от числительного?
,
0 Eeelena
 
30.03.15
11:21
Подскажите, как просклонять фразу в 1с 8.2 в зависимости от числительного? Например фраза, 21 КАЛЕНДАРНЫХ ДНЕЙ
1 Cube
 
30.03.15
11:22
(0) Именно эти слова надо склонять или произвольные?
2 Eeelena
 
30.03.15
11:22
даже скорее фраза "на 21 календарный день"
3 Eeelena
 
30.03.15
11:23
(1) именно вот эту фразу "на 21 календарный день" только меняется число и в зависимости от числа должно меняться склонение слов
4 Cube
 
30.03.15
11:24
(3) Это можно. Ожидайте... :)
5 Fish
 
30.03.15
11:25
(3) Напиши свою функцию склонения.
6 Kookish
 
30.03.15
11:26
(0) за образец можно взять функцию суммы прописью из типовых бухии и ЗУП.
7 Kookish
 
30.03.15
11:27
(6)+ Более того, где-то я видел универсальную функцию, где фразы для разных вариантов передаются прямо в аргументах. Их не так уж много.
8 Kookish
 
30.03.15
11:29
(7)+ Еще более того, такая функция встроена в платформу. ЧислоПрописью(<Число>, <ФорматнаяСтрока>, <ПараметрыПредметаИсчисления>)
9 Масянька
 
30.03.15
11:30
(3) Дарю

Функция глФразаПрописью(мЧисло, Корень) Экспорт

    Если (мЧисло >= 10) и (мЧисло <= 20) Тогда
        ЧислоПрописью     = Нрег(Формат(мЧисло, "ЧП"));
        Корень            = Корень + "ий";
        Фраза             = глПерваяБукваЗаглавная(ЧислоПрописью) + " " + Корень;
    Иначе

        ВсеЧислоПрописью         = НРег(Формат(мЧисло, "ЧП"));
        
        Если мЧисло > 20 Тогда
            ПоследняяЦифраЧислом    = мЧисло % 10;
            ПервыеЦифрыПрописью        = глПолучитьСловаДоПоследнегоИзСтроки(ВсеЧислоПрописью);
            ПоследняяЦифраПрописью    = глПолучитьПоследнееСловоИзСтроки(ВсеЧислоПрописью);
        ИначеЕсли мЧисло < 10 Тогда
            ПоследняяЦифраЧислом    = мЧисло;
            ПервыеЦифрыПрописью        = "";
            ПоследняяЦифраПрописью    = Нрег(Формат(мЧисло, "ЧП"));
        КонецЕсли;

        Если ПоследняяЦифраЧислом = 1 Тогда
            ПоследняяЦифраПрописью    = "одно";
            Корень                    = Корень + "ие";
        ИначеЕсли (ПоследняяЦифраЧислом >= 2) и (ПоследняяЦифраЧислом <= 4) Тогда
            Корень = Корень + "ия";
        Иначе
            Корень = Корень + "ий";
        КонецЕсли;

        ВсеЧислоПрописью = СокрЛП(ПервыеЦифрыПрописью + " " + ПоследняяЦифраПрописью);

        Фраза = СокрЛП(глПерваяБукваЗаглавная(ВсеЧислоПрописью) + " " + Корень);
        
    КонецЕсли;
    
    Возврат Фраза;
    
КонецФункции // глФразаПрописью()

Код - семерочный, корень = наименован. Думаю - разберешься.
10 Масянька
 
30.03.15
11:31
+(9) Добавить - второе слово.
11 Cube
 
30.03.15
11:33
(9) Уууу, у меня круче:

КоличествоДней = 21;

СокрЛП(ЧислоПрописью(КоличествоДней, , "календарный,календарных,календарных,м,,,,,0")) + " " + СокрЛП(СтрЗаменить(ЧислоПрописью(КоличествоДней, , "день,дня,дней,м,,,,,0"), ЧислоПрописью(КоличествоДней, , ",,,,,,,,0"), ""))
12 Масянька
 
30.03.15
11:36
(11) Я - на крутость не претендую. Женщина :)
13 Поpyчик-4
 
30.03.15
11:36
(0) В типовых есть функция

// Функция преобразует строку к множественному числу
//
// Параметры:
//  Слово1 - форма слова в ед числе      ("шкаф")
//  Слово2 - форма слова для числит 2-4  ("шкафа")
//  Слово3 - форма слова для числит 5-10 ("шкафов")
//  ЦелоеЧисло - целое число
//
// Возвращаемое значение:
//  строку - одну из строк в зависимости от параметра ЦелоеЧисло
//
// Описание:
//  Предназначена для формирования "правильной" подписи к числительным
//
Функция ФормаМножественногоЧисла(Слово1, Слово2, Слово3, Знач ЦелоеЧисло) Экспорт

В БП 3.0 модуль ОбщегоНазначенияБПКлиентСервер, в УТ 11.1 ОбщегоНазначенияУТКлиентСервер
14 Cube
 
30.03.15
11:38
(11) Ах, забыл, что количество дней надо числом, а не прописью. Исправляюсь:

КоличествоДней = 21;

Фраза = "за " + КоличествоДней + " " + СокрЛП(СтрЗаменить(ЧислоПрописью(КоличествоДней, , "календарный,календарных,календарных,м,,,,,0"), ЧислоПрописью(КоличествоДней, , ",,,,,,,,0"), "")) + " " + СокрЛП(СтрЗаменить(ЧислоПрописью(КоличествоДней, , "день,дня,дней,м,,,,,0"), ЧислоПрописью(КоличествоДней, , ",,,,,,,,0"), ""))
15 Cube
 
30.03.15
11:39
(12) ^^
16 Eeelena
 
30.03.15
11:42
спасибо вам огромное!!! (14)
17 Cube
 
30.03.15
11:43
(16) Была бы у тебя фотка в профиле, я б может каждый раз так помогал :)
18 Eeelena
 
30.03.15
12:31
(17) учту:)