Пример 6

на сайте на Народ.Ру на Яндексе


Главная Назад Пример 1 Пример 2 Пример 3 Пример 4 Пример 5 Пример 6 Пример 7 Пример 8 Пример 9 Пример 10 Пример 11 Пример 12 Пример 13 Пример 14 Пример 15 Пример 16 Пример 17 Пример 18 Пример 19 Пример 20 Пример 21 Пример 22

Яndex

www.yandex.ru

Rambler's Top100

Рейтинг@Mail.ru

Последнее обновление 11/24/02.

 

Еще один пример печати отчета без применения Crystal Report. Интересен тем, что во втором столбце печатаемой таблицы могут быть длинные строки, в которых надо переносить слова не разрезая, но нумерация в первом столбце должна появляться один раз. Поскольку отчеты могут быть различны по объему, организована постраничная печать с ориентацией на количество строк, выдаваемых не лучшим принтером. В отличие от предыдущего примера здесь применены относительные координаты позиций печати. Тема печати отчетов заслуживает внимания и в ближайшем будущем я подробнee остановлюсь на проблемах печати в отдельной статье.
Private Sub Command1_Click()
    '---------------------------------------------------
    'Еще один пример печати отчета без Crystal Report.
    'Интересен тем, что во втором столбце печатаемой
    'таблицы могут быть длинные строки, в которых надо
    'переносить слова не разрезая, но нумерация в первом
    'столбце должна появляться один раз. Поскольку
    'отчеты могут быть различны по объему, организована
    'постраничная печать с ориентацией на количество
    'строк, выдаваемых не лучшим принтером.
    '---------------------------------------------------
    DBGrid1.Visible = False
    Dim c, r, n, s, p, sum, rab, raz, l As Integer
    Dim str, str1, str2, str3, razstr1, razstr2, razstr3, str0 As String
    Dim ch, ost As Currency
    Printer.FontName = "Times New Roman cyr"
    Printer.FontSize = 12
    Printer.FontBold = False
    Printer.CurrentX = Printer.Width * 0.02 * 12
    Printer.CurrentY = Printer.Height * 0.02 * 1
    Printer.Print "Сметная стоимость выполнения ремонтно-отделочных работ"
    Printer.DrawWidth = 2
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * 3)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * 3)
    Printer.DrawWidth = 1
    Printer.CurrentX = Printer.Width * 0.02 * 6.2
    Printer.CurrentY = Printer.Height * 0.02 * 3.2
    Printer.Print "№"
    Printer.CurrentX = Printer.Width * 0.02 * 8.2
    Printer.CurrentY = Printer.Height * 0.02 * 3.2
    Printer.Print "Вид работ"
    Printer.CurrentX = Printer.Width * 0.02 * 30.2
    Printer.CurrentY = Printer.Height * 0.02 * 3.2
    Printer.Print "Цена"
    Printer.CurrentX = Printer.Width * 0.02 * 35.2
    Printer.CurrentY = Printer.Height * 0.02 * 3.2
    Printer.Print "Количество"
    Printer.CurrentX = Printer.Width * 0.02 * 41.2
    Printer.CurrentY = Printer.Height * 0.02 * 3.2
    Printer.Print "Сумма"
    Printer.DrawWidth = 2
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * 4)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * 4)
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * 3)-(Printer.Width * 0.02 * 6, Printer.Height * 0.02 * 4)
    Printer.DrawWidth = 1
    Printer.Line (Printer.Width * 0.02 * 8, Printer.Height * 0.02 * 3)-(Printer.Width * 0.02 * 8, Printer.Height * 0.02 * 4)
    Printer.Line (Printer.Width * 0.02 * 30, Printer.Height * 0.02 * 3)-(Printer.Width * 0.02 * 30, Printer.Height * 0.02 * 4)
    Printer.Line (Printer.Width * 0.02 * 41, Printer.Height * 0.02 * 3)-(Printer.Width * 0.02 * 41, Printer.Height * 0.02 * 4)
    Printer.DrawWidth = 2
    Printer.Line (Printer.Width * 0.02 * 46, Printer.Height * 0.02 * 3)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * 4)
    Printer.DrawWidth = 1
    Printer.Line (Printer.Width * 0.02 * 35, Printer.Height * 0.02 * 3)-(Printer.Width * 0.02 * 35, Printer.Height * 0.02 * 4)
 
    c = 0
    r = 0
    n = 0
    s = 4
    p = 1
    sum = 0

30  Printer.FontBold = False
    If c = 7 Then GoTo 35
    DBGrid1.Col = c
    On Error GoTo ColsError
    DBGrid1.Row = r
    If c > 0 Then
        str = DBGrid1.Text
    Else
        c = c + 1
        GoTo 30
    End If
    If str = "" Then GoTo 70
    If c = 2 Then
        n = 8
        rab = Len(str)
        If rab > 43 Then GoTo 51
        GoTo 50
    End If
    If c = 3 Then
        n = 30
        'Перевод в денежную форму
        ch = (Int(str * 100)) / 100
        ost = str - ch
        If ost >= 0.005 Then ch = ch + 0.01
        str = ch
        If InStr(1, str, ",") = 0 Then
            str = str & "-" & "00"
        End If
        If InStr(1, str, ",") > 0 Then
            str = Left(str, (InStr(1, str, ",")) - 1) & "-" & Right(str, Len(str) - InStr(1, str, ","))
        End If
        If Len(Right(str, Len(str) - InStr(1, str, "-"))) = 1 Then
            str = Left(str, InStr(1, str, "-")) & Right(str, Len(str) - InStr(1, str, "-")) & "0"
        End If
        If InStr(1, str, "-") = 2 Then str = "    " & str
        If InStr(1, str, "-") = 3 Then str = "   " & str
        If InStr(1, str, "-") = 4 Then str = "  " & str
        If InStr(1, str, "-") = 5 Then str = " " & str

        GoTo 52
    End If
    If c = 4 Then
        n = 35
        GoTo 52
    End If
    If c = 5 Then
        n = 38
        GoTo 52
    End If
    If c = 6 Then
        n = 41
        sum = sum + str
        'Перевод в денежную форму
        ch = (Int(str * 100)) / 100
        ost = str - ch
        If ost >= 0.005 Then ch = ch + 0.01
        str = ch
        If InStr(1, str, ",") = 0 Then
            str = str & "=" & "00"
        End If
        If InStr(1, str, ",") > 0 Then
            str = Left(str, (InStr(1, str, ",")) - 1) & "=" & Right(str, Len(str) - InStr(1, str, ","))
        End If
        If Len(Right(str, Len(str) - InStr(1, str, "="))) = 1 Then
            str = Left(str, InStr(1, str, "=")) & Right(str, Len(str) - InStr(1, str, "=")) & "0"
        End If
        If InStr(1, str, "=") = 2 Then str = "    " & str
        If InStr(1, str, "=") = 3 Then str = "   " & str
        If InStr(1, str, "=") = 4 Then str = "  " & str
        If InStr(1, str, "=") = 5 Then str = " " & str

        GoTo 52
    End If
    If c = 1 Then
        If s > 41 Then
            s = s - 1
            Printer.DrawWidth = 2
            Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
            Printer.DrawWidth = 1

            Printer.NewPage
            s = 2
            Printer.DrawWidth = 2
            Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * 1)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * 1)
            Printer.DrawWidth = 1
            Printer.CurrentX = Printer.Width * 0.02 * 6.2
            Printer.CurrentY = Printer.Height * 0.02 * 1.2
            Printer.Print "№"
            Printer.CurrentX = Printer.Width * 0.02 * 8.2
            Printer.CurrentY = Printer.Height * 0.02 * 1.2
            Printer.Print "Вид работ"
            Printer.CurrentX = Printer.Width * 0.02 * 30.2
            Printer.CurrentY = Printer.Height * 0.02 * 1.2
            Printer.Print "Цена"
            Printer.CurrentX = Printer.Width * 0.02 * 35.2
            Printer.CurrentY = Printer.Height * 0.02 * 1.2
            Printer.Print "Количество"
            Printer.CurrentX = Printer.Width * 0.02 * 41.2
            Printer.CurrentY = Printer.Height * 0.02 * 1.2
            Printer.Print "Сумма"
            Printer.DrawWidth = 2
            Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * 2)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * 2)
            Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * 1)-(Printer.Width * 0.02 * 6, Printer.Height * 0.02 * 2)
            Printer.DrawWidth = 1
            Printer.Line (Printer.Width * 0.02 * 8, Printer.Height * 0.02 * 1)-(Printer.Width * 0.02 * 8, Printer.Height * 0.02 * 2)
            Printer.Line (Printer.Width * 0.02 * 30, Printer.Height * 0.02 * 1)-(Printer.Width * 0.02 * 30, Printer.Height * 0.02 * 2)
            Printer.Line (Printer.Width * 0.02 * 41, Printer.Height * 0.02 * 1)-(Printer.Width * 0.02 * 41, Printer.Height * 0.02 * 2)
            Printer.DrawWidth = 2
            Printer.Line (Printer.Width * 0.02 * 46, Printer.Height * 0.02 * 1)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * 2)
            Printer.DrawWidth = 1
            Printer.Line (Printer.Width * 0.02 * 35, Printer.Height * 0.02 * 1)-(Printer.Width * 0.02 * 35, Printer.Height * 0.02 * 2)
        End If
        If str1 = str Then
            c = 2
            GoTo 30
        End If
    End If
    Printer.CurrentX = Printer.Width * 0.02 * 8.2
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
    str3 = UCase(str)
    Printer.FontBold = True
    Printer.Print str3
    Printer.FontBold = False
    str1 = str
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    Printer.DrawWidth = 2
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 46, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    Printer.DrawWidth = 1
    Printer.Line (Printer.Width * 0.02 * 8, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 8, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 30, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 30, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 41, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 41, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 35, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 35, Printer.Height * 0.02 * (s + 1))
    c = c + 1
    s = s + 1
    p = 1
    GoTo 30
50  Printer.CurrentX = Printer.Width * 0.02 * (n + 0.2)
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
 
    Printer.Print str
    Printer.CurrentX = Printer.Width * 0.02 * (6 + 0.2)
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
    Printer.Print p
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    Printer.DrawWidth = 2
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 46, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    Printer.DrawWidth = 1
    Printer.Line (Printer.Width * 0.02 * 8, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 8, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 30, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 30, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 41, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 41, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 35, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 35, Printer.Height * 0.02 * (s + 1))
    c = c + 1
    GoTo 30
    'Операция разрезания строк в одном из столбцов таблицы
51  str0 = Left(str, 43)
    raz = InStr(40, str0, " ")
    If raz = 0 Then
        raz = InStr(37, str0, " ")
    End If
    If raz = 0 Then
        raz = InStr(34, str0, " ")
    End If
    If raz = 0 Then
        raz = InStr(31, str0, " ")
    End If
    razstr1 = Left(str, (raz - 1))
 
    Printer.CurrentX = Printer.Width * 0.02 * (n + 0.2)
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
    Printer.Print razstr1
    Printer.CurrentX = Printer.Width * 0.02 * (6 + 0.2)
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
    Printer.Print p
    Printer.DrawWidth = 2
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 46, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    Printer.DrawWidth = 1
    Printer.Line (Printer.Width * 0.02 * 8, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 8, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 30, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 30, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 41, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 41, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 35, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 35, Printer.Height * 0.02 * (s + 1))
    s = s + 1
 
    razstr2 = Mid(str, raz)
 
    rab = Len(razstr2)
    If rab > 43 Then
        str0 = Left(razstr2, 43)
        raz = InStr(40, str0, " ")
                If raz = 0 Then
                    raz = InStr(37, str0, " ")
                End If
                If raz = 0 Then
                    raz = InStr(34, str0, " ")
                End If
                If raz = 0 Then
                    raz = InStr(31, str0, " ")
                End If
        razstr3 = Mid(razstr2, raz)
        str0 = Left(razstr2, (raz - 1))
        razstr2 = str0
        l = 1
    Else
        Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    End If
    Printer.CurrentX = Printer.Width * 0.02 * (n + 0.2)
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
 
    Printer.Print razstr2
    Printer.DrawWidth = 2
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 46, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    Printer.DrawWidth = 1
    Printer.Line (Printer.Width * 0.02 * 8, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 8, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 30, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 30, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 41, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 41, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 35, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 35, Printer.Height * 0.02 * (s + 1))
 
    If l = 1 Then
        l = 0
        s = s + 1
        Printer.CurrentX = Printer.Width * 0.02 * (n + 0.2)
        Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
        Printer.Print razstr3
        Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
        Printer.DrawWidth = 2
        Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))
        Printer.Line (Printer.Width * 0.02 * 46, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
        Printer.DrawWidth = 1
        Printer.Line (Printer.Width * 0.02 * 8, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 8, Printer.Height * 0.02 * (s + 1))
        Printer.Line (Printer.Width * 0.02 * 30, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 30, Printer.Height * 0.02 * (s + 1))
        Printer.Line (Printer.Width * 0.02 * 41, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 41, Printer.Height * 0.02 * (s + 1))
        Printer.Line (Printer.Width * 0.02 * 35, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 35, Printer.Height * 0.02 * (s + 1))

    End If
    c = c + 1
    GoTo 30
 
52  Printer.CurrentX = Printer.Width * 0.02 * (n + 0.2)
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
    Printer.Print str
    c = c + 1
    GoTo 30
 
35  r = r + 1
    c = 0
    s = s + 1
    p = p + 1
    GoTo 30

70  Printer.EndDoc
ColsError:
 
    Printer.CurrentX = Printer.Width * 0.02 * (8 + 0.2)
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
    Printer.Print "Итого:"
    Printer.CurrentX = Printer.Width * 0.02 * (41 + 0.2)
    Printer.CurrentY = Printer.Height * 0.02 * (s + 0.2)
    sum = Int(sum)
    Printer.Print sum;
    Printer.Print "р."
    Printer.DrawWidth = 2
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 6, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 6, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 46, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 46, Printer.Height * 0.02 * (s + 1))
    Printer.DrawWidth = 1
    Printer.Line (Printer.Width * 0.02 * 8, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 8, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 30, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 30, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 41, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 41, Printer.Height * 0.02 * (s + 1))
    Printer.Line (Printer.Width * 0.02 * 35, Printer.Height * 0.02 * s)-(Printer.Width * 0.02 * 35, Printer.Height * 0.02 * (s + 1))
 
    s = s + 2
    If s > 43 Then
        s = 1
        Printer.NewPage
    End If
    Printer.CurrentX = Printer.Width * 0.02 * 6
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "Примечание:"
    s = s + 1
    Printer.CurrentX = Printer.Width * 0.02 * 6
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "1. Сметная стоимость выполняемых ремонтно-отделочных работ не включает"
    s = s + 1
    Printer.CurrentX = Printer.Width * 0.02 * 6
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "стоимость материалов."
    s = s + 2
    If s > 42 Then
        s = 1
        Printer.NewPage
    End If
    Printer.CurrentX = Printer.Width * 0.02 * 6
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "Заказчик"
    Printer.CurrentX = Printer.Width * 0.02 * 30
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "Исполнитель"
    s = s + 1
    Printer.CurrentX = Printer.Width * 0.02 * 6
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "(_____)__________19   г."
    Printer.CurrentX = Printer.Width * 0.02 * 30
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "(_____)__________19   г."
    s = s + 1
    Printer.CurrentX = Printer.Width * 0.02 * 6
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "_______________"
    Printer.CurrentX = Printer.Width * 0.02 * 30
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "_______________"
    s = s + 1
    Printer.CurrentX = Printer.Width * 0.02 * 6
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "   (подпись)"
    Printer.CurrentX = Printer.Width * 0.02 * 30
    Printer.CurrentY = Printer.Height * 0.02 * s
    Printer.Print "   (подпись)"

    Printer.EndDoc
    DBGrid1.Visible = True
    Exit Sub
 
End Sub

 
Найди на Бегуне:
Интернет-услуги и сервисы Интернет-услуги и сервисы
Компьютеры и оргтехника Компьютеры и оргтехника
Бытовая техника Бытовая техника
Связь Связь
Авто-мото Авто-мото
Книги, музыка и видео Книги, музыка и видео
Продаем целевых
посетителей!

Используются технологии uCoz