Имя: Пароль:
1C
 
Помогите по функции "Формат"
0 Паланик
 
20.02.09
09:32
Нужно перевести дробное число в пропись. Форматная строка типа ЧПС - дает только округленное число прописью. Строка ЧПДС подставляет рубли/коп., а у меня вес. Есть выход из ситуации, кроме как выводить отдельно дробную и целую части? (дело интереса уже). Спасибо.
1 Ёпрст
 
20.02.09
09:33
лови
2 Ёпрст
 
20.02.09
09:34
3 1Сергей
 
20.02.09
09:35
я так делал, тока там конечно всё коряво:

Функция Прописью(Чис)
   //* возвращает строку, число прописью с копейками
   Чис1=Окр(Макс(Чис,-Чис),3);
   Стр="";
   Если Чис1>=1 Тогда
       Если Чис1=Цел(Чис1) Тогда
           Возврат нрег(Формат(Чис1,"ЧП"));
       Иначе
           
           Единицы=СоздатьОбъект("СписокЗначений");
           Единицы.ДобавитьЗначение("одна целая ",1);
           Единицы.ДобавитьЗначение("две целые ",2);
           Единицы.ДобавитьЗначение("три целые ",3);
           Единицы.ДобавитьЗначение("четыре целые ",4);
           Единицы.ДобавитьЗначение("пять целых ",5);
           Единицы.ДобавитьЗначение("шесть целых ",6);
           Единицы.ДобавитьЗначение("семь целых ",7);
           Единицы.ДобавитьЗначение("восемь целых ",8);
           Единицы.ДобавитьЗначение("девять целых ",9);
           Единицы.ДобавитьЗначение("целых ",0);
           
           Если (Чис1<=9) Тогда
               Стр=Стр+Единицы.ПолучитьЗначение(Чис1);
           ИначеЕсли (Лев(Прав(""+Цел(Чис1),2),1)="1") Тогда
               Стр=нрег(Формат(Цел(Чис1),"ЧП"))+" целых ";
           Иначе
               Стр=нрег(Формат(Цел(Чис1/10)*10,"ЧП"));
               Ед=Число(Прав(""+Цел(Чис1),1));
               Если Ед>0 Тогда
                   Стр=Стр+" "+Единицы.ПолучитьЗначение(Ед);
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   ИначеЕсли Чис1=0 Тогда
       Возврат "ноль";
   Иначе
       Стр="ноль целых ";
   КонецЕсли;
   Чис2=Окр((Чис1-Цел(Чис1))*1000);
   Если Чис2>0 Тогда
       Если Прав(""+Чис2,2)="00" Тогда
           Чис2=Чис2/100;
           Единицы=СоздатьОбъект("СписокЗначений");
           Единицы.ДобавитьЗначение("одна десятая",1);
           Единицы.ДобавитьЗначение("две десятых",2);
           Единицы.ДобавитьЗначение("три десятых",3);
           Единицы.ДобавитьЗначение("четыре десятых",4);
           Единицы.ДобавитьЗначение("пять десятых",5);
           Единицы.ДобавитьЗначение("шесть десятых",6);
           Единицы.ДобавитьЗначение("семь десятых",7);
           Единицы.ДобавитьЗначение("восемь десятых",8);
           Единицы.ДобавитьЗначение("девять десятых",9);
           Единицы.ДобавитьЗначение("десятых",0);
           Стр=Стр+Единицы.ПолучитьЗначение(Чис2);
       ИначеЕсли Прав(""+Чис2,1)="0" Тогда
           Чис2=Чис2/10;
           Единицы=СоздатьОбъект("СписокЗначений");
           Единицы.ДобавитьЗначение("одна сотая",1);
           Единицы.ДобавитьЗначение("две сотых",2);
           Единицы.ДобавитьЗначение("три сотых",3);
           Единицы.ДобавитьЗначение("четыре сотых",4);
           Единицы.ДобавитьЗначение("пять сотых",5);
           Единицы.ДобавитьЗначение("шесть сотых",6);
           Единицы.ДобавитьЗначение("семь сотых",7);
           Единицы.ДобавитьЗначение("восемь сотых",8);
           Единицы.ДобавитьЗначение("девять сотых",9);
           Единицы.ДобавитьЗначение("сотых",0);
           Если Чис2<10 Тогда
               Стр=Стр+Единицы.ПолучитьЗначение(Число(Прав(""+Чис2,1)));
           ИначеЕсли Чис2<20 Тогда
               Стр=Стр+нрег(Формат(Чис2,"ЧП"))+" сотых";
           Иначе
               Стр=Стр+нрег(Формат(Цел(Чис2/10)*10,"ЧП"))+" "+Единицы.ПолучитьЗначение(Число(Прав(""+Чис2,1)));
           КонецЕсли;
       Иначе
           Единицы=СоздатьОбъект("СписокЗначений");
           Единицы.ДобавитьЗначение("одна тысячная",1);
           Единицы.ДобавитьЗначение("две тысячных",2);
           Единицы.ДобавитьЗначение("три тысячных",3);
           Единицы.ДобавитьЗначение("четыре тысячных",4);
           Единицы.ДобавитьЗначение("пять тысячных",5);
           Единицы.ДобавитьЗначение("шесть тысячных",6);
           Единицы.ДобавитьЗначение("семь тысячных",7);
           Единицы.ДобавитьЗначение("восемь тысячных",8);
           Единицы.ДобавитьЗначение("девять тысячных",9);
           Единицы.ДобавитьЗначение("тысячных",0);
           Если Чис2<10 Тогда
               Стр=Стр+Единицы.ПолучитьЗначение(Число(Прав(""+Чис2,1)));
           ИначеЕсли Число(Прав(""+Чис2,2))<20 Тогда
               Стр=Стр+нрег(Формат(Чис2,"ЧП"))+" тысячных";
           Иначе
               Стр=Стр+нрег(Формат(Цел(Чис2/10)*10,"ЧП"))+" "+Единицы.ПолучитьЗначение(Число(Прав(""+Чис2,1)));
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   Возврат Стр;
КонецФункции
4 Паланик
 
20.02.09
10:00
(2,3) Спасибо, занес в копилку, но я сделал так (быстрей и проще):

ЦелВес = Цел(ИтогоВес);
ДробьВес = (ИтогоВес - ЦелВес)*1000;
СтрокаВес = Строка(Формат(ЦелВес, "ЧПС")+" кг. "+Формат(ДробьВес, "ЧПС")+" гр.");  

Работает нормально, только вот граммы выводит с заглавной буквы, не смотрится как-то, но это уже не победить, походу...
5 Масянька
 
20.02.09
10:02
НРег(строка) - все в нижнем регистре
6 Паланик
 
20.02.09
10:04
(5) Точно, спасибо!))