Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: Проблема с выводом на печать  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Wawan2005,
проект большой и старый только модулей класса в районе 50 - у вас все нормально, эти модули печати у меня в модуле класса , вот здесь 2 программки для печати и для иллюстрации одна программка печатающая, в зависимости от отчета настройки меняются
+ ничего не редактировал - представляю по принципу как есть
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 используется только для печати в обычном виде - даже копии ему не доверяются, хотя настройка такая в нем есть, а печать с настройками происходит по другому (вызов отчета в нормальном виде).
12 фев 21, 09:54    [22279879]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
alecko,

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

+
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
12 фев 21, 11:41    [22279931]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Wawan2005, этой функции в примере нет.
как может быть и ещё чего - показан работающий в проекте, пример - для того чтоб сделали по подобию, взяв то, что понравится.
12 фев 21, 12:36    [22279964]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
alecko,

нееее
я его воткнул полностью. как Вы выложили так и вставил, только имя кнопки поменял

Сообщение было отредактировано: 12 фев 21, 13:29
12 фев 21, 13:36    [22279998]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
alecko,

А какие у Вас библиотеки включены, как у меня или ещё что-то, может в них дело?!

К сообщению приложен файл. Размер - 66Kb


Сообщение было отредактировано: 12 фев 21, 17:43
12 фев 21, 17:50    [22280172]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Wawan2005, такие.
ну блин! давненько скрины не вытаскивал

К сообщению приложен файл. Размер - 148Kb


Сообщение было отредактировано: 12 фев 21, 20:17
12 фев 21, 20:23    [22280250]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
alecko,

А У Вас какой офис, а то чёт у меня не все библиотеки в наборе есть, а некоторые старой версии (12)
12 фев 21, 21:17    [22280283]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
Вот что ещё обнаружил

К сообщению приложен файл. Размер - 92Kb
12 фев 21, 21:24    [22280286]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
Что бы это значило?
Причём это относится ко всем строчкам "With"

К сообщению приложен файл. Размер - 10Kb


Сообщение было отредактировано: 12 фев 21, 21:19
12 фев 21, 21:25    [22280287]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
программа писалась в Аксесс 2007, но сейчас у меня 13-й - поэтому библиотеки подхватились другой версии.
Wawan2005
Что бы это значило?
Причём это относится ко всем строчкам "With"

сделайте останов на End with-увидите что все нормально.
13 фев 21, 11:13    [22280413]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
alecko,

Ну да, но почему тогда не принимается системой во внимание?
а печатает с настройками "по умолчанию" принтера ?
Попробовал изменить настройки по умолчанию напечатал как надо, но нужно другие доки печатать тогда там геморрой-(
13 фев 21, 16:32    [22280487]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Wawan2005, у Гетца есть утилитка, в которой можно посмотреть что принтер поддерживает. очень помогает в самом начале знакомства с принтером.
13 фев 21, 16:47    [22280493]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Eugene-LS
Member

Откуда: РФ
Сообщений: 63
Wawan2005
а печатает с настройками "по умолчанию" принтера ?

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


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

'--------------------------------------------------------------------
' 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


13 фев 21, 16:57    [22280497]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
Eugene-LS,

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

P.S.: А как суда при необходимости, добавить "Duplex = acPRDPHorizontal", но это после проверки.

Сообщение было отредактировано: 13 фев 21, 22:19
13 фев 21, 22:24    [22280622]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Eugene-LS
Member

Откуда: РФ
Сообщений: 63
Wawan2005
А как суда при необходимости, добавить "Duplex = acPRDPHorizontal", но это после проверки.

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

Надеюсь поможет, но не факт.
Что то у вас там "не так", ни как ни пойму что ...
Бывает ...
13 фев 21, 23:35    [22280651]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
alecko,

А что за утилитка, не подскажите имя, я бы её пошукал по просторам инета!

Сообщение было отредактировано: 14 фев 21, 22:08
14 фев 21, 22:14    [22280874]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Wawan2005,
у гетца - 9-я глава 1-й том.
приложение к главе 9
15 фев 21, 11:01    [22280990]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
alecko,

Спасибо, бегло глянул, там ППЦ-))), попробую разобраться.
P.S.:Пока нет времени, пульт охраны лёг, подымаем, как всё восстановим так продолжу.
16 фев 21, 08:17    [22281426]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
alecko,

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

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

+
'Принтер
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


А вот конкретно двухстороннюю печать выдернуть у Гетца ника не получается, вот попробовал кусок но он матерится на строчку:
Set rpt = Reports(mstrName)
но по правде говоря он и в оригинале на неё матерился я так и не понял что такое
Reports(mstrName)
а точнее
(mstrName)
получилось вот так:
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

подскажите, пожалуйста, что у меня не так (намёки на голову не писать я это и сам знаю).
23 июн 21, 16:32    [22339253]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Wawan2005
mstrName
тут по идее имя твоего отчета, который ты хочешь распечатать
23 июн 21, 16:40    [22339257]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
vmag,

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

Не подскажите как поправить?

Сообщение было отредактировано: 23 июн 21, 16:36
23 июн 21, 16:45    [22339261]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
vmag,

Попробовал вот так:
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

материться перестал но и не ставит двухстороннюю печать принтера -(
23 июн 21, 17:16    [22339275]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Wawan2005,

ну, во-первых я формы никогда не печатал, суп ем ложкой а котлеты вилкой...
Во-вторых все проблемы с двусторонней печатью решал на уровне принтера, файл, печать, выбираешь принтер и в его свойствах ставил галочку двусторонняя печать...
Если это частая операция, то можно установить еще один экземпляр принтера, обозвать его типа Canon_Duplex и включить на нем галочку двусторонняя печать на постоянку...
Послал на Canon - односторонняя печать
Послал на Canon_Duplex - двусторонняя печать

Сообщение было отредактировано: 23 июн 21, 17:16
23 июн 21, 17:24    [22339282]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
Wawan2005
Member

Откуда: Волгоград
Сообщений: 466
vmag,

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

Private Sub П_Выбор_Принт_AfterUpdate()
    Set Application.Printer = _
     Application.Printers.Item(Me.П_Выбор_Принт.Value)
     Application.Printer.Duplex = acPRDPHorizontal
    MsgBox "Принтер по умолчанию: " & Me.П_Выбор_Принт
End Sub
23 июн 21, 17:41    [22339292]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с выводом на печать  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 849
Wawan2005,
если отправите на печать конкретный отчет(форму) по имени mstrName, для которых вы создаете объект принтер- в этой же процедуре - дуплекс должен быть (если принтер поддерживает и он есть физически и готов к работе)
23 июн 21, 21:29    [22339437]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить