Задачка для начинающих

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#1
На базе 1с7.7 нужно вывести произвольное число, представляющее собой массу,
в виде, например, "Двадцать две тонны триста сорок пять килограммов семьсот один грамм".
Исходное число дробное, масса представлена в килограммах (22345,701).
Ваши предложения ?
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#6
Да нет - в реальной жизни потребовалось при печати ТТН
Я чего спросил - очень сомневаюсь в том что автор не может данную задачу решить самостоятельно. В приныпе в теме написано для новичков, а отвечают далеко не новечки)
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#7
Я чего спросил - очень сомневаюсь в том что автор не может данную задачу решить самостоятельно. В приныпе в теме написано для новичков, а отвечают далеко не новечки)
Ник не посмотрел и не подумал :)

А что - каким-то особо забористым образом решили?
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#9
vbs ну уж пошла такая пьянка и нет новечков - рассказывайте что за камушки, авось кто-то прочитает и ему энто поможет
 

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#10
vbs ну уж пошла такая пьянка и нет новечков - рассказывайте что за камушки, авось кто-то прочитает и ему энто поможет
Первая мысль - взять файл прописи (например, USD.spl) и заменить в нем тысячи на тонны, доллары на килограммы, а центы на граммы.
Беда в том, что дробная часть валюты содержит два знака, а у килограммов - три...
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#11
Гм - про spl только щас узнал. Валютных счетов не выписывали пока. Пригодится.

без заморочи на суффиксы -а, -ов и без spl (но опять же с двумя знаками)
именно это я и имел в виду под забористым способом.

ПечМасса = Прав(Формат(Сумма,"ЧПДС"),Найти(Формат(Сумма,"ЧПДС"),"руб")-1) + " килограммов " + Сред(Формат(Сумма,"ЧПДС"),Найти(Формат(Сумма,"ЧПДС"),"руб")+4,4) + "грамм"
 

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#12
ПечМасса = Прав(Формат(Сумма,"ЧПДС"),Найти(Формат(Сумма,"ЧПДС"),"руб")-1) + " килограммов " + Сред(Формат(Сумма,"ЧПДС"),Найти(Формат(Сумма,"ЧПДС"),"руб")+4,4) + "грамм"
Понятно, что торопился и не все правильно выделил, но вот что получится для моего примера (22345.701) :
ячи триста сорок пять рублей 70 копеек килограммов ей 7грамм
И опять же проблема с граммами и при таком подходе решена НЕ БУДЕТ (701 грамм, как ни крути, превратится в прописи в 70 !)
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#13
Я за рулем право-лево тоже бывает путаю ;-)

По идее одними ЧП всё прекрасно разруливается, только с суффиксами надо помучится.
 
K

kaa

Гость
#14
ПечСумма = Формат(Сумма,"ЧПДС");
ПечСумма = ?(Найти(ПечСумма,"тысяч")>0,СтрЗаменить(ПечСумма,"тысяч","тонн"),ПечСумма);
ПечСумма = ?(Найти(ПечСумма,"тысячи")>0,СтрЗаменить(ПечСумма,"тысячи","тонн"),ПечСумма);
ПечСумма = ?(Найти(ПечСумма,"рубль")>0,СтрЗаменить(ПечСумма,"рубль","киллограм"),ПечСумма);
ПечСумма = ?(Найти(ПечСумма,"рублей")>0,СтрЗаменить(ПечСумма,"рублей","киллограм"),ПечСумма);
ПечСумма = ?(Найти(ПечСумма,"копейка")>0,СтрЗаменить(ПечСумма,"копейка","грамм"),ПечСумма);
ПечСумма = ?(Найти(ПечСумма,"копеек")>0,СтрЗаменить(ПечСумма,"копеек","грамм"),ПечСумма);

может так?
 
K

kaa

Гость
#16
нет ну можно завести переменную список значений напихать туда нужные значения со строковым представлениям и в цикле менять при нахождении в строке значения на представление :D
 

tanat

Well-Known Member
02.03.2007
265
0
#17
И опять же проблема с граммами и при таком подходе решена НЕ БУДЕТ (701 грамм, как ни крути, превратится в прописи в 70 !)

Незнаю, как в 7.7, а в 8ке у функции ЧислоПрописью(<Число>, <Форматная строка>, <Параметры предмета исчисления>) в параметрах предмета исчисления можно задать разрядность (кол-во знаков после запятой). Ну а дальше уже преобразовывать тыщи в тонны).
 

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#18
ПечСумма = ?(Найти(ПечСумма,"копейка")>0,СтрЗаменить(ПечСумма,"копейка","грамм"),ПечСумма);
ПечСумма = ?(Найти(ПечСумма,"копеек")>0,СтрЗаменить(ПечСумма,"копеек","грамм"),ПечСумма);
Для граммов все равно придется написать свою обработку