проблема с Loadfromfile

отредактировано August 2009 Раздел: FastReport 4.0
описание проблемы:

Имею отчёт (печатная форма налоговой накладной) сделанный при помощи Fast Report 4.6.31
Имею проект на делфи.
если печатную форму сохранять в dfm - всё отлично работает...

Если я сохраняю отчёт в БД, потом я его подгружаю при момощи LoadFromFile(абсолютный_путь_к_файлу_очёта), то имею проблему с кодом внутри отчёта - при открытии отчётя первой вызывается процедура:

procedure col_1OnAfterData(Sender: TfrxComponent);
begin
if col_1.Text = '' then
......................
......................

col_1 - это мемка в MasterData , так вот при открытии печатной формы из программы идёт ругань плана :

"The following error(s) have occured:

Script error at 15:11: Undeclared identifier: 'col_1' "
И после ошибки открывается абсолютно пустая (серая) печатная форма....

Повторюсь - если отчёт не грузить из файла, а вкомпилировать в проект - всё работает отлично...

есть идеи?

Заранее длагодарен.

Комментарии

  • Lizard~Lizard~ Тольятти
    отредактировано 04:13
    komarick написал: »
    Повторюсь - если отчёт не грузить из файла, а вкомпилировать в проект - всё работает отлично...

    есть идеи?

    Заранее длагодарен.

    Попробовать локализовать проблему. Постепенно удаляя из отчета объекты. А дальше смотреть в чем проблема и проще будет разобраться.
  • отредактировано 04:13
    LizarD написал: »
    Попробовать локализовать проблему. Постепенно удаляя из отчета объекты. А дальше смотреть в чем проблема и проще будет разобраться.

    Проблема в том, что на момент парсинга кода в отчёте - ниодной мемки, привязанной к датасету не существует.... Насколько я понимаю - объекты, привязанные к датасету создаются только в случае, если дата сет содержит не нуловый набор данных, а во время выполнения PrepareReport после произведения LoadFromFile - данных в датасете нет....

    я делаю LoadFromFile непосредственно перед PrepareReport - может быть - отчёт нужно подгрузить раньше, или произвести какие-то манипуляции с датасетом?
  • отредактировано 04:13
    Приведи код как ты загружаешь отчет из кода программы.
    Подозреваю,что ошибка где-то там.
    Еще вопрос: программу с загрузкой отчета запускаешь самостоятельно или из Делфи?
  • отредактировано August 2009
    GloThin написал: »
    Приведи код как ты загружаешь отчет из кода программы.
    Подозреваю,что ошибка где-то там.
    Еще вопрос: программу с загрузкой отчета запускаешь самостоятельно или из Делфи?

    qrPrintForm.ParamByName('REPORT_NAME').AsString := self.ClassName;
    qrPrintForm.Execute;
    l_filename := GetCurrentDir + '\TemporaryPrintFile.fr3';
    qrPrintFormREPORT_FORM.SaveToFile(l_filename);
    {до этого момента всё отлично - файлик создался - фастрепортом открывается нормально}

    ReportMain.LoadFromFile(l_filename);
    ReportMain.PrepareReport;
    ReportMain.ShowPreparedReport;

    этот код прописан в паренте для всех форм в Делфи, отвечающих за печать.
    Дело действительно где-то тут - ибо сами отчёты при хранении в dfm - работают отлично....

    По поводу второго вопроса - из делфи. (только что проверил - самостоятельно также не работает)
  • dron-sdron-s Россия
    отредактировано 04:13
    написал:
    ReportMain.PrepareReport;
    ReportMain.ShowPreparedReport;
    зачем тебе это?
    сделать просто
    frxReport.PrepareReport(true);
    frxReport.ShowReport();
    
  • отредактировано 04:13
    DRON написал: »
    зачем тебе это?
    сделать просто
    frxReport.PrepareReport(true);
    frxReport.ShowReport();
    

    Ибо так написано в мануале - это как минимум...
    А в основном - потому, что если отчёт не подготовить - то все дополнительные датасеты (которых нет в паренте) по цепочке не отрефрешатся (в родительском рефреш на афтаопен висит) - и мы будем иметь сплошные нодатафаунд ошибки у оракла и нулы в отчёте...

    Может у кого-то из знатоков будут дельные предложения? Метод научного тыка мне самому известен и он тут не помог.
  • dron-sdron-s Россия
    отредактировано 04:13
    komarick
    вообще то я спрашивал о том, зачем тебе два prepare???
    frxReport.PrepareReport(true); //подготавливаем отчёт с его содержимым
    frxReport.ShowReport(); //отображаем отчёт
    
    написал:
    Ибо так написано в мануале - это как минимум...
    на какой странице мануала такое написано??
  • отредактировано 04:13
    DRON написал: »
    komarick
    вообще то я спрашивал о том, зачем тебе два prepare???
    frxReport.PrepareReport(true); //подготавливаем отчёт с его содержимым
    frxReport.ShowReport(); //отображаем отчёт
    

    на какой странице мануала такое написано??

    Страница 4 програмермануала гласитЖ

    Пример:
    if frxReport1.PrepareReport then
    frxReport1.ShowPreparedReport;
    В этом случае сначала полностью строится отчет, затем показывается в окне
    просмотра. Построение большого отчета может занять много времени, именно
    поэтому вместо PrepareReport/ShowPreparedReport лучше использовать
    асинхронный метод ShowReport.

    Зыж Асинхронный метод в данном случае не применим - выходит полная лажа с дополнительными датасетами (хз почему, но оно так :) )
  • dron-sdron-s Россия
    отредактировано 04:13
    написал:
    выходит полная лажа с дополнительными датасетами (хз почему, но оно так)
    кривой шаблон
    использованы не те бэнды и не для того случая...
    шаблон в студию
  • отредактировано 04:13
    шаблон прилагается, хотя еслиб он был кривой - почему он нормально работает без подгрузки из файла?
  • dron-sdron-s Россия
    отредактировано 04:13
    у меня отчёт не открылся..
    выпал в ошибку... из вкладок есть только Code и Data
    выложи нормальный шаблон!!!

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

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