Имя: Пароль:
1C
 
Пропись числа
0 ehrmann
 
11.06.08
12:56
Подскажите пожалуйста есть ли в 1С 8 функции для склонения числительных с существительными?
Для примера: "оплачено в течении 2 (ДВУХ) дней". Именно "двух", а не "два".
1 ehrmann
 
11.06.08
13:04
Неужели никто не сталкивался?
2 ehrmann
 
11.06.08
14:01
Последний раз прошу.. а то придется писать самому
3 vde69
 
11.06.08
14:04
есть
4 ehrmann
 
11.06.08
14:05
=)
5 Широкий
 
11.06.08
14:05
Штатной возможности такой нет..  Напиши сам .. не думаю что это будет трудно
6 ehrmann
 
11.06.08
14:06
я так и думал
7 vde69
 
11.06.08
14:06
Глобальный контекст
ЧислоПрописью (NumberInWords)
Синтаксис:
ЧислоПрописью(<Число>, <Форматная строка>, <Параметры предмета исчисления>)
Параметры:
<Число> (обязательный)
Тип: Число. Число, которое необходимо преобразовать в строку прописью.
<Форматная строка> (необязательный)
Тип: Строка. Форматная строка представляет собой строковое значение, включающее параметры форматирования. Параметры форматирования перечисляются через символ ";" (точка с запятой). Если параметр не указывается, используется значение параметра по умолчанию.
Каждый параметр задается именем параметра, символом "=" (равно) и значением параметра. Значение параметра может указываться в одинарных или двойных кавычках. Это необходимо, если значение параметра содержит символы, используемые в синтаксисе форматной строки.
Л (L) - Код локализации. По умолчанию используется код локализации, установленный в операционной системе. Примеры кодов локализации: ru_RU - Русский (Россия); en_US - Английский (США).
НП (SN) - Включать/не включать название предмета исчисления (Булево), по умолчанию - Истина.
НД (FN) - Включать/не включать название десятичных частей предмета исчисления (Булево), по умолчанию - Истина.
ДП (FS) - Дробную часть выводить прописью/числом (Булево), по умолчанию - Ложь.
<Параметры предмета исчисления> (необязательный)
Тип: Строка. Представляет собой строковое значение, определяющее параметры предмета исчисления. Параметры предмета исчисления перечисляются через "," (запятая). Формат строки зависит от кода локализации.
Для русского и белорусского языков (ru_RU, be_BY)
"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2", где:
"рубль, рубля, рублей, м" – предмет исчисления:
рубль – единственное число именительный падеж,
рубля – единственное число родительный падеж,
рублей – множественное число родительный падеж,
м – мужской род (ж – женский род, с - средний род);
"копейка, копейки, копеек, ж" – дробная часть, аналогично предмету исчисления (может отсутствовать);
"2" – количество разрядов дробной части (может отсутствовать, по умолчанию равно 2).
Для украинского языка (uk_UA)
"гривна, гривны, гривен, м, копейка, копейки, копеек, ж, 2", где:
"гривна, гривны, гривен, м" – предмет исчисления:
"гривна – единственное число именительный падеж,
гривны – единственное число родительный падеж,
гривен – множественное число родительный падеж,
м – мужской род (ж – женский род, с - средний род);
"копейка, копейки, копеек, ж" – дробная часть, аналогично предмету исчисления (может отсутствовать);
"2" – количество разрядов дробной части (может отсутствовать, по умолчанию равно 2).
Для польского языка (pl_PL)
z?oty, z?ote, z?otych, m, grosz, grosze, groszy, m, 2
где:
"z?oty, z?ote, z?otych, m " - предмет исчисления (m - мужской род, ? - женский род, ? - средний род, mo – личностный мужской род)
z?oty - единственное число именительный падеж
z?ote - единственное число винительный падеж
z?otych - множественное число винительный падеж
m - мужской род (? - женский род, ? - средний род, mo – личностный мужской род)
"grosz, grosze, groszy, m " - дробная часть (может отсутствовать) (аналогично целой части)
2 - количество разрядов дробной части (может отсутствовать, по-умолчанию равно 2)
Пример:
Пропись = ЧислоПрописью(1832, “L=pl_PL;SN=true;FN=true;FS=true”, “z?oty, z?ote, z?otych, m, grosz, grosze, groszy, m, 2”);
Для английского, финского и казахского языков (en_US, fi_FI, kk_KZ)
"dollar, dollars, cent, cents, 2", где:
"dollar, dollars" – предмет исчисления в единственном и множественном числе;
"cent, cents" – дробная часть в единственном и множественном числе (может отсутствовать);
"2" – количество разрядов дробной части (может отсутствовать, по умолчанию равно 2).
Для немецкого языка (de_DE)
"EURO, EURO, М, Cent, Cent, M, 2", где:
"EURO, EURO, М" – предмет исчисления:
EURO, EURO – предмет исчисления в единственном и множественном числе;
М – мужской род (F – женский род, N - средний род);
"Cent, Cent, M" – дробная часть, аналогично предмету исчисления (может отсутствовать);
"2" – количество разрядов дробной части (может отсутствовать, по умолчанию равно 2).
Для латышского языка (lv_LV)
"lats, lati, latu, V, sant?ms, sant?mi, sant?mu, V, 2, J, J", где:
"lats, lati, latu, v" – предмет исчисления:
lats – для чисел заканчивающихся на 1, кроме 11
lati – для чисел заканчивающихся на 2-9 и 11
latu – множественное число (родительный падеж) используется после числительных 0, 10, 20,..., 90, 100, 200, ..., 1000, ..., 100000,
v – мужской род (s – женский род);
"sant?ms, sant?mi, sant?mu, V" – дробная часть, аналогично предмету исчисления (может отсутствовать);
"2" – количество разрядов дробной части (может отсутствовать, по умолчанию равно 2);
"J" - число 100 выводится как "Одна сотня" для предмета исчисления (N - как "Сто"),
может отсутствовать, по умолчанию равно "J";
"J" - число 100 выводится как "Одна сотня" для дробной части (N - как "Сто"),
может отсутствовать, по умолчанию равно "J".
Для литовского языка (lt_LT)
"litas, litai, lit?, М, centas, centai, cent?, М, 2", где:
"litas, litai, lit?, М" – предмет исчисления:
litas - единственное число целой части,
litai - множественное число целой части от 2 до 9,
lit? - множественное число целой части прочие,
m - род целой части (f - женский род),
"centas, centai, cent?, М" – дробная часть, аналогично предмету исчисления (может отсутствовать);
"2" - количество разрядов дробной части (может отсутствовать, по умолчанию равно 2).
Для эстонского языка (et_EE)
"kroon, krooni, sent, senti, 2", где:
"kroon, krooni" – – предмет исчисления в единственном и множественном числе;
"sent, senti" – дробная часть в единственном и множественном числе (может отсутствовать);
2 – количество разрядов дробной части (может отсутствовать, по умолчанию равно 2).
Для болгарского языка (bg_BG)
"лев, лева, м, стотинка, стотинки, ж, 2", где:
"лев, лева, м" – предмет исчисления:
лев - единственное число целой части,
лева - множественное число целой части,
м - род целой части,
"стотинка, стотинки, ж" - дробная часть:
стотинка - единственное число дробной части,
стотинки - множественное число дробной части,
ж - род дробной части,
"2" - количество разрядов дробной части.
Для румынского языка (ro_RO)
"leu, lei, M, ban, bani, W, 2"
"leu, lei, M" – предмет исчисления:
leu - единственное число целой части,
lei - множественное число целой части,
M - род целой части,
"ban, bani, W" - дробная часть:
ban - единственное число дробной части,
bani - множественное число дробной части,
W - род дробной части,
"2" - количество разрядов дробной части.
Для грузинского языка (ka_GE)
"????, ?????, 2"
???? - целая часть
????? - дробная часть
"2" - количество разрядов дробной части.
Для вьетнамского языка (vi_VN)
"dong, xu, 2"
dong, - целая часть
xu, - дробная часть
2 - количество разрядов дробной части.
Значение по умолчанию: Пустая строка
Возвращаемое значение:
Тип: Строка. Представление числа прописью.
Описание:
Формирует представление числа прописью в соответствии с заданными форматной строкой и параметрами предмета исчисления.
Пример:
// Пример форматной строки для вывода числа прописью на русском
// языке, с выводом целой и дробной части прописью и выводом
// предмета исчисления.
ФормСтрока = "Л = ru_RU; ДП = Истина";
ПарПредмета="доллар,доллара,долларов,м,цент,цента,центов,м,2";
ПрописьЧисла = ЧислоПрописью(2341.56, ФормСтрока, ПарПредмета);

// Результат вычисления:
// "Две тысячи триста сорок один доллар пятьдесят шесть центов"
8 Поручик
 
11.06.08
14:07
Из туповой УТ, возможно есть в остальных
// Функция преобразует строку к множественному числу
//
// Параметры:
//  Слово1 - форма слова в ед числе      ("шкаф")
//  Слово2 - форма слова для числит 2-4  ("шкафа")
//  Слово3 - форма слова для числит 5-10 ("шкафов")
//  ЦелоеЧисло - целое число
//
// Возвращаемое значение:
//  строку - одну из строк в зависимости от параметра ЦелоеЧисло
//
// Описание:
//  Предназначена для формирования "правильной" подписи к числительным
//
Функция ФормаМножественногоЧисла(Слово1, Слово2, Слово3, ЦелоеЧисло) Экспорт
9 Широкий
 
11.06.08
14:29
+5 а может будет и трудно :)
10 ehrmann
 
11.06.08
14:49
(8) эта функция касается изменения окончания у существичельного, а мне надо изменять его у числа
11 ehrmann
 
11.06.08
14:55
(7) а это вобще ответ не на поставленный вопрос
12 Широкий
 
11.06.08
15:38
Функция ВернутьСтроковоеПредставлениеЧисла(ИсхЧисло)
   Если ИсхЧисло<=0 Тогда
       Возврат "нуля";
   ИначеЕсли ИсхЧисло>999 Тогда    
       Возврат "сбился со счета";
   КонецЕсли;    
   
   Структура=Новый Структура;
   Структура.Вставить("Число0","");
   Структура.Вставить("Число1","одного");
   Структура.Вставить("Число2","двух");
   Структура.Вставить("Число3","трех");
   Структура.Вставить("Число4","четырех");
   Структура.Вставить("Число5","пяти");
   Структура.Вставить("Число6","шести");
   Структура.Вставить("Число7","семи");
   Структура.Вставить("Число8","восьми");
   Структура.Вставить("Число9","девяти");
   Структура.Вставить("Число10","десяти");
   Структура.Вставить("Число11","одиннадцати");
   Структура.Вставить("Число12","двенадцати");
   Структура.Вставить("Число13","тринадцати");
   Структура.Вставить("Число14","четырнадцати");
   Структура.Вставить("Число15","пятнадцати");          
   Структура.Вставить("Число16","шестнадцати");
   Структура.Вставить("Число17","семнадцати");
   Структура.Вставить("Число18","восемнадцати");
   Структура.Вставить("Число19","девятнадцати");
   Структура.Вставить("Число20","двадцати");
   Структура.Вставить("Число30","тридцати");
   Структура.Вставить("Число40","сорока");
   Структура.Вставить("Число50","пятидесяти");
   Структура.Вставить("Число60","шестидесяти");
   Структура.Вставить("Число70","семидесяти");
   Структура.Вставить("Число80","восьмидесяти");
   Структура.Вставить("Число90","девяносто");
   Структура.Вставить("Число100","ста");
   Структура.Вставить("Число200","двухсот");
   Структура.Вставить("Число300","трехсот");
   Структура.Вставить("Число400","четырехсот");
   Структура.Вставить("Число500","пятисот");
   Структура.Вставить("Число600","шестисот");
   Структура.Вставить("Число700","семисот");
   Структура.Вставить("Число800","восьмисот");
   Структура.Вставить("Число900","девятисот");
   
   СтроковоеПредставление=Формат(ИсхЧисло,"ЧГ=");
   ДлинаСтроковогоПредставления=СтрДлина(СтроковоеПредставление);
   
   ПредставлениеЧисла="";
   ДоДвадцати=Число(Прав(СтроковоеПредставление,2));
   
   Если ДоДвадцати<=20 Тогда
       ТекСтрока="Число"+ДоДвадцати;
       ПредставлениеЧисла=Структура[ТекСтрока]+ПредставлениеЧисла;
       Счетчик=2;
       Нули="00";
   Иначе    
       Счетчик=0;
       Нули="";
   КонецЕсли;    
   
   Пока Счетчик<ДлинаСтроковогоПредставления Цикл
       ТекСтрока="Число"+Сред(СтроковоеПредставление,ДлинаСтроковогоПредставления-Счетчик,1)+Нули;
       
       ПредставлениеЧисла=Структура[ТекСтрока]+" "+ПредставлениеЧисла;
       
       Счетчик=Счетчик+1;
       Нули=Нули+"0";
   КонецЦикла;    
   
   Возврат ПредставлениеЧисла;
КонецФункции
13 ehrmann
 
11.06.08
16:33
Для чисел до 20. Дальше можно делить число на слова и аналогично поступать

// Параметры:
// а1 - число
// а2 - падеж:    1 - именительный
//                2 - родительный
//                3 - дательный
//                4 - винительный
//                5 - творительный
//                6 - предложный
Функция ПодобратьОкончаниеЧислаВСловосочетании(а1, а2)
   
   Если а1 = 0 Или а1 > 20 Тогда
       Возврат "";
   КонецЕсли;
   
   ЧислоПрописью = НРег(СокрЛП(ЧислоПрописью(а1,,",,,,,,,,0")));
   
   // Именительный и винительный
   Если а2 = 1 Или а2 = 4 Тогда
       Возврат ЧислоПрописью;
   КонецЕсли;
   
   Если а1 = 1 Тогда
       ЧислоПрописью = Лев(ЧислоПрописью, 2) + Сред(ЧислоПрописью, 4);
   ИначеЕсли а1 = 8 Тогда
       ЧислоПрописью = Лев(ЧислоПрописью, 3) + "ь" + Сред(ЧислоПрописью, 5);
   КонецЕсли;
   
   Если Прав(ЧислоПрописью, 1) = "н" Тогда
       Если        а2 = 2 Тогда Окончание = "ного";
       ИначеЕсли    а2 = 3 Тогда Окончание = "ному";
       ИначеЕсли    а2 = 5 Тогда Окончание = "ним";
       Иначе                     Окончание = "ном";
       КонецЕсли;
   ИначеЕсли Прав(ЧислоПрописью, 1) = "а" Тогда
       Если        а2 = 2 Тогда Окончание = "ух";
       ИначеЕсли    а2 = 3 Тогда Окончание = "ум";
       ИначеЕсли    а2 = 5 Тогда Окончание = "умя";
       Иначе                     Окончание = "ум";
       КонецЕсли;
   ИначеЕсли Прав(ЧислоПрописью, 1) = "и" Тогда
       Если        а2 = 2 Тогда Окончание = "ех";
       ИначеЕсли    а2 = 3 Тогда Окончание = "ем";
       ИначеЕсли    а2 = 5 Тогда Окончание = "емя";
       Иначе                     Окончание = "ех";
       КонецЕсли;
   ИначеЕсли Прав(ЧислоПрописью, 1) = "е" Тогда
       Если        а2 = 2 Тогда Окончание = "ех";
       ИначеЕсли    а2 = 3 Тогда Окончание = "ем";
       ИначеЕсли    а2 = 5 И СтрДлина(ЧислоПрописью)<5 Тогда Окончание = "емя";
       ИначеЕсли    а2 = 5 Тогда Окончание = "ьмя";
       Иначе                     Окончание = "ех";
       КонецЕсли;
   ИначеЕсли Прав(ЧислоПрописью, 1) = "ь" Тогда
       Если а2 = 2 или а2 = 3 или а2 = 6 Тогда Окончание = "и";
       Иначе                                    Окончание = "ью";
       КонецЕсли;
   КонецЕсли;
   
   ЧислоПрописью = Лев(ЧислоПрописью, СтрДлина(ЧислоПрописью)-1) + Окончание;
   
   Возврат ЧислоПрописью;
   
КонецФункции