Доброго времени суток, Посетитель!
|
|
|
|
|
|
|
|
|
вид форума:
|
|
|
|
| MSAccess 2000, Windows Server 2000. При просмотре отчета меняются значение полей. Только на одной машине после переустановки принтера. Однако ничего похожего не нашел | |
|
| |
|
|
|
| А о чём Вы спрашиваете??? | |
|
| |
|
|
|
| Почему меняются настройки страницы в отчете, который не изменялся и как это устранить | |
|
| |
|
|
|
| у меня тоже такое было....
1) попробуйте программно установить поля для отчета независимо от возможностей принтера, т.к.у меня настройки менялись при печати на струйник Епсон и на НР лазерный....
2) другой способ: зайти монопольно и поставить "универсальные" настройки полей отчета, сохранив его. | |
|
| |
|
|
|
|
| Установите все отступы =0.
Вы как только их установите нажмите ок.
И сразу вновь откройте они если уже сменяться.
Тогда установятся минимально допустимые эти настройки - по ним иприглаживайте отчёт.
У меня тоже такое, а вот в чём собака зарыта как то не искал, обходился.
Может в настройках принтера надо поля поставить по умолчанию что ба минимальные были. | |
|
| |
|
|
|
| Второй способ я и делаю постоянно , после того, как они портятся. По первому способу можно было бы работать, если бы отчетов было немного, а у меня их порядка 200. Если, конечно, не удастся найти причину, то придется это делать. | |
|
| |
|
|
|
| Нифига себе 200 штук..........
Тода надо порытся найти для Вас установка размеров отступа программно.....
Задайте новую ветку с таким вопросом , а я пока поищу ответ - может кто раньше меня ответит.................................. | |
|
| |
|
|
|
| ааааааа вот нашёл, но кода много........
Вопрос: для отчета установить параметры страницы (программно)
Совет:
У меня тоже похожие проблемы.
Делаю репорт у себя на машине: размер бумаги А4,
ставлю базу на другую машину, размер бумаги сбивается на Letter.
Я человек в таких делах тёмный, но думаю здесь дело в настройках принтера..
ну да бог с ними.
Чтоб лицом в грязь всякий раз не падать, порывшись в хелпе, нарисовали мы тут
пару функций (см. далее). Hа открытие репорта функция GetPaperSize проверяет
размер бумаги и, если размер не наш, репорт мы закрываем, записывая в некую
глобальную переменную, что, дескать, на сей раз не срослось... Потом проверяем
переменную и, если надо, запускаем SetPaperSizeA4 и снова пытаемся открыть
репорт.
По-делетантски это всё, конечно, но пока работает.
Может и вам на что сгодится.
==========================================
Option Compare Database
Option Explicit
Type str_DEVMODE
RGB As String * 94
End Type
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
intPaperSize As Integer
intPaperLength As Integer
intPaperWidth As Integer
intScale As Integer
intCopies As Integer
intDefaultSource As Integer
intPrintQuality As Integer
intColor As Integer
intDuplex As Integer
intResolution As Integer
intTTOption As Integer
intCollate As Integer
strFormName As String * 16
lngPad As Long
lngBits As Long
lngPW As Long
lngPH As Long
lngDFI As Long
lngDFr As Long
End Type
Public Sub SetPaperSizeA4(strReportName As String)
On Error GoTo Err1
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim rpt As Report
DoCmd.Echo False
DoCmd.OpenReport strReportName,
Set rpt = Reports.Item(strReportName)
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode
DevString.RGB = strDevModeExtra
LSet DM = DevString
'Set A4 paper size
DM.intPaperSize = 9
LSet DevString = DM
Mid(strDevModeExtra, 1, 94) = DevString.RGB
rpt.PrtDevMode = strDevModeExtra
End If
DoCmd.Save
DoCmd.Echo True
Exit Sub
Err1:
DoCmd.Echo True
MsgBox Err.Description
End Sub
Public Function GetPaperSize(objReport As Report) As Integer
On Error GoTo Err1
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
If Not IsNull(objReport.PrtDevMode) Then
strDevModeExtra = objReport.PrtDevMode
DevString.RGB = strDevModeExtra
LSet DM = DevString
GetPaperSize = DM.intPaperSize
Else
GetPaperSize = 0
End If
Exit Function
Err1:
MsgBox Err.Description
End Function
|
| |
|
| |
|
|
|
| Вот ещё поменьше........
Вопрос: Как можно программно поменять параметры страницы?
Совет:
Q; Как можно программно сделать сабж? Т.е. принудительно выставить
Portrait или Landscape невзирая на параметры страницы? Или,
например, границы листа поменять?
Ответ: Смотри в хелпе PrtDevMode, там в примере есть то, что тебе нужно (по
ориентации, возможно есть и по размерам).
Q; Смотрел. Слишком заморочено, но не это сложно. Проблема в том, что описанные в примере типы переменных не опознаются. Какую библиотеку подключить, не пойму.
Ответ: Никакую. :) В начало примера посмотри, там описаны все нужные структуры, просто скопируй их в модуль. А для реального применения эту функцию не мешает доработать, т.к. она открывает отчет в режиме конструктора и не закрывает его после работы. Поэтому уберем мелькание при переключении в конструктор и закроем отчет в конце работы.
1. Между строками функции
Dim rpt As Report и DoCmd.OpenReport strName,
acDesign
| вставляем
получаем
Dim rpt As Report
DoCmd.Echo False
DoCmd.OpenReport strName, acDesign
|
2. Перед End Sub
вставляем
DoCmd.Echo True
DoCmd.Close acReport, strName, acSaveYes
|
Всех благ, Игорь Макеев | |
|
| |
|
|
|
| Или вот ещё целая статья - куча функций на все случаи.......
Коды не мои........ Благодарность авторам.
Вопрос: Модуль восстановления полей и ориентации отчетов
Совет:
Используя функции данного модуля можно сохранить параметры полей и ориентации отчетов в специальной таблице а потом при открытии отчета на печать /просмотр - восстанавливать их.
Option Compare Database
Option Explicit
'===============================================================
'см справочку по Свойству PrtDevMode
'===============================================================
Type str_DEVMODE
RGB As String * 94
End Type
'===============================================================
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
'Используем пока только Orientation -
End Type
'===============================================================
'см справочку по Свойству PrtMip
Type str_PRTMIP
strRGB As String * 28
End Type
'===============================================================
Type type_PRTMIP
lngLeftMargin As Long
lngToptMargin As Long
lngRightMargin As Long
lngBotMargin As Long
lngDataOnly As Long
lngWidth As Long
lngHeight As Long
lngDefaultSize As Long
lngColumns As Long
lngColumnSpacing As Long
lngRowSpacing As Long
lngItemLayout As Long
fFastPrint As Long
fDatasheet As Long
End Type
Function jsOpenReport(MyReportName As String, Optional MyMode As Byte = 1)
'если MyMode=1 - Печать
'если MyMode=2 - Просмотр
'если MyMode=3 - Только Восстановление параметров
On Error GoTo jsOpenReportErr
Dim MyLeftMargin As Long
Dim MyTopMargin As Long
Dim MyRightMargin As Long
Dim MyBotMargin As Long
Dim MyColumns As Long
Dim MyColumnSpacing As Long
Dim MyRowSpacing As Long
Dim MyItemLayout As Long
Dim MyOrientation As Long
Dim rpt As Report
Dim MySQL As String
Dim MyRst As DAO.Recordset
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim PrtMipString As str_PRTMIP
Dim PM As type_PRTMIP
' ++++++++++++++++++++++++++++++++++
Application.Echo False
MySQL = "SELECT * FROM A_ReportsPprt" & _
" WHERE ReportName='" & MyReportName & "';"
Set MyRst = CurrentDb.OpenRecordset(MySQL, dbOpenSnapshot)
If MyRst.EOF Then Exit Function
With MyRst
MyLeftMargin = !LeftMargin
MyRightMargin = !RightMargin
MyTopMargin = !TopMargin
MyBotMargin = !BotMargin
MyColumns = !Columns
MyColumnSpacing = !ColumnSpacing
MyRowSpacing = !RowSpacing
MyItemLayout = !ItemLayout
MyOrientation = !Orientation
End With
MyRst.Close
Set MyRst = Nothing
DoCmd.OpenReport MyReportName, acDesign
Set rpt = Reports(MyReportName)
'Ориентация
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode
DevString.RGB = strDevModeExtra
LSet DM = DevString
DM.intOrientation = MyOrientation
LSet DevString = DM
Mid(strDevModeExtra, 1, 94) = DevString.RGB
rpt.PrtDevMode = strDevModeExtra
End If
'поля
PrtMipString.strRGB = rpt.PrtMip
LSet PM = PrtMipString
PM.lngLeftMargin = MyLeftMargin * 56.7
PM.lngRightMargin = MyRightMargin * 56.7
PM.lngToptMargin = MyTopMargin * 56.7
PM.lngBotMargin = MyBotMargin * 56.7
PM.lngColumns = MyColumns
PM.lngColumnSpacing = MyColumnSpacing * 56.7
PM.lngRowSpacing = MyRowSpacing * 56.7
PM.lngItemLayout = MyItemLayout
LSet PrtMipString = PM
rpt.PrtMip = PrtMipString.strRGB
Set rpt = Nothing
DoCmd.Close acReport, MyReportName, acSaveYes
Application.Echo True
Select Case MyMode
Case 1
DoCmd.OpenReport MyReportName, acViewPreview
DoCmd.Maximize
Case 2
DoCmd.OpenReport MyReportName
End Select
Exit Function
jsOpenReportErr:
Application.Echo True
MsgBox Err.Description
End Function
'===============================================================
Function MakeReportsPropertiesTable()
'js 14/04/2001 создание таблицы параметров отчетов
Dim MyTable As TableDef
Dim MyField As Field
Dim MyRst As Recordset
Dim MyIdx As Index
On Error Resume Next
CurrentDb.TableDefs.Delete "A_ReportsPprt"
Set MyTable = CurrentDb.CreateTableDef("A_ReportsPprt")
MyTable.Fields.Append MyTable.CreateField("ReportName", dbText, 30)
MyTable.Fields.Append MyTable.CreateField("LeftMargin", dbSingle)
MyTable.Fields.Append MyTable.CreateField("RightMargin", dbSingle)
MyTable.Fields.Append MyTable.CreateField("TopMargin", dbSingle)
MyTable.Fields.Append MyTable.CreateField("BotMargin", dbSingle)
MyTable.Fields.Append MyTable.CreateField("Columns", dbLong)
MyTable.Fields.Append MyTable.CreateField("ColumnSpacing", dbSingle)
MyTable.Fields.Append MyTable.CreateField("RowSpacing", dbSingle)
MyTable.Fields.Append MyTable.CreateField("ItemLayout", dbLong)
MyTable.Fields.Append MyTable.CreateField("Orientation", dbLong)
Set MyIdx = MyTable.CreateIndex("Primary Key")
With MyIdx
'Добавление полей в индекс
.Fields.Append .CreateField("ReportName")
.Unique = True 'Уникальный
.Primary = True 'Первичный
End With
MyTable.Indexes.Append MyIdx
CurrentDb.TableDefs.Append MyTable
End Function
Function AllReportsToPRPTable()
'js 14/04/2001 заполнение таблицы параметров
Dim PrtMipString As str_PRTMIP
Dim PM As type_PRTMIP
Dim dbs As Database, ctr As Container, doc As Document
Dim MyReportName As String
Dim MyReport As Report
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim MySQL As String
Call MakeReportsPropertiesTable
Set dbs = CurrentDb
Set ctr = dbs.Containers!Reports
For Each doc In ctr.Documents
MyReportName = doc.Name
DoCmd.OpenReport MyReportName, acViewPreview
Set MyReport = Reports(MyReportName)
PrtMipString.strRGB = MyReport.PrtMip
LSet PM = PrtMipString
strDevModeExtra = MyReport.PrtDevMode
DevString.RGB = strDevModeExtra
LSet DM = DevString
'в милиметрах
MySQL = "INSERT INTO A_ReportsPprt" & _
" ([ReportName], " & _
"[LeftMargin], " & _
"[RightMargin], " & _
"[TopMargin], " & _
"[BotMargin], " & _
"[Columns], " & _
"[ColumnSpacing], " & _
"[RowSpacing], " & _
"[ItemLayout], " & _
"[Orientation])" & _
" VALUES ('" & MyReportName & _
"', '" & CSng(PM.lngLeftMargin / 56.7) & _
"', '" & CSng(PM.lngRightMargin / 56.7) & _
"', '" & CSng(PM.lngToptMargin / 56.7) & _
"', '" & CSng(PM.lngBotMargin / 56.7) & _
"', " & PM.lngColumns & _
", '" & CSng(PM.lngColumnSpacing / 56.7) & _
"', '" & CSng(PM.lngRowSpacing / 56.7) & _
"', " & PM.lngItemLayout & _
", " & DM.intOrientation & ")"
DoCmd.SetWarnings False
CurrentDb.Execute MySQL
DoCmd.Close acReport, MyReportName, acSaveYes
Next doc
Set dbs = Nothing
End Function
Sub test()
Call jsOpenReport("R_Lables_02", 3)
End Sub
'===============================================================
Function OpenPreview()
'Обычно выполняется при открытии отчета на просмотр
'Распахивает окно (Preview отчета) вовесь экран
Dim frm As Form
DoCmd.Maximize
For Each frm In Forms
frm.Visible = False
Next frm
End Function
'===============================================================
Function ClosePreview()
'Обычно выполняется при ЗАКРЫТИИ отчета после просмотра
'Восстанавивает размеры форм после просмотра отчета
Dim frm As Form
DoCmd.Restore
For Each frm In Forms
frm.Visible = True
Next frm
End Function | |
|
| |
|
|
|
| А вот ещё
Тока видимо надо предупредить Вас - эксперименты проводите на пробной базе.
И основную базу заархивируйте перед опробацией.
Коды не мои я их не применял ввиду отсутствия необходимости............
Вопрос: Программное задание параметров страницы в отчете...
Совет:
Подскажите, пожалуйста, как при запуске приложения задать параметры страницы(отступ справа, слева, сверху, снизу, ориентацию, размер бумаги). Спасибо.
Я это делаю так: (отступ 1 см)
Application.SetOption "Left Margin", 1
Application.SetOption "Right Margin", 1
Application.SetOption "Top Margin", 1
Application.SetOption "Bottom Margin", 1
|
обычно прописываю в [formMenu; Form-Load] | |
|
| |
|
|
|
| Всем большое спасибо за советы. В кодах я еще детально не разбирался, но у меня есть 2-томник "Access2000 Руководство разработчика" с дисками, в котором есть все необходимые процедуры. Проблема в том, что устанавливать КАЖДЫЙ РАЗ - не хочется, так как открытие отчета с большим количеством полей занимает довольно большое время, а проверить до просмотра не получается, т.к. параметры меняются именно при запуске на просмотр. Поэтому я и думал, что может быть кто-нибудь знает причину такой переустановки. | |
|
| |
|
|
|
| На другом форуме я вам советовал отключить автоконтроль изменения имен объектов.
Результат? | |
|
| |
|
|
|
| Автозамену имён в параметрах, или .............. | |
|
| |
HiProg.com - Технологии программирования
|