Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Высота полей в сложном отчете / 24 сообщений из 24, страница 1 из 1
17.09.2008, 12:50
    #35544092
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Здрасте всем.

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

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

Как этого добиться?

Еще была мысль, делать каким-то образом вывод в Excel (он ведь все ячейки в строке выравнивает по высоте), но как это сделать тоже не знаю.

Самым лучшим вариантом будет всё же вывод отчета только в Access'e, без использования Excel.

Помогите, а?
...
Рейтинг: 0 / 0
17.09.2008, 13:16
    #35544181
im_vooov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
посмотрите на leadersoft.ru/ , в базах с примерами.
...
Рейтинг: 0 / 0
17.09.2008, 15:31
    #35544656
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Посмотрел. Там речь идет о высоте строк с полями расположенными в линию. У меня же поля расположены одно над другим.
И как при этом вычислить что нужно изменять а что нет?
...
Рейтинг: 0 / 0
17.09.2008, 15:49
    #35544710
_restavraciya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Бредовый вариант:
- открываете первый раз (hide), изымаете размеры отступы и тп
- закрываете
- открываете второй раз (visible) с исправлением координат и размеров

Не проверял
...
Рейтинг: 0 / 0
17.09.2008, 16:04
    #35544767
nord-woolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Еще один геморройный вариант:
1. На событие открытия отчета считываем в массив высоту нижних полей + Top резиновых полей нижнего ряда(тех что со стрелками).
2. В событи Print секции сначала восстанавливаем положение и размеры полей нижнего ряда из массива. (поскольку они могли измениться в предыдущей записи)
3. Далее анализируем как изменились высоты резиновых полей. Перемещаем резиновые поля нижнего ряда на нужную высоту, если изменилась высота резиновых полей верхнего ряда(со стрелками).
4. Проверяем как изменилась высота резиновых полей нижнего ряда(со стрелками).
5. Вычисляем получившуюся максимальную высоту секции.
6. Подгоняем высоту полей нижнего ряда, которые без стрелок, под край (максимальная высота секции).

Если что-то упустил - по ходу всплывет.
...
Рейтинг: 0 / 0
17.09.2008, 16:08
    #35544782
KrukVN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
nord-woolf2. В событи Print секции сначала восстанавливаем положение и размеры полей нижнего ряда из массива.
Вроде нельзя в событии принт менять размеры и позицию контролов.
Рисование поможет (имхо)
...
Рейтинг: 0 / 0
17.09.2008, 16:09
    #35544789
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
А насколько важно дробить адрес по вертикали ? И дату/время ? Проще и дешевле выводить адрес склеенный и из нескольких строк (можно с переводом строки) в одной ячейке. Обработка тогда сильно упростится - достаточно растянуть все поля по высоте поля адреса.
...
Рейтинг: 0 / 0
17.09.2008, 16:14
    #35544812
nord-woolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
KrukVN nord-woolf2. В событи Print секции сначала восстанавливаем положение и размеры полей нижнего ряда из массива.
Вроде нельзя в событии принт менять размеры и позицию контролов.
Рисование поможет (имхо)

Точно, сглючило.
...
Рейтинг: 0 / 0
17.09.2008, 16:29
    #35544875
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
KrukVN nord-woolf2. В событи Print секции сначала восстанавливаем положение и размеры полей нижнего ряда из массива.
Вроде нельзя в событии принт менять размеры и позицию контролов.
Рисование поможет (имхо)
Похоже, что нельзя. У меня:
Код: plaintext
Me.Section(acDetail).Controls("PointAddressFrom").Top = *значение*
не вышло

Не дробить адрес? А как иначе его уместить в поле?
Если растянуть все поля по высоте заранее (ну допустим, на 3 строки текста) то получается не экономичное использование площади листа.

