Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Экспорт отчетов в несколько файлов / 20 сообщений из 20, страница 1 из 1
27.01.2016, 16:35
    #39156732
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
Добрый день.

Весь форум обыскал в поисках поставленной задачи, но увы...

Задача:
Нужно 1-им нажатием кнопки экспортировать отчет, который формируется на основании выбранного элемента в форме (1 запись из списка) в формате ПДФ с именем выбранного элемента и так нужно сделать циклично, использую все предлагаемые элементы в форме

Для наглядности в paint нарисовал схему.
...
Рейтинг: 0 / 0
27.01.2016, 18:05
    #39156837
Экспорт отчетов в несколько файлов
Используйте DoCmd.OutputTo
...
Рейтинг: 0 / 0
27.01.2016, 18:19
    #39156845
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
Анатолий ( Киев ),

А можно более конкретный пример? Я попытался сделать на основании имеющегося примера на форуме, но у меня не вышло...
Вот что я пробовал:
Private Sub блабла231_Click()
DoCmd.OutputTo acOutputReport, "имя отчета", acFormatPDF, Forms!имя_формы!поле & ".pdf", True
End Sub

я слаб в ВБ =(
...
Рейтинг: 0 / 0
28.01.2016, 13:53
    #39157457
Экспорт отчетов в несколько файлов
ironmind1000но у меня не вышло... Что именно не вышло. Какая ошибка?
Что у вас в Forms!имя_формы!поле? Покажите пример.
У вас какой офис? До А2007 формат PDF не поддерживался.
...
Рейтинг: 0 / 0
28.01.2016, 14:07
    #39157485
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ironmind1000,

у нас отчёты "цикличено" открываются, заганяются в аттачмент и посылаются мылом. Всё это происходит в Acc2003 при помощи PDFCreator'a. Вот такой вот код

Код: 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.
Public Function CreateAttachments(PS_report_name As String, PS_PDFreport_name As String, PS_Criteria As String, PS_type As String) As String

Dim objPDFCreator
Dim DefaultPrinter      As String
Dim c                   As Long
Dim OutputFilename      As String
Dim LS_Path             As String
Dim LI_counter          As Integer          'JFL 2008-06-25
Dim LI_REPEATING_LIMIT  As Integer          'JFL 2008-06-26


LS_Path = "C:\Temp\"
LI_counter = 0
LI_REPEATING_LIMIT = 3
If Trim(PS_PDFreport_name = "") Then PS_PDFreport_name = PS_report_name

Recall:                                                                 'JFL 2008-03-04
    Set objPDFCreator = CreateObject("PDFCreator.clsPDFCreator")
    
    'set PDFCreator
    With objPDFCreator
        .cStart "/NoProcessingAtStartup"
        .cOption("UseAutosave") = 1
        .cOption("UseAutosaveDirectory") = 1
        .cOption("AutosaveDirectory") = LS_Path
        .cOption("AutosaveFilename") = PS_PDFreport_name
        .cOption("AutosaveFormat") = 0                            ' 0 = PDF
        DefaultPrinter = .cDefaultPrinter
        .cDefaultPrinter = "PDFCreator"
        .cClearCache
        If .cDefaultPrinter = "PDFCreator" Then                     'JFL 2008-02-25
            'If Application.Printer.DeviceName = "PDFCreator" Then
                DoCmd.OpenReport PS_report_name, acNormal, , PS_Criteria
            'End If
        Else
            objPDFCreator.cClose                                        'JFL 2008-03-04
            Set objPDFCreator = Nothing                                 'JFL 2008-03-04
            GoTo Recall                                                 'JFL 2008-03-04
        End If
        .cPrinterStop = False
    End With

    'waiting
    c = 0
        Do While (objPDFCreator.cOutputFilename = "") And (c < (maxTime * 1000 / sleepTime))
            c = c + 1
            Sleep 200
        Loop

    OutputFilename = objPDFCreator.cOutputFilename

    'before closing PDFCreator wait for finished printing
    Dim LI_result           As Integer
    Do Until objPDFCreator.cCountOfPrintjobs = 0
        LI_result = DoEvents
    Loop

    'default printer set back
    With objPDFCreator
        .cDefaultPrinter = DefaultPrinter
        Sleep 200
        .cClose
    End With

    'wait until PDFCreator is removed from memory
    Sleep 2000

    'control about output file name
    If OutputFilename = "" Then
        If LI_counter > LI_REPEATING_LIMIT Then
            Call InsertInformationToSQL(DLookup("[inv_id]", "[RE_S_PAY_edit_bank_transfer2]", PS_Criteria), 1, Now(), PS_type & "Error: Time is up ! <" & LI_counter & ">")        'JFL 2007-12-11
            CreateAttachments = ""
        Else
            LI_counter = LI_counter + 1
            Set objPDFCreator = Nothing
            GoTo Recall
        End If
    Else
        CreateAttachments = LS_Path & PS_PDFreport_name & ".pdf"
    End If
    
    Set objPDFCreator = Nothing

    If Not ExistFile(LS_Path & PS_PDFreport_name & ".pdf") Then
        If LI_counter > LI_REPEATING_LIMIT + 1 Then
            Set objPDFCreator = Nothing
            CreateAttachments = "ERR"
            Call InsertInformationToSQL(DLookup("[inv_id]", "[RE_S_PAY_edit_bank_transfer2]", PS_Criteria), 1, Now(), PS_type & "Error: The file does not exist! <" & LI_counter & ">")
            MsgBox "[MO_SEM_Send_email][CreateAttachments] Chyba pri vytv&#225;&#248;en&#237; pdf dokumentu - Soubor nevytvo&#248;en !", vbExclamation, "Soubor neexistuje"
            Exit Function
        Else
            LI_counter = LI_counter + 1
            Set objPDFCreator = Nothing
            Call killProcess("PDFCreator.exe")
            GoTo Recall
        End If
    Else
        If Not FileValidation(PS_report_name, PS_PDFreport_name, LS_Path) Then
            If LI_counter > LI_REPEATING_LIMIT + 1 Then
                CreateAttachments = "ERR"
                Call InsertInformationToSQL(DLookup("[inv_id]", "[RE_S_PAY_edit_bank_transfer2]", PS_Criteria), 1, Now(), PS_type & "Error: The file contains wrong report! <" & LI_counter & ">")        'JFL 2007-06-26
                Exit Function
            Else
                LI_counter = LI_counter + 1
                Set objPDFCreator = Nothing
                GoTo Recall
            End If
        End If
    End If

Exit Function

errorMessage:
    MsgBox Err.Description & " / " & Err.Number, vbInformation
    
    'set default printer to origin value
    If objPDFCreator.cDefaultPrinter = "PDFCreator" And Trim(DefaultPrinter) <> "" Then
        With objPDFCreator
            .cDefaultPrinter = DefaultPrinter
            Sleep 200
            .cClose
        End With
    End If
    
    Set objPDFCreator = Nothing
    
    CreateAttachments = "ERR"
    MsgBox "chyba pri odesl&#225;n&#237; emailu - CreateAttachment()", vbInformation

End Function


...
Рейтинг: 0 / 0
28.01.2016, 16:24
    #39157691
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
Анатолий ( Киев ),

Ошибка 2059, не удается найти объект "|1"
Пример во вложении.
Офис 2010.
...
Рейтинг: 0 / 0
28.01.2016, 16:25
    #39157692
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
Шыфл,

Да уж... надо учить ВБА )))) вообще ничего в этом коде не понятно... =(((
...
Рейтинг: 0 / 0
29.01.2016, 10:29
    #39158276
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ironmind1000,

так ты спрашивай, что не понятно - поясню. Там много лишнего с твоей точки зрения. Основное это до Set objPDFCreator = Nothing - там создаётся файл PDF из отчёта PS_report_name , который сохраняется в папку LS_Path = "C:\Temp\" под именем .cOption("AutosaveFilename") = PS_PDFreport_name . Репорт посылается на печать, и результат сохраняется в файл - всё просто
...
Рейтинг: 0 / 0
29.01.2016, 10:46
    #39158294
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ironmind1000Анатолий ( Киев ),

Ошибка 2059, не удается найти объект "|1"
Пример во вложении.
Офис 2010.

http://www.sql.ru/forum/actualfile.aspx?id=18741194] Приложенный файл (Тест.zip - 79Kb)

Код: vbnet
1.
2.
3.
Private Sub Кнопка12_Click()
DoCmd.OutputTo acOutputReport, "1", acFormatPDF, Forms!список!Название_машин & ".pdf", True
End Sub



не находит отчет с именем "1"
а в остальном работает
...
Рейтинг: 0 / 0
29.01.2016, 10:58
    #39158307
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
Шыфлironmind1000,

так ты спрашивай, что не понятно - поясню. Там много лишнего с твоей точки зрения. Основное это до Set objPDFCreator = Nothing - там создаётся файл PDF из отчёта PS_report_name , который сохраняется в папку LS_Path = "C:\Temp\" под именем .cOption("AutosaveFilename") = PS_PDFreport_name . Репорт посылается на печать, и результат сохраняется в файл - всё просто

Код: 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.
'' не присвоены значения переменным и не приложены функции
''''''''''--------------код типа демо---------------
''Dim maxtime, sleepTime
''maxtime = 1000
''sleepTime = 1000

Sub sleep(n1z)

End Sub
Sub InsertInformationToSQL(n1z, n2z, n3z, n4z)
 'Call InsertInformationToSQL(
 'DLookup("[inv_id]", "[RE_S_PAY_edit_bank_transfer2]", PS_Criteria),
 '1,
 'Now(),
 'PS_type & "Error: Time is up ! <" & LI_counter & ">")
 
 'JFL 2007-12-11
            
End Sub
Function ExistFile(n1z)

End Function
Sub killProcess(n1z)

End Sub
Function FileValidation(n1z, n2z, n3z)

End Function
...
Рейтинг: 0 / 0
29.01.2016, 11:14
    #39158318
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ПЕНСИОНЕРКА,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Const maxTime = 10    ' in seconds
Private Const sleepTime = 250 ' in milliseconds

Public Function ExistFile(fileName As String) As Boolean
   'this function returns boolean: true = the file exists, false = the file doesn't exist
   'Dim objFile         As Object 
   'Set objFile = CreateObject("Scripting.FileSystemObject")
   'If objFile.FileExists(fileName) Then
   If Nz(Dir(fileName), "") <> "" Then 
       ExistFile = True
   Else
       ExistFile = False
   End If
End Function


Function killProcess(ProcessName As String)
    Dim KillString  As String
    KillString = "taskkill /F /IM " & ProcessName
    Call Shell(KillString, vbHide)
    'killProcess = Shell(KillString, vbHide)
End Function


InsertInformationToSQL и FileValidation - это из области внутренней логики, не существенно
...
Рейтинг: 0 / 0
29.01.2016, 13:10
    #39158426
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ПЕНСИОНЕРКА,

Да, но он не сохраняет, а тупо открывает... где прописать путь сохранения? и как сделать циклично, что бы данное сохранение осуществилось с именем выбранных элементов?
...
Рейтинг: 0 / 0
29.01.2016, 13:31
    #39158434
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ironmind1000,

Я пока не пробовала Шифла
другой же сохраняет в фиксированный каталог

хотя может получится

Private Sub Кнопка12_Click()
DoCmd.OutputTo acOutputReport, "1", acFormatPDF, "c:\temp\" & Forms!список!Название_машин & ".pdf", True
End Sub
...
Рейтинг: 0 / 0
29.01.2016, 13:38
    #39158439
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ironmind1000,

без открытия
Код: vbnet
1.
2.
3.
4.
Private Sub Кнопка12_Click()
DoCmd.OutputTo acOutputReport, "1", acFormatPDF, "c:\temp\" & Forms!список!Название_машин & ".pdf", False

End Sub
...
Рейтинг: 0 / 0
29.01.2016, 14:00
    #39158467
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ПЕНСИОНЕРКА,

Я уже разобрался с сохранением, остался один вопрос как сделать сохранение универсальным, типа что бы с любого компа можно было открыть и автоматом создавал папку на раб столе и сохранял все файлы там... И как сделать сохранение по всему списку... открывая каждый отчет в соответствии с выбранным элементом.. =)
...
Рейтинг: 0 / 0
29.01.2016, 14:04
    #39158472
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ironmind1000,

обычную папку я создавала через MKDIR
на рабочем столе не создавала, но вопросы по этой теме видела........ищите
...
Рейтинг: 0 / 0
29.01.2016, 14:05
    #39158476
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ПЕНСИОНЕРКА,

Хорошо, спасибо =)
...
Рейтинг: 0 / 0
29.01.2016, 14:06
    #39158477
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ironmind1000И как сделать сохранение по всему списку... открывая каждый отчет в соответствии с выбранным элементом.. =)
это не проблема --напишите небольшой модуль на VBA
...
Рейтинг: 0 / 0
29.01.2016, 14:23
    #39158497
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
ПЕНСИОНЕРКА,

в этом то и проблема, я не знаю ВБА =(((( Ладно, все равно спасибо, попробую решить проблему самостоятельно... Часть уже решена... теперь осталось придумать как простыми способами использовать этот код... =(
...
Рейтинг: 0 / 0
29.01.2016, 14:52
    #39158539
ironmind1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт отчетов в несколько файлов
Если вдруг кому интересно сделал следующим образом:
Написал код на запись (при получении фокуса):
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Экспорт отчетов в несколько файлов / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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