powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с выводом на печать
25 сообщений из 104, страница 2 из 5
Проблема с выводом на печать
    #40044733
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005,
проект большой и старый только модулей класса в районе 50 - у вас все нормально, эти модули печати у меня в модуле класса , вот здесь 2 программки для печати и для иллюстрации одна программка печатающая, в зависимости от отчета настройки меняются
ничего не редактировал - представляю по принципу как есть
Код: 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.
Private v1d%, Otb0r%, Rep0rtName$

Private Sub PrtSv(rptname As String, prtDuplex As Long, Kiosk As Integer, LefM As Integer, TopM As Integer, vibor As Boolean, Lotok As Long, ByVal PrintQ As Long, Argument%, Optional fltr$ = "[Kiosk]=")
  If vibor Then DoCmd.OpenREport rptname, acViewPreview, , fltr & Kiosk, , Argument Else DoCmd.OpenREport rptname, acViewPreview, , , acHidden, Argument
With Reports(rptname).Printer
    If prtDuplex = acPRDPVertical Then .Orientation = acPRORLandscape Else .Orientation = acPRORPortrait
        .PaperSize = acPRPSA4
        .LeftMargin = LefM
        .TopMargin = TopM
        .Duplex = prtDuplex
        .PrintQuality = PrintQ
        .PaperBin = Lotok
End With
DoCmd.OpenREport rptname, acViewNormal
DoCmd.Close acReport, rptname, acSaveNo
End Sub
Private Sub CommonPrint()
Dim x%, i%, z%, prt As Report
x = frm.Copyes
    Set prt = Reports.Item(Rep0rtName)
    With prt.Printer
        .Orientation = acPRORPortrait
        .PaperSize = acPRPSA4
        .PrintQuality = acPRPQHigh
    End With
     For z = 1 To x
        prt.Application.DoCmd.PrintOut acPrintAll
    Next z
     DoCmd.Close acReport, Rep0rtName
Set prt = Nothing

End Sub

Private Sub bPrint_Click()
Dim Lotok&, Dupl&, Dup As Boolean
 Lotok = frm.fldSpis1: Dup = frm.dflg1

If Otb0r = 1 Then frm.Dirty = False
Select Case Rep0rtName
Case "RepRaspr4_Igr", "rptActGroup"
    If Otb0r = 1 Then PrintInvoices Else CommonPrint
Case "RptRev1", "rptPriceKiosks2"
'  DoCmd.Close acReport, rptname
  If Dup Then Dupl = acPRDPHorizontal Else Dupl = acPRDPSimplex
    Call PrtSv(Rep0rtName, Dupl, 1, 0, 0, False, Lotok, acPRPQDraft, v1d)
Case "RptRasklad"
  Dupl = acPRDPVertical ' пока нет необходимости такой печатать альбомы на одной стороне, а когда надо, то придется ориентацию указывать явно
    Call PrtSv(Rep0rtName, Dupl, 1, 150, 100, False, Lotok, acPRPQDraft, v1d)
Case "RptRev2"
  If Dup Then Dupl = acPRDPHorizontal Else Dupl = acPRDPSimplex
    Call PrtSv(Rep0rtName, Dupl, 0, 2200, 300, False, Lotok, acPRPQMedium, v1d)
Case Else
    CommonPrint
End Select
End Sub


как видно Docmd.Printout используется только для печати в обычном виде - даже копии ему не доверяются, хотя настройка такая в нем есть, а печать с настройками происходит по другому (вызов отчета в нормальном виде).
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40044764
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

ругается на строчку "If Otb0r = 1 Then PrintInvoices Else CommonPrint" точнее "PrintInvoices"

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Sub Кн_Печать_1_От_Click()
Dim Lotok&, Dupl&, Dup As Boolean
 Lotok = frm.fldSpis1: Dup = frm.dflg1

If Otb0r = 1 Then frm.Dirty = False
Select Case Rep0rtName
Case "RepRaspr4_Igr", "rptActGroup"
    If Otb0r = 1 Then PrintInvoices Else CommonPrint
Case "RptRev1", "rptPriceKiosks2"
'  DoCmd.Close acReport, rptname
  If Dup Then Dupl = acPRDPHorizontal Else Dupl = acPRDPSimplex
    Call PrtSv(Rep0rtName, Dupl, 1, 0, 0, False, Lotok, acPRPQDraft, v1d)
Case "RptRasklad"
  Dupl = acPRDPVertical ' пока нет необходимости такой печатать альбомы на одной стороне, а когда надо, то придется ориентацию указывать явно
    Call PrtSv(Rep0rtName, Dupl, 1, 150, 100, False, Lotok, acPRPQDraft, v1d)
Case "RptRev2"
  If Dup Then Dupl = acPRDPHorizontal Else Dupl = acPRDPSimplex
    Call PrtSv(Rep0rtName, Dupl, 0, 2200, 300, False, Lotok, acPRPQMedium, v1d)
Case Else
    CommonPrint
End Select
End Sub

...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40044783
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005, этой функции в примере нет.
как может быть и ещё чего - показан работающий в проекте, пример - для того чтоб сделали по подобию, взяв то, что понравится.
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40044805
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

нееее
я его воткнул полностью. как Вы выложили так и вставил, только имя кнопки поменял
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40044914
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

А какие у Вас библиотеки включены, как у меня или ещё что-то, может в них дело?!
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40044958
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005, такие.
ну блин! давненько скрины не вытаскивал
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40044987
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

А У Вас какой офис, а то чёт у меня не все библиотеки в наборе есть, а некоторые старой версии (12)
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40044989
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что ещё обнаружил
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40044990
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что бы это значило?
Причём это относится ко всем строчкам "With"
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045039
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
программа писалась в Аксесс 2007, но сейчас у меня 13-й - поэтому библиотеки подхватились другой версии.
Wawan2005
Что бы это значило?
Причём это относится ко всем строчкам "With"

сделайте останов на End with-увидите что все нормально.
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045079
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

Ну да, но почему тогда не принимается системой во внимание?
а печатает с настройками "по умолчанию" принтера ?
Попробовал изменить настройки по умолчанию напечатал как надо, но нужно другие доки печатать тогда там геморрой-(
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045081
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005, у Гетца есть утилитка, в которой можно посмотреть что принтер поддерживает. очень помогает в самом начале знакомства с принтером.
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045084
Eugene-LS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wawan2005
а печатает с настройками "по умолчанию" принтера ?

не совсем понимаю что у вас там происходит, но может вам поможет такая штука :
Модуль переустановки "принтерных" настроек всех отчетов под текущий принтер по умолчанию
авторСитуация:
.... у разработчика (отчетов), допустим был:
HP LaserJet с EconoMode = OFF, а у пользователя некий: Epson Stylus COLOR и уже EconoMode = ON
...и не смотря на это "ON" - отчеты все равно расходуют чернила "На полную катушку". (параметры печати сохраняются в отчете)

На эту тему сочинилось такое решение:

Код: 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.
131.
'--------------------------------------------------------------------
' Module    : modReportsPrinterReset
' Author    : es
' Date      : 17.01.2004
'--------------------------------------------------------------------
'Модуль ПЕРЕУСТАНОВКИ "принтерных" настроек всех отчетов
'под текущий принтер по умолчанию т.е. с настроек принтера разработчика
'на настройки принтера пользователя
'--------------------------------------------------------------------
Option Compare Database
Option Explicit

Private Type str_DEVMODE
    RGB As String * 94
End Type
'--------------------------------------------------------------------
Private Type type_DEVMODE
    strDeviceName As String * 16
    intSpecVersion As Integer
    intDriverVersion As Integer
    intSize As Integer
    intDriverExtra As Integer
    lngFields As Long
    intOrientation As Integer
End Type

Public Sub esResetAllReportsToDefPrinter()
'Смена у всех отчетов настроек принтера с "зашитых внутри отчета"
' на текущий принтер по умолчанию и его настройки
' затирает только данные по принтеру - поля и ориентация остаются прежними
'--------------------------------------------------------------------
Dim dbs As Database, ctr As Container, doc As Document
Dim objReport As Report
Dim OldOrientation As Integer 'Для запоминания старой ориентации _
   т.к. она (ориентация) входит в Свойство PrtDevMode отчета _
   кое собираемся переписывать по новой
    
On Error GoTo esResetAllReportsToDefPrinterErr
'Выключ. отображение процесса
    Application.Echo False
    Set dbs = CurrentDb
    Set ctr = dbs.Containers!Reports
    'цикл по всем отчетам
    For Each doc In ctr.Documents
        'открытие отчета в режиме редакции
        DoCmd.OpenReport doc.name, acViewDesign
        Set objReport = Reports(doc.name)
        
        'отображение инфы о тек. отчете в Status Bar
        SysCmd acSysCmdSetStatus, "Обрабатываю Отчет - " & doc.name
        
        'Запоминаем старую ориентацию для последующего восстановления (см. функцию ниже)...
        OldOrientation = esReportOrientationSetGet(objReport, True)
        'Зачистка данных о принтере в отчете
        objReport.PrtDevMode = Null
        objReport.PrtDevNames = Null
        'Закрытие отчета с сохранением "пустого принтера"
        DoCmd.Close acReport, doc.name, acSaveYes

        'Если до этого у отчета была ориентация LandsCape
        '   то восстанавливаем ее, причем отчет уже "берет"
        '   принтер по умолчанию, при повторном открытии
        If OldOrientation = 2 Then
            'открытие отчета в режиме редакции
            DoCmd.OpenReport doc.name, acViewDesign
            Set objReport = Reports(doc.name)
            
            'Debug.Print objReport.Name
            'Восстанавливаем LandsCape ориентацию (см. функцию ниже)
            '   если была Portrait то восстанавливать нет необходимости
            '   т.к. она уже установлена по умолчанию
            esReportOrientationSetGet objReport
            'Закрытие отчета с сохранением
            DoCmd.Close acReport, doc.name, acSaveYes
        End If
    Next doc
    SysCmd (acSysCmdClearStatus)
'Включаем отображение процесса на экране обратно
    Application.Echo True
    Exit Sub
esResetAllReportsToDefPrinterErr:
    Application.Echo True
    MsgBox "Процедура [esResetAllReportsToDefPrinter] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number & vbCrLf & _
    "При обработке Отчета - " & doc.name, vbCritical
End Sub

'--------------------------------------------------------------------
Private Function esReportOrientationSetGet(objCurReport As Report, _
                    Optional GetOnly As Boolean) As Integer
'Вспомогательная функция ,в зависимости от параметра GetOnly,
'ИЛИ :
'Возвращает код ориентации отчета
'   Portrait = 1
'   LandsCape= 2
'ИЛИ если GetOnly=False (по умолчанию):
'   делает ориентацию открытого отчета = LandsCape
'--------------------------------------------------------------------

Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String

On Error GoTo esReportOrientationSetGetErr
    If Not IsNull(objCurReport.PrtDevMode) Then
        strDevModeExtra = objCurReport.PrtDevMode
        DevString.RGB = strDevModeExtra
        LSet DM = DevString
        esReportOrientationSetGet = DM.intOrientation
        'Если только задано параметром то вносим изменения в отчет
        If GetOnly = False Then
            'Меняем ориентацию  = LandsCape
            DM.intOrientation = 2
            LSet DevString = DM
            Mid(strDevModeExtra, 1, 94) = DevString.RGB
            objCurReport.PrtDevMode = strDevModeExtra
        End If
    End If
    Exit Function
esReportOrientationSetGetErr:
    If GetOnly = True Then
        strDevModeExtra = "При определении ориентации Отчета - " & _
        objCurReport.name
    Else
        strDevModeExtra = "При установке ориентации Отчета - " & _
        objCurReport.name
    End If
    MsgBox "Процедура [esReportOrientationSetGet] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number & vbCrLf & _
    strDevModeExtra, vbCritical
End Function



...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045123
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugene-LS,

Спасибо, за вариант, выйду на работу попробую.

P.S.: А как суда при необходимости, добавить "Duplex = acPRDPHorizontal", но это после проверки.
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045143
Eugene-LS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wawan2005
А как суда при необходимости, добавить "Duplex = acPRDPHorizontal", но это после проверки.

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

Надеюсь поможет, но не факт.
Что то у вас там "не так", ни как ни пойму что ...
Бывает ...
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045299
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

А что за утилитка, не подскажите имя, я бы её пошукал по просторам инета!
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045379
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005,
у гетца - 9-я глава 1-й том.
приложение к главе 9
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40045645
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

Спасибо, бегло глянул, там ППЦ-))), попробую разобраться.
P.S.:Пока нет времени, пульт охраны лёг, подымаем, как всё восстановим так продолжу.
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40079635
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,

Добрался я таки до базы и ка всегда не без приключений.

Во первЫх строках своего письма хочу сказать спасибо, так как выбирать принтер по умолчанию у меня получилось, вот кусок кода:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
'Принтер
Private Sub П_Выбор_Принт_AfterUpdate()
    Set Application.Printer = _
     Application.Printers.Item(Me.П_Выбор_Принт.Value)
    MsgBox "Принтер по умолчанию: " & Me.П_Выбор_Принт
End Sub
Private Sub Form_Load()
    Dim prt As Printer
    For Each prt In Printers
        Me.П_Выбор_Принт.AddItem prt.DeviceName
    Next prt
    Me.П_Выбор_Принт = Application.Printer.DeviceName
End Sub



А вот конкретно двухстороннюю печать выдернуть у Гетца ника не получается, вот попробовал кусок но он матерится на строчку:
Код: sql
1.
Set rpt = Reports(mstrName)

но по правде говоря он и в оригинале на неё матерился я так и не понял что такое
Код: sql
1.
Reports(mstrName)

а точнее
Код: vbnet
1.
(mstrName)

получилось вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub П_Выбор_Печать_AfterUpdate()
    Dim rpt As Report
    Set rpt = Reports(mstrName)
    If П_Выбор_Печать = "Односторонняя" Then
        With rpt.Printer
            .Duplex = acPRDPSimplex
        End With
    Else
        With rpt.Printer
            .Duplex = acPRDPHorizontal 
        End With
    End If
End Sub


подскажите, пожалуйста, что у меня не так (намёки на голову не писать я это и сам знаю).
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40079637
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005
mstrName
тут по идее имя твоего отчета, который ты хочешь распечатать
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40079638
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

Упсссс.
А мне печать отчёта не нужна, мне нужно чтобы установки применились ко всем, в последствии, открываемым формам, ну и может быть когда ни-будь к отчётам.

Не подскажите как поправить?
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40079644
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

Попробовал вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub П_Выбор_Печать_AfterUpdate()
    Dim rpt As Forms
    Set rpt = Forms
    If П_Выбор_Печать = "Односторонняя" Then
       Printer.Duplex = acPRDPSimplex
    Else
       Printer.Duplex = acPRDPHorizontal ' - acPRDPVertical rpt.
    End If
End Sub


материться перестал но и не ставит двухстороннюю печать принтера -(
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40079648
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005,

ну, во-первых я формы никогда не печатал, суп ем ложкой а котлеты вилкой...
Во-вторых все проблемы с двусторонней печатью решал на уровне принтера, файл, печать, выбираешь принтер и в его свойствах ставил галочку двусторонняя печать...
Если это частая операция, то можно установить еще один экземпляр принтера, обозвать его типа Canon_Duplex и включить на нем галочку двусторонняя печать на постоянку...
Послал на Canon - односторонняя печать
Послал на Canon_Duplex - двусторонняя печать
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40079655
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

не совсем подходит, так как эта база уже в 6 районах, а у нас у всех разные принтеры, у некоторых вообще двухсторонку не поддерживают
по этому я сделал уже выбор принтера он работает, выбирает нужный принтер, осталось только с дуплексом разобраться
Я вот так попробовал, вставить
Код: vbnet
1.
Application.Printer.Duplex = acPRDPHorizontal 

тоже не реагирует

Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub П_Выбор_Принт_AfterUpdate()
    Set Application.Printer = _
     Application.Printers.Item(Me.П_Выбор_Принт.Value)
     Application.Printer.Duplex = acPRDPHorizontal
    MsgBox "Принтер по умолчанию: " & Me.П_Выбор_Принт
End Sub
...
Рейтинг: 0 / 0
Проблема с выводом на печать
    #40079688
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005,
если отправите на печать конкретный отчет(форму) по имени mstrName, для которых вы создаете объект принтер- в этой же процедуре - дуплекс должен быть (если принтер поддерживает и он есть физически и готов к работе)
...
Рейтинг: 0 / 0
25 сообщений из 104, страница 2 из 5
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с выводом на печать
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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