Имя: Пароль:
1C
1С v8
Namedecl.dll - подойдет для склонения чисел в родительный падеж?
0 Trance_1C
 
19.07.13
06:06
Подскажите стоит ли ее подключать, или она только для склонения ФИО?
мне нужно на выходе получить число строкой в родительном падеже
10 = Десяти
37 = Тридцати семи...

пока нашел только это, но как-то громоздко выглядит:
//Представление числа до 999 в родит. падеже - 10 = Десяти...
Функция СколнениеЦифр(Цифра)  Экспорт
   НачальнаяСтрока = "" + Цифра;
   КонечнаяСтрока = "";
   ПредыдушаяЦифра = "";
   КоличествоЦифр = СтрДлина(НачальнаяСтрока);
   
   СтруктураЕдиницы = Новый Массив;
   СтруктураЕдиницы.Вставить(1, "одной");
   СтруктураЕдиницы.Вставить(2, "двух");
   СтруктураЕдиницы.Вставить(3, "трех");
   СтруктураЕдиницы.Вставить(4, "четырех");
   СтруктураЕдиницы.Вставить(5, "пяти");
   СтруктураЕдиницы.Вставить(6, "шести");
   СтруктураЕдиницы.Вставить(7, "семи");
   СтруктураЕдиницы.Вставить(8, "восьми");
   СтруктураЕдиницы.Вставить(9, "девяти");
   
   СтруктураВторойДесяток = Новый Массив;
   СтруктураВторойДесяток.Вставить(0, "десяти");
   СтруктураВторойДесяток.Вставить(1, "одиннадцати");
   СтруктураВторойДесяток.Вставить(2, "двенадцати");
   СтруктураВторойДесяток.Вставить(3, "тринадцати");
   СтруктураВторойДесяток.Вставить(4, "четырнадцати");
   СтруктураВторойДесяток.Вставить(5, "пятнадцати");
   СтруктураВторойДесяток.Вставить(6, "шестнадцати");
   СтруктураВторойДесяток.Вставить(7, "семнадцати");
   СтруктураВторойДесяток.Вставить(8, "восемнадцати");
   СтруктураВторойДесяток.Вставить(9, "девятнадцати");
   
   СтруктураДесятки = Новый Массив;
   СтруктураДесятки.Вставить(2, "двадцати");
   СтруктураДесятки.Вставить(3, "тридцати");
   СтруктураДесятки.Вставить(4, "сорока");
   СтруктураДесятки.Вставить(5, "пятидесяти");
   СтруктураДесятки.Вставить(6, "шестидесяти");
   СтруктураДесятки.Вставить(7, "семидесяти");
   СтруктураДесятки.Вставить(8, "восьмидесяти");
   СтруктураДесятки.Вставить(9, "девяносто");
   
   СтруктураСотни = Новый Массив;
   СтруктураСотни.Вставить(1, "ста");
   СтруктураСотни.Вставить(2, "двухсот");
   СтруктураСотни.Вставить(3, "трехсот");
   СтруктураСотни.Вставить(4, "четырехсот");
   СтруктураСотни.Вставить(5, "пятиста");
   СтруктураСотни.Вставить(6, "шестиста");
   СтруктураСотни.Вставить(7, "семиста");
   СтруктураСотни.Вставить(8, "восьмиста");
   СтруктураСотни.Вставить(9, "девятиста");
   
   
   СтруктураТысячи = Новый Массив;
   СтруктураТысячи.Вставить(1, "одной тысячи");
   СтруктураТысячи.Вставить(2, "двух тысяч");
   СтруктураТысячи.Вставить(3, "трех тысяч");
   СтруктураТысячи.Вставить(4, "четырех тысяч");
   СтруктураТысячи.Вставить(5, "пяти тысяч");
   СтруктураТысячи.Вставить(6, "шести тысяч");
   СтруктураТысячи.Вставить(7, "семи тысяч");
   СтруктураТысячи.Вставить(8, "восьми тысяч");
   СтруктураТысячи.Вставить(9, "девяти тысяч");
   
   
   ТекущаяЦифраПрописью = "";
   
   для х = 1 по КоличествоЦифр цикл
       ТекущаяЦифра = Сред(НачальнаяСтрока, х, 1);
       
       //Если 1,2,3,4,5....
       Если КоличествоЦифр = 1 Тогда
           ТекущаяЦифраПрописью = ТекущаяЦифраПрописью + СтруктураЕдиницы[Число(ТекущаяЦифра)];
           КонечнаяСтрока = КонечнаяСтрока + ТекущаяЦифраПрописью;
           Продолжить;
       КонецЕсли;
       
       //Если 10,11,12,13,14...
       Если КоличествоЦифр = 2 И х = 1 И Число(ТекущаяЦифра) = 1 Тогда
           Продолжить;
       КонецЕсли;
       Если КоличествоЦифр = 2 И х = 2 И ТекущаяЦифраПрописью = "" Тогда
           ТекущаяЦифраПрописью = ТекущаяЦифраПрописью + СтруктураВторойДесяток[Число(ТекущаяЦифра)];
           КонечнаяСтрока = КонечнаяСтрока + ТекущаяЦифраПрописью;
           Продолжить;
       КонецЕсли;
       
       //Если 20-99
       Если КоличествоЦифр = 2 И х = 1 И Число(ТекущаяЦифра) <> 1 Тогда
           ТекущаяЦифраПрописью = ТекущаяЦифраПрописью + СтруктураДесятки[Число(ТекущаяЦифра)];
           КонечнаяСтрока = КонечнаяСтрока + ТекущаяЦифраПрописью;
           Продолжить;
       КонецЕсли;
       Если КоличествоЦифр = 2 И х = 2 И ТекущаяЦифраПрописью <> "" Тогда
           ТекущаяЦифраПрописью = СтруктураЕдиницы[Число(ТекущаяЦифра)];
           КонечнаяСтрока = КонечнаяСтрока + " " + ТекущаяЦифраПрописью;
           Продолжить;
       КонецЕсли;
       
       //Если 100-999
       Если КоличествоЦифр = 3 И х = 1 Тогда
           ТекущаяЦифраПрописью = ТекущаяЦифраПрописью + СтруктураСотни[Число(ТекущаяЦифра)];
           КонечнаяСтрока = КонечнаяСтрока + ТекущаяЦифраПрописью;
           Продолжить;
       КонецЕсли;
       Если КоличествоЦифр = 3 И х = 2 И (Число(ТекущаяЦифра) = 1 ИЛИ Число(ТекущаяЦифра) = 0) Тогда
           ПредыдушаяЦифра = ТекущаяЦифра;
           Продолжить;
       КонецЕсли;
       Если КоличествоЦифр = 3 И х = 3 И Число(ПредыдушаяЦифра) = 1 Тогда
           ТекущаяЦифраПрописью =  СтруктураВторойДесяток[Число(ТекущаяЦифра)];
           КонечнаяСтрока = КонечнаяСтрока + " " + ТекущаяЦифраПрописью;
           Продолжить;
       КонецЕсли;
       Если КоличествоЦифр = 3 И х = 2 И Число(ТекущаяЦифра) <> 1 Тогда
           ТекущаяЦифраПрописью =  СтруктураДесятки[Число(ТекущаяЦифра)];
           КонечнаяСтрока = КонечнаяСтрока + " " + ТекущаяЦифраПрописью;
           ПредыдушаяЦифра = ТекущаяЦифра;
           Продолжить;
       КонецЕсли;
       Если КоличествоЦифр = 3 И х = 3 Тогда
           Если Число(ТекущаяЦифра) <> 0 Тогда
           ТекущаяЦифраПрописью =  СтруктураЕдиницы[Число(ТекущаяЦифра)];
           КонечнаяСтрока = КонечнаяСтрока + " " + ТекущаяЦифраПрописью;
           Продолжить;
       Иначе Продолжить;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   
   
   Возврат КонечнаяСтрока;
   
КонецФункции
1 Trance_1C
 
19.07.13
06:07
может есть еще варианты? :)
2 Cube
 
19.07.13
06:08
(0) Весь цивилизованный мир пишет сумму прописью в именительном падеже. Вы решили выделиться?
3 Trance_1C
 
19.07.13
06:09
мне нужно выводить фразы типа - "обязуется оплатить в течении 3 (трех) дней"... и т.п.
4 Cube
 
19.07.13
06:17
(3) Ну так можно перефразировать и получить число в именительном падеже.
5 Trance_1C
 
19.07.13
06:25
(4) невозможно перефразировать, юристы дали форму - ее нужно разместить в 1С.
Перефразировать можно накладную в ларьке.
6 Мимохожий Однако
 
19.07.13
07:47
Тогда напиши свою функцию склонения чисел.
7 shuhard
 
19.07.13
07:49
(5)[Перефразировать можно накладную в ларьке.]
дык ты в ларьке и работаешь
8 Cube
 
19.07.13
07:59
(5) Ну, если у вас юристы - это истина в последней инстанции, то да, суши весла...
9 Мимохожий Однако
 
19.07.13
08:09