Сбивается принтер в отчете adp MS Access 2007

ALOTE
Дата: 11.11.2009 17:03:47
Доброго времени суток!
Тут такая проблема - есть отчет который должен печататься на принтер не по умолчанию. Открываю отчет в режиме конструктора, выставляю нужный принтер, нажимаю "сохранить", закрываю отчет. Открываю опять и вуаля! Опять стоит принтер по умолчанию. Притом самое мистическое в этом, что после пары сотен попыток, иногда,нужные мне настройки все таки сохраняются. Как эту сволочь научить печатать туда куда мне надо, а не туда куда он хочет?
develed
Дата: 11.11.2009 17:38:22
В mdb использую это. Думаю подойдет.

Public Sub PrintReport(stDocName As String, Optional strPrinterName As String)
'Error-handler inserted on 16.10.2008 at 16:01 by
'Процедура печати отчета.
'stDocName - имя отчета.
'strPrinterName - имя принтера. Если не указан, то принтер по умолчанию.

Dim rpt As Report
On Error GoTo Error_mark

If IsNull(strPrinterName) = True Or Len(strPrinterName) = 0 Then
If IsNull(Form_frmЛокальныеНастройки.ПринтерПоУмолчанию) = False Then strPrinterName = Form_frmЛокальныеНастройки.ПринтерПоУмолчанию
End If

If PrinterDefault(strPrinterName) = False Then
MsgBox "Принтер " & strPrinterName & " не установлен!", vbCritical, conVersion
Exit Sub
End If

DoCmd.Echo False

DoCmd.OpenReport stDocName, View:=acPreview, WindowMode:=acHidden
With Reports(stDocName)
Set .Printer = Application.Printers(strPrinterName)
End With

'Печать.
DoCmd.OpenReport stDocName, acNormal
DoCmd.Close

Exit_mark:
DoCmd.Echo True
Exit Sub

Error_mark:
ReportError "PrintReport", Err.Number, Err.Source, Err.Description
Resume Next
End Sub
ALOTE
Дата: 11.11.2009 17:48:42
develed,

Спасибо, попробую так, но вообще хочется обойтись чисто настроечными методами, а то файл бд один и несколько юзеров его пользуют одновременно притом у каждого свой принтер. Конечно это можно обойти, например храня название принтера в файле на локальной машине, или создать таблицу с данными по юзерам и принтерам, но честно говоря не хотелось бы (хотя боюсь что придется)
шм&#1086
Дата: 11.11.2009 17:59:09
DoCmd.RunCommand acCmdPrint

должно подойти под индивидума с его настройками по умолчанию
develed
Дата: 11.11.2009 18:00:33
Можно попробовать в настройках выбрать "другой принтер" и так далее. Но часто сбивается и если этого принтера нет в системе перенастраивать.
Проще иметь локальную табличку с именем принтера. Можно оперативно менять, кстати.
При загрузке пробегаемся по принтерам, если есть, ну и ладно, если нет предлагаем выбрать принтер по умолчанию. Очень помогает при обновлении версии у юзеров. Все само и "настаивается". Сложности никакой, зато удобств. :)
ALOTE
Дата: 11.11.2009 19:09:15
develed,

кстати, очень спасибо, отличная идея, а то вечно приходтся к ним бегать принтеры переподключать. Только думаю табличку не локальную сделаю, а на сервере и в ней уже править буду по необходимости.
Еще раз спасибо за отличную идею.
шм&#1086
Дата: 11.11.2009 19:19:30
ALOTE,

в подавляющем большинстве случаев надо оставить выбор принтера за пользователем
develed
Дата: 23.11.2009 10:52:50
Пишу в этой ветке, чтобы не плодить новую.
Коротко: модифицирую функцию PrintReport (в начале топика), для печати нескольких листов. Неожиданно начал проявляться такой глюк - все отчеты печатаются в вертикальном виде. Из просмотра печатаются как надо. Поискал на форуме, советы не помогают. Поэтому хочу задавать принтеру ориентацию программно, но для каждого отчета она своя. Вопрос: можно ли вытащит из свойств отчета его ориентацию для передачи принтеру? В списке свойств что-то не нашел.
develed
Дата: 23.11.2009 18:09:15
Помучил пример PrtDevMode из хелпа, но почему-то intOrientation = 0. Автозамену отключил.
Как же это побороть. Неужели придется делать таблицу и прописывать в ней настройки на каждый отчет?
Владимир Саныч
Дата: 23.11.2009 18:18:44