Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239

Сохранить отчет в формате PDF

03.03.2014, 14:45. Показов 5996. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пжлст:
Формируется отчет на N количестве страниц (Приказы).
Как каждую страницу (каждый Приказ) сохранить отдельным файлом .pdf

Я предположил решить этот вопрос так:
- формирую в цикле перебора рекордсета каждый отчет (Запуск процедуры по нажатию кнопки в форме), - сохраняю в этом же цикле отчет в формате .pdf при этом название файла формирую из данных поля (ЦФО) рекордсета.
!!! Но тут столкнулся с проблемой передачи данных из рекордсета в формируемые отчеты.
Если поставить код в процедуру загрузки, то всегда формируется один и тот же отчет, без перебора всех данных рекордсета.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Report_Load()
Dim otl As DAO.Recordset
Dim cfo As String
Set otl = CurrentDb.OpenRecordset("SELECT зпрФактПлан.ЦФО,зпрФактПлан.Город, зпрФактПлан.Адрес," _
& " зпрФактПлан.[Юридическое лицо],зпрФактПлан.[Дата текущей инвентаризации]  FROM зпрФактПлан")
Me!Организация = otl![Юридическое лицо]
Me!Подразделение = otl!ЦФО
Me!ЦФОО = otl!ЦФО
Me!АдресМагазина = "Город" & "  " & otl!Город & "  " & otl!Адрес
Me!ДатаИнвы = otl![Дата текущей инвентаризации]
Me!ДатаКонец = (otl![Дата текущей инвентаризации]) + 1
Me!ДатаСдача = (otl![Дата текущей инвентаризации]) + 5
otl.Close
    Set otl = Nothing
End Sub
Может у кого то есть идея как реализовать такой процесс, а то потом рассылать каждый приказ отдельно и не очень удобно в ручную резать и переименовывать файл PDF.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2014, 14:45
Ответы с готовыми решениями:

Сохранение отчета в формате pdf
Добрый день! Нужно по нажатию кнопки в форме сохранить уже готовый отчет в формате pdf.

