Как получить отображаемое в Tfrxmemoview значение, а не тест содержимого в Memo

отредактировано 11:30 Раздел: FastReport 4.0
Имеется отчет, в котором существует Memo42. В нем подводится итог таблицы детализации. Memo42 имеет следующий текст:
[SUM(<FIBQuery1."ERRSVC_OUTCOME">,Detail)]

Задача: вытащить отображаемую цифру в поле TcxCurrencyEdit приложения (да в общем то не важно... просто в приложение).

Пробую так, но получаю соответственно тест Мемо (SUM(<FIBQuery1."ERRSVC_OUTCOME">,Detail)]), а не значение (и это в принципе логично):
  var AReportMemo: TfrxMemoView;
begin
  AReportMemo := TfrxMemoView(DMREPORT.repActOfMedicalExpertise.FindObject('Memo42'));  
  if Assigned(AReportMemo) then
    edActSum.Value := StrToFloat(Trim(AReportMemo.Text));
end;

Где edActSum - TcxCurrencyEdit.

Люди помогите добраться до значения. Кстати AReportMemo.Value возвращает пустышку.

Комментарии

  • gpigpi
    отредактировано 11:30
    Передавайте значение [SUM(<FIBQuery1."ERRSVC_OUTCOME">,Detail)] в переменную отчёта в событии Memo42.OnBeforePrint
    После построения отчёта можно получить значение переменной. Для этого нужно установить TfrxReport.EngineOptions.DestroyForms в False
  • отредактировано 11:30
    gpi написал: »
    Передавайте значение [SUM(<FIBQuery1."ERRSVC_OUTCOME">,Detail)] в переменную отчёта в событии Memo42.OnBeforePrint
    После построения отчёта можно получить значение переменной. Для этого нужно установить TfrxReport.EngineOptions.DestroyForms в False

    Логично... Спасибо большое gpi. DestroyForms трогать не придется я отчет в preview отображаю, и уничтожаю его только после того, как Tabsheet с этим Preview закрыт.
  • отредактировано 11:30
    Хочу сказать... все таки фигово, что нет у TfrxMemoView свойства вроде DisplayText или DisplayMemo. Оно пригодилось бы.
  • gpigpi
    отредактировано 11:30
    Кстати, проверил, в OnAfterPrint Memo.Text содержит выводимое значение
  • отредактировано 11:30
    gpi написал: »
    Кстати, проверил, в OnAfterPrint Memo.Text содержит выводимое значение

    Да. Мало того, я в качестве аргумента во внешнюю пользовательскую функцию передаю SumPropis(Memo42.Text) и она работает (в смысле функция сумма прописью) :) . В качестве аргумента у этой функции - переменная типа Real;
  • gpigpi
    отредактировано October 2011
    А где Вы используете этот код?
      var AReportMemo: TfrxMemoView;
    begin
      AReportMemo := TfrxMemoView(DMREPORT.repActOfMedicalExpertise.FindObject('Memo42'));  
      if Assigned(AReportMemo) then
        edActSum.Value := StrToFloat(Trim(AReportMemo.Text));
    end;
    
    написал:
    Мало того, я в качестве аргумента во внешнюю пользовательскую функцию передаю SumPropis(Memo42.Text)
    Старайтесь избегать подобных конструкций. Используйте SumPropis(SUM(<FIBQuery1."ERRSVC_OUTCOME">,Detail))
  • отредактировано 11:30
    Данный код - уже не где :) . Но предполагалось в одной из форм приложения. Смысл такой. После выбора аргументов запроса в БД (Даты, счета и т.д.) формировались наборы данных (в FIB'овские датасеты), пользователю же, отображались эти данные не в Grid'е, а в сформированном по этим датасетам отчете, отображенном в TfrxPreview, расположенном на форме. Далее при необходимости, пользователь нажав на кнопку мог сохранить данные этого отчета, т.е. записи полученные в датасеты, копировались в отдельные таблицы (дело в том, что содержимое этого отчета может меняться в определенные промежутки времени, поэтому его необходимо сохранять на текущий момент). После нажатия на кнопку появлялся диалог, в котором необходимо ввести данные о сохраняемом отчете. Вот в эту форму и надо было поместить итоговую сумму этого отчета. Из наборов данных ее брать не хотелось, так как для получения наборов данных использовался Dynamic SQL, сложные вложенные процедуры и занимало это прилично времени. Создавать еще один запрос, который возвращал бы SUM из этих процедур, с такими же временными затратами для получения одной цифры было не резонно. Поэтому я решил дернуть этот цифирь из отчета.

    На самом деле, я к таким конструкциям редко прибегаю. Просто в данном случае меня удивило то, что в контексте отчета, получается, я все таки получаю отображаемое значение.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.