LazReport

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

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

Ответить
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

дайте тест проект
elshir
незнакомец
Сообщения: 9
Зарегистрирован: 09.12.2012 21:08:14

Сообщение elshir »

нужен совет:

основой отчета служат три запроса при этом любой из них может быть пустым, или два из трех пустые

вопрос : как сделать чтоб на месте данных из пустого запроса отображался следующий "непустой";
будет ли отображаться шапка пустого запроса ?

прошу прощения, если вопрос покажется не совсем понятным
Аватара пользователя
amateur
энтузиаст
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Сообщение amateur »

Композитный отчет?
elshir
незнакомец
Сообщения: 9
Зарегистрирован: 09.12.2012 21:08:14

Сообщение elshir »

ну я б так не сказал,

отчет один, никакие другие он в себя не включает

хотя, это может быть идеей ..
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

Ошибка!!! :!:
В модуле LR_Class на строке 11658 - tkFloat : SetFloatProp(aObj,Prop,StrToFloat(aValue));
вылазит ошибка "EConvertError" c сообщением "1.5 is an invalid float".
Предыстория: В дизайнере добавляю объект Barcode, делаю настройку и устанавливаю свойство ZOOM в значение "1,5" (именно запятая иначе не дает) сохраняю отчет,
а при открытии отчета валится выше описанная ошибка.
Решил это дело таким способом (наверное не очень красивым, но у мну работает :) ) -
tkFloat: SetFloatProp(aObj,Prop,StrToFloat(StringReplace(StringReplace(aValue, ',', FormatSettings.DecimalSeparator, [rfReplaceAll, rfIgnoreCase]), '.', FormatSettings.DecimalSeparator, [rfReplaceAll, rfIgnoreCase])));

Разделителем в региональных настройках стоит запятая.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

ssadragon, это проблема как раз вашей программы, а не LazReport. Приведение формата чисел к региональным настройкам задача для приложения, а не компонента.
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

Padre_Mortius Может тогда подскажете как мне можно повлиять на данную ситуацию, чтобы данная ошибка впредь не имела место. :D
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Поставить разделитель точку вместо запятой?
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

alexs, хм я ж написал "свойство ZOOM в значение "1,5" (именно запятая иначе не дает)"
В инспекторе объектов дизайнера в свойстве ZOOM дает ставить и запятую и точку, но при применении этого свойства (например нажатием ENTER) со значением с точкой ругается Invalid float, со значением с запятой применяет, объект штрихкода зуммируется все сохраняется, но при просмотре отчета ошибка Invalid float.
При двойном нажатии на объекте появляется окно "Редактор штрих-кода". В этом окне свойство "Масштаб" по умолчанию имеет значение "1,0", но поставить запятую юзеру вообще не дает, только точку и при нажатии на ОК не происходит зуммирование компонента BARCODE, а при повторном открытии этого окна (двойным кликаньем на компоненте) свойство "Масштаб" установлено в "1,0". И все повторяется как и в прошлом варианте "со значением с запятой применяет, объект штрихкода зуммируется все сохраняется, но при просмотре отчета ошибка Invalid float." :(
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

Здрасте!!! :) Эт опять я.
Вообщем нашел где в модуле (LR_Class) косяк (на мой взгляд).
В функции GetSaveProperty (что на 11634 строке) происходит такая фигня:

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

tkFloat: begin
           OldSep := DecimalSeparator;
           DecimalSeparator := '.';
           Result := FloatToStr(GetFloatProp(aObj,Prop));
           DecimalSeparator := OldSep;
         end;

Что на мой взгляд не есть хорошо. Ну например у меня многопоточное приложение и в этот самый момент я тоже начинаю обращаться к DecimalSeparator`у и мой поток ловит "is an invalid float" (ну или что-нибудь др., в общем не очень хорошо будет).
Моё решение выглядит след. образом:

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

tkFloat: begin                                       
            s := FloatToStr(GetFloatProp(aObj,Prop));
            s := StringReplace(s, ThousandSeparator, '', [rfReplaceAll, rfIgnoreCase]);
            Result := StringReplace(s, DecimalSeparator, '.', [rfReplaceAll, rfIgnoreCase]);
         end;

Добавил переменную (в Var s: String;), ну так чтоб не громоздить. Удаляю на всякий случай разделитель групп разрядов. Меняю региональную настройку на точку (раз она так нужна).
А при восстановлении (в функции RestoreProperty (что на 11685 строке того же модуля)) проделываю примерно все также в обратную сторону:

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

tkFloat: begin
            s := StringReplace(aValue, '.', DecimalSeparator, [rfReplaceAll, rfIgnoreCase]);
            SetFloatProp(aObj,Prop,StrToFloat(s));
          end;

Ну вот как бы моё решение, сильно не пинайте, но мне кажется оно будет логичнее, ну и без "is an invalid float".
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

ssadragon
LazReport абсолютно не многопоточный.
В нём куча плохого кода.
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Сообщение ssadragon »

alexs писал(а):LazReport абсолютно не многопоточный.

А я и не пишу что LazReport многопоточный, я пишу
Ну например у меня многопоточное приложение...


alexs писал(а):В нём куча плохого кода.

Ну а вы как-то можете посодействовать продвижению моего фикса в Trunk LazReport`a.
Как я понял вас там уже знают.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Собственно, вопрос не совсем по Lazreport`у... Вроде бы попадалась информация - но что то не найду...
Итак, как можно скомпилировать проект, что бы репорты были в исполняемом файле, и как к ним потом добраться. В Delphi был редактор русурсов, а как в Lazarus это делается?
SeZuka
постоялец
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Сообщение SeZuka »

Ну как бы создай для каждого репорта свой TFRReport и размести на форме, включаешь у каждого свойство StoreInForm и все сохранится в ресурсе формы, потом просто вызываешь нужный.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

SeZuka, Благодарю!
Ответить