Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перенос строк в таблице отчета MS Access 2003 
:(
    Опции темы
qWork
  Дата 23.1.2012, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.11.2011

Репутация: нет
Всего: нет



Есть некоторый отчет, который пришлось делать практически с нуля вручную в связи с изменением законодательства. У меня стоит MS Access 2007, в нем собственно и делал этот самый отчет. 

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

В 2007-м нашел как это исправить путем инструментария во вкладке "Упорядочить" - "Макет элемента управления" воспользовавшись макетом "табличный", который по сути связывает ячейки так как нужно)

user posted image

В общем-то в 2007-м все прекрасно работает, но вот при открытии того же отчета в той же базе, но в 2003-м Access на всю эту табличную группировку или применение макета (хз как правильней) ему абсолютно пофиг, и связанного переноса строки в таблице нету. Я так понял в 2003-м такая настройка отчета не поддерживается, но для меня это не выход, так как законодательно сокращение названия не разрешено, чтобы не переносить его вообще, а при переносе вид отчета просто нелепый. Как вариант, конечно можно было бы пересадить оператора, который работает с этой базой за 2007-й Access, но если учесть менталитет и отношение нашего человека к прогрессу, то мне это выйдет лишь боком. 

Поэтому задаюсь вопросом, можно ли такой перенос реализовать в 2003-м Access каким-либо другим способом, но сам на него ответить не могу, поэтому надеюсь на вашу помощь.
PM MAIL   Вверх
bopoha
Дата 23.1.2012, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Можете показать как выглядит в Access 2007 и 2003. Не совсе понимаю в чем проблема.

P.S. Уже давно отказался от отчетов в Access, все формируется в Word.
PM MAIL WWW ICQ Skype GTalk   Вверх
qWork
Дата 27.1.2012, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.11.2011

Репутация: нет
Всего: нет



user posted image
MS Access 2007

user posted image
MS Access 2003

PM MAIL   Вверх
bopoha
Дата 29.1.2012, 00:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Что бы это получить, можно расположить в конце строки линию и нарисовать программно вертикальную линию между началом секции области данных и этой линией.  Функция ниже. Вызывать из события ОбластьДанных_Print.

Код

Public Sub ReportPrintTable(ByRef lineEndRow As Line _
                            , Optional ByVal lColor As Long = 3355443)
' печать вертикальных линий
    Dim ctl As Control
    Dim sct As Section
    Dim lHeight As Long
    Dim rpt As Report
    
    Set rpt = lineEndRow.Parent
    
    Set sct = rpt.Section(acDetail)
    rpt.DrawWidth = 1
    
    lHeight = lineEndRow.Top
    For Each ctl In sct.Controls
        If ctl.ControlType = acTextBox Then
            rpt.Line (ctl.Left, ctl.Top)-Step(0, lHeight - 2), lColor
            rpt.Line (ctl.Left + ctl.Width, ctl.Top)-Step(0, lHeight - 2), lColor
        End If
    Next ctl
End Sub


Пример.
PM MAIL WWW ICQ Skype GTalk   Вверх
qWork
  Дата 14.2.2012, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.11.2011

Репутация: нет
Всего: нет



bopoha, спасибо большое, получилось. В MS Access 2003 все прекрасно работает.

Но есть проблема, почему-то теперь наоборот, когда открываю измененную базу данных в MS Access 2007, то там модуль не срабатывает, просто под каждой строчкой линия, которую соответственно ранее добавлял в конструкторе для модуля. Сделал все точно также как и в примере, да и еще раз пять перечитал вашу статью, вроде бы программно все правильно. А вот когда открываю базу данных прикрепленную как пример, в котором тот же модуль и все то же самое, там в отчете табличка рисуется на ура.

Подозреваю, что дело в каких-то настройках безопасности которые могут блокировать работу модуля, а может и ошибаюсь... не подскажете в чем может быть причина?
PM MAIL   Вверх
bopoha
Дата 14.2.2012, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Если мой пример работает в 2003 и в 2007, а ваш нет, то помойму проблема в вашем коде. Настройки безопасности будут работать для всех открываемых баз данных.

Попробуйте воспользоваться отладчиком. Вызывается ли событие в отчете. Может происходит какая-нибудь ошибка и она же гасится.
PM MAIL WWW ICQ Skype GTalk   Вверх
qWork
  Дата 14.2.2012, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.11.2011

Репутация: нет
Всего: нет



bopoha, да в том то и дело что с кодом все впорядке если я правильно все сделал и ничего не забыл:
в отчете области данных убрал границы ячеек в  конструкторе, потом внизу под ячейками нарисовал горизонтальную линию по ширине всех вместе взятых ячеек, в конструкторе как бы все.
далее выделив "область данных" нажал правой кнопкой мыши - Обработка событий - Программы и таким образом перешел в VBA, туда скопировал запись с вашего примера, а именно:
Код

Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
    If PrintCount > 1 Then Exit Sub
    
    Call ReportPrintTable(Me.lineEndRow, Me.lineEndRow.BorderColor)
End Sub

Что, насколько я понимаю, и должно вызывать обработку нарисованной линии модулем.

Далее в том же VBA создал новый модуль, который назвал тоже назвал m_report, хотя название здесь по идее роли не играет. Скопировал туда ваш код:
Код

Public Sub ReportPrintTable(ByRef lineEndRow As Line _
                            , Optional ByVal lColor As Long = 3355443)
' печать вертикальных линий
    Dim ctl As Control
    Dim sct As Section
    Dim lHeight As Long
    Dim rpt As Report
    
    Set rpt = lineEndRow.Parent
    
    Set sct = rpt.Section(acDetail)
    rpt.DrawWidth = 1
    
    lHeight = lineEndRow.Top
    For Each ctl In sct.Controls
        If ctl.ControlType = acTextBox Then
            rpt.Line (ctl.Left, ctl.Top)-Step(0, lHeight - 2), lColor
            rpt.Line (ctl.Left + ctl.Width, ctl.Top)-Step(0, lHeight - 2), lColor
        End If
    Next ctl
End Sub


сохранил все, перезапустил отчет в MS Access 2003 - все прекрасно работает, перезапустил тот же файл на том же ПК в MS Access 2007 и там результат, о котором я писал выше.

Чисто, логически, ничего больше не нужно, все что нужно было я сделал или может все таки что-то упустил именно в процессе описанной вами процедуры?. Посмотрел настройки для макросов, то там ничего не заблокировано.


ЗЫ извиняюсь за идиотский вопрос, но что подразумевается под  отладчиком? Менюшка Debug в VBA? Нажал скомпилировать пример, но ничего толком не произошло, остальные команды подменю тоже не дают ничего внятного.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.