Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Изменение полей отчета
 
 автор: afib   (03.06.2008 в 14:38)   личное сообщение
 
 

MSAccess 2000, Windows Server 2000. При просмотре отчета меняются значение полей. Только на одной машине после переустановки принтера. Однако ничего похожего не нашел

  Ответить  
 
 автор: час   (03.06.2008 в 16:23)   личное сообщение
 
 

А о чём Вы спрашиваете???

  Ответить  
 
 автор: afib   (04.06.2008 в 01:25)   личное сообщение
 
 

Почему меняются настройки страницы в отчете, который не изменялся и как это устранить

  Ответить  
 
 автор: lurix   (04.06.2008 в 11:48)   личное сообщение
 
 

у меня тоже такое было....
1) попробуйте программно установить поля для отчета независимо от возможностей принтера, т.к.у меня настройки менялись при печати на струйник Епсон и на НР лазерный....
2) другой способ: зайти монопольно и поставить "универсальные" настройки полей отчета, сохранив его.

  Ответить  
 
 автор: час   (04.06.2008 в 11:52)   личное сообщение
 
 

Так Вы не про поля отчёта , а про границы отчёта - отступы от краёв

  Ответить  
 
 автор: час   (04.06.2008 в 11:58)   личное сообщение
 
 

Установите все отступы =0.
Вы как только их установите нажмите ок.
И сразу вновь откройте они если уже сменяться.
Тогда установятся минимально допустимые эти настройки - по ним иприглаживайте отчёт.
У меня тоже такое, а вот в чём собака зарыта как то не искал, обходился.
Может в настройках принтера надо поля поставить по умолчанию что ба минимальные были.

  Ответить  
 
 автор: afib   (05.06.2008 в 12:59)   личное сообщение
 
 

Второй способ я и делаю постоянно , после того, как они портятся. По первому способу можно было бы работать, если бы отчетов было немного, а у меня их порядка 200. Если, конечно, не удастся найти причину, то придется это делать.

  Ответить  
 
 автор: час   (06.06.2008 в 16:50)   личное сообщение
 
 

Нифига себе 200 штук..........
Тода надо порытся найти для Вас установка размеров отступа программно.....
Задайте новую ветку с таким вопросом , а я пока поищу ответ - может кто раньше меня ответит..................................

  Ответить  
 
 автор: час   (06.06.2008 в 16:53)   личное сообщение
 
 

ааааааа вот нашёл, но кода много........


Вопрос: для отчета установить параметры страницы (программно)

Совет:
У меня тоже похожие проблемы.
Делаю репорт у себя на машине: размер бумаги А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

  Ответить  
 
 автор: час   (06.06.2008 в 16:54)   личное сообщение
 
 

Вот ещё поменьше........



Вопрос: Как можно программно поменять параметры страницы?

Совет:
Q; Как можно программно сделать сабж? Т.е. принудительно выставить
Portrait или Landscape невзирая на параметры страницы? Или,
например, границы листа поменять?

Ответ: Смотри в хелпе PrtDevMode, там в примере есть то, что тебе нужно (по
ориентации, возможно есть и по размерам).

Q; Смотрел. Слишком заморочено, но не это сложно. Проблема в том, что описанные в примере типы переменных не опознаются. Какую библиотеку подключить, не пойму.

Ответ: Никакую. :) В начало примера посмотри, там описаны все нужные структуры, просто скопируй их в модуль. А для реального применения эту функцию не мешает доработать, т.к. она открывает отчет в режиме конструктора и не закрывает его после работы. Поэтому уберем мелькание при переключении в конструктор и закроем отчет в конце работы.

1. Между строками функции

Dim rpt As Report и DoCmd.OpenReport strName,
acDesign 
вставляем

DoCmd.Echo False 
получаем


 Dim rpt As Report
 DoCmd.Echo False
 DoCmd.OpenReport strName, acDesign


2. Перед End Sub
вставляем

 DoCmd.Echo True
 DoCmd.Close acReport, strName, acSaveYes


Всех благ, Игорь Макеев

  Ответить  
 
 автор: час   (06.06.2008 в 16:57)   личное сообщение
 
 

Или вот ещё целая статья - куча функций на все случаи.......

Коды не мои........ Благодарность авторам.


Вопрос: Модуль восстановления полей и ориентации отчетов

Совет:
Используя функции данного модуля можно сохранить параметры полей и ориентации отчетов в специальной таблице а потом при открытии отчета на печать /просмотр - восстанавливать их.

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

  Ответить  
 
 автор: час   (06.06.2008 в 17:02)   личное сообщение
 
 

А вот ещё
Тока видимо надо предупредить Вас - эксперименты проводите на пробной базе.
И основную базу заархивируйте перед опробацией.
Коды не мои я их не применял ввиду отсутствия необходимости............

Вопрос: Программное задание параметров страницы в отчете...

Совет:
Подскажите, пожалуйста, как при запуске приложения задать параметры страницы(отступ справа, слева, сверху, снизу, ориентацию, размер бумаги). Спасибо.


Я это делаю так: (отступ 1 см)

       Application.SetOption "Left Margin", 1
       Application.SetOption "Right Margin", 1
       Application.SetOption "Top Margin", 1
       Application.SetOption "Bottom Margin", 1

обычно прописываю в [formMenu; Form-Load]

  Ответить  
 
 автор: afib   (08.06.2008 в 22:25)   личное сообщение
 
 

Всем большое спасибо за советы. В кодах я еще детально не разбирался, но у меня есть 2-томник "Access2000 Руководство разработчика" с дисками, в котором есть все необходимые процедуры. Проблема в том, что устанавливать КАЖДЫЙ РАЗ - не хочется, так как открытие отчета с большим количеством полей занимает довольно большое время, а проверить до просмотра не получается, т.к. параметры меняются именно при запуске на просмотр. Поэтому я и думал, что может быть кто-нибудь знает причину такой переустановки.

  Ответить  
 
 автор: Анатолий (Киев)   (09.06.2008 в 12:04)   личное сообщение
 
 

На другом форуме я вам советовал отключить автоконтроль изменения имен объектов.
Результат?

  Ответить  
 
 автор: час   (09.06.2008 в 16:23)   личное сообщение
 
 

Автозамену имён в параметрах, или ..............

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList