Имя: Пароль:
1C
 
Дробное число прописью
Ø
0 LpRT
 
18.03.05
14:24
Как написать дробное число прописью, например 19.737 (х=19.737)
Если использовать выражение Формат(х,"ЧП"), то напишется "двадцать",
а надо полностью. Собственно вопрос, как?
1 okiso
 
18.03.05
14:26
*.SPL смотри !
2 LpRT
 
18.03.05
14:29
Посмотрел 1CV7.spl, что туда надо добавтиь, чтобы решить мою задачу. Файл ни разу не редактировался!
3 okiso
 
18.03.05
14:33
Формат(ИтСуммаСНДС, "ЧПДС") у меня так показывает !
4 LpRT
 
18.03.05
14:34
Мне надо НЕ в денежном формате.
5 AVP
 
18.03.05
14:42
//******************************************************************************
// ЧислоПрописью()
//
// Параметры:
// ЗначЧисло - число, которое нужно представить прописью
//
// Возвращаемое значение:
// строка, число представленное прописью.
//
// Описание:
// Преобразует число в его представление пропись. В отличии от стандартной
// функции формат умеет преобразовывать дробные числа с точностью до 3-х
// знаков после запятой.
Функция ЧислоПрописью(ЗначЧисло) Экспорт
  
  Перем Возвр;
  Перем ЦелЧасть, ДробЧасть;
  Перем Дробная;
  Перем Окончание;
  Перем ПоследнееСлово;
  ЦелЧасть = Цел(ЗначЧисло);
  ДробЧасть = Окр(ЗначЧисло - ЦелЧасть, 3);
  
  Если ДробЧасть=Окр(ДробЧасть,0) Тогда
    ДробЧасть = 0;
    Дробная = "";
    
  ИначеЕсли ДробЧасть = Окр(ДробЧасть, 1) Тогда
    ДробЧасть = Окр(ДробЧасть, 1) * 10;
    Дробная = "десят";
    
  ИначеЕсли ДробЧасть = Окр(ДробЧасть, 2) Тогда
    ДробЧасть = Окр(ДробЧасть, 2) * 100;
    Дробная = "сот";
  Иначе
    ДробЧасть = ДробЧасть * 1000;
    Дробная = "тысячн";
  КонецЕсли;
  Возвр = "";
  Возвр = Возвр + ?(ПустоеЗначение(ЦелЧасть) = 1, "Ноль", СокрЛП(Формат(ЦелЧасть, "ЧП")));
  Если Дробная <> "" Тогда // есть дробная часть
    // теперь займемся окончанием последнего слова целой части
    ПоследнееСлово = "";
    Окончание = "";
    Пока (Возвр <> "") И (Возвр = СокрП(Возвр)) Цикл // последний символ в строке не пробел
      ПоследнееСлово = Прав(Возвр, 1) + ПоследнееСлово; // добавляем последнюю букву
      Возвр = Лев(Возвр, СтрДлина(Возвр) - 1); // отрезаем последнюю букву
    КонецЦикла;
    
    Если Врег(ПоследнееСлово) = "ОДИН" Тогда
      // первую букву слова оставляем
      ПоследнееСлово = Лев(ПоследнееСлово, 1) + "дна";
      Окончание = "ая";
    Иначе
      Если (Врег(ПоследнееСлово) = "ДВА") Тогда
        ПоследнееСлово = Лев(ПоследнееСлово, 1) + "ве";
      КонецЕсли;
      Окончание = "ых";
    КонецЕсли;
    Возвр = Возвр + ПоследнееСлово + " цел" + Окончание + " " + НРег(СокрЛП(Формат(ДробЧасть, "ЧП")));
    // теперь займемся окончанием последнего слова дробной части
    ПоследнееСлово = "";
    Окончание = "";
    
    Пока Возвр = СокрП(Возвр) Цикл // последний символ в строке не пробел
      ПоследнееСлово = Прав(Возвр, 1) + ПоследнееСлово; // добавляем последнюю букву
      Возвр = Лев(Возвр, СтрДлина(Возвр) - 1); // отрезаем последнюю букву
    КонецЦикла;
    
    Если Врег(ПоследнееСлово) = "ОДИН" Тогда
      // первую букву слова оставляем
      ПоследнееСлово = Лев(ПоследнееСлово, 1) + "дна";
      Окончание = "ая";
    Иначе
      Если (Врег(ПоследнееСлово) = "ДВА") Тогда
        ПоследнееСлово = Лев(ПоследнееСлово, 1) + "ве";
      КонецЕсли;
      
      Окончание = "ых";
    КонецЕсли;
    
    Возвр = Возвр + ПоследнееСлово + " " + Дробная + Окончание;
  КонецЕсли;
  Возврат Возвр;
  
КонецФункции // ЧислоПрописью()
6 okiso
 
18.03.05
14:45
Вот именно !
7 мefisto
 
18.03.05
14:45
X=19.737;
Y=Цел(X);
Z=(X-Y)*1000;
Сообщить(Формат(Y,"ЧП")+" "+Формат(Z,"ЧП"));
8 LpRT
 
18.03.05
14:50
Всем спасибо, работает.
Особый респект AVP!
9 AVP
 
18.03.05
14:52
Пожалуйста, тем более не мое :)))))