LazReport
Модератор: Модераторы
alexs писал(а):Должно работать.
Пробовал, если гнать конкретно код #13 или/и #10 - то репорт их игнорирует, если гнать как строку, так и печатает как строку.
Вывожу строки с кодами #13#10 В Calc (LibreOffice) - там все замечательно.
P.S. Кажись разобрался: чтобы сработали коды, нужно чтобы была включена опция "Перенос по словам", иначе кина не будет...
Предложения по доработке принимаются? 
Нужно изменить по мелочи для возможности формирования отчета в доп. потоке.
Добавить опцию в TfrReportOption: roMultithread которая будет запрещать дергать Application.ProcessMessages.
В TfrReport добавить метод procedure DoApplicationProcessMessages;
И везде вызов Application.ProcessMessages заменить на строки:
Нужно изменить по мелочи для возможности формирования отчета в доп. потоке.
Добавить опцию в 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; У вас нет необходимых прав для просмотра вложений в этом сообщении.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Для мнгопоточности этого мало. Там слишком много глобальнх переменных. И потоко-не безопасные обращения в систему. Я боюсь - что предложенного будет мало.
А патчики лучше в мантис на багтрекер размещать.
А патчики лучше в мантис на багтрекер размещать.
alexs писал(а):Я боюсь - что предложенного будет мало.
Пока что помогло. Если есть примеры кода, где вылетает или есть/будут проблемы, то с наличием такого кода могу помочь.
У меня печатаются штрих-коды фоном с таким решением.
Application.ProcessMessages в любом случае всегда мешает многопоточному программированию.
Добавлено спустя 2 минуты 26 секунд:
Кстати, эти-же изменения мне помогли в FastReport, который на практике работает на производстве.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
При многопоточной работе есть вероятность парралельного формирования нескольких отчётов. И в этом я сразу вижу проблему с использованием глобальных переменных. Там глобальный канвас есть, ещё куча всего.
alexs писал(а):При многопоточной работе есть вероятность парралельного формирования нескольких отчётов. И в этом я сразу вижу проблему с использованием глобальных переменных. Там глобальный канвас есть, ещё куча всего.
С этим согласен, но с оговоркой - эта вероятность зависит исключительно от рук программиста.
В то время, как в данный момент lazReport в принципе не позволяет формировать отчет в другом потоке.
Интересно, в каком случае необходимо формировать сразу несколько отчетов (параллельно)?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Я бы запаралели у себя формирование первичного комплекта документов для контрагента. У нас там от 4 до 6 печатных бланков. И иногда при обслуживании клиента это самый длительный этап. Но тут упирается ещё и в сам движок для работы с БД. ZEOS, например, не умеет в нескольких потоках работать. PostgreSQL тоже. Там надо отдельные конекшены новые создавать для этого.
А насчёт кривизны рук - обязательно найдётся кто-то, кто так и сделает. И проблем потом буде, криков на форумах... Сплошная антиреклама
А насчёт кривизны рук - обязательно найдётся кто-то, кто так и сделает. И проблем потом буде, криков на форумах... Сплошная антиреклама
alexs писал(а): ZEOS, например, не умеет в нескольких потоках работать. PostgreSQL тоже. Там надо отдельные конекшены новые создавать для этого.
FB тоже не умеет. Но это не проблема, код-то один раз пишется руками, а выполняется сам.
alexs писал(а):Я бы запаралели у себя формирование первичного комплекта документов для контрагента. У нас там от 4 до 6 печатных бланков.
Это да, полезное дело... Думаю, что при желании можно избавиться от глобальных переменных, протащив owner-ов везде, где нужно.
В моем случае получается просто клепать фоном этикетки в порядке очереди и чтоб интерфейс не тормозил.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Если считаешь - что нужно, оформляй запрос в мантис - http://bugs.freepascal.org/view_all_bug_page.php
alexs писал(а):Если считаешь - что нужно, оформляй запрос в мантис - http://bugs.freepascal.org/view_all_bug_page.php
Спасибо. Может со временем туда залезу.
Кстати, может снаскока и получится одновременно формировать несколько отчетов путем объявления глобальных переменных через threadvar.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
wadman писал(а):Кстати, может снаскока и получится одновременно формировать несколько отчетов путем объявления глобальных переменных через threadvar.
Лучше их внутрь объекта спрятать.
Там принципиально ничего сложного нет - просто переписать много надо. У меня времени на это не хватает.
alexs писал(а):Лучше их внутрь объекта спрятать.
Там принципиально ничего сложного нет - просто переписать много надо. У меня времени на это не хватает.
Кажется, это мертвая идея.
Отчет спокойно формируется в другом потоке под виндой, а в никсах - убивает виртуалку.
Может и не мертвая, но с наскока точно не решить.
Добавлено спустя 2 часа 15 минут 41 секунду:
wadman писал(а):Может и не мертвая, но с наскока точно не решить.
Поторопился с выводом. Отчет отрабатывает и результат там же можно записать в *.frp.
Ломает именно экспорт в jpeg, вызванный в доп.потоке.
Здравствуйте.
В отчете имеется MasterData, DetailData и DetailFooter возможно ли сделать чтобы DetailData и DetailFooter не переносились на новую страницу без MasterData? т.е. если все три не входят то на новую страницу переносились все вместе. а то получается что новая страница начинается с итого (DetailFooter). или чтобы DetailFooter не оставался один на странице без DetailData? подскажите в какую сторону копать?
есть ли возможность сформировать отчет без разбиения на страницы? а потом пробежаться по нему и расставить разрывы страниц где нужно?
В отчете имеется MasterData, DetailData и DetailFooter возможно ли сделать чтобы DetailData и DetailFooter не переносились на новую страницу без MasterData? т.е. если все три не входят то на новую страницу переносились все вместе. а то получается что новая страница начинается с итого (DetailFooter). или чтобы DetailFooter не оставался один на странице без DetailData? подскажите в какую сторону копать?
есть ли возможность сформировать отчет без разбиения на страницы? а потом пробежаться по нему и расставить разрывы страниц где нужно?
