OLAP.RU: Business intelligence - effective data mining & analysis

Конференция Business Objects

Обсуждение вопросов, связанных с Crystal Reports 2008, Crystal Reports Server, Crystal Xcelsius, BusinessObjects Enterprise, BusinessObjects Edge и другими продуктами Business Objects.

 
Добавить сообщение »

Тема "Сумма прописью по русски ..."

Автор:  SashaMIPT Дата: 14.04.2010 13:09
Можно в КристалРепортс использовать пользовательскую функцию с синтаксисом Visual Basic:

Function RubSUM(s AS Number) As String
Dim triad(4) As Number, numb1(20) As String, numb2(10) As String, numb3(10) As String
Dim ss As Number
Dim txt As String
Dim i, n As Number

If s = 0 Then
RubSUM = ""
Exit Function
End If
ss = Int(s)
triad(1) = ss - Int(ss / 1000) * 1000
ss = Int(ss / 1000)
triad(2) = ss - Int(ss / 1000) * 1000
ss = Int(ss / 1000)
triad(3) = ss - Int(ss / 1000) * 1000
ss = Int(ss / 1000)
triad(4) = ss - Int(ss / 1000) * 1000
ss = Int(ss / 1000)
numb1(1) = ""
numb1(2) = "один "
numb1(3) = "два "
numb1(4) = "три "
numb1(5) = "четыре "
numb1(6) = "пять "
numb1(7) = "шесть "
numb1(8) = "семь "
numb1(9) = "восемь "
numb1(10) = "девять "
numb1(11) = "десять "
numb1(12) = "одиннадцать "
numb1(13) = "двенадцать "
numb1(14) = "тринадцать "
numb1(15) = "четырнадцать "
numb1(16) = "пятнадцать "
numb1(17) = "шестнадцать "
numb1(18) = "семнадцать "
numb1(19) = "восемнадцать "
numb1(20) = "девятнадцать "
numb2(1) = ""
numb2(2) = ""
numb2(3) = "двадцать "
numb2(4) = "тридцать "
numb2(5) = "сорок "
numb2(6) = "пятьдесят "
numb2(7) = "шестьдесят "
numb2(8) = "семьдесят "
numb2(9) = "восемьдесят "
numb2(10) = "девяносто "
numb3(1) = ""
numb3(2) = "сто "
numb3(3) = "двести "
numb3(4) = "триста "
numb3(5) = "четыреста "
numb3(6) = "пятьсот "
numb3(7) = "шестьсот "
numb3(8) = "семьсот "
numb3(9) = "восемьсот "
numb3(10) = "девятьсот "
txt = ""

For i = 4 To 1 Step -1
n = 0
If triad(i) > 0 Then
n = Int(triad(i) / 100)
txt = txt & numb3(n+1)
n = Int((triad(i) - n * 100) / 10)
txt = txt & numb2(n+1)
If n < 2 Then
n = triad(i) - (Int(triad(i) / 10) - n) * 10
Else
n = triad(i) - Int(triad(i) / 10) * 10
End If
Select Case n
Case 1
If i = 2 Then txt = txt & "одна " Else txt = txt & "один "
Case 2
If i = 2 Then txt = txt & "две " Else txt = txt & "два"
Case Else
txt = txt & numb1(n+1)
End Select
Select Case i
Case 2
If n = 0 Or n > 4 Then
txt = txt + "тысяч "
Else
If n = 1 Then txt = txt + "тысяча " Else txt = txt + "тысячи "
End If
Case 3
If n = 0 Or n > 4 Then
txt = txt + "миллионов "
Else
If n = 1 Then txt = txt + "миллион " Else txt = txt + "миллиона "
End If
Case 4
If n = 0 Or n > 4 Then
txt = txt + "миллиардов "
Else
If n = 1 Then txt = txt + "миллиард " Else txt = txt + "миллиарда "
End If
End Select
End If
Next i
If n = 0 Or n > 4 Then
txt = txt + "рублей"
Else
If n = 1 Then txt = txt + "рубль" Else txt = txt + "рубля"
End If
txt = UCase(Left(txt, 1)) & Mid(txt, 2)
txt = txt & " " & Right(CStr(s),2) & " копе"

Select Case Right(CStr(s),1)
Case "1"
txt=txt & "йка"
Case "2", "3", "4"
txt=txt & "йки"
Case Else
txt=txt & "ек"
End Select

RubSUM = txt
End Function
Ответить на сообщение »

 
Автор:  Alexandr Дата: 19.04.2002 23:07
VadimN пишет 14.11:
>Подскажите каким образом сформировать строку в отчете с суммой прописью на основании числа. Может у кого есть *.dll?
> :)
>С ожиданием ответа
>Вадим.

Смотри на http://alexa.vov.ru/progs/index.php?page=addmsoff
Ответить на сообщение »
 
Автор:  Sergey Дата: 27.03.2002 06:06
VadimN пишет 14.11:
>Подскажите каким образом сформировать строку в отчете с суммой прописью на основании числа. Может у кого есть *.dll?
> :)
>С ожиданием ответа
>Вадим.

Я эту проблему решал таким образом. Навлял функцию на SQL, а потом для отчетов пользовался представлениями. Если интерес есть могу скинуть.
Ответить на сообщение »
 
Автор:  Mike Дата: 10.01.2002 18:38
Alexandr V. Krysan пишет 10.01:
>Mike пишет 10.01:
>Ну кусок текста нужно вставлять в каждый отчет
>а ActiveX зарегистрить на мышине один раз и все.
Дык все равно нужно залазить в менюшку и далать инсерт ole objekt... Ну да это ело привычки. По времени думаю тоже самое

>>В чем существенная разница... Думаю что памяти меньше кушает кристалловский код, чем пристыкованный ActiveX
>НЕСОЛАСЕН
>кристалловский код -интерпритируется
>а ActiveX-уже бинарный код

И тем не менее - activeX не такая уж простая штука . Кроме самого кода программы он содержит кучу служебной информации+ код для работы самого активикса и проч. В то время как написанный на крисатле код - это только код и все. кроме того, я эти отчеты не только на своей машине ставлю - с ними десятки людей работают. На все эти компы ставить кучу активиксов по каждому поводу. А ну как чел у себя винды переставит. Потом вспоминай какой у него актив икс стоял и регистри заново? куда как проще - отчет отдал и забыл все при нем..
Ответить на сообщение »
 
Автор:  Alexandr V. Krysan Дата: 10.01.2002 18:21
Mike пишет 10.01:
Ну кусок текста нужно вставлять в каждый отчет
а ActiveX зарегистрить на мышине один раз и все.
>В чем существенная разница... Думаю что памяти меньше кушает кристалловский код, чем пристыкованный ActiveX
НЕСОЛАСЕН
кристалловский код -интерпритируется
а ActiveX-уже бинарный код
Ответить на сообщение »
 
Автор:  Mike Дата: 10.01.2002 18:12
В чем существенная разница... Думаю что памяти меньше кушает кристалловский код, чем пристыкованный ActiveX, это критично когда очень большой отчет с сабрепортами... Хотя сложные вещи, действительно лучше в ActiveX ceyenm... Не просто лучше, а кое что и не возможно на кристале написать...
Ответить на сообщение »
 
Автор:  Alexandr V. Krysan Дата: 10.01.2002 18:00
Mike пишет 10.01:
>Я вот накатал. Могу продать баксов за 100$ потому как бесплатно такой труд отдавать жалко..
А смысл? Копировать функцию из отчета в отчет помоему
UFL проще да кода перевода на любой язык хватает откомпилируй в ActiveX да и делов то
Ответить на сообщение »
 
Автор:  Mike Дата: 10.01.2002 17:50
Я вот накатал. Могу продать баксов за 100$ потому как бесплатно такой труд отдавать жалко..
Ответить на сообщение »
 
Автор:  Илья Зимин Дата: 23.11.2001 14:54
могу прислать, пришли заявку на prrestig@spb.cityline.ru
Ответить на сообщение »
 
Автор:  Alexandr V. Krysan Дата: 21.11.2001 17:52
VadimN пишет 21.11:
>Может у кого еще есть ? А то сильно надо.
>А?
>
Ну у меня есть могу сисхоными кодами кинуть
только если доделаешь что то пришьлешь
:))
Ответить на сообщение »
 
Автор:  VadimN Дата: 21.11.2001 11:43
Может у кого еще есть ? А то сильно надо.
А?
Ответить на сообщение »
 
Автор:  Игорь Кузенков Дата: 18.11.2001 02:38
VadimN пишет 14.11:
>Подскажите каким образом сформировать строку в отчете с суммой прописью на основании числа. Может у кого есть *.dll?
> :)
>С ожиданием ответа
>Вадим.

Имеется ActiveX DLL. Если надо угощу. Пишите на мыло. Отправлю вместе с инструкцией по экспл.
Ответить на сообщение »
 
Автор:  VadimN Дата: 14.11.2001 09:04
Подскажите каким образом сформировать строку в отчете с суммой прописью на основании числа. Может у кого есть *.dll?
:)
С ожиданием ответа
Вадим.
Ответить на сообщение »
 

Добавить сообщение »
Страница сайта http://www.olap.ru
Оригинал находится по адресу http://www.olap.ru/iservices/messages.asp?forumId=59&topicId=6816