Обсуждение вопросов, связанных с Crystal Reports 2008, Crystal Reports Server, Crystal Xcelsius, BusinessObjects Enterprise, BusinessObjects Edge и другими продуктами Business Objects.
Тема "Сумма прописью по русски ..."
| Можно в КристалРепортс использовать пользовательскую функцию с синтаксисом 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 |
Ответить на сообщение » |
Автор:
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 не такая уж простая штука . Кроме самого кода программы он содержит кучу служебной информации+ код для работы самого активикса и проч. В то время как написанный на крисатле код - это только код и все. кроме того, я эти отчеты не только на своей машине ставлю - с ними десятки людей работают. На все эти компы ставить кучу активиксов по каждому поводу. А ну как чел у себя винды переставит. Потом вспоминай какой у него актив икс стоял и регистри заново? куда как проще - отчет отдал и забыл все при нем.. |
Ответить на сообщение » |
| Mike пишет 10.01: Ну кусок текста нужно вставлять в каждый отчет а ActiveX зарегистрить на мышине один раз и все. >В чем существенная разница... Думаю что памяти меньше кушает кристалловский код, чем пристыкованный ActiveX НЕСОЛАСЕН кристалловский код -интерпритируется а ActiveX-уже бинарный код |
Ответить на сообщение » |
Автор:
Mike
|
Дата: 10.01.2002 18:12 |
| В чем существенная разница... Думаю что памяти меньше кушает кристалловский код, чем пристыкованный ActiveX, это критично когда очень большой отчет с сабрепортами... Хотя сложные вещи, действительно лучше в ActiveX ceyenm... Не просто лучше, а кое что и не возможно на кристале написать... |
Ответить на сообщение » |
| Mike пишет 10.01: >Я вот накатал. Могу продать баксов за 100$ потому как бесплатно такой труд отдавать жалко.. А смысл? Копировать функцию из отчета в отчет помоему UFL проще да кода перевода на любой язык хватает откомпилируй в ActiveX да и делов то |
Ответить на сообщение » |
Автор:
Mike
|
Дата: 10.01.2002 17:50 |
| Я вот накатал. Могу продать баксов за 100$ потому как бесплатно такой труд отдавать жалко.. |
Ответить на сообщение » |
| VadimN пишет 21.11: >Может у кого еще есть ? А то сильно надо. >А? > Ну у меня есть могу сисхоными кодами кинуть только если доделаешь что то пришьлешь :)) |
Ответить на сообщение » |
| VadimN пишет 14.11: >Подскажите каким образом сформировать строку в отчете с суммой прописью на основании числа. Может у кого есть *.dll? > :) >С ожиданием ответа >Вадим.
Имеется ActiveX DLL. Если надо угощу. Пишите на мыло. Отправлю вместе с инструкцией по экспл. |
Ответить на сообщение » |
Автор:
VadimN
|
Дата: 14.11.2001 09:04 |
| Подскажите каким образом сформировать строку в отчете с суммой прописью на основании числа. Может у кого есть *.dll? :) С ожиданием ответа Вадим. |
Ответить на сообщение » |
|