гороскоп на сегодня у скорпиона любовный гороскоп совместимости любовный гороскоп на 2017 рак девушка подробнее на этой странице нажмите чтобы увидеть больше ссылка на подробности любовный гороскоп гороскоп совместимости совместимость знаков в любви любовный гороскоп любовный гороскоп гороскоп совместимости парень козерог девушка весы гороскоп совместимость гороскоп на месяц любовный рак гороскоп на след неделю девы любовный гороскоп женщина рыба мужчина весы совместимость гороскоп совместимости он телец она овен совместимость любовный увидеть больше гороскоп дева любовный на сегодня и завтра гороскоп основываясь на этих данных на этой странице гороскоп на совместимость телец и рыбы рак гороскоп весы стрелец совместимость на 2017 год гороскоп ссылка сегодня гороскоп совместимость по гороскопу женщина телец мужчина рак совместимость гороскоп секс гороскоп совместимости читать больше гороскоп любовный на сегодня козерогу гороскоп любовный на завтра для стрельца гороскоп любовный на месяц рыбы женщина совместимость гороскопа лев и овен нажмите для продолжения любовный гороскоп двух львов гороскоп неделю гороскоп стрелец женщина и весы мужчина совместимость в браке гороскоп совместимости весы жен овен муж подробнее на этой странице сексуальный гороскоп близнецы женщин гороскоп совместимости она водолей он телец основываясь на этих данных совместимость по гороскопу близнецы скорпион гороскоп совместимости рак и козерог на 2017 гороскоп козы на 2017 любовный гороскоп на завтра лев любовный женщина одинокая перейти увидеть больше совместимость по гороскопу рыба и дева гороскоп женщины любовный гороскоп скорпиона на 2017 год мужчина гороскоп пифагора совместимости знаков зодиака привожу ссылку любовный гороскоп на рыб сегодня по ссылке гороскоп таблица совместимости по годам сексуальный гороскоп водолея и овна любовный гороскоп на месяц для овнов гороскоп совместимости рыбы женщина и рак мужчина совместимость нажмите чтобы увидеть больше гороскоп совместимости по луне и солнцу вот ссылка гороскоп на совместимость женщина телец любовный гороскоп на месяц весы 2017 гороскоп дева телец совместимость совместимость гороскопов лев скорпион посетить страницу гороскоп совместимости знаков зодиаков таблица фото гороскоп совместимости рыба тигр любовный гороскоп женщина козерог 2017 любовный гороскоп козерог на сегодня женщина любовный гороскоп для девы на сегодня и завтра гороскоп стрелец на завтра женщина любовный составить любовный любовный гороскоп водолей на 2017 гороскоп совместимости по знакам зодиака овен и водолей

Форумы HiProg.com - MS ACCESS, VBA, VB

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

ник: belvesta
Помогите пожалуйста с написанием модуля "Суммы прописью"
Если число нужно брать из Запроса, поле Itog.
Укажите пожалуйста на ошибки в написании модуля, так как при открытии он запрашивает число и потом его же - число, а не текст, вставляет в отчет.
Причем запрашивает так - "str"

Вот модуль:
Option Compare Database ' только для Access


'
' Функции для вычисления суммы прописью
' по числовому значению от 0 до 999999999999
'
' Вспомогательные переменные
Dim Тысячи, Миллионы As Boolean
Dim Миллиарды, ВторойДесяток As Boolean
' Массив составных частей
Dim Часть(32) As String
' Логические константы
Const Истина As Boolean = True
Const Ложь As Boolean = False

Function CapitalizeFirst(Str)
' Переводит первую букву в поле на верхний регистр;
' оставляет остальные символы не измененными.
Dim strTemp As String
strTemp = Trim(Str)
CapitalizeFirst = UCase(Left(strTemp, 1)) & Mid(strTemp, 2)
End Function


