LazReport

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

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

Re: LazReport

Сообщение slyubez » 13.04.2015 14:37:29

Благодарю.

Тут нарвался еще на непонятный косяк. В официальном вики-учебнике есть вот такой пример передачи значения в переменную:
Код: Выделить всё
procedure TForm1.Button1Click(Sender:TObject);
begin
  frReport1.Values.FindVariable('test').Field := QuotedStr('test1');
  frReport1.ShowReport;
end;

У меня такой метод почему-то не работает. Вместо значения переменной - пустота на месте, где оно должно быть. Имена переменных - английские; их названия прописывал через мемо записи категорий и переменных в дизайнере. Строки задания значений я записал после загрузки отчета из файла и назначения датасета компоненту TfrDBDataset. В качестве значений пробовал и английский, и русский текст - не идёт. Что касается OnGetValue - его хотелось бы использовать лишь в крайнем случае, если этот способ не заведется, ибо многомодульная структура проекта мешает такому использованию.

Добавлено спустя 4 часа 21 минуту 1 секунду:
Полез по этой проблеме в сорцы с отладчиком. Привожу код с моими комментами.
Модуль LRClass.pas
Код: Выделить всё
procedure TfrReport.GetVariableValue(const s: String; var aValue: Variant);
...
begin
  TVarData(aValue).VType := varEmpty;

  DoGetValue(s,aValue); //по исполнении aValue=UnAssigned
     
  if TVarData(aValue).VType = varEmpty then
  begin
    Value := Values.FindVariable(s); //заданное значение видно в отладчике
    if Assigned(Value) then
    begin
      with Value do
      begin
         case Typ of
          vtNotAssigned: aValue := ''; //а вот здесь значение обнуляется
          vtDBField    : begin
                            F := TfrTField(DSet.FindField(Field));
                            if not F.DataSet.Active then
                              F.DataSet.Open;
                            if Assigned(F.OnGetText) then
                              aValue:=F.DisplayText
                            else
                              aValue:=lrGetFieldValue(F);//F.AsVariant;
                          end;
          vtFRVar       : aValue := frParser.Calc(Field);
          vtOther       : begin
                            if OtherKind = 1 then
                              aValue:=frParser.Calc(Field)
                            else
                              aValue:=frParser.Calc(frSpecFuncs[OtherKind]);
                          end;
         end;
      end;

Похоже, этим переменным нужно задавать еще какой-то тип. Но как это делать в дизайнере - непонятно.

Добавлено спустя 27 минут 54 секунды:
Заменил строчку 8897 в LR_Class.pas
Код: Выделить всё
vtNotAssigned: aValue := '';

на
Код: Выделить всё
vtNotAssigned: aValue := Field;

Заработало. Но могу лишь понадеяться, что я не сломал другого функционала такой заменой.

Добавлено спустя 3 часа 23 минуты 25 секунд:
Кто-нибудь может загнать последнюю проблему в багтрекер? Я там зарегился, но подтверждение мне на мыло не пришло.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: LazReport

Сообщение xcod » 14.04.2015 08:03:20

я вот так передаю значение в переменную
Код: Выделить всё
frVariables['DIAG'] := DBLupCBoxDIAG.Text;
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: LazReport

Сообщение slyubez » 14.04.2015 08:33:18

я вот так передаю значение в переменную

Этим способом я пользовался уже давно, когда работал с FreeReport (он описан в его документации). У меня такая запись не компилировалась, даже когда я прописал Lr_intrp в uses.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: LazReport

Сообщение xcod » 14.04.2015 08:40:47

у меня на lr_class ссылается
правда я лазаря с паскалем не менял с 13 года
все компилируется
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: LazReport

Сообщение slyubez » 14.04.2015 08:58:32

у меня на lr_class ссылается
правда я лазаря с паскалем не менял с 13 года
все компилируется

Попробовал еще раз. Код скомпилировался. Однако с ним та же самая проблема, что и выше - то есть, без корректировки строчки значение переменной отображается пустым.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: LazReport

Сообщение xcod » 14.04.2015 09:16:55

тогда не знаю
возможно чет сломали или переделали
вы пробовали на тестовом проекте?
создать с нуля и проверить
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: LazReport

Сообщение slyubez » 14.04.2015 09:25:02

вы пробовали на тестовом проекте?
создать с нуля и проверить

Наткнулся на своем новом проекте (тестовым его назвать язык не поворачивается), но сделать тестовый простейший - не проблема. Но тогда уж правильнее это делать на чистой среде. На днях проверну.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: LazReport

Сообщение alexs » 14.04.2015 09:27:37

xcod писал(а):frVariables['DIAG'] := DBLupCBoxDIAG.Text;

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

Re: LazReport

Сообщение slyubez » 14.04.2015 11:21:28

Прилагаю тестовый проект и пару скриншотов с изображением дизайнера и отчета в превью-окне.
Использую Lazarus 1.2.6, FPC 2.6.4, ревизию SVN: 46529. Версия под Windows.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: LazReport

Сообщение alexs » 14.04.2015 12:41:14

Для такого метода не надо объявлять переменную в самом отчёте.
Достаточно сделать присвоение.

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

Re: LazReport

Сообщение slyubez » 17.04.2015 00:04:46

Не холивара ради - а какое исключение должен выкидывать именно LazReport? Проверять, находится ли файл по указанному пути - обязанность программиста.

Хотя бы о невозможности открыть файл отчета. Если файл окажется на месте, но будет запорчен, LR что, тоже исключения не выкинет? Здесь вот возник косяк с путем, и из-за невыданного исключения возник вопрос - глюк это LR или строки с именем? У FastReport метод LoadFromFile выкидывает исключение.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: LazReport

Сообщение *Rik* » 03.06.2015 20:52:55

Хочу вернуться к вопросу группировки на Detail Data Band. Имеется Master Data, за ним Group Header, за ним Detail Data, группировка не работает. Скажите пожалуйста, группировка не работает на Detail Data или я что-то не так делаю? Если группировку применяю к Master Data все нормально...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: LazReport

Сообщение java73 » 05.06.2015 11:26:48

alexs Добрый день. Никак у меня все же не получается запустить LazReport.
Исходные - Лазарус 1.4.0, LazReport - пакет из самого свежего SVN, перекомпилированный
MySQL 5.6, доступ к ней через компоненты ZeosDBO

Есть открытый источник данных ZTable, в отчете просто сделал бэнд details и внес на лист все поля таблицы.
Метод ShowReport ничего не открывает, превью в дизайнере отчетов также ничего не показывает.

Что мне делать, не знаю((((
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: LazReport

Сообщение *Rik* » 05.06.2015 14:10:13

java73 писал(а):alexs Добрый день. Никак у меня все же не получается запустить LazReport.
Исходные - Лазарус 1.4.0, LazReport - пакет из самого свежего SVN, перекомпилированный
MySQL 5.6, доступ к ней через компоненты ZeosDBO

Есть открытый источник данных ZTable, в отчете просто сделал бэнд details и внес на лист все поля таблицы.
Метод ShowReport ничего не открывает, превью в дизайнере отчетов также ничего не показывает.

Что мне делать, не знаю((((

Почему details?

Начинать лучше с Master Data.

Для ZTable должен существовать TfrDBDataSet (источник данных для отчета) для того, чтобы отчет мог прокручивать ваш ZTable.
В этом примере, для набора данных REALIZ добавлен компонент frREALIZ: TfrDBDataSet, который связан с REALIZ
Изображение

В отчете MasterData связан с frREALIZ
Изображение

Добавлено спустя 3 часа 14 минут 5 секунд:
Нашел такой косяк:
Новая колонка стартует без отступа:
Изображение

alex, можешь помочь? Я как понял ты похоже в коде lazreporta шаришь. На вскидку исправить не удалось, там есть переменная CurY, манипуляции с ней ни чего не дали...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: LazReport

Сообщение alexs » 05.06.2015 22:33:41

*Rik* писал(а):Новая колонка стартует без отступа:


А это как добился?
Колонки нормально выравниваться должны.
Может пытался подотчёты (subreport-ы) использовать?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru