AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.08.2008, 12:18   #1  
SLK is offline
SLK
Участник
 
67 / 19 (1) ++
Регистрация: 23.08.2006
Сумма прописью в отчетах
Необходимо в отчете выводить сумму прописью на русском на основании числа, каким образом можно реализовать данную функцию? Версия MS CRM 4.0.
Старый 06.08.2008, 12:37   #2  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Насколько я представляю, тут важна не версия CRM, а версия Reporting'а. В любом случае публикую код, которым мы пользуемся:

Код:
 
Private Skl As Byte
Public Function Num2Str(n As decimal, rub As Boolean,cur as string) As String
   Dim s As String, R As String, K As String
    Dim t, u, v, w As Integer
    s = ""
    If n < 0 Then
        n = Abs(n)
        s = "минус"
    End If
'-----------------------------------------------------------------------------
    v = (n - Fix(n)) * 100 ' Число копеек
    w = Val(Right(Format(v), 1)) ' Получить число единиц копеек
 
    n = Fix(n) ' Целое число рублей
    t = Val(Right(Format(n), 2)) ' Получить две последние цифры рублей
    u = Val(Right(t, 1)) ' Получить число единиц рублей
 
if cur = "1" then  
   If t > 10 And t < 15 Then
        R = " рублей" ' Получить подпись для рублей
    ElseIf u = 1 Then
        R = " рубль"
    ElseIf u > 1 And u < 5 Then
        R = " рубля"
    Else
        R = " рублей"
    End If
If v > 10 And v < 15 Then
K = " копеек." ' Получить подпись для копеек
ElseIf w = 1 Then
K = " копейка."
ElseIf w > 1 And w < 5 Then
K = " копейки."
Else
K = " копеек."
End If
end if
if cur = "2" then  
   If t > 10 And t < 15 Then
        R = " долларов" ' Получить подпись для рублей
    ElseIf u = 1 Then
        R = " доллар"
    ElseIf u > 1 And u < 5 Then
        R = " доллара"
    Else
        R = " долларов"
    End If
If v > 10 And v < 15 Then
K = " центов." ' Получить подпись для копеек
ElseIf w = 1 Then
K = " цент."
ElseIf w > 1 And w < 5 Then
K = " цента."
Else
K = " центов."
End If
end if
if cur = "3" then  
   If t > 10 And t < 15 Then
        R = " евро" ' Получить подпись для рублей
    ElseIf u = 1 Then
        R = " евро"
    ElseIf u > 1 And u < 5 Then
        R = " евро"
    Else
        R = " евро"
    End If
If v > 10 And v < 15 Then
K = " евроцентов." ' Получить подпись для копеек
ElseIf w = 1 Then
K = " евроцент."
ElseIf w > 1 And w < 5 Then
K = " евроцента."
Else
K = " евроцентов."
End If
end if
 
