Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
1

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

23.11.2018, 15:13. Показов 3111. Ответов 17
Метки нет (Все метки)

Добрый день.


Очень нужна помощь.

Накидал простенькую бд для примера. Есть форма Form1, где в табличной части галочкой выбирается наименование нужного принтера и нажимается кнопка Печать отчета.

На предварительный просмотр вылезают 3 (тут одинаковых) отчета.

Подскажите пожалуйста, как сделать так, чтобы при нажатии на эту кнопку задавались принтеры в настройках печати отчетов так:

- отчеты R и M - задавался принтер, выбранный один галочкой из Form1 - RC17 либо RC33 (если выберут 2 сразу - с этим разберусь потом)

- отчет B - всегда по умолчанию был принтер из таблицы t_printer (RC21) и никогда не менялся

Посмотрел похожие темы, но что-то подходящее как-то не попадало. Впервые занялся этим вопросом, изучаю))

Заранее спасибо)))
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Вложения
Тип файла: rar test.rar (31.2 Кб, 4 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2018, 15:13
Ответы с готовыми решениями:

Автоматическое определение принтера для печати при отсутствии принтера по умолчанию
Вопрос. Постоянно таскаю с собой ноут, и приходится печатать на разных принтерах. Можно ли наладить...

Выбор принтера для офиса
Добрый день. Нужно купить принтер для офиса. Принтер должен быть цветным и лазерным. И самый...

Выбор принтера для печати
Какая переменная отвечает за текущий принтер, т.е. принтер на который работает DoCmd.OpenReport ?...

Выбор принтера для офиса
Сейчас стал вопрос о выборе нового принтера в офис. Принтер нужен лазерный, монохромный, чтоб...

17
822 / 453 / 79
Регистрация: 18.05.2016
Сообщений: 1,217
Записей в блоге: 4
23.11.2018, 15:59 2
VB.NET
1
2
3
Private Sub Report_Load()
Set Application.Printer = Application.Printers("название принтера")
End Sub
2
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
23.11.2018, 16:14  [ТС] 3
Цитата Сообщение от amd48 Посмотреть сообщение
Private Sub Report_Load()
Set Application.Printer = Application.Printers("название принтера")
End Sub
Я это встречал в одной из тем, но у меня немного другая ситуация вроде бы как))

Забыл добавить к вопросу, ни один из этих принтеров не является принтером по умолчанию в настройках принтеров.
0
Эксперт MS Access
26708 / 14388 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
23.11.2018, 17:17 4
Процедура на Кнопка0 изменена с учетом выбора принтера на подформе. Смотрите вложение
1
Вложения
Тип файла: rar testDimaster_v1.rar (26.2 Кб, 10 просмотров)
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
23.11.2018, 17:37  [ТС] 5
Цитата Сообщение от mobile Посмотреть сообщение
Процедура на Кнопка0 изменена с учетом выбора принтера на подформе
Спасибо вам)) но тут кажется что-то не так работает или я неправильно это вижу. Отчеты появляются, но в их настройках печати ничего не меняется...
0
Миниатюры
Выбор принтера через форму и перенастройка принтера для отчетов   Выбор принтера через форму и перенастройка принтера для отчетов  
Эксперт MS Access
26708 / 14388 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.11.2018, 00:10 6
Попробуйте
Visual Basic
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
Private Sub Кнопка0_Click()
    Dim rpt As Report, r
    With Me.ff_t_printer.Form.Recordset
        .MoveFirst
        Do Until .EOF
            If !Choice Then
                r = !Printer_name
                Exit Do
            End If
            .MoveNext
        Loop
        If r & "" = "" Then
            MsgBox "Не выбран ни один принтер"
            Exit Sub
        End If
    End With
    
    DoCmd.OpenReport "R", acViewPreview 'выбранный принтер из Form1
    Reports("R").Printer = Application.Printers(r)
    
    DoCmd.OpenReport "M", acViewPreview 'выбранный принтер из Form1
    Reports("M").Printer = Application.Printers(r)
 
    DoCmd.OpenReport "B", acViewPreview 'всегда один и тот же принтер из таблицы t_printer - RC21 (BALK)
    Reports("B").Printer = Application.Printers("RC21 (BALK)")
End Sub
1
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
24.11.2018, 00:20  [ТС] 7
Цитата Сообщение от mobile Посмотреть сообщение
Попробуйте
что-то не меняется ничего... Я конечно могу ошибаться, но может дело в условии?

Visual Basic
1
2
3
4
If !Choice Then
                r = !Printer_name
                Exit Do
            End If
Хотя может быть из-за того, что не на работе тестирую... Придется дождаться понедельника...
0
Эксперт MS Access
26708 / 14388 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.11.2018, 02:12 8
Лучший ответ Сообщение было отмечено Dimasterfrom4e как решение

Решение

Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
что-то не меняется ничего...
У меня конечно, нет Ваших специализированных принтеров, поэтому для экспериментов добавил в табличку системные виртуальные принтеры. По окончании работы процедуры кнопки в Immediate распечатываются назначенные принтеры. Их имена соответствуют выбранным из таблицы
В процедуре перед End Sub
Visual Basic
1
2
3
4
    Debug.Print "R", Reports("R").Printer.DeviceName
    Debug.Print "M", Reports("M").Printer.DeviceName
    Debug.Print "B", Reports("B").Printer.DeviceName
End Sub
В Immediate
Visual Basic
1
2
3
R             Отправить в OneNote 2010
M             Отправить в OneNote 2010
B             Microsoft XPS Document Writer
1
Вложения
Тип файла: rar testDimaster_v1.rar (30.6 Кб, 3 просмотров)
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
24.11.2018, 11:15  [ТС] 9
Цитата Сообщение от mobile Посмотреть сообщение
Их имена соответствуют выбранным из таблицы
В процедуре перед End Sub
У меня спотыкается на ошибке процедуры. Наверно лучше не дома тестировать))
0
Миниатюры
Выбор принтера через форму и перенастройка принтера для отчетов  
Эксперт MS Access
26708 / 14388 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.11.2018, 11:24 10
Лучший ответ Сообщение было отмечено Dimasterfrom4e как решение

Решение

Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
У меня спотыкается на ошибке процедуры.
Видимо неверное название принтера. В Module1 есть крохотная процедура namePrinters для вывода имеющихся принтеров. Она распечатает их имена в Immediate. Внесите эти имена в таблицу t_printer и выберите любое из них в форме.
Visual Basic
1
2
3
4
5
6
Sub namePrinters()
    Dim p As Printer
    For Each p In Application.Printers
        Debug.Print p.DeviceName
    Next
End Sub
1
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
24.11.2018, 11:38  [ТС] 11
Цитата Сообщение от mobile Посмотреть сообщение
Внесите эти имена в таблицу t_printer и выберите любое из них в форме.
Ура, получилось!!!)))

Да, названия принтеров другие на домашнем ноуте) На рабочих принтерах протестирую в понедельник, думаю, все отлично будет))

Спасибо вам большое за помощь!!!)))

Небольшой вопрос дополнительно - подскажите пожалуйста, как сделать так, чтобы при открытии формы галочка всегда выставлялась напротив одного определенного принтера?? Вроде как неофициального принтера по умолчанию))
0
Эксперт MS Access
26708 / 14388 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.11.2018, 12:06 12
Лучший ответ Сообщение было отмечено Dimasterfrom4e как решение

Решение

Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
как сделать так, чтобы при открытии формы галочка всегда выставлялась напротив одного определенного принтера?? Вроде как неофициального принтера по умолчанию))
Вариантов много. Например на событии загрузки формы задаем
Visual Basic
1
2
3
4
Private Sub Form_Load()
    CurrentDb.Execute "update t_printer set Choice=False"
    CurrentDb.Execute "update t_printer set Choice=True Where Printer_name='RC21 (BALK)'"
End Sub
Или сделать в таблице поле "умолчательного"значения, потом искать его и обновлять таблицу при загрузке. Или задать пользовательское свойство, или сохранять в текстовом файле, или в реестре. Потом считывать и менять. Вариантов много
1
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
24.11.2018, 12:19  [ТС] 13
Цитата Сообщение от mobile Посмотреть сообщение
Или сделать в таблице поле "умолчательного"значения, потом искать его и обновлять таблицу при загрузке.
Спасибо вам)) наверно лучше добавлю такое поле с логическим значением по умолчанию. Пригодится в случае, если с принтером что-то случится, достаточно будет галочку переставить и не лезть в код



Цитата Сообщение от mobile Посмотреть сообщение
Или задать пользовательское свойство, или сохранять в текстовом файле, или в реестре.
а вот с этим я еще не знаком)) может подскажете живые примеры для развития?)) или ссылку на подходящую тему по возможности?
0
Эксперт MS Access
26708 / 14388 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.11.2018, 12:53 14
Примеров много, даже искать непросто. Например по свойствам. Хотим сделать свойство, сохраняющее какой-то текст. Пусть свойство будет самой БД
Visual Basic
1
2
3
4
Dim prp As Property, db As DAO.Database
Set db = CurrentDb
Set prp = db.CreateProperty("ИмяСвойства", dbText, "Какой-то текст")
db.Properties.Append prp
Теперь это свойство доступно в любом модуле. Можно менять его значение. Считывать его так
Visual Basic
1
Переменная=Currentdb.Properties("ИмяСвойства")
Для работы с текстовыми файлами есть собственные средства ВБА (инструкция Open). Или можно использовать FSO (File System Object). Есть некоторое описание у Бурундука в "Написании статей". Или искать в инете руководство по Automation. Да и у нас на форуме полно.

Считывать и сохранять данные в реестре Windows - методы RegWrite и RegRead также от FSO. Также есть примеры на форуме
1
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
24.11.2018, 13:13  [ТС] 15
Цитата Сообщение от mobile Посмотреть сообщение
Для работы с текстовыми файлами есть собственные средства ВБА (инструкция Open). Или можно использовать FSO (File System Object). Есть некоторое описание у Бурундука в "Написании статей". Или искать в инете руководство по Automation. Да и у нас на форуме полно.
Спасибо, я посмотрю примеры и поизучаю в ближайшее время))
0
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
24.11.2018, 13:50  [ТС] 16
Цитата Сообщение от mobile Посмотреть сообщение
Или сделать в таблице поле "умолчательного"значения, потом искать его и обновлять таблицу при загрузке.
Что-то такое накидал. При загрузке и после вывода на печать галочка напротив выбранного принтера через форму сбрасывается согласно галочке в поле Ch_default в таблице t_printer.

Я тут подумал и создал еще одно логическое поле B_default. Это галочка напротив принтера по-умолчанию для отчета B, у которого постоянный один и тот же принтер.

Подскажите пожалуйста, как написать это правильно в коде? Чтобы не лезть также в код в случае поломки принтера, потому что принтер пока прописан вручную здесь


Visual Basic
1
Reports("B").Printer = Application.Printers("Microsoft XPS Document Writer") ' ("RC21 (BALK)")

, а просто добавить например новый принтер в таблицу и переставить галочку? Пробовал Dlookup в таком формате, но чего-то явно не хватает.... Вопрос-то новый для меня, не хватает навыков...((


Visual Basic
1
b = Dlookup("Printer_name","t_printer", [B_default]=true)

...Думаю, это последний вопрос здесь)) понимаю, что поднадоел...))
0
Вложения
Тип файла: rar testDimaster_v2.rar (49.9 Кб, 3 просмотров)
Модератор
Эксперт MS Access
3584 / 2038 / 504
Регистрация: 12.06.2016
Сообщений: 5,205
24.11.2018, 14:00 17
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
Пробовал Dlookup в таком формате, но чего-то явно не хватает....
Visual Basic
1
b = Dlookup("Printer_name","t_printer", [B_default]=true)
Кавычек, разумеется.
Visual Basic
1
b = Dlookup("Printer_name", "t_printer", "[B_default]=true")
1
8 / 7 / 0
Регистрация: 27.09.2015
Сообщений: 834
24.11.2018, 14:06  [ТС] 18
Цитата Сообщение от Capi Посмотреть сообщение
Кавычек, разумеется.

Совсем вылетели из головы, спасибо вам большое!!!))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2018, 14:06

Выбор принтера для фотопечати
Скажите пожалуйста, какая печать более стойкая к выцветанию, струйная или лазерная? И вообще...

Выбор принтера/МФУ для дома
Нужен принтер/МФУ для дома. Буду печатать рефераты и всякие отчеты. Иногда будет цветная печать(не...

Выбор принтера для сувенирной продукции
Всем привет! Не судите строго, пыталась найти тут информацию, но возможно не внимательно искала....

Выбор принтера для печати на пленке
Доброго времени суток! Необходим принтер для ч/б печати на прозрачной пленке в маленьких объемах....

Выбор принтера для фото на документы
Собственно из названия темы все уже ясно. Нужно выбрать принтер для печати фото на документы....

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.