' Функция возвращает сумму прописью
Function СуммаПрописью(Itog)
On Error Resume Next
' Вызов функции для получения числа прописью
СуммаПрописью = ЧислоПрописью(Itog)
' Строку с заглавной буквы
СуммаПрописью = UCase(Mid(СуммаПрописью, 1, 1)) + Mid(СуммаПрописью, 2)
' Вычислить длину исходного числа
Длина = Len(Itog)
' Если число только из одной цифры, добавить
' до двух (для единообразия алгоритма)
If Длина = 1 Then
Itog = "0" + Itog
Длина = Длина + 1
End If
' Добавление нужного окончания строки
'
' Для чисел, окончивающихся на 10, 11, 12, 13,
' 14, 15, 16, 17, 18, 19 добавляем "рублей"
If Mid(Itog, Длина - 1, 1) = 1 Then
СуммаПрописью = СуммаПрописью + " рублей"
' Для всех остальных случаев
Else
Select Case CLng(Mid(Itog, Длина))
' Для чисел, оканчивающихся на 1, добавляем "рубль"
Case 1
СуммаПрописью = СуммаПрописью + " рубль"
' Для чисел, оканчивающихся на 2, 3, 4 добавляем "рубля"
Case 2, 3, 4
СуммаПрописью = СуммаПрописью + " рубля"
' Для чисел, оканчивающихся на 5, 6, 7, 8, 9, 0 добавляем "рублей"
Case Else
СуммаПрописью = СуммаПрописью + " рублей"
End Select
End If
' Окончательно формируем результат
СуммаПрописью = СуммаПрописью + " "
End Function
'
' функция возвращает число прописью
'
Function ЧислоПрописью(Itog)
On Error GoTo Met1
' Присвоение значений массиву частей
Часть(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) = "ноль"
' Временные переменные вначале сбрасываются
Тысячи = Ложь: Миллионы = Ложь
Миллиарды = Ложь: ВторойДесяток = Ложь
' Определяем длину исходного числа
Длина = Len(Itog)
' Цикл по всем цифрам числа, начиная с крайней
' левой до крвйней правой
For Позиция = Длина To 1 Step -1
' Добавляются очередные слова, описывающие
' текущую цифру
ЧислоПрописью = ЧислоПрописью + ЦифраСтрокой(Mid(Itog, Длина - Позиция + 1, 1), Позиция)
Next Позиция
' Алгоритм возвращает пустую строку при
' нулевом аргументе. Исправим это
If ЧислоПрописью = "" Then
ЧислоПрописью = Часть(32)
End If
Met1:
End Function


'
' Составление слов из частей по очередной
' цифре числа и по предыстории работы
'
' Функция доступна только в текущем модуле
'
Private Function ЦифраСтрокой(Цифра, Место) As String
' Если сотни или десятки миллиардов, то
' запомнить об этом для будущего
If (Цифра <> 0) And ((Место = 11) Or (Место = 12)) Then
Миллиарды = Истина
End If
' Если сотни или десятки миллионов, то
' запомнить об этом для будущего
If (Цифра <> 0) And ((Место = 8) Or (Место = 9)) Then
Миллионы = Истина
End If
' Если сотни или десятки тысяч, то
' запомнить об этом для будущего
If (Цифра <> 0) And ((Место = 5) Or (Место = 6)) Then
Тысячи = Истина
End If
' Если предыдущая цифра была единица
' в поле десятков, то выбираем
If ВторойДесяток Then
Select Case Цифра
' пишем "десять "
Case 0
ЦифраСтрокой = Часть(29) + Часть(12) + Часть(27)
' пишем "двенадцать "
Case 2
ЦифраСтрокой = Часть(18) + Часть(13) + Часть(27)
' в остальных случаях пишем название цифры
' плюс "надцать "
Case Else
ЦифраСтрокой = Часть(Цифра) + Часть(13) + Часть(27)
End Select
' Добавляем название разрядов
Select Case Место
Case 4
' добавляем "тысяч "
ЦифраСтрокой = ЦифраСтрокой + Часть(22) + Часть(27)
' добавляем "миллионов "
Case 7
ЦифраСтрокой = ЦифраСтрокой + Часть(25) + Часть(26) + Часть(27)
' добавляем "миллиардов "
Case 10
ЦифраСтрокой = ЦифраСтрокой + Часть(31) + Часть(26) + Часть(27)
End Select
' Сбрасывем значения, так как переходим к
' предыдущим разрядам
ВторойДесяток = Ложь: Миллионы = Ложь
Миллиарды = Ложь: Тысячи = Ложь
' Во всех остальных случаях, то есть
' не для описания чисел второго десятка
Else
' Определяем названия десятков
If (Место = 2) Or (Место = 5) Or (Место = 8) Or (Место = 11) Then
Select Case Цифра
' Запоминаем про второй десяток для
' подстановки при следующем входе
Case 1
ВторойДесяток = Истина
' пишем "двадцать" или "тридцать"
Case 2, 3
ЦифраСтрокой = Часть(Цифра) + Часть(14) + Часть(27)
' пишем "сорок"
Case 4
ЦифраСтрокой = Часть(15) + Часть(27)
' пишем "девяносто"
Case 9
ЦифраСтрокой = Часть(16) + Часть(17) + Часть(27)
' в остальных случаях пишем название цифры
' плюс "десят "
Case 5, 6, 7, 8
ЦифраСтрокой = Часть(Цифра) + Часть(12) + Часть(29) + Часть(27)
End Select
End If
' Определяем названия сотен
If (Место = 3) Or (Место = 6) Or (Место = 9) Or (Место = 12) Then
Select Case Цифра
' пишем "сто "
Case 1
ЦифраСтрокой = Часть(17) + Часть(27)
' пишем "двести "
Case 2
ЦифраСтрокой = Часть(18) + Часть(19) + Часть(27)
' пишем "триста "
Case 3
ЦифраСтрокой = Часть(3) + Часть(30) + Часть(27)
' пишем "четыреста "
Case 4
ЦифраСтрокой = Часть(4) + Часть(11) + Часть(30) + Часть(27)
' в остальных случаях пишем название цифры
' плюс "сот "
Case 5, 6, 7, 8, 9
ЦифраСтрокой = Часть(Цифра) + Часть(12) + Часть(20) + Часть(27)
End Select
End If
' Определяем названия единиц
If (Место = 1) Or (Место = 4) Or (Место = 7) Or (Место = 10) Then
Select Case Цифра
' пишем "один "
Case 1
ЦифраСтрокой = Часть(1) + Часть(10) + Часть(27)
' пишем "два " или "три "
Case 2, 3
ЦифраСтрокой = Часть(Цифра) + Часть(27)
' пишем "четыре "
Case 4
ЦифраСтрокой = Часть(4) + Часть(11) + Часть(27)
' в остальных случаях пишем название цифры
Case 5, 6, 7, 8, 9
ЦифраСтрокой = Часть(Цифра) + Часть(12) + Часть(27)
End Select
' Определяем названия тысяч
If (Место = 4) Then
Select Case Цифра
' пишем "тысяч " только в том случае, если
' хотя бы в одном разряде тысяч есть не нулевое
' значение
Case 0
If Тысячи Then
ЦифраСтрокой = Часть(22) + Часть(27)
End If
' пишем "одна тысяча "
Case 1
ЦифраСтрокой = Часть(21) + Часть(27) + Часть(22) + Часть(23) + Часть(27)
' пишем "две тысячи "
Case 2
ЦифраСтрокой = Часть(18) + Часть(27) + Часть(22) + Часть(24) + Часть(27)
' добавляем "тысячи "
Case 3, 4
ЦифраСтрокой = ЦифраСтрокой + Часть(22) + Часть(24) + Часть(27)
' в остальных случаях добавляем "тысяч "
Case 5, 6, 7, 8, 9
ЦифраСтрокой = ЦифраСтрокой + Часть(22) + Часть(27)
End Select
' Сбрасываем значения тысяч, так как
' переходим к предыдущим разрядам
Тысячи = Ложь
End If
' Определяем названия миллионов
If Место = 7 Then
Select Case Цифра
' пишем "миллионов " только в том случае, если
' хотя бы в одном разряде миллионов есть не нулевое
' значение
Case 0
If Миллионы Then
ЦифраСтрокой = Часть(25) + Часть(26) + Часть(27)
End If
' добавляем "миллион "
Case 1
ЦифраСтрокой = ЦифраСтрокой + Часть(25) + Часть(27)
' добавляем "миллиона "
Case 2, 3, 4
ЦифраСтрокой = ЦифраСтрокой + Часть(25) + Часть(23) + Часть(27)
' добавляем "миллионов "
Case 5, 6, 7, 8, 9
ЦифраСтрокой = ЦифраСтрокой + Часть(25) + Часть(26) + Часть(27)
End Select
' Сбрасываем значения миллионов, так как
' переходим к предыдущим разрядам
Миллионы = Ложь
End If
' Определяем названия миллиардов
If Место = 10 Then
Select Case Цифра
' пишем "миллиардов " только в том случае, если
' хотя бы в одном разряде миллиардов есть не нулевое
' значение
Case 0
If Миллиарды Then
ЦифраСтрокой = Часть(31) + Часть(26) + Часть(27)
End If
' добавляем "миллиард "
Case 1
ЦифраСтрокой = ЦифраСтрокой + Часть(31) + Часть(27)
' добавляем "миллиарда "
Case 2, 3, 4
ЦифраСтрокой = ЦифраСтрокой + Часть(31) + Часть(23) + Часть(27)
' добавляем "миллиардов "
Case 5, 6, 7, 8, 9
ЦифраСтрокой = ЦифраСтрокой + Часть(31) + Часть(26) + Часть(27)
End Select
' Сбрасываем значения миллиардов, так как
' переходим к предыдущим разрядам
Миллиарды = Ложь
End If
End If
End If
End Function


Ваше имя:

Пароль:

Цитировать: [quote][/quote] Код: [code][/code]
Жирный: [b][/b] Наклонный: [i][/i]
URL: [url][/url] 

Сообщение:

 Размер файла не более 50 Кбт. Большие файлы можно размещать на www.slil.ru

Прикрепить:

 

Для вставки смайлов в текст щелкните по значку.