Отчет в формате Excel
Подскажите как сделать отчет в формате Excel по большому массиву данных и не пользуясь Excel''евской Document Object Model (во избежании...

Сохранение формы в формате PDF в Access
Здравствуйте. Мне нужно сделать печать формы (form1) или сохранить ее в формате pdf. Выбираю экспорт - PDF, но сохраняет он только данные...

30
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
03.03.2014, 14:55
Visual Basic
1
 DoCmd.OutputTo acOutputReport, rptName, acFormatPDF, PDFFileName, False
1
59 / 8 / 1
Регистрация: 15.12.2012
Сообщений: 53
03.03.2014, 15:13
Лучший ответ Сообщение было отмечено mserg1972 как решение

Решение

Я бы посоветовал создать отдельную таблицу для отчета(прописать ее в Источник записей отчета),а потом заполнять ее из цикла текущего рекордсета,т.е. будет два рекордсета,и тогда отчет сформируется полностью.
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
03.03.2014, 15:25  [ТС]
Если я правильно понял, то в этой таблице всегда будет одно, новое значение перед формированием отчета? Правильно? Которое будет заноситься в таблицу при переборе рекордсета.
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
03.03.2014, 15:28
А что, если пройтись по рекордсету, взять номера приказов и выводить отчеты в PDF как раз по одному, указав в условии WhereCondition этот номер?
2
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
04.03.2014, 08:29
Если приказы рассылаются по юрлицам, то так:
Visual Basic
1
2
3
4
5
6
7
8
For each Юрлицо in array("Юрлицо1", "Юрлицо2")
Set otl = CurrentDb.OpenRecordset("SELECT зпрФактПлан.ЦФО,зпрФактПлан.Город, зпрФактПлан.Адрес," _
& " зпрФактПлан.[Юридическое лицо],зпрФактПлан.[Дата текущей инвентаризации]  FROM зпрФактПлан" _
& " WHERE зпрФактПлан.[Юридическое лицо] = '" & Юрлицо & "'")
Me!Организация = otl![Юридическое лицо]
Me!Подразделение = otl!ЦФО
...
Next
Вместо array("Юрлицо1", "Юрлицо2") можно использовать рекордсет с группировкой по [Юридическое лицо].
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
04.03.2014, 08:56  [ТС]
Спасибо, но рассылка идет по ЦФО (каждый магазин)

Не могу понять почему не обновляется таблица тблДанныеИН22, хотя есть подозрение, что таблица обновляется но в конце заносит пустые значения, так как по циклу последние значения пустые, так?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub ИНВ22_Click()
Dim otl As DAO.Recordset
Dim ots As String
Set otl = CurrentDb.OpenRecordset("SELECT зпрФактПлан.ЦФО, зпрФактПлан.Город, зпрФактПлан.Адрес," _
    & " зпрФактПлан.[Юридическое лицо],зпрФактПлан.[Дата текущей инвентаризации]  FROM зпрФактПлан")
Do Until otl.EOF
ots = "UPDATE тблДанныеИнв22" _
    & " SET тблДанныеИнв22.[ЦФО] = '" & otl!ЦФО & "'," _
    & " тблДанныеИнв22.[Город] = '" & otl!Город & "'," _
    & " тблДанныеИнв22.[Адрес] = '" & otl!Адрес & "'," _
    & " тблДанныеИнв22.[Юридическое лицо] = '" & otl![Юридическое лицо] & "'," _
    & " тблДанныеИнв22.[Дата текущей инвентаризации] = '" & otl![Дата текущей инвентаризации] & "'"
CurrentDb.Execute ots
otl.MoveNext
Loop
otl.Close
    Set otl = Nothing
End Sub
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
04.03.2014, 09:35
Так у вас цикл делает одно и тоже, ots же не меняется в нем, а переписывает сам себя. Или добавляйте в ots WHERE, или делайте как я написал выше.
0
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
04.03.2014, 10:11  [ТС]
Почему не меняет данные, в цикле я каждый раз ведь присваиваю значения.
По крайней мере цикл перебирает все значения рекордсета otl И я присваиваю значение каждого поля в таблице тблДанные22 каждый раз новое значение.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Do Until otl.EOF
ots = "UPDATE тблДанныеИнв22" _
    & " SET тблДанныеИнв22.[ЦФО] = '" & otl!ЦФО & "'," _
    & " тблДанныеИнв22.[Город] = '" & otl!Город & "'," _
    & " тблДанныеИнв22.[Адрес] = '" & otl!Адрес & "'," _
    & " тблДанныеИнв22.[Юридическое лицо] = '" & otl![Юридическое лицо] & "'," _
    & " тблДанныеИнв22.[Дата текущей инвентаризации] = '" & otl![Дата текущей инвентаризации] & "'"
CurrentDb.Execute ots
MsgBox (otl!ЦФО)
otl.MoveNext
Loop
Добавлено через 13 минут
Интересная история, у меня таблица не обновлялась пока в ней не было ни одного поля, как только я руками занес одну строку, код заработал. Код не мог обновить пустые значения.
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
04.03.2014, 10:21
Лучший ответ Сообщение было отмечено mserg1972 как решение

Решение

Цитата Сообщение от mserg1972 Посмотреть сообщение
у меня таблица не обновлялась пока в ней не было ни одного поля
Update работает, если только уже есть запись, которую необходимо обновить.
Проверяйте на наличие записи, и используйте Insert или отображайте сообщение.
1
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
04.03.2014, 10:30
Цитата Сообщение от mserg1972 Посмотреть сообщение
Почему не меняет данные, в цикле я каждый раз ведь присваиваю значения.
Значения то присваиваете, а поля остаются одни и те же. Если тблДанныеИнв22 используется как временная таблица для формирования отчета, то тогда да, можно и так. Но нужна хоть одна запись в таблице.
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
04.03.2014, 11:44  [ТС]
Вообщем вот такой получился код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub ИНВ22_Click()
Dim otl As DAO.Recordset
Dim ots, cfo, path As String
path = "C:\Users\s.aleksashin\Desktop\Официальные документы для удержания\Приказы\"
Set otl = CurrentDb.OpenRecordset("SELECT зпрФактПлан.ЦФО, зпрФактПлан.Город, зпрФактПлан.Адрес," _
    & " зпрФактПлан.[Юридическое лицо],зпрФактПлан.[Дата текущей инвентаризации]  FROM зпрФактПлан")
Do Until otl.EOF
ots = "UPDATE тблДанныеИнв22" _
    & " SET тблДанныеИнв22.[ЦФО] = '" & otl!ЦФО & "'," _
    & " тблДанныеИнв22.[Город] = '" & otl!Город & "'," _
    & " тблДанныеИнв22.[Адрес] = '" & otl!Адрес & "'," _
    & " тблДанныеИнв22.[Юридическое лицо] = '" & otl![Юридическое лицо] & "'," _
    & " тблДанныеИнв22.[Дата текущей инвентаризации] = '" & otl![Дата текущей инвентаризации] & "'"
    CurrentDb.Execute ots
DoCmd.OutputTo acOutputReport, "отчПлан", acFormatPDF, path & otl!ЦФО & ".pdf", False
otl.MoveNext
Loop
otl.Close
   Set otl = Nothing
End Sub
, работает, но почему то периодически выскакивает ошибка:


И еще вопрос во время выполнения сохранения отчета часто открывается и закрывается окно сохранения файла, можно сделать это не видимым?
Миниатюры
Сохранить отчет в формате PDF  
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
04.03.2014, 11:52
Visual Basic
1
DoCmd.OutputTo acOutputReport, "отчПлан", acFormatPDF, path & "" & otl!ЦФО & ".pdf", False
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
04.03.2014, 12:05
Такая ошибка может возникнуть по разным причинам. Наиболее частая это когда в отчете оформлено событие Отсутствие данных (OnNoData) или в событии открытия отчета, при отсутствии данных параметру Cancel задается значение True для выхода.
Но в любом случае ошибку можно обойти, применив обработку ошибок
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
....................................
On Error Goto errend 'Перейти на метку errend при возникновении ошибки
DoCmd.OutputTo acOutputReport, "отчПлан", acFormatPDF, path & otl!ЦФО & ".pdf", False
otl.MoveNext
NextRec:
Loop
otl.Close
   Set otl = Nothing
NoErr:
Exit Sub
errend:
Select Case Err.Number
   Case 2501: Resume NextRec 'Перейти на следующую запись
   Case Else 
       Msgbox "Ошибка " & err & " " & err.description
       Resume NoErr : 'Закончить процедуру и проанализировать ошибку
End Select
End Sub
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
04.03.2014, 12:58  [ТС]
Agapov_Stas
Не помогло, ошибка все равно остается.
А можно сделать, что бы во время выполнения сохранения файлов, окно вообще ничего не отражало?
Попробую второе предложение

Добавлено через 5 минут
Обход ошибки помог, спасибо.

А можно сделать так, что бы окно сохранение не мигало а было не видимым, пока программа не отработает процедуру.
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
04.03.2014, 13:09
Цитата Сообщение от mserg1972 Посмотреть сообщение
А можно сделать так, что бы окно сохранение не мигало а было не видимым, пока программа не отработает процедуру.
В самом начале процедуры задайте эхо=фалсе, а перед экзит суб эхо=труе
Visual Basic
1
2
3
4
5
6
7
8
Private Sub ИНВ22_Click()
  Application.Echo=False 'Отключить обновление экрана
.........................
.........................
.........................
NoErr:
  Application.Echo=True 'Включить обновление экрана
Exit Sub
0
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
05.03.2014, 07:24  [ТС]
Показывает ошибку при выполнении.
Миниатюры
Сохранить отчет в формате PDF  
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
05.03.2014, 08:08
Попробуйте:
Visual Basic
1
CurrentProject.Application.Echo=False
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
05.03.2014, 08:36
Или так:
Visual Basic
1
Application.Echo False
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
05.03.2014, 11:12  [ТС]
Visual Basic
1
CurrentProject.Application.Echo=False
выдает ту же ошибку.
Visual Basic
1
2
CurrentProject.Application.Echo False
Application.Echo False
Ошибку не выдает, но и периодическое появление и мигание таблицы с сохранением не исчезло
Миниатюры
Сохранить отчет в формате PDF   Сохранить отчет в формате PDF  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2014, 11:12
Помогаю со студенческими работами здесь

Отчет в формате RTF с границами
Здравствуйте. Есть 5 ПК, на них базы в accesse, все заполняют одну и ту же базу. Затем через 7 дней создаются отчет на всех ПК, затем...

Отчет на формате А3 в две колонки
Здравствуйте. Делаю отчет, который должен создаваться на формате А3. Суть в том, что существует некий список данных... и этот список...

Перенос данных в Excel-файл и сохранение в pdf формате
Как с аксеса открыть ексель файл, заполнить его и сохранить в pdf формате? Во вложении файл аксес. Как с поля 8 на форме данные...

Невозможно сохранить форму или отчет
Вкратце проблема. Разработал базу учета материалов для проектирования кораблей В базе в настоящее время около 50 таблиц, столько же...

Не удается сохранить форму или отчет
Здравствуйте. НЕ УДАЕТСЯ СОХРАНИТЬ ФОРМУ ИЛИ ОТЧЕТ Подскажите,пожалуйста, почему ACCESS выдает такую ошибку. Я еще начинающий...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru