Возможно глюк?

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

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Привет всем!

Есть отчет, содержащий в детали текстовые поля. Колонки отчета
разделяются линиями и отчеркиваются. По подсказке Андрея Мялина
высота разделителя определяется максимальной высотой текстового
поля. Так вот, если текстовое поле содержит символы <13,10>
(ну необходимо мне, чтобы каждый документ-основание печатался с
новой строки), то высота детали почему-то увеличивается, причем
зависит от количества эти самых переносов строк, тогда как высота
разделителя вычисляется верно.

Алгоритм посчета положения разделителей прост:

Код: Выделить всё

SetSeparatorHeight ROUTINE

  DATA

nLoopIndex       SIGNED,AUTO
nMaxDetailHeight SIGNED(0)
nDetailHeight    SIGNED,AUTO

  CODE
  SETTARGET(Report)
  LOOP nLoopIndex = FIRSTFIELD() TO LASTFIELD()
    IF nLoopIndex{PROP:Type} = CREATE:Text AND nLoopIndex{PROP:Parent} = ?Detail
      nDetailHeight = 2 * nLoopIndex{PROP:YPos} + nLoopIndex{PROP:LineCount} * nLoopIndex{PROP:LineHeight}
      IF nDetailHeight > nMaxDetailHeight
        nMaxDetailHeight = nDetailHeight
      END
    END
  END
  LOOP nLoopIndex = FIRSTFIELD() TO LASTFIELD()
    IF nLoopIndex{PROP:Type} = CREATE:Line AND nLoopIndex{PROP:Width} = 0 AND nLoopIndex{PROP:Parent} = ?Detail
      nLoopIndex{PROP:Height} = nMaxDetailHeight
    END
  END
  ?Underline{PROP:YPos} = nMaxDetailHeight
  SETTARGET
В результате отчет выглядит так:

Код: Выделить всё

---------------------------------------
! Code ! Name !      Documents        !
---------------------------------------
!  1   ! COM  !Документ в одну строку !
!--------------------------------------
!  2   ! ORG  !Документ в две строки  !
!      !      !без явного переноса    !
!--------------------------------------
!  3   ! NET  !Документ 1 в две       !
!      !      !строки                 !
!      !      !Документ 2 в две       !
!      !      !строки                 !
                                        <- пустое место?!
---------------------------------------
!   4  ! GOV  !                       !
---------------------------------------
Кто-нить сталкивался? Возможно ли победить?

P.S. Кстати, еще один глюк текстового поля в репорте. Если значение
STRING-переменной, которое отображается в ТЕКСТ-контроле по размеру
(LEN) совпадает с размером этой переменной, то происходит переход на
новую строку и в этой строке печается непечатный символ
(или <10>, или <13>).

Пример:

LOC:stMonthName STRING(8)
LOC:stMonthName = 'february' ! 8 chars

Выглядит как

! february !
! 0 ! <- только не ноль, а прямоугольник...


Алексей,
начальник отдела ПТО
ООО "ОРК"

mail: alex@jrcn.donetsk.ua, icq: 62605472
www: http://atinet.hypermart.net
http://www.nikasoft.co.uk
http://www.clarionline.h1.ru (FAQ-онлайн)
irc: irc.lucky.net:6669, channel #clarion, Bambino
origin: Взял от жизни все, что и было установлено в ходе обыска.

(Добавление)

Я сталкивался, победил путём присваивания найденной высоты линий высоте
этого текстового конотрола, то есть в конце надо так:

Код: Выделить всё

  LOOP nLoopIndex = FIRSTFIELD() TO LASTFIELD()
    IF nLoopIndex{PROP:Type} = CREATE:Text AND nLoopIndex{PROP:Parent} = ?Detail
        nLoopIndex{PROP:Height} = nMaxDetailHeight
    END
END
Михаил

В принципе, если отчёт содержит вертикальную линию на весь размер страницы, обычно можно её отчертить в разделе Form..

---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ# 75924439
Написал: ClaList(2)
Гость

Сообщение Гость »

Сенкс. Помогло.

Алексей

(Добавление)
В принципе, если отчёт содержит вертикальную линию на весь
размер страницы, обычно можно её отчертить в разделе Form..
Но ведь количество деталей на странице может быть разное... как же
я буду отслеживать высоту этой линии в зависимости от высоты всех
деталей...

P.S. Сейчас попробую совет Михаила.

Алексей

Для табличных отчётов я делаю один DETAIL на весь лист, динамически наполняю
его,
прорисовываю все линии уже после сформированного листа, т е BOX и
вертикальные линии.
веду контрроль за переполнением страницы, и сам генерю ENDPAGE, когда это
необходимо.
Это хорошо видно в ELP.

Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
Yahoo group: clarion@yahoogroups.com
Но ведь количество деталей на странице может быть разное... как же
я буду отслеживать высоту этой линии в зависимости от высоты всех
деталей...
Предполагается, что линия-на всю страницу... Не всегда подходит, но иногда вполне удовлетворительно...

---------------------------------------
C уважением,
Юрий Философов
Написал: ClaList(2)
Ответить