Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2011, 03:11   #1
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию Создать отчет средствами VBA или SQL

Здравствуйте!
Подскажите как создать отчет имеющейся таблицы через VBA или SQL или с помощью макроса.
или хотя бы подскажите, как с помощью макроса или VBA запустить мастер отчетов.
ZBEP вне форума Ответить с цитированием
Старый 16.11.2011, 08:28   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию отчеты иэ vba

help

Код:
createreport .................
createcontrol ...................
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 16.11.2011, 17:40   #3
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Можно ли как-нибудь обойтись без ручного создания всех элементов отчета?
Что то вроде фонового запуска мастера отчетов с переданными ему параметрами (имя запроса из которого брать данные, тип оформления и т.д.) ?
ZBEP вне форума Ответить с цитированием
Старый 16.11.2011, 21:16   #4
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Цитата:
Сообщение от ZBEP Посмотреть сообщение
Можно ли как-нибудь обойтись без ручного создания всех элементов отчета?
Что то вроде фонового запуска мастера отчетов с переданными ему параметрами (имя запроса из которого брать данные, тип оформления и т.д.) ?
лично мой опыт

1-й отчет(реальный) не смогла сделать в конструкторе-не СМОГЛА РАЗМЕСТИТЬ И ВЫРОВНЯТЬ около 150 контролов. поэтому написала программу для размещения полей встык через CreateReport, сообщала при этом в подпрограмму длину поля в символах, тип поля и размер шрифта

о последующих МЕЛКИХ отчетах говорить нечего

но

мне надоело подгонять ширину-высоту контролов и я перешла на отчеты в формате нтм для печати вордом, сначала перекрестных запросов, затем и 90% остальных

через конструктор после этого делала только отчеты с итогами ПО СТРАНИЦЕ в нижнем колонтитуле

ввела понятие динамического отчета в НТМ -порядок полей для подведения итогов\списков определял пользователь при запуске отчета

например;надо вывести основную заработную плату за месяц\квартал\год по профессии\разряду\вредности .....

с выбором по месяцу кварталу году профессии разряду вредности .....

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

работник планового отдела или бухгалтерии САМ определял, что ему надо именно сегодня и дорабатывал при необходимости

и меня не трепали по мелочам и полуфабрикат выглядел неплохо и для начальства и для печати

пример в приложении
Вложения
Тип файла: zip poisk1116.zip (52.3 Кб, 134 просмотров)
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание

Последний раз редактировалось shanemac51; 16.11.2011 в 21:18.
shanemac51 вне форума Ответить с цитированием
Старый 17.11.2011, 07:01   #5
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Все-таки решил делать вручную, разобрал на примере функцию и стало все гораздо понятней и легко (правда можно немного урезать функцию, но лень).
Вот, может кому понадобится.

Код:
Public Function VertReportGen(SQLStr As String, Title As String, layout As String) As Boolean
    Dim strReportName       As String
    Dim rpt                 As Report
    Dim FieldName           As Field
    Dim RS                  As Recordset
    Dim intI                As Integer
    Dim ctrl                As Control
    Dim ColWidth            As Integer
    Dim FirstCol            As Boolean
    Dim TextWidth           As Integer
    Dim TextCol             As Boolean
    Dim TextBoxes           As Collection
    Dim Labels              As Collection
    Dim rsLengthCheck       As ADODB.Recordset
    Dim objConn             As ADODB.Connection
 
    On Error GoTo rptErrHandler
 
    ColWidth = 0
    TextWidth = 0
    TextCol = True
    FirstCol = True
    DoCmd.DeleteObject acReport, Title
    Set rpt = CreateReport()
    strReportName = rpt.Name
    rpt.Caption = Title
    rpt.Section(acPageHeader).BackColor = 15849926
    DoCmd.RunCommand acCmdDesignView
    DoCmd.Save acReport, strReportName
    DoCmd.Close acReport, strReportName, acSaveNo
    DoCmd.Rename Title, acReport, strReportName
    DoCmd.OpenReport Title, acViewDesign
    
    Set rpt = Reports(Title)
 
    'set printer stuff
    rpt.Printer.BottomMargin = 360
    rpt.Printer.LeftMargin = 360
    rpt.Printer.RightMargin = 360
    rpt.Printer.TopMargin = 360
 
    If layout = "Landscape" Then
        rpt.Printer.Orientation = acPRORLandscape
    Else
        rpt.Printer.Orientation = acPRORPortrait
    End If
 
    Set RS = CurrentDb.OpenRecordset(SQLStr)
    rpt.RecordSource = SQLStr
 
    'create label on pageheader
    For Each FieldName In RS.Fields
        CreateReportControl Title, acLabel, acDetail, , FieldName.Name, 0, 0
        CreateReportControl Title, acTextBox, acDetail, , FieldName.Name, 0, 0
        '
    Next FieldName

    'arrange fields
    For Each ctrl In rpt.Controls
        Select Case ctrl.ControlType
            Case acTextBox
                If TextCol Then
                    ctrl.Name = ctrl.ControlSource
                    ctrl.Width = 2500
                    ctrl.Move 6000, TextHeight + 100, ctrl.Width, ctrl.Height
                    ctrl.BorderStyle = 1
                    ctrl.BorderColor = RGB(221, 217, 195)
                    TextHeight = TextHeight + ctrl.Height + 100
                    rpt.Section(acDetail).Height = TextHeight + 400
                Else
                    ctrl.Name = ctrl.ControlSource
                    ctrl.Width = 2500
                    ctrl.Move 6000, TextHeight + 100, ctrl.Width, ctrl.Height
                    ctrl.BorderStyle = 1
                    ctrl.BorderColor = RGB(221, 217, 195)
                    TextHeight = TextHeight + ctrl.Height + 100
                    rpt.Section(acDetail).Height = TextHeight + 400
                End If
                TextCol = False
            Case acLabel
                If FirstCol Then
                    ctrl.Name = "lbl" & ctrl.Caption
                    ctrl.Move 1000, TextHeight + 100, 3000, ctrl.Height
                    ctrl.ForeColor = RGB(85, 142, 213)
                Else
                    ctrl.Name = "lbl" & ctrl.Caption
                    ctrl.Move 1000, TextHeight + 100, 3000, ctrl.Height
                    ctrl.ForeColor = RGB(85, 142, 213)
                End If
                ctrl.FontSize = 10
                ctrl.FontWeight = 700
                FirstCol = False
            Case Else
        End Select
    Next ctrl
ZBEP вне форума Ответить с цитированием
Старый 17.11.2011, 07:01   #6
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Продолжение:
Код:
    Set RLabel = CreateReportControl(Title, acLabel, _
    acPageHeader)
        RLabel.Name = "Title"
        RLabel.Caption = Title
        RLabel.Left = 100
        RLabel.Top = 100
        RLabel.Width = rpt.Width - RLabel.Left
        RLabel.Height = 700
        RLabel.FontSize = 24
        RLabel.ForeColor = RGB(85, 142, 213)
        'RLabel.FontBold = True
        
    Set RLine2 = CreateReportControl(Title, acLine, _
    acDetail)
        RLine2.Left = 1000
        RLine2.Width = rpt.Width - RLine2.Left
        RLine2.Top = 0
        RLine2.BorderColor = RLabel.ForeColor
        
    Set RLine3 = CreateReportControl(Title, acLine, _
    acDetail)
        RLine3.Left = 1000
        RLine3.Width = rpt.Width - RLine3.Left
        RLine3.Top = TextHeight + 100
        RLine3.BorderColor = RLabel.ForeColor
    
    'create title
    'CreateReportControl Title, acLabel, acHeader, , Title, 0, 0
    'CreateReportControl Title, acTextBox, acHeader, , Chr(61) & Chr(34) & "Printed on:   " & Chr(34) & "& Date() ", 0, 300
 
    For Each ctrl In rpt.Controls
        Select Case ctrl.ControlType
            Case acTextBox
                If ctrl.Section = 1 Then
                    ctrl.FontWeight = 700
                    ctrl.FontSize = 14
                    ctrl.Height = 350
                    ctrl.Width = 3500
                    ctrl.Top = 400
                End If
 
            Case acLabel
                If ctrl.Section = 1 Then
                    ctrl.FontSize = 16
                    ctrl.FontWeight = 700
                    ctrl.Height = 350
                    ctrl.Width = 3500
                End If
        End Select
    Next ctrl
 
    'size fields correctly
    For Each ctrl In rpt.Controls
        Select Case ctrl.ControlType
            Case acTextBox
                For Each FieldName In RS.Fields
                    If ctrl.Name = FieldName Then
                    End If
                Next FieldName
            Case acLabel
        End Select
    Next ctrl
    
    DoCmd.Save acReport, Title
    DoCmd.OpenReport Title, acViewPreview
    VertReportGen = True
    Exit Function
 
rptErrHandler:
    Select Case Err.Number
    End Select
    VertReportGen = False
    Debug.Print Err.Number
    Debug.Print Err.Description
    Exit Function
End Function

...
VertReportGen("SQL_запрос", "Имя_отчета", "")
...
ZBEP вне форума Ответить с цитированием
Старый 17.01.2012, 11:52   #7
Julia_R
 
Регистрация: 01.01.2012
Сообщений: 4
По умолчанию

отчет где переменное кол-во полей и есть Итоги проще строить на гриде http://www.softdbgrid.ru или vsFlexGrid и др.аналоги
Julia_R вне форума Ответить с цитированием
Старый 23.01.2012, 15:36   #8
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

BD в которой это применял.

(Для запуска в обычном режиме, с нормальным допуском к конструктору и т.д. - запускать через Shift).
Вложения
Тип файла: rar Predpriyatie.rar (294.0 Кб, 161 просмотров)
ZBEP вне форума Ответить с цитированием
Старый 30.01.2012, 19:32   #9
Di_sol
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 26
По умолчанию

Спасибо, я уже разобрался сам! Отличная функция реализации отчетов! Очень пригодилась!
Di_sol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
email средствами VBA mister_pog Microsoft Office Access 3 08.06.2011 22:26
Создать запрос средствами VBA was3110 Microsoft Office Access 4 18.04.2011 11:54
Простановка наличия средствами VBA Julliet Microsoft Office Excel 6 07.06.2010 08:06
Вычисление экспоненты средствами VBA fs444 Microsoft Office Excel 10 30.12.2009 10:42
Заполнение таблицы средствами VBA parsn Microsoft Office Excel 2 28.12.2009 14:05