0

подскажите пожалуйста в чем ошибка

Option Compare Database
Option Explicit

Private Sub Report_Activate()

Dim rns As Integer Dim razr(4) As String Dim sot(9) As String Dim des(9) As String Dim edin(19) As String Dim ssum As Variant 'Currency 'Integer

Dim ssum1 As Variant Dim nazv As String 'название прописью Dim ost As Variant 'Integer Dim ssum2 As Variant 'Currency 'String

Dim l As Variant 'Integer Dim triad As Variant 'Integer Dim x As Variant 'Integer Dim j As Variant 'Integer Dim i As Variant 'Integer Dim m As Variant 'Integer Dim xxx As Variant 'Integer

'Me!ВСЕГО = ssum ssum = Me!Всего

razr(4) = " милрд." razr(3) = " милн." razr(2) = " тыс." razr(1) = "" 'DIME sot(9) sot(1) = "сто " sot(2) = "двести " sot(3) = "триста " sot(4) = "четыреста " sot(5) = "пятьсот " sot(6) = "шестьсот " sot(7) = "семьсот " sot(8) = "восемьсот " sot(9) = "девятьсот " 'DIME des(9) des(1) = "десять " des(2) = "двадцать " des(3) = "тридцать " des(4) = "сорок " des(5) = "пятьдесят " des(6) = "шестьдесят " des(7) = "семьдесят " des(8) = "восемьдесят " des(9) = "девяносто " '*DIME edin(19) edin(1) = "один " edin(2) = "два " edin(3) = "три " edin(4) = "четыре " edin(5) = "пять " edin(6) = "шесть " edin(7) = "семь " edin(8) = "восемь " edin(9) = "девять " edin(10) = "десять " edin(11) = "одиннадцать " edin(12) = "двенадцать " edin(13) = "тринадцать" edin(14) = "четырнадцать " edin(15) = "пятнадцать " edin(16) = "шестнадцать " edin(17) = "семнадцать " edin(18) = "восемнадцать " edin(19) = "девятнадцать "

If ssum = 0 Then nazv = " ноль долларов 00 центов"

Else ssum = ssum + 0# ssum1 = Int(ssum) '2 435 000

ssum2 = LTrim(CStr(Mid(ssum1, 1, 13)))

l = Len(ssum2)         '7
triad = Fix(l / 3)     '2
ost = l - triad * 3     '1

If ost > 0 Then

   triad = triad + 1
   ssum2 = String(3 - ost, "0") + ssum2


End If

    If ost = -1 Then
             ssum2 = "0" + ssum2
    End If

x = 1

nazv = ""
i = triad           '=3
Do While i > 0
     j = 1
     Do While j <= 3
         m = Val(Mid(ssum2, x, 1))

            If m <> 0 Then
                If j = 1 Then
                         nazv = nazv + sot(m)
                         x = x + 1
                      Else
                        If j = 3 Then
                            If i = 2 And m = 2 Then
                                         nazv = nazv + "две"
                               Else
                                    If i = 2 And m = 1 Then
                                         nazv = nazv + "одна"
                                        Else
                                         nazv = nazv + edin(m)
                                    End If
                               End If

                                x = x + 1
                            Else
                               If m = 1 Then
                                   m = Mid(ssum2, x, 2)
                                   nazv = nazv + edin(m)
                                   x = x + 2          '2
                                   j = j + 1
                                 Else
                                   nazv = nazv + des(m)
                                   x = x + 1
                               End If
                            End If
                 End If
            Else
            x = x + 1
         End If
         j = j + 1
    Loop

     nazv = nazv + razr(i)
     i = i - 1

Loop

   xxx = ssum - ssum1
   nazv = nazv + " долларов" + Mid(CStr(xxx), 3, 2) + " 00 центов"

End If Me!Пропись = nazv End Sub

Private Sub Всего_Click()

End Sub

Private Sub ЖДТ_Цена__BeforeUpdate(Cancel As Integer)

End Sub

Private Sub Надпись59_Click()

End Sub

Private Sub Надпись60_Click()

End Sub

Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer) Dim rns As Integer Dim razr(4) As String Dim sot(9) As String Dim des(9) As String Dim edin(19) As String Dim ssum As Variant 'Currency 'Integer

Dim ssum1 As Variant Dim nazv As String 'название прописью Dim ost As Variant 'Integer Dim ssum2 As Variant 'Currency 'String

Dim l As Variant 'Integer Dim triad As Variant 'Integer Dim x As Variant 'Integer Dim j As Variant 'Integer Dim i As Variant 'Integer Dim m As Variant 'Integer Dim xxx As Variant 'Integer

'Me!ВСЕГО = ssum

    ssum = Me!Всего


razr(4) = " милрд." razr(3) = " милн." razr(2) = " тыс." razr(1) = "" 'DIME sot(9) sot(1) = "сто " sot(2) = "двести " sot(3) = "триста " sot(4) = "четыреста " sot(5) = "пятьсот " sot(6) = "шестьсот " sot(7) = "семьсот " sot(8) = "восемьсот " sot(9) = "девятьсот " 'DIME des(9) des(1) = "десять " des(2) = "двадцать " des(3) = "тридцать " des(4) = "сорок " des(5) = "пятьдесят " des(6) = "шестьдесят " des(7) = "семьдесят " des(8) = "восемьдесят " des(9) = "девяносто " '*DIME edin(19) edin(1) = "один " edin(2) = "два " edin(3) = "три " edin(4) = "четыре " edin(5) = "пять " edin(6) = "шесть " edin(7) = "семь " edin(8) = "восемь " edin(9) = "девять " edin(10) = "десять " edin(11) = "одиннадцать " edin(12) = "двенадцать " edin(13) = "тринадцать" edin(14) = "четырнадцать " edin(15) = "пятнадцать " edin(16) = "шестнадцать " edin(17) = "семнадцать " edin(18) = "восемнадцать " edin(19) = "девятнадцать "

If ssum = 0 Then nazv = " ноль долларов 00 центов"

Else ssum = ssum + 0# ssum1 = Int(ssum) '2 435 000

ssum2 = LTrim(CStr(Mid(ssum1, 1, 13)))

l = Len(ssum2)         '7
triad = Fix(l / 3)     '2
ost = l - triad * 3     '1

If ost > 0 Then

   triad = triad + 1
   ssum2 = String(3 - ost, "0") + ssum2


End If

    If ost = -1 Then
             ssum2 = "0" + ssum2
    End If

x = 1

nazv = ""
i = triad           '=3
Do While i > 0
     j = 1
     Do While j <= 3
         m = Val(Mid(ssum2, x, 1))

            If m <> 0 Then
                If j = 1 Then
                         nazv = nazv + sot(m)
                         x = x + 1
                      Else
                        If j = 3 Then
                            If i = 2 And m = 2 Then
                                         nazv = nazv + "две"
                               Else
                                    If i = 2 And m = 1 Then
                                         nazv = nazv + "одна"
                                        Else
                                         nazv = nazv + edin(m)
                                    End If
                               End If

                                x = x + 1
                            Else
                               If m = 1 Then
                                   m = Mid(ssum2, x, 2)
                                   nazv = nazv + edin(m)
                                   x = x + 2          '2
                                   j = j + 1
                                 Else
                                   nazv = nazv + des(m)
                                   x = x + 1
                               End If
                            End If
                 End If
            Else
            x = x + 1
         End If
         j = j + 1
    Loop

     nazv = nazv + razr(i)
     i = i - 1

Loop

   xxx = ssum - ssum1
   nazv = nazv + " долларов" + Mid(CStr(xxx), 3, 2) + " 00 центов"

End If Me!Пропись = nazv

End Sub

Private Sub Пропись_Click()

End Sub

  • Как я понимаю, получается значение для преобразования в операторе ssum = Me!Всего. Соответственно: а) какой тип у значения поля? б) почему используется переменная типа Variant? Для исправления: оба типа измените на точные (Currency подойдёт). И ведите вычисления в целых типах. а не Single/Double. – Akina Feb 21 '18 at 09:35
  • вы бы не могли выделить где надо исправить пожалуйста – Yunus Nazarov Feb 23 '18 at 12:34

0 Answers0