'-----------------------------------------------------------------------------
If n >= 1000000000000# Then
s = AddStr(s, Num2Str2(Int(n / 1000000000000#), True))
Select Case Skl
Case 0
s = AddStr(s, "триллион")
Case 1
s = AddStr(s, "триллиона")
Case 2
s = AddStr(s, "триллионов")
End Select
n = n - Int(n / 1000000000000#) * 1000000000000#
End If
If n >= 1000000000 Then
s = AddStr(s, Num2Str2(Int(n / 1000000000), True))
Select Case Skl
Case 0
s = AddStr(s, "миллиард")
Case 1
s = AddStr(s, "миллиарда")
Case 2
s = AddStr(s, "миллиардов")
End Select
n = n - Int(n / 1000000000) * 1000000000
End If
If n >= 1000000 Then
s = AddStr(s, Num2Str2(n \ 1000000, True))
Select Case Skl
Case 0
s = AddStr(s, "миллион")
Case 1
s = AddStr(s, "миллиона")
Case 2
s = AddStr(s, "миллионов")
End Select
n = n Mod 1000000
End If
If n >= 1000 Then
s = AddStr(s, Num2Str2(n \ 1000, False))
Select Case Skl
Case 0
s = AddStr(s, "тысяча")
Case 1
s = AddStr(s, "тысячи")
Case 2
s = AddStr(s, "тысяч")
End Select
n = n Mod 1000
End If
If n > 0 Then
s = AddStr(s, Num2Str2(n, True))
End If
If s = "" Then
s = "ноль"
ElseIf s = "минус" Then
s = s + " ноль"
End If
Num2Str = StrConv(Mid(s, 1, 1), vbUpperCase) + Mid(s, 2, Len(s) - 1)
If (rub) Then Num2Str = Num2Str & R & Format(v, " 00") & K
End Function
'-----------------------------------------------------------------------------
Private Function Num2Str2(n As Decimal, male As Boolean) As String
Dim s As String
s = ""
If n >= 100 Then
s = Num2Str1(((n \ 100) * 100), male)
n = n Mod 100
End If
If n >= 20 Then
s = AddStr(s, Num2Str1(((n \ 10) * 10), male))
n = n Mod 10
End If
Num2Str2 = AddStr(s, Num2Str1(n, male))
End Function
'-----------------------------------------------------------------------------
Private Function Num2Str1(n As decimal, male As Boolean) As String
Skl = 2
Select Case n
Case 100
Num2Str1 = "сто"
Case 200
Num2Str1 = "двести"
Case 300
Num2Str1 = "триста"
Case 400
Num2Str1 = "четыреста"
Case 500
Num2Str1 = "пятьсот"
Case 600
Num2Str1 = "шестьсот"
Case 700
Num2Str1 = "семьсот"
Case 800
Num2Str1 = "восемьсот"
Case 900
Num2Str1 = "девятьсот"
Case 11
Num2Str1 = "одиннадцать"
Case 12
Num2Str1 = "двенадцать"
Case 13
Num2Str1 = "тринадцать"
Case 14
Num2Str1 = "четырнадцать"
Case 15
Num2Str1 = "пятнадцать"
Case 16
Num2Str1 = "шестнадцать"
Case 17
Num2Str1 = "семнадцать"
Case 18
Num2Str1 = "восемнадцать"
Case 19
Num2Str1 = "девятнадцать"
Case 20
Num2Str1 = "двадцать"
Case 30
Num2Str1 = "тридцать"
Case 40
Num2Str1 = "сорок"
Case 50
Num2Str1 = "пятьдесят"
Case 60
Num2Str1 = "шестьдесят"
Case 70
Num2Str1 = "семьдесят"
Case 80
Num2Str1 = "восемьдесят"
Case 90
Num2Str1 = "девяносто"
Case 1
Skl = 0
If male Then
Num2Str1 = "один"
Else
Num2Str1 = "одна"
End If
Case 2
Skl = 1
If male Then
Num2Str1 = "два"
Else
Num2Str1 = "две"
End If
Case 3
Skl = 1
Num2Str1 = "три"
Case 4
Skl = 1
Num2Str1 = "четыре"
Case 5
Num2Str1 = "пять"
Case 6
Num2Str1 = "шесть"
Case 7
Num2Str1 = "семь"
Case 8
Num2Str1 = "восемь"
Case 9
Num2Str1 = "девять"
Case 10
Num2Str1 = "десять"
End Select
End Function
'-----------------------------------------------------------------------------
Private Function AddStr(S1 As String, S2 As String)
If S1 = "" Then
AddStr = S2
ElseIf S2 = "" Then
AddStr = S1
Else
AddStr = S1 + " " + S2
End If
End Function
'************************************
За это сообщение автора поблагодарили: Артем Enot Грунин (10).
Старый 06.08.2008, 15:39   #3  
Default is offline
Default
Участник
 
1 / 10 (1) +
Регистрация: 06.08.2008
Доброго дня! У нас стоит такая же задача, но к сожалению текущий уровень познания Report Server не позволяет применить данный код (, подскажите пожалуйста технологию применения кода.
Старый 07.08.2008, 10:18   #4  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Необходимо открыть отчет в Report Designer Studio, на форме свойств отчета есть вкладка code. Туда можно помещать код на Visual Basic.NET и использовать его в отчете. Так же есть возможность регистрировать сборки .NET на SQL сервере и тогда их ф-циями можно будет пользоваться из любого отчета. Примеры применения есть на форуме. Попробуйте воспользоваться поиском. Если что, обращайтесь, могу скинуть информацию.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 07.08.2008, 11:58   #5  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Как добавлять пользовательские ф-ции в отчеты обсуждается тут:
Разбор кода примеров SDK, а также разных прочих
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 07.08.2008, 15:09   #6  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Всё верно.
Эти функции надо вставить в окно на вкладке Code в свойствах отчета.
Потом в любом expression'е сумму прописью можно получить, вызвав:
Code.Num2Str(n, rub, cur)
где
n - собственно число, которое надо перевести в текст;
rub - True или False, в зависимости от того, нужно ли после текста добавлять " рублей КК копеек";
cur - валюта ("1" - рубли, "2" - доллары, "3" - евро);
За это сообщение автора поблагодарили: SLK (1), IgorF (1).
Старый 19.03.2009, 09:02   #7  
vital.mih is offline
vital.mih
Участник
 
114 / 10 (1) +
Регистрация: 25.02.2009
Адрес: Пермь
А есть у кого-нить эта функция на C#?
Старый 20.03.2009, 00:48   #8  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Ну если вам сильно в лом переписать, то советую вынести ее в отдельный VB класс, а уже его завернуть его в C#. Один фиг все в CLR преобразует, в нем язык уже не важен.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка 401: Unauthorized в отчетах Савран Роман Dynamics CRM: Администрирование 12 16.04.2009 10:26
Сумма прописью в шаблонах слияния почты vital.mih Dynamics CRM: Разработка 4 20.03.2009 12:57
не отображаются значения из picklist в отчетах valk Dynamics CRM: Разработка 6 19.02.2009 22:51
Неполная информация в отчетах Pete V Dynamics CRM: Администрирование 6 22.07.2008 11:38
Как избавиться от html разметки в отчетах sam Dynamics CRM: Разработка 1 11.09.2007 11:47

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:10.