Адреса ведь не всегда длинные. Иногда умещаются и в одну строку текста
...
Рейтинг: 0 / 0
17.09.2008, 16:35
    #35544898
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
У вас же адрес состоит из трех полей. Вот и склейте их в одну ддинную строку с нью лайн между отдельными полями. Вид будет такой же как сейчас, но без горизонтальных линеечек в общем поле адреса.
...
Рейтинг: 0 / 0
17.09.2008, 16:49
    #35544957
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Не, адрес не из трех полей.
Точнее не совсем так.
Точка разгрузки/выгрузки имеет три поля, действительно.
Важно их разделить как предложено в моем макете отчета. Такова форма. :(
...
Рейтинг: 0 / 0
18.09.2008, 08:11
    #35545701
im_vooov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Вот, посмотрите, я вам немного переделал пример от LeaderSoft. Лепил по быстрому, но надеюсь пример понятен.

Успехов.
...
Рейтинг: 0 / 0
18.09.2008, 08:25
    #35545714
im_vooov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Этот код работает и для разной высоты полей, стоящих друг над другом. Код не менял, изменил только структуру отчета.

LeaderSoft огромное спасибо за предоставленный пример.
...а то они на сайте, совершенно обоснованно, обижаются, что их копируют без копирайтов.
...
Рейтинг: 0 / 0
18.09.2008, 08:37
    #35545723
ruprext
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
вот еще код, делает то же самое... использовал сначала код от лидерсофта но в некоторых отчетах границы полей немного смещались, было некрасиво... нашел этот, автора не помню но спасибо ему за старания
Код: plaintext
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
Public Sub DrawTableInDetailSection(objReportSection As Section)
'==============================================================

'Для "красивого" обрамления в таблицу области данных табличного
'отчета c изменяемой высотой полей (и соответственно строк целиком).
'Аргумент: objReportSection = Ссылка на область данных отчета
' "Вешается" на событие PRINT области данных отчета - например так:
'     Call DrawTableInDetailSection(Me.ОбластьДанных)
'Разумеется контуры полей в области данных отчета должны быть невидимы
'==============================================================
Dim DataControl As Control    'обект текущ. контроль
Dim x As Integer
Dim MaxHeight As Integer      'макс. высота в тек строке
Dim MinX As Integer           'координата начала горизонтальной линии
Dim MaxX As Integer           'координата конца горизонтальной линии
Dim StartX As Integer         'координата начала линии по оси X
Dim EndX As Integer           'координата конца линии по оси X
Dim StartY As Integer         'координата начала линии по оси Y
Dim EndY As Integer           'координата конца линии по оси Y

On Error GoTo DrawTableInDetailSectionERR
    MaxX =  0 
    MinX = objReportSection.Parent.Width
    With objReportSection
        'Находим макс высоту в строке
            For Each DataControl In .Controls
                x = DataControl.Height
                If MaxHeight < x Then MaxHeight = x
                
                x = DataControl.Left + DataControl.Width
                If MaxX < x Then MaxX = x
                
                x = DataControl.Left
                If MinX > x Then MinX = x
                    
            Next
        'рисуем вертикальную в Начале строки
            EndY = MaxHeight
            .Parent.Line (MinX, StartY)-(MinX, EndY)
        'рисуем горизонтальную Над строкой
            .Parent.Line (MinX, StartY)-(MaxX, StartY)
        
        'рисуем горизонтальную под строкой
            .Parent.Line (MinX, EndY)-(MaxX, EndY)
        
        'рисуем вертикальные линии справа от каждого контрола
            For Each DataControl In .Controls
                StartX = DataControl.Left + DataControl.Width
                EndX = StartX
                .Parent.Line (StartX, StartY)-(StartX, EndY)
            Next
    End With
    Exit Sub

DrawTableInDetailSectionERR:
    Err.Clear
End Sub

...
Рейтинг: 0 / 0
18.09.2008, 10:47
    #35545983
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Супер! Ребята, спасибо всем, всё получилось!

Еще вопросик появился - при построении отчета иногда бывает, что остается пустое место на странице - можно ли как-то "добить" это пустое место пустыми строками? чтобы можно было потом туда от руки что-то вписывать, прям на бумаге?

Чтобы нашим водителям по линейке не расчерчивать..
...
Рейтинг: 0 / 0
18.09.2008, 14:21
    #35546589
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Посмотрел по форуму - нет решения для моей задачи.
Как нарисовать в отчете пустые поля до конца страницы?
...
Рейтинг: 0 / 0
18.09.2008, 16:21
    #35546961
Высота полей в сложном отчете
В принципе это возможно.
У отчета есть свойство Me.NextRecord. Если ему указать True, то запись будет продублирована, а если при этом цвет шрифта в дубле сделать тем же, что и цвет фона - поля будут пустыми.
Это делается на событие Format области "Данные" последней записи, но вам нужно будет как-то знать, что это последняя запись, и сколько дублей вместится до конца страницы.
ИМХО - геморрой.
...
Рейтинг: 0 / 0
18.09.2008, 16:31
    #35546990
RADDD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Anton Klyauzov...иногда бывает, что остается пустое место на странице ....

...вся проблема в этом - иногда бывает - иногда не бывает...
если с этим не заморачиватся, а добавлять пустые всегда, то все решаемо - ...можно в примечании отчета просто линиями намалевать...
...
Рейтинг: 0 / 0
19.09.2008, 13:49
    #35548964
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
иногда - у нас почти всегда. :)

что касается линий в примечании - они же постоянно будут выводиться. а нужно - только когда пустое место на странице остается
...
Рейтинг: 0 / 0
19.09.2008, 14:19
    #35549051
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Anton Klyauzovчто касается линий в примечании - они же постоянно будут выводиться. а нужно - только когда пустое место на странице остается
А как же тогда шоферы? Забыли рабочего человека

Anton KlyauzovЧтобы нашим водителям по линейке не расчерчивать..
...
Рейтинг: 0 / 0
15.01.2009, 10:48
    #35758715
vso
vso
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Скачал пример, посмотрел и возник вопросик....

а почему используется обрисовка, а не скажем изменение высоты поля в которм еще в конструкторе задан цвет, тип и толжина границы????????
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
25.01.2016, 23:37
    #39155146
blyus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
Для тех кто не очень владеет с vba есть очень простой способ. В режиме макета выбираете все поля которые должны быть выведены в виде таблице. Правой клавишей выбираем "макет" далее "в виде таблице. И у вас все эти элементы становятся связанными. Далее при выделении любого поля этой таблице в верхнем правом углу появляется квадратик. Нажав на него выделяется вся группа элементов. Этой группе можно задать свойства как полю, тип границы, расширение, и другие. Access 2016.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.11.2018, 14:39
    #39727574
Upgrader
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
ruprextвот еще код, делает то же самое... использовал сначала код от лидерсофта но в некоторых отчетах границы полей немного смещались, было некрасиво... нашел этот, автора не помню но спасибо ему за старания
Отличный код. Только у меня небольшая проблемка:
Почему такое может быть, что делаю так как в примере:
Код: vbnet
1.
Call DrawTableInDetailSection(Me.ОбластьДанных)

А рисует мне таблицу не в "области данных", а в "заголовке отчета", беря при этом за основу таблицу из "верхнего колонтитула"?
Как его заставить рисовать в "Области данных"?
Я уже все перепробовал, не пойму в чем дело...
...
Рейтинг: 0 / 0
03.11.2018, 14:56
    #39727580
Upgrader
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Высота полей в сложном отчете
UpgraderКак его заставить рисовать в "Области данных"?
Все понял, решено. Надо было именно в print области данных вызывать.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Высота полей в сложном отчете / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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