Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 15:28   #1
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию Создание динамического отчета

1) Дана таблица Table1
ID - AutoNumber
pole_1 - Text
pole _2 - Text
pole _3 - Text
pole _4 - Text
pole _5 - Text
pole _6 - Text
pole _7 - Text

2) В Form1 введены поля таблицы Table1.

3) В Report1 я хочу относительно ID, чтобы были бы видны только те поля, где введены значения. Не долны отображаться поля,которые являются пустыми. Например в Table1 введены следующие значения.

Table1
================
ID pole_1 pole_2 pole_3 pole_4 pole_5 pole_6 pole_7
1 книга ручка тетрадь 467 5
2 тетрадь книга книга 365
3 блокнот тетрадь книга тетрадь 356
=============

4) В Report1 должна быть видны следующие поля,

если ID = 1

ID -1
pole_1 - книга
pole_3 - ручка
pole_4 - тетрадь
pole_6 - 467
pole_7 - 5
=================================== =============================
если ID = 2

ID - 2
pole_1 - тетрадь
pole_3 - книга
pole_5 - книга
pole_6 - 365
=================================== =============================
если ID = 3

ID - 3
pole_2 - блокнот
pole_3 - тетрадь
pole_4 - книга
pole_5 - тетрадь
pole_7 - 356

Есть ли возможность сделать такой отчет, и если есть, то как можно будет сделать это.
Вложения
Тип файла: rar report.rar (30.3 Кб, 21 просмотров)

Последний раз редактировалось NickiBell; 15.09.2010 в 15:36.
NickiBell вне форума Ответить с цитированием
Старый 16.09.2010, 01:09   #2
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию

Здравствуйте ...

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

Заранее спасибо.
NickiBell вне форума Ответить с цитированием
Старый 16.09.2010, 02:36   #3
D.Shibanov
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 28
По умолчанию

И Вам - Здравствуйте!

Такое понятие как "динамический отчет" не используется.
Отчет - это сетка/шаблон, который заполняется данными полученными в результате запроса.

Естественно, при разных результатах запроса и отчет будет разным (динамическим? ).
В общем случае, если результат запроса не содержит данных для некоторых полей, то соответствующие поля отчета также будут пустыми.
Можно определить заголовки столбцов как вычисляемые поля и отображать их также, в зависимости от результата запроса (.Visible=True/False)
Но! Все поля/столбцы останутся на своих местах и просто будут пустыми!

Можно конечно усложнить и, дополнительно, установить в "0" ширину пустых полей ( .Width=0) и перемещать видимые поля/столбцы.
Или Вам именно это и нужно?

Последний раз редактировалось D.Shibanov; 16.09.2010 в 02:51.
D.Shibanov вне форума Ответить с цитированием
Старый 16.09.2010, 10:27   #4
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию

Если я правильно поняла, то в отчете я должна поместить друг за другом (сверху вниз) все поля, которые я хочу чтобы участвовали бы в самом отчете.

Таким образом получается, что если поле, например pole_1 имеет пустое значение, то его высота (на данный момент именно высота должна меня интересовать) станет pole_1.Height=0 и затем делаю проверку следующих полей.

Мне нужно именно перемещать видимые поля вверх.

Сейчас проверю такой метод, как он будет работать.
NickiBell вне форума Ответить с цитированием
Старый 16.09.2010, 12:01   #5
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию

При загрузке в отчете конкретной страницы как правильнее сделать проверку поля на пустое значение?

Private Sub Report_Load()
If (Reports![Report1]![pole_1] Is Not Null) Then
Reports![Report1]![pole_1].Visible = True
Else
Reports![Report1]![pole_1].Visible = False
Reports![Report1]![pole_1].Height = 0
End If
End Sub

=======================
Если указываю конкретное значение, то все работает, но мне нужен первый вариант.

Private Sub Report_Load()
If (Reports![Report1]![pole_1] ="YES") Then
Reports![Report1]![pole_1].Visible = True
Else
Reports![Report1]![pole_1].Visible = False
Reports![Report1]![pole_1].Height = 0
End If
End Sub
NickiBell вне форума Ответить с цитированием
Старый 16.09.2010, 14:07   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте NickiBell.
Вашу задачу лучше решать перебором, обращаясь к контролам по имени:
Код:
Private Sub Report_Load()
Dim b As Boolean, i%
For i = 1 To 7
    With .Me("pole_" & i)
        b = (Len(.Value & "") = 0)
        .Visible = Not b
        '.Height = IIf(b, 0, 1000) '1000 - заданная высота
    End With
Next
End Sub
Примерно так.
Евгений.

P.S. выкладывая на странице образцы кода, для удобочитаемости заключайте его (код) в тэги [соde]...[/соde], для этого можно воспользоваться кнопкой #.
Teslenko_EA вне форума Ответить с цитированием
Старый 17.09.2010, 04:00   #7
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
Сообщение

Здравствуйте,

Мое знание Access не ахти. Элементарный цикл не знаю как выполнить для полей, чтобы наконец завершить эту работу. Где-то здесь ошибка кроется и нигде не могу найти подробную информацию о циклах.

========================
Код:
For i=7 to 1 Step -1
     [pole_(i+1)].Top=[pole_(i)].Top
Next
========================

Должно выполниться в таком порядке:

[pole_7].Top=[pole_6].Top
[pole_6].Top=[pole_5].Top
[pole_5].Top=[pole_4].Top
[pole_4].Top=[pole_3].Top
[pole_3].Top=[pole_2].Top
[pole_2].Top=[pole_1].Top

Идеи для решения моей задачи мне очень помогли ...
Спасибо большое.
NickiBell вне форума Ответить с цитированием
Старый 17.09.2010, 12:14   #8
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию

Код:
For i=5 to 1 Step -1
        Me("pole_" & i+1).Top=Me("pole_" & i).Top
Next
Наконец нашла то, что мне нужно было ...

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

Всем спасибо за поддержку.
NickiBell вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание отчета bsi1952 Microsoft Office Access 1 27.06.2010 20:43
Создание отчета Alsou Общие вопросы Delphi 0 19.06.2010 19:43
Создание отчета Deni55 Microsoft Office Excel 13 15.06.2009 14:53
Создание отчета! Deni55 Microsoft Office Excel 10 16.04.2009 14:04
Создание отчета!!! Viento Microsoft Office Excel 12 26.01.2009 09:26