Циклится Detail таблица

отредактировано 04:21 Раздел: FastReport 3.0
Зравствуйте!

В общем вот такая проблема:
Есть две таблицы - одна по заказам, другая по их исполнителям (на заказ может быть несколько исполнителей)

Ну и нужно все это живописно представить.

Сначала, пробовал делать это с помощью Вложенного отчета, потом с помощью DetailData band'a результат одинаков: при просмотре в режиме создания, когда на таблицы не накладывается фильтрование (фильтруется таблица заказов по дате) все отображается замечательно. При работе программы получается, что FastReport все время зачем-то печатает первую запись дочерней таблицы с именами исполнителей заказа.

Что с этим можно сделать? Глюк ли это репорта или мой при наложении фильтров глюк?

Комментарии

  • gpigpi
    отредактировано 04:21
    Вероятно, датасет фильтруется в самом отчёте, и первая запись постоянно отображается при формировании отчёта
  • отредактировано 04:21
    Эм.. извините, если честно, не очент понял как оно может фильтроваться в самом отчете, и тем более не очень понятно что с этим делать.

    Фильтр накладывается, ну скажем, при открытии формы в виде Dataset.filter := 'data_receipt>=a and data_receipt <=b';
    Также часть записей отбрасывается в событии OnFilterRecord. Дочерняя таблица никак не фильтруется (кроме того что она дочерняя).

    Может для самого фастРепорта нужно как то эту "дочерность" настраивать?
    Но опять таки - чего же он в режиме редактора все замечательно показывает?


    И еще вопрос, чтобы нового топика не создавать.
    Можно ли заставить фаст репорт печатать записи не таблицей, а подряд, в строчку.
  • gpigpi
    отредактировано 04:21
    Приведите код установки фильтра на таблицу, код OnFilterRecord, шаблон отчёта (fr3) и получившийся результат (fp3)
  • отредактировано 04:21
    Код установки фильтра на таблицу
    function SetFilterRec(Adate,Bdate:string):boolean;
    var fieldname: string;
    
    begin
       FormBestMain.LDataSet.Filtered:=false;
       FormBestMain.LDataSet.Filter:='';
       DM.LD_bo_order.Filtered:=false;
       DM.LD_bo_order.Filter:='';
      if  FormBestMain.LDataSet.Name = 'bo_order' then
        begin
          fieldname:='datetime_receipt';
        end
      else
        begin
          fieldname:='datetime_receipt_money';
        end;
       FormBEstMain.LDataSet.Filtered:=false;
     if (Adate = '') and (Bdate = '') then
        begin
          Bdate:='31.12.2555 23:59:59.000';
          Adate:='01.01.1900 00:00:00.000';
        end;
     if (Adate <> '') and (Bdate = '') then
        begin
          Bdate:= Adate+' 23:59:59.000';
          Adate:=Adate+' 00:00:00.000';
         end
      else if (Adate <> '') and (Bdate <> '') then
        begin
           Bdate:=Bdate+' 23:59:59.000';
           Adate:=Adate+' 00:00:00.000';
        end;
      FormBEstMain.LDataSet.DisableControls;
    
        FormBEstMain.LDataSet.Filter:='('+ fieldname + ' >=' + #39 + Adate + #39 + ') and ('+fieldname+' <=' + #39 + Bdate + #39+')';
        FormBEstMain.LDataSet.Filtered:=true;
        FormBEstMain.LDataSet.Refresh;
        if FormBestMain.LDataSet.Name = 'bo_receipt_money' then
          begin
            fieldname:='datetime_receipt';
            DM.LD_bo_order.Filter:='('+ fieldname + ' >=' + #39 + Adate + #39 + ') and ('+fieldname+' <=' + #39 + Bdate + #39+')';
            DM.LD_bo_order.Filtered:=true;
            DM.LD_bo_order.Refresh;
          end;
        FormBEstMain.LDataSet.EnableControls;
    end;
    



    Код На событие OnFilterRecord
    procedure TDM.bo_orderFilterRecord(DataSet: TDataSet; var Accept: boolean);
    var v,Value:variant; S:string;
    begin
      Accept:=true;
      Accept:=Check_job_title(DataSet);
      if not Accept then exit;
      Accept:=Check_emp_manager(DataSet);
      if not Accept then exit;
    
      if not bShowCancelledOrders then 
       Accept:=not CheckOnCancelledOrder(DataSet);
      if not Accept then exit;
      if not bShowTransferredOrders then
        Accept:= CheckOnCompleteOrder(DataSet); 
       if not Accept then exit;
    
    end;
    

    А fp3 файл получить не удалось, так как прога на этом циклится.
  • отредактировано 04:21
    Эм.. изивните за бескойство вроде все заработало - повесил еще один датасет на ту же таблицу.

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

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

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