LazReport

Вопросы программирования и использования среды Lazarus.

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

Re: LazReport

Сообщение alexs » 28.09.2016 11:11:47

Ustas
А попробовать?

PS
Должно работать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение Ustas » 28.09.2016 11:58:28

alexs писал(а):Должно работать.

Пробовал, если гнать конкретно код #13 или/и #10 - то репорт их игнорирует, если гнать как строку, так и печатает как строку.
Вывожу строки с кодами #13#10 В Calc (LibreOffice) - там все замечательно.

P.S. Кажись разобрался: чтобы сработали коды, нужно чтобы была включена опция "Перенос по словам", иначе кина не будет... :D
Ustas
постоялец
 
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: LazReport

Сообщение alexs » 28.09.2016 12:51:07

Сработает на #10 и перенос строк
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение wadman » 23.10.2016 19:41:51

Предложения по доработке принимаются? :)

Нужно изменить по мелочи для возможности формирования отчета в доп. потоке.

Добавить опцию в TfrReportOption: roMultithread которая будет запрещать дергать Application.ProcessMessages.
В TfrReport добавить метод procedure DoApplicationProcessMessages;
Код: Выделить всё
procedure TfrReport.DoApplicationProcessMessages;
begin
  if (not (roMultithread in Options)) or (csDesigning in ComponentState) then
    Application.ProcessMessages;
end;

И везде вызов Application.ProcessMessages заменить на строки:
Код: Выделить всё
if Assigned(CurReport) then
  CurReport.DoApplicationProcessMessages;   
У вас нет необходимых прав для просмотра вложений в этом сообщении.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: LazReport

Сообщение alexs » 23.10.2016 22:34:13

Для мнгопоточности этого мало. Там слишком много глобальнх переменных. И потоко-не безопасные обращения в систему. Я боюсь - что предложенного будет мало.
А патчики лучше в мантис на багтрекер размещать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение wadman » 23.10.2016 23:00:38

alexs писал(а):Я боюсь - что предложенного будет мало.

Пока что помогло. Если есть примеры кода, где вылетает или есть/будут проблемы, то с наличием такого кода могу помочь.
У меня печатаются штрих-коды фоном с таким решением.

Application.ProcessMessages в любом случае всегда мешает многопоточному программированию.

Добавлено спустя 2 минуты 26 секунд:
Кстати, эти-же изменения мне помогли в FastReport, который на практике работает на производстве. :)
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: LazReport

Сообщение alexs » 24.10.2016 09:17:23

При многопоточной работе есть вероятность парралельного формирования нескольких отчётов. И в этом я сразу вижу проблему с использованием глобальных переменных. Там глобальный канвас есть, ещё куча всего.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение wadman » 24.10.2016 10:20:15

alexs писал(а):При многопоточной работе есть вероятность парралельного формирования нескольких отчётов. И в этом я сразу вижу проблему с использованием глобальных переменных. Там глобальный канвас есть, ещё куча всего.

С этим согласен, но с оговоркой - эта вероятность зависит исключительно от рук программиста.
В то время, как в данный момент lazReport в принципе не позволяет формировать отчет в другом потоке.

Интересно, в каком случае необходимо формировать сразу несколько отчетов (параллельно)?
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: LazReport

Сообщение alexs » 24.10.2016 12:21:48

Я бы запаралели у себя формирование первичного комплекта документов для контрагента. У нас там от 4 до 6 печатных бланков. И иногда при обслуживании клиента это самый длительный этап. Но тут упирается ещё и в сам движок для работы с БД. ZEOS, например, не умеет в нескольких потоках работать. PostgreSQL тоже. Там надо отдельные конекшены новые создавать для этого.

А насчёт кривизны рук - обязательно найдётся кто-то, кто так и сделает. И проблем потом буде, криков на форумах... Сплошная антиреклама :-)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение wadman » 24.10.2016 14:37:01

alexs писал(а): ZEOS, например, не умеет в нескольких потоках работать. PostgreSQL тоже. Там надо отдельные конекшены новые создавать для этого.

FB тоже не умеет. Но это не проблема, код-то один раз пишется руками, а выполняется сам. :)
alexs писал(а):Я бы запаралели у себя формирование первичного комплекта документов для контрагента. У нас там от 4 до 6 печатных бланков.

Это да, полезное дело... Думаю, что при желании можно избавиться от глобальных переменных, протащив owner-ов везде, где нужно.
В моем случае получается просто клепать фоном этикетки в порядке очереди и чтоб интерфейс не тормозил.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: LazReport

Сообщение alexs » 25.10.2016 09:04:11

Если считаешь - что нужно, оформляй запрос в мантис - http://bugs.freepascal.org/view_all_bug_page.php
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение wadman » 27.10.2016 16:12:02

alexs писал(а):Если считаешь - что нужно, оформляй запрос в мантис - http://bugs.freepascal.org/view_all_bug_page.php

Спасибо. Может со временем туда залезу.

Кстати, может снаскока и получится одновременно формировать несколько отчетов путем объявления глобальных переменных через threadvar.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: LazReport

Сообщение alexs » 27.10.2016 19:44:19

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


Лучше их внутрь объекта спрятать.
Там принципиально ничего сложного нет - просто переписать много надо. У меня времени на это не хватает.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport

Сообщение wadman » 28.10.2016 13:45:56

alexs писал(а):Лучше их внутрь объекта спрятать.
Там принципиально ничего сложного нет - просто переписать много надо. У меня времени на это не хватает.

Кажется, это мертвая идея.
Отчет спокойно формируется в другом потоке под виндой, а в никсах - убивает виртуалку. :mrgreen:

Может и не мертвая, но с наскока точно не решить.

Добавлено спустя 2 часа 15 минут 41 секунду:
wadman писал(а):Может и не мертвая, но с наскока точно не решить.

Поторопился с выводом. Отчет отрабатывает и результат там же можно записать в *.frp.
Ломает именно экспорт в jpeg, вызванный в доп.потоке.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

LazReport - не отрывать band от данных

Сообщение tsknv » 16.12.2016 08:55:24

Здравствуйте.
В отчете имеется MasterData, DetailData и DetailFooter возможно ли сделать чтобы DetailData и DetailFooter не переносились на новую страницу без MasterData? т.е. если все три не входят то на новую страницу переносились все вместе. а то получается что новая страница начинается с итого (DetailFooter). или чтобы DetailFooter не оставался один на странице без DetailData? подскажите в какую сторону копать?

есть ли возможность сформировать отчет без разбиения на страницы? а потом пробежаться по нему и расставить разрывы страниц где нужно?
tsknv
новенький
 
Сообщения: 14
Зарегистрирован: 25.09.2015 08:09:26

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru