установка PAPER:USER в report

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

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

установка PAPER:USER в report

Сообщение finsoftrz »

Добрый день.

Столкнулся с тем, что кларион (проверяю на clarion63) некорректно обрабатывает установку пользовательского размера бумаги. В процедуре объявлена report структура с PAPER:A4. Перед открытием ее устнавливаю в нужные размеры:
SELF.report{PROPPRINT:PAPER} = PAPER:User
SELF.report{PROPPRINT:paperwidth} = int(8250/210*SELF.ReportPaperWidth)
SELF.report{PROPPRINT:paperheight} = int(8250/210*SELF.ReportPaperHeight)
После открытия проперти показывают все, как установил (если принтер поддерживает). Но на предпросмотр выходит какая-то фигня. Ставлю в декларации report явно PAPER:User и нужные размеры бумаги. Все выводится корректно. Ставлю в декларации другие размеры, перед открытием присваиваю нужные (как написал выше). В предпросмотр выводится так, как будто размеры бумаги из декларации, а не те, которые установлены программно. Хотя проперти показывают, как устанавливал программно.

Может, кто тоже сталкивался с этим и знает решение (кроме отдельной декларации report под нужный размер бумаги)?
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

установка PAPER:USER в report

Сообщение kreator »

Надо, наверно, после открытия. У меня есть вот такое:

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

ThisWindow.OpenReport PROCEDURE

ReturnValue          BYTE,AUTO

  CODE
  SYSTEM{PROP:PrintMode} = 3
  ReturnValue = PARENT.OpenReport()
  IF ReturnValue = Level:Benign
    SELF.Report{PROPPRINT:Extend}=True
  END
  i# = printer{propprint:Paper}
  if i#<>PAPER:User
    Report{propprint:Paper} = i#
  end
  RETURN ReturnValue

Но у меня С10, если что.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

установка PAPER:USER в report

Сообщение Игорь Столяров »

finsoftrz писал(а): 25 Ноябрь 2017, 17:00Перед открытием ее устнавливаю в нужные размеры:
Надо выставлять параметры печатного листа после открытия REPORT.
Посмотрите метод GraphClass.DrawReport в файле svgraph.clw

Печататься будет корректно, а что касается прорисовки листа в окне предпросмотра,
то нужно лезть в ReportManager.Init и выставлять размеры листа до SELF.Preview.Init
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

установка PAPER:USER в report

Сообщение finsoftrz »

Я имел ввиду не размер листа в report, а размер бумаги. Когда report открыт, то установка размера бумаги не работает. Если устанавливать до открытия, то проперти показывают, что сработало, но вывод некорректный. На этом форуме тема уже обсуждалась, но повисла без решения. Последней была рекомендация попробовать до открытия, что я и сделал...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

установка PAPER:USER в report

Сообщение Игорь Столяров »

finsoftrz писал(а): 25 Ноябрь 2017, 19:49Когда report открыт, то установка размера бумаги не работает.
Ещё раз. Не судите по тому, что видите в окне предварительного просмотра.
В нём параметры отчёта на момент инициализации Preview.

Выставьте размеры печатного листа (я не знаю, что такое "размер бумаги"), например
для ленточного принтера этикеток. Всё прекрасно печатается ...
Хотя в окне предпросмотра размер печатного листа будет выставлен по структуре REPORT (см. ниже как обойти)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

установка PAPER:USER в report

Сообщение finsoftrz »

Размер бумаге - это я описал:
SELF.report{PROPPRINT:paperwidth} = int(8250/210*SELF.ReportPaperWidth)
SELF.report{PROPPRINT:paperheight} = int(8250/210*SELF.ReportPaperHeight)

Под размером листа отчета я понимаю вот это:
SELF.report{PROP:at,3} = int(8250/210*SELF.ReportPaperWidth)
SELF.report{PROP:at,4} = int(8250/210*SELF.ReportPaperHeight)

Вопрос именно по бумаге. Принтер этикеток у меня не под рукой, но я сужу по предпросмотру формы, сделанной мной же в FRB, которая правильно печатает. Перенес аналогичную функцию в свой дизайнер. предпросмотр аналогичный FRB получаю только при явно заданных paperwidth и paperheight в декларации report структуры. Если FRB умеет, значит как-то можно. Видимо, упускаю какой-то нюанс...

Самое интересное, что проперти выдают практически идентичные значения и у меня, и в FRB. Это если устанавливать размер бумаги до открытия отчета. А получаемый результат разный...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

установка PAPER:USER в report

Сообщение Игорь Столяров »

finsoftrz писал(а): 25 Ноябрь 2017, 20:09Если FRB умеет, значит как-то можно.
Я не знаком с сим продуктом, но подозреваю, что установка параметров отчёта в нём выполняется до инициализации Preview.
Или сделан свой класс Preview, в котором считываются текущие параметры Report на момент открытия окна, а не инициализации.
Других вариантов-то и нет ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

установка PAPER:USER в report

Сообщение finsoftrz »

Разобрался. Размеры бумаги задаются всегда в Dialog units, я неправильно их пересчитывал. Да, задавать размер надо после открытия report. Сейчас вроде все как надо заработало... Всем спасибо.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

установка PAPER:USER в report

Сообщение finsoftrz »

Кому интересно, вот что в итоге получилось:
https://olegon.ru/showpost.php?p=298719&postcount=38
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

установка PAPER:USER в report

Сообщение Игорь Столяров »

finsoftrz писал(а): 26 Ноябрь 2017, 12:04Кому интересно, вот что в итоге получилось:
Красота ! Чувствуется, что у Вас в этой теме богатый опыт и большие наработки. :)
Вы бы подумали на тему выпуска такого дизайнера этикеток в виде отдельного DLL, с работой независимо от БД (как iqXML).
Например, в качестве параметра метода печати передаётся имя CSV / XML файла определённой структуры c ассортиментом.

В среде разработчиков Clarion существует дефицит простого и понятного редактора этикеток, что-то вроде FastReport для Delphi.
List&Label - конечно великолепный продукт, но дорогой и большой.
Тот же FRB тоже пытается быть универсальным редактором, но много ненужного в подавляющем большинстве случаев.

При элементарном интерфейсе (вызов редактирования файла с шаблоном, печать пакета по шаблону и пакету ассортимента),
и адекватной цене без оглядок на Европы - это будет бомба ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

установка PAPER:USER в report

Сообщение finsoftrz »

Это дизайнер бланков, этикетки одно из применений. В нем делают ценники и можно делать различные печатные формы первичных документов. В коде работа такая же простая, как с обычным report.
С этикетками хорошо работает и FRB. Там только нет вывода штрих-кодов в rtf и нельзя автоматически масштабировать шрифт текста под размер фрагмента. Обычно без этого можно обойтись.
Насколько я знаю, кто хотел, себе подобные дизайнеры сделали. Видел еще 3 реализации, кроме своего и FRB. Но все, кроме FRB и CapeSoft, делали под свои задачи. Делать на продажу - это затраты увеличиваются значительно. Я особого смысла в этом не вижу.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

установка PAPER:USER в report

Сообщение Игорь Столяров »

finsoftrz писал(а): 26 Ноябрь 2017, 13:02Я особого смысла в этом не вижу.
Жаль конечно ... :(
Для создания хорошего дизайнера этикеток требуется отличное знание Clarion и потребностей продаванов.
Это редко сходится в одном месте ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

установка PAPER:USER в report

Сообщение finsoftrz »

Ну а что FRB не взять? Для наших цена в 2 раза дешевле. Под стандартные шаблоны тестируется, так как народа у буржуев на нем немало работает.

У меня с FRB проблема с обновлениями. Под свои шаблоны просто поменять dll не получается. Когда пытался обновиться, то так и не получилось. Подправил шаблоны, собрал приложение, но полезли баги в рантайм у клиентов. Пришлось откатываться на старую версию. И трудно понять, в чем дело. Со старой dll работает, с новой тексты за границы страницы при прямой печати на принтер улетают... То есть это как рулетка, то ли будет работать, то ли нет. Разные ненужные мне опции появились, типа хранилища бланков на sql сервере или ip-сервере - шаблоны сильно усложнились и прицепились к abc. Поэтому начал потихоньку делать свой, там хоть все в сырцах и можно в случае чего поправить. Ну и сделать функционал какой нужно. В конце концов, все к динамическому наполнению report структуры сводится...

А в связи с возможным переходом на c10 приходится чесать репу. С одной стороны, можно купить обновление FRB, но вопрос в том, будет ли работать и сколько усилий потратить надо на то, чтобы разобраться. И будут ли решаться вопросы в дальнейшем (например, критична возможность редактирования в Writer). С другой стороны, есть свой аналог, который на сегодня функциональнее, проще в использовании и в нем реализовано практически все, чего не хватало в FRB. Код сырцов под своим пошаговым отладчиком можно прогонять. Есть, наконец, автоматический конвертор бланков с FRB (хотя бизнес-логику все равно надо уточнять и тестировать). Но на FRB более 200 бланков в эксплуатации. И свой недостаточно обкатан на практике, реально только ценники делают и бланки по пальцам рук пересчитать можно.
В общем, вопрос не простой. Но и никто особо не торопит, с рантаймом c6 приемлемо работает и можно выбирать, где на чем быстрее сделать.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

установка PAPER:USER в report

Сообщение finsoftrz »

Вчера конвертнул из FRB несколько непростых бланков - торг12, торг13, 1-t, форма b. Кто в теме, тот поймет. В общем, не так и долго получается. Получил приятный бонус. Оказывается, у меня в дизайнере бланки можно рисовать в портрете или ландшафте, а печатать с разворотом. За 2 года как-то выпало из памяти. Правду говорят, что склероз самая приятная болезнь - ничего не болит и каждый день узнаешь что-то новое... :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

установка PAPER:USER в report

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Ноябрь 2017, 12:52а печатать с разворотом. За 2 года как-то выпало из памяти.
Кто-то недавно искал как вращать отчёты между книжной и альбомной раскладкой ...
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить