powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / сумма прописью
14 сообщений из 14, страница 1 из 1
сумма прописью
    #33034684
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые господа, есть ли у кого готовое решение такой задачи:
есть цифры например сумма денег в цифрах,а надо получить строку со словами выражающими эту сумму
...
Рейтинг: 0 / 0
сумма прописью
    #33034686
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если решений готовых нет, напишу сам
принимаю рекомендации.
вводная это будет хп
...
Рейтинг: 0 / 0
сумма прописью
    #33034848
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На каком языке ?
...
Рейтинг: 0 / 0
сумма прописью
    #33035011
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно на SQL в виде хранимой процедуры,
у меня есть на VB6 в виде модуля .bas его прицепляю пользуйтесь(ManySTR.rar), если есть интерес
хранимую процедуру хочу написать для ASA8(Version 8.0.2.4308) на диалекте Watcom-SQL

С уважением
Александр Плотников.
...
Рейтинг: 0 / 0
сумма прописью
    #33035055
Vinogradov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
panuУважаемые господа, есть ли у кого готовое решение такой задачи:
есть цифры например сумма денег в цифрах,а надо получить строку со словами выражающими эту сумму

Ваш адрес? Процедура есть
...
Рейтинг: 0 / 0
сумма прописью
    #33035071
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мой адрес panu@online.nsk.su
хотя можно и скрипт прицепить к сообщению, но как хотите.

С уважением
Александр Плотников.
...
Рейтинг: 0 / 0
сумма прописью
    #33035589
Фотография Dimyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
panu пишет:
> мой адрес panu@online.nsk.su
> хотя можно и скрипт прицепить к сообщению, но как хотите.

Действительно, ведь многим было бы интересно (например мне :) ). Может
быть (если конечно можно) выложите примерчик скрипта?

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
сумма прописью
    #33035706
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сожалею но владелец скрипта Vinogradov не дал явного разрешения на публикацию своей интелектуальной собственности,
если будет угодно всевышнему (моему шефу) и у меня будет время напишу свой скрипт и выложу обещаю. кстати в работе скрипта обнаружил ошибку: последняя цифра до запятой не анализируется и после запятой полное игнорирование цифр.
С уважением
Александр Плотников.
...
Рейтинг: 0 / 0
сумма прописью
    #33036099
serg08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Типа заменить Set на Select и подумать?
Сам даже не смотрел. Просто валялось.
/*************************************************************************/
/* NumPhrase function for MSSQL2000 */
/* Gleb Oufimtsev (dnkvpb@nm.ru) */
/* http://www.gvu.newmail.ru */
/* Moscow Russia 2001 */
/*************************************************************************/
CREATE function NumPhrase (@Num BIGINT, @IsMaleGender bit=1)
returns varchar(255)
as
begin
declare @nword varchar(255), @th tinyint, @gr smallint, @d3 tinyint, @d2 tinyint, @d1 tinyint
if @Num<0 return '*** Error: Negative value' else if @Num=0 return 'Ноль' /* особый случай */
while @Num>0
begin
set @th=IsNull(@th,0)+1 set @gr=@Num%1000 set @Num=(@Num-@gr)/1000
if @gr>0
begin
set @d3=(@gr-@gr%100)/100
set @d1=@gr%10
set @d2=(@gr-@d3*100-@d1)/10
if @d2=1 set @d1=10+@d1
set @nword=case @d3
when 1 then ' сто' when 2 then ' двести' when 3 then ' триста'
when 4 then ' четыреста' when 5 then ' пятьсот' when 6 then ' шестьсот'
when 7 then ' семьсот' when 8 then ' восемьсот' when 9 then ' девятьсот' else '' end
+case @d2
when 2 then ' двадцать' when 3 then ' тридцать' when 4 then ' сорок'
when 5 then ' пятьдесят' when 6 then ' шестьдесят' when 7 then ' семьдесят'
when 8 then ' восемьдесят' when 9 then ' девяносто' else '' end
+case @d1
when 1 then (case when @th=2 or (@th=1 and @IsMaleGender=0) then ' одна' else ' один' end)
when 2 then (case when @th=2 or (@th=1 and @IsMaleGender=0) then ' две' else ' два' end)
when 3 then ' три' when 4 then ' четыре' when 5 then ' пять'
when 6 then ' шесть' when 7 then ' семь' when 8 then ' восемь'
when 9 then ' девять' when 10 then ' десять' when 11 then ' одиннадцать'
when 12 then ' двенадцать' when 13 then ' тринадцать' when 14 then ' четырнадцать'
when 15 then ' пятнадцать' when 16 then ' шестнадцать' when 17 then ' семнадцать'
when 18 then ' восемнадцать' when 19 then ' девятнадцать' else '' end
+case @th
when 2 then ' тысяч' +(case when @d1=1 then 'а' when @d1 in (2,3,4) then 'и' else '' end)
when 3 then ' миллион' when 4 then ' миллиард' when 5 then ' триллион' when 6 then ' квадрилион' when 7 then ' квинтилион'
else '' end
+case when @th in (3,4,5,6,7) then (case when @d1=1 then '' when @d1 in (2,3,4) then 'а' else 'ов' end) else '' end
+IsNull(@nword,'')
end
end
return upper(substring(@nword,2,1))+substring(@nword,3,len(@nword)-2)
end


GO


/*************************************************************************/
/* RubPhrase function for MSSQL2000 */
/* Gleb Oufimtsev (dnkvpb@nm.ru) */
/* http://www.gvu.newmail.ru */
/* Moscow Russia 2001 */
/*************************************************************************/
CREATE function RubPhrase (@Value money)
returns varchar(255)
as
begin
declare @rpart bigint, @rattr tinyint, @cpart tinyint, @cattr tinyint
set @rpart=floor(@Value) set @rattr=@rpart%100
if @rattr>19 set @rattr=@rattr%10
set @cpart=(@Value-@rpart)*100
if @cpart>19 set @cattr=@cpart%10 else set @cattr=@cpart
return dbo.NumPhrase(@rpart,1)+' рубл'
+case when @rattr=1 then 'ь' when @rattr in (2,3,4) then 'я' else 'ей' end+' '
+right('0'+cast(@cpart as varchar(2)),2)+' копе'
+case when @cattr=1 then 'йка' when @cattr in (2,3,4) then 'йки' else 'ек' end
end


GO



/*************************************************************************/
/* UsdPhrase function for MSSQL2000 */
/* Gleb Oufimtsev (dnkvpb@nm.ru) */
/* http://www.gvu.newmail.ru */
/* Moscow Russia 2001 */
/*************************************************************************/
CREATE function UsdPhrase (@Value money)
returns varchar(255)
as
begin
declare @dpart bigint, @dattr tinyint, @cpart tinyint, @cattr tinyint
set @dpart=floor(@Value) set @dattr=@dpart%100
if @dattr>19 set @dattr=@dattr%10
set @cpart=(@Value-@dpart)*100
if @cpart>19 set @cattr=@cpart%10 else set @cattr=@cpart
return dbo.NumPhrase(floor(@Value),1)+' доллар'
+case when @dattr=1 then '' when @dattr in (2,3,4) then 'а' else 'ов' end
+' США '+right('0'+cast(@cpart as varchar(2)),2)+' цент'
+case when @cattr=1 then '' when @cattr in (2,3,4) then 'а' else 'ов' end
end
...
Рейтинг: 0 / 0
сумма прописью
    #33036125
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извените уважаемые читатели
приношу публичную благодарность Vinogradov за предоставленный скрипт
С уважением
Александр Плотников.
...
Рейтинг: 0 / 0
сумма прописью
    #33037108
Астралопитек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, но разве нельзя прицепить DLL прямо к ASA? В виде ExternalProc?
А таких DLL-ей есть туча в сети; некоторые на всех языках...
...
Рейтинг: 0 / 0
сумма прописью
    #33037184
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АстралопитекИзвините, но разве нельзя прицепить DLL прямо к ASA? В виде ExternalProc?
А таких DLL-ей есть туча в сети; некоторые на всех языках...
Можно, но я бы не рискнул - слишком большой риск навернуть сервер во время работы из за какой нибудь ошибки в DLL. Ну а вообще то конечно желательно такую DLL прицепить к клиенту/отчетнику, раз уж они не позволяют на своем языке написать сумму прописью, что конечно для них жирный минус.
...
Рейтинг: 0 / 0
сумма прописью
    #33037311
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые господа, прошу прощения предложенное решение с внешней DLL к серверу или такую функцию встраивать в клиента уже старо как мир и довольно некрасиво.
ведь современные базы данных это не просто хранилище.
я полагаю, что данную опцию весьма целесообразно иметь именно в БД, а не в клиентах или в DLL, по причине удобства использования.
я так думаю.
С уважением
Александр Плотников.
...
Рейтинг: 0 / 0
сумма прописью
    #33037517
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
panuУважаемые господа, прошу прощения предложенное решение с внешней DLL к серверу или такую функцию встраивать в клиента уже старо как мир и довольно некрасиво.
ведь современные базы данных это не просто хранилище.
я полагаю, что данную опцию весьма целесообразно иметь именно в БД, а не в клиентах или в DLL, по причине удобства использования.
я так думаю.
С уважением
Александр Плотников.

А никогда не тестировали производительность подобных извратов?...
В этой функции очень много вычислительной работы и нихрена нет работы собственно с данными. Вынос таких вещей вещей external procedure - нормальный подход...

Да, и еще замечание. В случае, когда система многовалютная, то делается табличка склонений валют и :
USD: 1 доллар, 2 доллара, 5 долларов
RUR: 1 рубль, 2 рубля, 5 рублей,
EUR: 1 евро, 2 евра, 5 еврей (шутка)
Аналогично с центами
Как-то проще получается :))
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / сумма прописью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]