powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сумма прописью
25 сообщений из 67, страница 2 из 3
Сумма прописью
    #37915538
mousec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
че-то вот изобрелось на досуге, вдруг кому понравится:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
Public Function СуммаПрописью1(Сумма As String) As String
On Error GoTo Func_Err

Dim LowSumma, Rub As String * 12, i As Integer

If Len(Сумма) < 4 Or (Left(Right(Сумма, 3), 1) <> "-" And Left(Right(Сумма, 3), 1) <> "," And Left(Right(Сумма, 3), 1) <> ".") Then
    MsgBox "Неправильно введена сумма (нужно 0-00 или 0,00)"
    Exit Function
ElseIf Len(Сумма) = 4 And Left(Сумма, 1) = 0 Then
    LowSumma = "ноль "
End If
RSet Rub = Right(Left(Сумма, Len(Сумма) - 3), Len(Rub))
For i = 1 To 9
    Mid(Rub, i, 1) = IIf(Mid(Rub, i, 1) = " ", "0", Mid(Rub, i, 1))
Next

For i = Len(Rub) / 3 To 1 Step -1
    LowSumma = LowSumma & Сотни(Mid(Rub, Len(Rub) - i * 3 + 1, 3), i = 2)
    LowSumma = LowSumma & Razr(i, Mid(Rub, Len(Rub) - i * 3 + 1, 3))
Next
СуммаПрописью1 = UCase(Left(LowSumma, 1)) & Right(LowSumma, Len(LowSumma) - 1) & Right(Сумма, 2) & Razr(0, Right(Сумма, 2))

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function

Function Сотни(str As String, Optional bool As Boolean) As String
On Error GoTo Func_Err

Select Case Left(str, 1)
Case 0
    Сотни = Десятки(Right(str, Len(str) - 1), bool)
Case 1
    Сотни = "сто " & Десятки(Right(str, 2), bool)
Case 2
    Сотни = "двести " & Десятки(Right(str, 2), bool)
Case 3
   Сотни = "триста " & Десятки(Right(str, 2), bool)
Case 4
   Сотни = "четыреста " & Десятки(Right(str, 2), bool)
Case 5
    Сотни = "пятьсот " & Десятки(Right(str, 2), bool)
Case 6
    Сотни = "шестьсот " & Десятки(Right(str, 2), bool)
Case 7
    Сотни = "семьсот " & Десятки(Right(str, 2), bool)
Case 8
    Сотни = "восемьсот " & Десятки(Right(str, 2), bool)
Case 9
    Сотни = "девятьсот " & Десятки(Right(str, 2), bool)
End Select

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function

Public Function Десятки(str As String, Optional bool As Boolean) As String
On Error GoTo Func_Err

Select Case Left(str, 1)
Case 0
    Десятки = Единицы(Right(str, Len(str) - 1), bool)
Case 1
    Select Case Mid(str, 2, 1)
    Case 0
        Десятки = "десять "
    Case 1
        Десятки = "одиннадцать "
    Case 2
        Десятки = "двенадцать "
    Case 3
        Десятки = "тринадцать "
    Case 4
        Десятки = "четырнадцать "
    Case 5
        Десятки = "пятнадцать "
    Case 6
        Десятки = "шестнадцать "
    Case 7
        Десятки = "семнадцать "
    Case 8
        Десятки = "восемнадцать "
    Case 9
        Десятки = "девятнадцать "
    End Select
Case 2
    Десятки = "двадцать " & Единицы(Right(str, 1), bool)
Case 3
    Десятки = "тридцать " & Единицы(Right(str, 1), bool)
Case 4
    Десятки = "сорок " & Единицы(Right(str, 1), bool)
Case 5
    Десятки = "пятьдесят " & Единицы(Right(str, 1), bool)
Case 6
    Десятки = "шестьдесят " & Единицы(Right(str, 1), bool)
Case 7
    Десятки = "семьдесят " & Единицы(Right(str, 1), bool)
Case 8
    Десятки = "восемьдесят " & Единицы(Right(str, 1), bool)
Case 9
    Десятки = "девяносто " & Единицы(Right(str, 1), bool)
End Select

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function

Function Единицы(str As String, Optional bool As Boolean) As String
On Error GoTo Func_Err

Select Case Left(str, 1)
Case 0
    Единицы = ""
Case 1
    Единицы = IIf(bool, "одна ", "один ")
Case 2
    Единицы = IIf(bool, "две ", "два ")
Case 3
    Единицы = "три "
Case 4
    Единицы = "четыре "
Case 5
    Единицы = "пять "
Case 6
    Единицы = "шесть "
Case 7
    Единицы = "семь "
Case 8
    Единицы = "восемь "
Case 9
    Единицы = "девять "
End Select

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function

Function Razr(i As Integer, str As String) As String
On Error GoTo Func_Err

Select Case i
Case 0
    Razr = IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, " копейка ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), " копейки ", " копеек ")), " копеек ")
Case 1
    Razr = IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, "рубль ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), "рубля ", "рублей ")), "рублей ")
Case 2
    Razr = IIf(CInt(Left(str, 3)) = 0, "", IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, "тысяча ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), "тысячи ", "тысяч ")), "тысяч "))
Case 3
    Razr = IIf(CInt(Left(str, 3)) = 0, "", IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, "миллион ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), "миллиона ", "миллионов ")), "миллионов "))
Case 4
    Razr = IIf(CInt(Left(str, 3)) = 0, "", IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, "миллиард ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), "миллиарда ", "миллиардов ")), "миллиардов "))
End Select

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function
...
Рейтинг: 0 / 0
Сумма прописью
    #37915542
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы на это тратили свое время, когда в гугле кучи разных сумм прописью ?
...
Рейтинг: 0 / 0
Сумма прописью
    #37915674
mousec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-ЛюбительВы на это тратили свое время, когда в гугле кучи разных сумм прописью ?

ну я просмотрела кучку, почему-то не глянулись они мне)
захотелось самой изобрести...
бывает такое.
...
Рейтинг: 0 / 0
Сумма прописью
    #37915706
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительВы на это тратили свое время, когда в гугле кучи разных сумм прописью ?

+1
Тоже никогда не пойму автора, я две штуки из этой темы у себя использую и проблем не знаю.
...
Рейтинг: 0 / 0
Сумма прописью
    #37915792
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alvkТоже никогда не пойму автора,
Может человек для общего развития, так сказать повышения квалификации. Почему бы и нет?
Приятно посмотреть на полоды своего труда.
Вас же никто не заставляет использовать ее наработки,а не чьи нибудь другие.
...
Рейтинг: 0 / 0
Сумма прописью
    #37915797
mousecче-то вот изобрелось на досуге, вдруг кому понравитсяврет при <100
Код: vbnet
1.
2.
?СуммаПрописью1("10,00")
Рублей 00 копеек 
...
Рейтинг: 0 / 0
Сумма прописью
    #37915851
mousec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непоймучкаmousecче-то вот изобрелось на досуге, вдруг кому понравитсяврет при <100
Код: vbnet
1.
2.
?СуммаПрописью1("10,00")
Рублей 00 копеек 



спасибо огромное за тест, исправила:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
Public Function СуммаПрописью1(Сумма As String) As String
On Error GoTo Func_Err

Dim LowSumma, Rub As String * 12, i As Integer

If Len(Сумма) < 4 Or (Left(Right(Сумма, 3), 1) <> "-" And Left(Right(Сумма, 3), 1) <> "," And Left(Right(Сумма, 3), 1) <> ".") Then
    MsgBox "Неправильно введена сумма (нужно 0-00 или 0,00)"
    Exit Function
ElseIf Len(Сумма) = 4 And Left(Сумма, 1) = 0 Then
    LowSumma = "ноль "
End If
RSet Rub = Right(Left(Сумма, Len(Сумма) - 3), Len(Rub))
For i = 1 To Len(Rub)
    Mid(Rub, i, 1) = IIf(Mid(Rub, i, 1) = " ", "0", Mid(Rub, i, 1))
Next

For i = Len(Rub) / 3 To 1 Step -1
    LowSumma = LowSumma & Сотни(Mid(Rub, Len(Rub) - i * 3 + 1, 3), i = 2)
    LowSumma = LowSumma & Razr(i, Mid(Rub, Len(Rub) - i * 3 + 1, 3))
Next
СуммаПрописью1 = UCase(Left(LowSumma, 1)) & Right(LowSumma, Len(LowSumma) - 1) & Right(Сумма, 2) & Razr(0, Right(Сумма, 2))

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function

Function Сотни(str As String, Optional bool As Boolean) As String
On Error GoTo Func_Err

Select Case Left(str, 1)
Case 0
    Сотни = Десятки(Right(str, Len(str) - 1), bool)
Case 1
    Сотни = "сто " & Десятки(Right(str, 2), bool)
Case 2
    Сотни = "двести " & Десятки(Right(str, 2), bool)
Case 3
   Сотни = "триста " & Десятки(Right(str, 2), bool)
Case 4
   Сотни = "четыреста " & Десятки(Right(str, 2), bool)
Case 5
    Сотни = "пятьсот " & Десятки(Right(str, 2), bool)
Case 6
    Сотни = "шестьсот " & Десятки(Right(str, 2), bool)
Case 7
    Сотни = "семьсот " & Десятки(Right(str, 2), bool)
Case 8
    Сотни = "восемьсот " & Десятки(Right(str, 2), bool)
Case 9
    Сотни = "девятьсот " & Десятки(Right(str, 2), bool)
End Select

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function

Function Десятки(str As String, Optional bool As Boolean) As String
On Error GoTo Func_Err

Select Case Left(str, 1)
Case 0
    Десятки = Единицы(Right(str, Len(str) - 1), bool)
Case 1
    Select Case Mid(str, 2, 1)
    Case 0
        Десятки = "десять "
    Case 1
        Десятки = "одиннадцать "
    Case 2
        Десятки = "двенадцать "
    Case 3
        Десятки = "тринадцать "
    Case 4
        Десятки = "четырнадцать "
    Case 5
        Десятки = "пятнадцать "
    Case 6
        Десятки = "шестнадцать "
    Case 7
        Десятки = "семнадцать "
    Case 8
        Десятки = "восемнадцать "
    Case 9
        Десятки = "девятнадцать "
    End Select
Case 2
    Десятки = "двадцать " & Единицы(Right(str, 1), bool)
Case 3
    Десятки = "тридцать " & Единицы(Right(str, 1), bool)
Case 4
    Десятки = "сорок " & Единицы(Right(str, 1), bool)
Case 5
    Десятки = "пятьдесят " & Единицы(Right(str, 1), bool)
Case 6
    Десятки = "шестьдесят " & Единицы(Right(str, 1), bool)
Case 7
    Десятки = "семьдесят " & Единицы(Right(str, 1), bool)
Case 8
    Десятки = "восемьдесят " & Единицы(Right(str, 1), bool)
Case 9
    Десятки = "девяносто " & Единицы(Right(str, 1), bool)
End Select

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function

Function Единицы(str As String, Optional bool As Boolean) As String
On Error GoTo Func_Err

Select Case Left(str, 1)
Case 0
    Единицы = ""
Case 1
    Единицы = IIf(bool, "одна ", "один ")
Case 2
    Единицы = IIf(bool, "две ", "два ")
Case 3
    Единицы = "три "
Case 4
    Единицы = "четыре "
Case 5
    Единицы = "пять "
Case 6
    Единицы = "шесть "
Case 7
    Единицы = "семь "
Case 8
    Единицы = "восемь "
Case 9
    Единицы = "девять "
End Select

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function

Function Razr(i As Integer, str As String) As String
On Error GoTo Func_Err

Select Case i
Case 0
    Razr = IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, " копейка ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), " копейки ", " копеек ")), " копеек ")
Case 1
    Razr = IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, "рубль ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), "рубля ", "рублей ")), "рублей ")
Case 2
    Razr = IIf(CInt(Left(str, 3)) = 0, "", IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, "тысяча ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), "тысячи ", "тысяч ")), "тысяч "))
Case 3
    Razr = IIf(CInt(Left(str, 3)) = 0, "", IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, "миллион ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), "миллиона ", "миллионов ")), "миллионов "))
Case 4
    Razr = IIf(CInt(Left(str, 3)) = 0, "", IIf(Left(Right(str, 2), 1) <> 1, IIf(Right(str, 1) = 1, "миллиард ", IIf(((Right(str, 1) = 2) Or (Right(str, 1) = 3) Or (Right(str, 1) = 4)), "миллиарда ", "миллиардов ")), "миллиардов "))
End Select

Func_Exit:
    Exit Function
Func_Err:
    MsgBox Err.Description
    Resume Next
End Function



всем остальным мастера гугла и поиска - рада за вас.
...
Рейтинг: 0 / 0
Сумма прописью
    #37915869
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mousecспасибо огромное за тест, исправила:
Теперь вроде как работает.
mousecвсем остальным мастера гугла и поиска - рада за вас.
Девушка не обращайте внимания. Они женоненавистники.
...
Рейтинг: 0 / 0
Сумма прописью
    #37915958
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mousec,

:-)
Код: sql
1.
2.
3.
4.
?СуммаПрописью1("9999-01")
Девять тысяч девятьсот девяносто девять рублей 01 копейка 
СуммаПрописью1("9 999-01")
Девяносто тысяч девятьсот девяносто девять рублей 01 копейка
...
Рейтинг: 0 / 0
Сумма прописью
    #37915987
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вот написал бы кто универсальную функцию, которая годится для десятков языков...
...
Рейтинг: 0 / 0
Сумма прописью
    #37916002
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

translate.google.com
всем функциям функция
...
Рейтинг: 0 / 0
Сумма прописью
    #37916011
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mousec,

Зря Вы в качестве параметра функции взяли строку, а не число.
Вот посудите сами что из этого вышло:
Код: vbnet
1.
2.
3.
4.
?СуммаПрописью1("1?1-01")
Сто рубль 01 копейка 
?СуммаПрописью1("10E11-AA")
Десять тысяч рублей AA копеек 
...
Рейтинг: 0 / 0
Сумма прописью
    #37916060
mousec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
))) ну эти-то ошибки я знаю)
точнее сказать - недочеты)
при использовании этого модулька принимается в кач-ве н.у., что в качестве исходной строки передается результат неких вычислений, то есть НЕцифр там быть не может, кроме разделителя.
единственная защита от дурака там стоит только на тип разделителя. если разделителя вообще нет на своем месте - сообщение об ошибке.
поясню - вызывается эта функция из таких форм, как счет-фактура, счет, акт и расчет ОСАГО - расчет стоимости производится программно. единственное, что они мне пару раз учудили, было "а можно я вот тут вручную копеечки подправлю, а то у меня сдачи нету!..." после чего пропал разделитель или копеек стало три знака, или в разделитель зафигачили звездочку....
вопщем, как-то так.
...
Рейтинг: 0 / 0
Сумма прописью
    #37916064
mousec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
странный форум - а свои сообщения редактировать нельзя или мне не по глазам кнопочка?
...
Рейтинг: 0 / 0
Сумма прописью
    #37916198
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mousecстранный форум - а свои сообщения редактировать нельзя или мне не по глазам кнопочка?
Низя.
...
Рейтинг: 0 / 0
Сумма прописью
    #37916364
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mousecвсем остальным мастера гугла и поиска - рада за вас.

я лично эту фразу не понял. перевод на русский будет?
...
Рейтинг: 0 / 0
Сумма прописью
    #37916555
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
alvkmousecвсем остальным мастера гугла и поиска - рада за вас.
я лично эту фразу не понял. перевод на русский будет?
Там опечатка. Должно быть мастераМ. "Сообщаю мастерам поиска, что рада за вас".
...
Рейтинг: 0 / 0
Сумма прописью
    #37916592
Поправка:
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Санычalvkпропущено...

я лично эту фразу не понял. перевод на русский будет?
Там опечатка. Должно быть мастераМ. "Сообщаю мастерам поиска, что рада за вас".
Там жоще: обращение, выделяемое занятыми :-)
...
Рейтинг: 0 / 0
Сумма прописью
    #37916661
mousec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка:Владимир Санычпропущено...

Там опечатка. Должно быть мастераМ. "Сообщаю мастерам поиска, что рада за вас".
Там жоще: обращение, выделяемое занятыми :-)

нет, там была именно опечатка - нехватка буквы М.
то не выделенного запятыми обращения я еще, надеюсь, не дожила.
...
Рейтинг: 0 / 0
Сумма прописью
    #37916837
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Санычalvkпропущено...

я лично эту фразу не понял. перевод на русский будет?
Там опечатка. Должно быть мастераМ. "Сообщаю мастерам поиска, что рада за вас".

спасибо за перевод, а то голову ломал.
mousecто не выделенного запятыми обращения я еще, надеюсь, не дожила.

вас с каждой фразой всё труднее и труднее понимать. то = до ??
...
Рейтинг: 0 / 0
Сумма прописью
    #37916841
alvk,

да
...
Рейтинг: 0 / 0
Сумма прописью
    #37916991
abend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю в копилку функцию, которая возвращает сумму прописью (сумма должна быть меньше миллиона, но руками можно и дописать при необходимости) на трех языках: русском, украинском и английском для валют: рубли, гривны, USD, Евро

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
Function textSum(ByVal numAmount As Variant, _
                    Optional ByVal currencyId As Integer = 643, _
                    Optional ByVal curLang As String = "RU") As String

    Dim StrIntSumma As String, spellNumber As String, strKop As String
    Dim KolRazr As Byte, TekRazr As Byte, tekNum As Byte
    Dim curMale As Boolean, notNullAmount As Boolean
     
     
    If Not IsNumeric(numAmount) Then Exit Function
    If numAmount >= 10 ^ 9 Then Exit Function
    If curLang <> "RU" And curLang <> "EN" And curLang <> "UA" Then Exit Function
     
    curMale = Not (currencyId = 980)
     
    StrIntSumma = CStr(Int(Abs(numAmount)))
    KolRazr = Len(StrIntSumma)
    TekRazr = KolRazr
    
    strKop = Format$((Abs(Round(numAmount, 2)) - Int(Abs(numAmount))) * 100, "00")
     
    While TekRazr > 0
        
        If TekRazr = 9 Or TekRazr = 6 Then notNullAmount = False
        
        tekNum = Mid(StrIntSumma, KolRazr + 1 - TekRazr, 1)
        
        If TekRazr = 1 Or TekRazr = 4 Or TekRazr = 7 Then
            If KolRazr > TekRazr Then
                If Mid$(StrIntSumma, KolRazr - TekRazr, 1) = "1" Then
                    tekNum = 0
                End If
            End If
        End If
        
        If (TekRazr = 2 Or TekRazr = 5 Or TekRazr = 8) And tekNum = 1 Then
            tekNum = Mid(StrIntSumma, KolRazr + 1 - TekRazr, 2)
        End If
        
        If tekNum <> 0 Then
            
            notNullAmount = True
            
            If TekRazr = 3 Or TekRazr = 6 Or TekRazr = 9 Then
                
                Select Case curLang
                    Case "RU"
                        spellNumber = spellNumber & " " & Choose(tekNum, _
                                        "сто", _
                                        "двести", _
                                        "триста", _
                                        "четыреста", _
                                        "пятьсот", _
                                        "шестьсот", _
                                        "семьсот", _
                                        "восемьсот", _
                                        "девятьсот")
                    Case "UA"
                        spellNumber = spellNumber & " " & Choose(tekNum, _
                                        "сто", _
                                        "двісті", _
                                        "триста", _
                                        "чотириста", _
                                        "п'ятсот", _
                                        "шістсот", _
                                        "сімсот", _
                                        "вісімсот", _
                                        "дев'ятсот")
                    Case "EN"
                        spellNumber = spellNumber & " " & Choose(tekNum, _
                                        "one", _
                                        "two", _
                                        "three", _
                                        "four", _
                                        "five", _
                                        "six", _
                                        "seven", _
                                        "eight", _
                                        "nine") & " hundred"
                        If Mid$(StrIntSumma, KolRazr + 2 - TekRazr, 2) <> "00" Then
                            spellNumber = spellNumber & " and"
                        End If
                    Case Else
                        spellNumber = spellNumber & " ???"
                End Select
            
            ElseIf (TekRazr = 2 Or TekRazr = 5 Or TekRazr = 8) And tekNum < 10 Then
            
                If curLang = "RU" Then
                    spellNumber = spellNumber & " " & Choose(tekNum - 1, _
                                    "двадцать", _
                                    "тридцать", _
                                    "сорок", _
                                    "пятьдесят", _
                                    "шестьдесят", _
                                    "семьдесят", _
                                    "восемьдесят", _
                                    "девяносто" _
                                    )
                ElseIf curLang = "UA" Then
                    spellNumber = spellNumber & " " & Choose(tekNum - 1, _
                                    "двадцять", _
                                    "тридцять", _
                                    "сорок", _
                                    "п'ятдесят", _
                                    "шістдесят", _
                                    "сімдесят", _
                                    "вісімдесят", _
                                    "дев'яносто" _
                                    )
                Else
                    spellNumber = spellNumber & " " & Choose(tekNum, _
                                    "twenty", _
                                    "thirty", _
                                    "fourty", _
                                    "fifty", _
                                    "sixty", _
                                    "seventy", _
                                    "eighty", _
                                    "ninety" _
                                    )
                End If
            
            Else
       
                Select Case tekNum
                    
                    Case 1
                        
                        If TekRazr = 7 Or (TekRazr = 1 And curMale) Then
                            If curLang = "UA" Or curLang = "RU" Then
                                spellNumber = spellNumber & " один"
                            Else
                                spellNumber = spellNumber & " one"
                            End If
                        Else
                            If curLang = "UA" Or curLang = "RU" Then
                                spellNumber = spellNumber & " одна"
                            Else
                                spellNumber = spellNumber & " one"
                            End If
                        End If
                        
                    Case 2
                        
                        If TekRazr = 7 Or (TekRazr = 1 And curMale) Then
                            If curLang = "UA" Or curLang = "RU" Then
                                spellNumber = spellNumber & " два"
                            Else
                                spellNumber = spellNumber & " two"
                            End If
                        Else
                            If curLang = "RU" Then
                                spellNumber = spellNumber & " две"
                            ElseIf curLang = "UA" Then
                                spellNumber = spellNumber & " двi"
                            Else
                                spellNumber = spellNumber & " two"
                            End If
                        End If
                        
                    Case Else
                        
                        If curLang = "RU" Then
                            spellNumber = spellNumber & " " & Choose(tekNum - 2, _
                                            "три", _
                                            "четыре", _
                                            "пять", _
                                            "шесть", _
                                            "семь", _
                                            "восемь", _
                                            "девять", _
                                            "десять", _
                                            "одиннадцать", _
                                            "двенадцать", _
                                            "тринадцать", _
                                            "четырнадцать", _
                                            "пятнадцать", _
                                            "шестнадцать", _
                                            "семнадцать", _
                                            "восемнадцать", _
                                            "девятнадцать" _
                                            )
                        ElseIf curLang = "UA" Then
                            spellNumber = spellNumber & " " & Choose(tekNum - 2, _
                                            "три", _
                                            "чотири", _
                                            "п'ять", _
                                            "шість", _
                                            "сім", _
                                            "вісім", _
                                            "дев'ять", _
                                            "десять", _
                                            "одинадцять", _
                                            "дванадцять", _
                                            "тринадцять", _
                                            "чотирнадцять", _
                                            "п'ятнадцять", _
                                            "шістнадцять", _
                                            "сімнадцять", _
                                            "вісімнадцять", _
                                            "дев'ятнадцять" _
                                            )
                        Else
                            spellNumber = spellNumber & " " & Choose(tekNum - 2, _
                                            "three", _
                                            "four", _
                                            "five", _
                                            "six", _
                                            "seven", _
                                            "eight", _
                                            "nine", _
                                            "ten", _
                                            "eleven", _
                                            "twelve", _
                                            "thirteen", _
                                            "fourteen", _
                                            "fifteen", _
                                            "sixteen", _
                                            "seventeen", _
                                            "eighteen", _
                                            "nineteen" _
                                            )
                        End If
                    
                End Select
            
            End If
        
        End If
       
        If TekRazr = 7 And notNullAmount Then
            
            Select Case tekNum
                Case 1
                    If curLang = "RU" Then
                        spellNumber = spellNumber & " миллион"
                    ElseIf curLang = "UA" Then
                        spellNumber = spellNumber & " мільйон"
                    Else
                        spellNumber = spellNumber & " million"
                    End If
                Case 2, 3, 4
                    If curLang = "RU" Then
                        spellNumber = spellNumber & " миллиона"
                    ElseIf curLang = "UA" Then
                        spellNumber = spellNumber & " мільйони"
                    Else
                        spellNumber = spellNumber & " million"
                    End If
                Case Else
                    If curLang = "RU" Then
                        spellNumber = spellNumber & " миллионов"
                    ElseIf curLang = "UA" Then
                        spellNumber = spellNumber & " мільйонів"
                    Else
                        spellNumber = spellNumber & " million"
                    End If
            End Select
        
        ElseIf TekRazr = 4 And notNullAmount Then
            
            Select Case tekNum
                Case 1
                    If curLang = "RU" Then
                        spellNumber = spellNumber & " тысяча"
                    ElseIf curLang = "UA" Then
                        spellNumber = spellNumber & " тисяча"
                    Else
                        spellNumber = spellNumber & " thousand"
                    End If
                Case 2, 3, 4
                    If curLang = "RU" Then
                        spellNumber = spellNumber & " тысячи"
                    ElseIf curLang = "UA" Then
                        spellNumber = spellNumber & " тисячі"
                    Else
                        spellNumber = spellNumber & " thousand"
                    End If
                Case Else
                    If curLang = "RU" Then
                        spellNumber = spellNumber & " тысяч"
                    ElseIf curLang = "UA" Then
                        spellNumber = spellNumber & " тисяч"
                    Else
                        spellNumber = spellNumber & " thousand"
                    End If
            End Select
        
        End If
            
        TekRazr = TekRazr - 1
    
    Wend
    
    If Len(spellNumber) = 0 Then
        If curLang = "RU" Then
            spellNumber = spellNumber & " ноль"
        ElseIf curLang = "UA" Then
            spellNumber = spellNumber & " нуль"
        Else
            spellNumber = spellNumber & " zero"
        End If
    End If
    
    If Sgn(numAmount) = -1 Then
        If curLang = "RU" Then
            spellNumber = "минус" & spellNumber
        ElseIf curLang = "UA" Then
            spellNumber = "мінус" & spellNumber
        Else
            spellNumber = "minus" & spellNumber
        End If
    End If
    
    Select Case currencyId
        Case 643
            If curLang = "RU" Then
                Select Case tekNum
                    Case 1
                        spellNumber = spellNumber & " рубль"
                    Case 2, 3, 4
                        spellNumber = spellNumber & " рубля"
                    Case Else
                        spellNumber = spellNumber & " рублей"
                End Select
                spellNumber = spellNumber & " " & strKop & " коп."
            ElseIf curLang = "UA" Then
                Select Case tekNum
                    Case 1
                        spellNumber = spellNumber & " рубль"
                    Case 2, 3, 4
                        spellNumber = spellNumber & " рублi"
                    Case Else
                        spellNumber = spellNumber & " рублiв"
                End Select
                spellNumber = spellNumber & " " & strKop & " коп."
            Else
                spellNumber = spellNumber & " RUR"
                spellNumber = spellNumber & " " & strKop & " kop."
            End If
        Case 980
            If curLang = "RU" Then
                Select Case tekNum
                    Case 1
                        spellNumber = spellNumber & " гривна"
                    Case 2, 3, 4
                        spellNumber = spellNumber & " гривны"
                    Case Else
                        spellNumber = spellNumber & " гривен"
                End Select
                spellNumber = spellNumber & " " & strKop & " коп."
            ElseIf curLang = "UA" Then
                Select Case tekNum
                    Case 1
                        spellNumber = spellNumber & " гривня"
                    Case 2, 3, 4
                        spellNumber = spellNumber & " гривні"
                    Case Else
                        spellNumber = spellNumber & " гривень"
                End Select
                spellNumber = spellNumber & " " & strKop & " коп."
            Else
                spellNumber = spellNumber & " UAH"
                spellNumber = spellNumber & " " & strKop & " kop."
            End If
        Case 840
            If curLang = "RU" Then
                Select Case tekNum
                    Case 1
                        spellNumber = spellNumber & " доллар США"
                    Case 2, 3, 4
                        spellNumber = spellNumber & " доллара США"
                    Case Else
                        spellNumber = spellNumber & " долларов США"
                End Select
                spellNumber = spellNumber & " " & strKop & " центов"
            ElseIf curLang = "UA" Then
                Select Case tekNum
                    Case 1
                        spellNumber = spellNumber & " долар США"
                    Case 2, 3, 4
                        spellNumber = spellNumber & " долари США"
                    Case Else
                        spellNumber = spellNumber & " доларiв США"
                End Select
                spellNumber = spellNumber & " " & strKop & " центів"
            Else
                spellNumber = spellNumber & " USD"
                spellNumber = spellNumber & " " & strKop & " cents"
            End If
        Case 978
            If curLang = "RU" Then
                spellNumber = spellNumber & " Евро"
                spellNumber = spellNumber & " " & strKop & " евроцентов"
            ElseIf curLang = "UA" Then
                spellNumber = spellNumber & " Євро"
                spellNumber = spellNumber & " " & strKop & " євроцентів"
            Else
                spellNumber = spellNumber & " EUR"
                spellNumber = spellNumber & " " & strKop & " eurocents"
            End If
        Case Else
            spellNumber = spellNumber & ","
    End Select
    
    spellNumber = Trim$(spellNumber)
    spellNumber = UCase(Mid$(spellNumber, 1, 1)) & Mid$(spellNumber, 2)
    
    textSum = spellNumber
    
    
End Function
...
Рейтинг: 0 / 0
Сумма прописью
    #37968818
serbar62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форме базы данных есть два окошка, первое - это Список149, в нем отображается результат суммы, взятый из запроса. В Поле140 отображается сумма прописью. Обработка перевода в пропись естественно в модуле. Так вот при открывание формы в Поле140 перевод в пропись не появляется и возникает там только при нажатие мышкой на Список149. В чем проблема? Пишу под себя и сложно сразу разобраться во всех нюансах программирования.


Private Sub Список149_BeforeUpdate(Cancel As Integer)
Me.Поле140 = propiskop(Me.Список149)
Me.Поле140.Requery
End Sub
...
Рейтинг: 0 / 0
Сумма прописью
    #37969349
Фотография NickBell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serbar62,

Для автоматического отображения суммы прописью, в ContolSource поля надо записать

=НазваниеФункции(Аргумент)

=propiskop(Список149)


С названиями ваших полей немного сложно разобраться, надеюсь, угадала.

Появление текста суммы прописью
...
Рейтинг: 0 / 0
Сумма прописью
    #37970030
serbar62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за участие в горе моем. Но не работает. На картинке есть результат работы. Есть еще мысли? Или я где-то наглючил?
...
Рейтинг: 0 / 0
25 сообщений из 67, страница 2 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сумма прописью
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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