powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Печать выбранного экземпляра отчета
25 сообщений из 31, страница 1 из 2
Печать выбранного экземпляра отчета
    #39511336
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, здравствуйте.
Есть проблема.
Открывается отчет как экземпляр и на экране их может быть несколько.
Нужно распечатать активный экземпляр.
Это и не получается.
При нажатии кнопки печати я в коде нахожу нужный экземпляр,
а как отправить на печать отчет именно с этими данными.

В последствии нужно будет и в ПДФ выбрасывать, и там та же беда

DoCmd.OutputTo acOutputReport, MyName, acFormatPDF, MyFile, True

как сюда впихнуть невпихуемое?

Акс 2007 sp3
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511449
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,
Не пробовал, но по идее должно работать, если сначала активировать нужный экземпряр
Код: vbnet
1.
rptX.SetFocus


А потом печатать/выводить в PDF обычным образом.
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511478
`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
`
Гость
ИгортанПри нажатии кнопки печати я в коде нахожу нужный экземпляр,
а как отправить на печать отчет именно с этими данными.


Код: vbnet
1.
rpt.Print


?
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511597
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан, чтобы напечатать именно с этими данными открываете второй раз именно этот отчет в нормальном режиме (т.е. на печать). имена у них должны быть разные-присваиваются в процессе создания модуля класса.
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511607
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinНе пробовал, но по идее должно работать, если сначала активировать нужный экземпряр
Код: vbnet
1.
rptX.SetFocus



туда рвался изначально.
Наверное нужно уточнить чуток.
Отчет открывается в режиме просмотра (не отчета).
В этом состоянии у репорта нету свойства SetFocus.
Пробовал и через установки фокуса на контрол, та же беда.
Сделал его открытие в режиме отчета. Да, тут уже можно поиграть, правда данными не заполняется
но думаю это можно было бы решить, но не красиво на экране получается. Тыкнул в облать репорта и область выделяется...

`
Код: vbnet
1.
rpt.Print


тоже не прокатило..

Вчера пришла идея (как всегда перед тем как заснуть), наверное придется сделать дубль этого отчета и открывать его обычным экземпляром сразу на печать, правда у меня используются временная заливка данных в темр таблицу для источника...
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511615
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleckoИгортан, чтобы напечатать именно с этими данными открываете второй раз именно этот отчет в нормальном режиме (т.е. на печать). имена у них должны быть разные-присваиваются в процессе создания модуля класса.

О!
По ходу вы меня опередили)))

про модуль класса не совсем понял... т.е. копировать этот репорт программно просто под другим именем и потом открывать его на печать?
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511693
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанОткрывается отчет как экземпляр и на экране их может быть несколько.
Нужно распечатать активный экземпляр.
Это и не получается.
При нажатии кнопки печати я в коде нахожу нужный экземпляр,
а как отправить на печать отчет именно с этими данными.
формируйте отчет в ДОС или НТМ формате
не обязательно ведь иметь его в аксесс-формате

хотя бы видимо сделала форму с контролируемой строкой итогов например
ооо Крона 12345,22 12354,22......
ооо Рога и копыта .......
тоо антилопа Гну .....

по какой строке кликнула, тот отчет и печатала
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511716
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так пробовали?

The OutputTo method carries out the OutputTo action in Visual Basic.

expression.OutputTo(ObjectType, ObjectName, OutputFormat, OutputFile, AutoStart, TemplateFile, Encoding)

ObjectName Optional Variant. A string expression that's the valid name of an object of the type selected by the ObjectType argument.
If you want to output the active object, specify the object's type for the ObjectType argument and leave this argument blank .
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511734
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredА так пробовали?

Метод OutputTo выполняет действие OutputTo в Visual Basic.

Expression.OutputTo (ObjectType, ObjectName, OutputFormat, OutputFile, AutoStart, TemplateFile, Encoding)

Необязательный вариант ObjectName. Строковое выражение, которое является допустимым именем объекта типа, выбранного аргументом ObjectType.
Если вы хотите вывести активный объект, укажите тип объекта для аргумента ObjectType и оставьте этот аргумент пустым..речь вед идет о том, открыто несколько отчетов, их каким то образом просматривают, по какому то критерию отбирают
---вот поэтому и предлагаю, заранее в форме высветить этот критерий
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511735
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

Как раз в ворде все и было.
Потом человек все время в пдф конвертировал.
Как бы убираем не нужное звено...

И вот пока играюсь всплыла "проблема"
Открываешь 3 экземпляра - все ок
открываешь 4ый - и половины вложенных отчетов нету, от слова совсем.
При чем, все это происходит молча.
как вариант - предполагаю, что натыкаюсь на ограничение открытых объектов(баз данных)
потому как в темп таблице данные для этих подъотчетов есть, а на экран не выводятся...

Использую Line для рисования по нужной высоте клеток псевдо таблицы. перенес из подчиненного в основной в группировку - это в попытке уменьшить количество количество "баз данных".
В подчиненном работало на ура, в основном не подстраивается под реальную высоту поля, рисует тупо по размеру из конструктора... Может не успевает расставить поля все перед тем как линии рисовать... репорт длинный и большой по данным полей 50-70 по всему размазано, у многих полей стоит "расширение".

Вобщем, какое то веселье... если есть у кого какие мысли - поделитесь, плиз.

Кстати, может плохо ищу, но что то типа ФАК по работе с формами, сделать и для репортов и их экземпляров.
Понимаю, что почти одно и тоже. Но различия есть и приходится их по кусочкам собирать на форуме.
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511751
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортанпро модуль класса не совсем понял... т.е. копировать этот репорт программно просто под другим именем и потом открывать его на печать?
нет - его же открыть под своим именем но в но
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DoCmd.OpenReport rptName, acViewPreview, , , acHidden, v1bor
...
' настраиваем принтер
With Reports(rptName).Printer
  If prtDuplex = acPRDPVertical Then .Orientation = acPRORLandscape Else .Orientation = acPRORPortrait
        .PaperSize = acPRPSA4
        .LeftMargin = LefM
        .TopMargin = TopM
        .Duplex = prtDuplex
        .PrintQuality = PrintsQ
        .PaperBin = Lotok 
end with
' затем все это на печать на нужном принтере с нужными установками
DoCmd.OpenReport rptName, acViewNormal
затем закрываем оба отчета
DoCmd.Close acReport, rptName, acSaveNo



эта проблема вылазит при выводе нескольких копий одного класса(имя модуля класса - одинаковое). если отчеты вообще разные-т.е. модули разные, и имена разные, то проблемы нет вообще - сделать public переменную, которая принимает имя получившего фокус или клик отчета. и распечатывать отчет с этим именем (открывая второй раз в нормальном режиме)
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511758
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

Спасибо за информацию!
Что то я пока не сильно понял по коду, я потом спрошу непонятное..

Пока тут игрался, дай думаю попробую стандартной кнопкой конвертнуть в пдф
Открыл 3 отчета активным сделал 2й(средний)
Конвертировать - показать - и опа - а все равно конвертирован 1й открытый экзапляр
Даже у себя в стандартных средствах это дело не сделали..
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39511795
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанИспользую Line для рисования по нужной высоте клеток псевдо таблицы. перенес из подчиненного в основной в группировку - это в попытке уменьшить количество количество "баз данных".

вот из-за этого и применяю вордовские или НТМ отчеты
по умолчанию у меня ПДФ-принтер
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39512224
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredА так пробовали?

The OutputTo method carries out the OutputTo action in Visual Basic.

expression.OutputTo(ObjectType, ObjectName, OutputFormat, OutputFile, AutoStart, TemplateFile, Encoding)
ObjectName Optional Variant. A string expression that's the valid name of an object of the type selected by the ObjectType argument.
If you want to output the active object, specify the object's type for the ObjectType argument and leave this argument blank .
не прокатило
ПЕНСИОНЕРКАречь вед идет о том, открыто несколько отчетов, их каким то образом просматривают, по какому то критерию отбирают
---вот поэтому и предлагаю, заранее в форме высветить этот критерий
проблема не в найти нужный экземпляр, а распечатать его. Открыто 3 экземпляра отчета вне зависимости от того, какой отчет сейчас активен, печатается первый открытый экземпляр

ПЕНСИОНЕРКАвот из-за этого и применяю вордовские или НТМ отчеты
по умолчанию у меня ПДФ-принтер
там еще есть факт закрытия вордовского файла паролем(тоже есть).
Просто нужен "защищенный от изменения документ".
ПДФ принтер, своего рода костыль.
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39512290
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,
aleckoэта проблема вылазит при выводе нескольких копий одного класса(имя модуля класса - одинаковое). если отчеты вообще разные-т.е. модули разные, и имена разные, то проблемы нет вообще - сделать public переменную, которая принимает имя получившего фокус или клик отчета. и распечатывать отчет с этим именем (открывая второй раз в нормальном режиме)

Код по поиску нужного экземпляра с попыткой старта
пробовал и из модуля и из самого репорта
Код: 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.
MyHwnd = 0
NameActFrm = MyScreenActFrm(1, , MyHwnd)

Do While i < Reports.Count ' проверка всех форм и их id
    If Reports.Item(i).Name = NameActFrm Then
        If Reports.Item(i).Hwnd = MyHwnd Then
'            Call Reports.Item(i).MyPrintReport 'это попытка вызова обработки в самом экземпляра
            ' временно скопировал отчет и пробую играться с ним
            DoCmd.OpenReport NameActFrm, acViewPreview, , , acHidden, "SELECT * FROM ExportsTemp WHERE IdWin=" & MyHwnd
            ' настраиваем принтер
            With Reports(NameActFrm).Printer
'              If prtDuplex = acPRDPVertical Then .Orientation = acPRORLandscape Else
                .Orientation = acPRORPortrait
                .PaperSize = acPRPSLetter
                .LeftMargin = 25 * 56
                .TopMargin = 25 * 56
                .Duplex = acPRDPSimplex
                .PrintQuality = acPRPQMedium
                .PaperBin = acPRBNAuto
            End With
            ' затем все это на печать на нужном принтере с нужными установками
            DoCmd.OpenReport NameActFrm, acViewNormal
            'затем закрываем оба отчета
            DoCmd.Close acReport, "AR11", acSaveNo
            Exit Function
        End If
    End If
i = i + 1
Loop



печатает, но только когда открыт только один экземпляр.
Если открыто несколько, то бьет ошибку...
-2147219503 --Method 'Orientation' of object '_Printer' failed
не дает настраивать этот самый принтер, как я понял
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39512416
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

если не сложно, направьте
или у вас хоть и экземпляры отчетов, но они открыты по одному?
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39512650
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан, признаться я запутался: толи у Вас отдельные отчеты, толи экземпляры класса
если экземпляры,то конечно действия будут сложнее, вкратце:
создаете Private коллекцию в разделе объявлений вызывающего модуля, после создания экземпляра класса закидываете его в коллекцию, (при этом в экземпляре получаете hwnd-это код окна он всегда уникальный-его присваивает система (но можно и счетчик какой-нить)), с этим индексом, снова создаете экземпляр-закидываете в коллекцию со своим индексом, т.е. все модули у Вас в коллекции со своими индексами.
Распечатываете отчет как член коллекции по индексу.
(настройка принтера должна быть в экземпляре класса)-отдаете только команду-нужному экземпляру как члену коллекции по индексу, т.е. открываете этот же экземпляр класса но на печать...

если же у Вас разные отчеты, то:
Hwnd присваивается системой, изменить его невозможно.поэтому вешаете на какое нить событие, проверить можно так:
Код: vbnet
1.
2.
3.
Private Sub Report_GotFocus()
Debug.Print Me.Hwnd
End Sub


объявляете в разделе объявлений какого-нить модуля Public переменную(хотя если открываете из одного места, и это место не закрывается в течение времени пока отчеты открыты, то может и private), присваиваете ей hwnd получившего фокус (или по какому иному событию ставшего активным отчета), и печатаете тот отчет у которого hwnd cовпадают
т.е.
где-то
Код: vbnet
1.
Public Hwnd0Fwindow&


у Вас в модуле
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Report_GotFocus()
Hwnd0Fwindow= Me.Hwnd
End Sub

Private sub toPrint()
Dim rptName$, MyHwnd&
MyHwnd = Hwnd0Fwindow
' получаете имя отчета так
 If Reports.Item(i).Hwnd = MyHwnd Then rptName=Reports(i).Name
...
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39512703
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати идея неплоха
20753926
для печати только
expression.PrintOut
т.е. печатается активный отчет
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39512982
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

Спасибо за помощь!
aleckoсоздаете Private коллекцию в разделе объявлений вызывающего модуля, после создания экземпляра класса закидываете его в коллекцию, (при этом в экземпляре получаете hwnd-это код окна он всегда уникальный-его присваивает система (но можно и счетчик какой-нить)), с этим индексом, снова создаете экземпляр-закидываете в коллекцию со своим индексом, т.е. все модули у Вас в коллекции со своими индексами.

Что я подразумеваю.
У меня есть какой то отчет. Я открываю его через New_AR1. Как экземпляр.
Потому как хочу открыть несколько экземпляров ОДНОГО отчета.
Есть код в модуле этого отчета. Как я понимаю, это тоже модуль класса.

Модуль по вызову на печать отдельный. В нем я находил активный экземпляр отчета (Hwnd активного окна сохраняю отдельно) по Hwnd перебором коллекции Reports и пытался из него(самого экземпляра отчета в коде) вызывать печать.
Из правила "Как закрыть экземпляр формы" - сначала фокус на экземпляр, потом ее закрытие.
Но тут не прокатывает, ибо фокус перекинуть невозможно из за режима - Просмотр.

aleckoРаспечатываете отчет как член коллекции по индексу.
(настройка принтера должна быть в экземпляре класса)-отдаете только команду-нужному экземпляру как члену коллекции по индексу, т.е. открываете этот же экземпляр класса но на печать...
Код настройки принтера я заносил в модуль самого отчета - это же модуль класса
Хотя реакция была одинаковая, что код был в модуле отчета, что во внешнем, одинаковая.
Код я привел выше.

Если открыт один ЭКЗЕМПЛЯР отчета - он распечатывается без проблем
если открыто несколько экземпляров одного отчета - выбивает ошибку.

Сейчас буду глядеть вашу ссылку
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39512985
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

Да, это пробовал чуть ранее
по образу
expression.OutputTo(ObjectType, , OutputFormat, OutputFile, AutoStart, TemplateFile, Encoding)
печатает первый открытый экземпляр
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39513059
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанКак раз в ворде все и было.
Потом человек все время в пдф конвертировал.
Как бы убираем не нужное звено...
Word (2010 точно) умеет сохранять в PDF, ничего не мешает делать это программно из акцеса.
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39513062
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанУ меня есть какой то отчет. Я открываю его через New_AR1. Как экземпляр.
Потому как хочу открыть несколько экземпляров ОДНОГО отчета.
Есть код в модуле этого отчета. Как я понимаю, это тоже модуль класса.

у всех созданных экземпляров одно и тоже имя -поэтому обращаться к ним можно только по индексу в коллекции, соответственно Docmd.openreport rptName-и не подходит. печать происходит по имени, что неправильно.
нужно открывать ещё один модуль класса и предусмотреть режим вывода на печать.
как вариант
заблокировать экран, закрыть все отчеты кроме нужного, распечатать его через Docmd.openreport, потом открыть остальные на свои места, разблокировать экран?
да, я печатаю таки разные отчеты.
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39513395
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

да, все таки мы думали в одном ключе.
Правда, я думаю скопировать отчет под другим именем и при необходимости его на печать/пдф выбрасывать
да, будет + по весу бд
но зато не нужно будет много действий. Да и отчет итоговый - относительно долгоиграющий

Ёжик`Word (2010 точно) умеет сохранять в PDF, ничего не мешает делать это программно из акцеса.
Да, я это знаю
Идея была вовсе отказаться от ворда.
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39513492
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан отчет под другим именем и при необходимости его на печать/пдф выбрасывать

да, так будет оптимальнее.
Для работы/анализов все таки более приспособлены формы. а уже на основе форм лучше сгенерить отчет, проверить его и отправить на печать.
...
Рейтинг: 0 / 0
Печать выбранного экземпляра отчета
    #39514108
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанИспользую Line для рисования по нужной высоте клеток псевдо таблицы. перенес из подчиненного в основной в группировку - это в попытке уменьшить количество количество "баз данных".
В подчиненном работало на ура, в основном не подстраивается под реальную высоту поля, рисует тупо по размеру из конструктора... Может не успевает расставить поля все перед тем как линии рисовать... репорт длинный и большой по данным полей 50-70 по всему размазано, у многих полей стоит "расширение".

Господа, может кому пригодится.

Из хелпа по .Line(...)
авторзамечания

Вы можете использовать этот метод только в процедуре события или макрос , указанном в OnPrint или OnFormat свойства события для раздела отчета, или OnPage свойства события для отчета.
Так вот. Ковырялся на форуме и сейчас обратно не найду, кто писал, но:
в OnFormat - с контролами можно кое что делать. При этом - получившиеся размеры полей НЕИЗВЕСТНЫ. потому берутся как в конструкторе.
в OnPrint - вот здесь реальные размеры полей уже известны. И прорисовку линий по размерам полей нужно делать именно здесь.

я перенес вызов прорисовки в OnPrint и все стало на места...
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Печать выбранного экземпляра отчета
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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