Нумерация строк средствами отчета?

отредактировано 20:36 Раздел: FastReport 3.0
Уважаемые специалисты! Подскажите пожалуйста как пронумеровать мне в отчете строки, допустим у меня есть база и она имеет вид:

Иванов
Петров
Сидоров


а на выходе хочу получит

1 Иванов
2 Петров
3 Сидоров

При использовании DBCrossTab?? Интересно средствами отчета... как это сделать????? Кто знает, помогите.... что-то в доке про это ничего не сказанно..

Комментарии

  • gpigpi
    отредактировано 20:36
    var i: integer;
    procedure Cross1OnPrintRowHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
    begin
        inc(i);
        if Copy(Memo.Memo.Text,1,11)<>'Grand Total' then
          Memo.Memo.Text:=IntToStr(i)+' '+Value;
    end;
    
    begin
         i:=0;
    end.
    
  • отредактировано 20:36
    gpi написал:
    var i: integer;
    procedure Cross1OnPrintRowHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
    begin
        inc(i);
        if Copy(Memo.Memo.Text,1,11)<>'Grand Total' then
          Memo.Memo.Text:=IntToStr(i)+' '+Value;
    end;
    
    begin
         i:=0;
    end.
    
    Так не катит, если б это обычный кросс-таб был тогда да, а как насчет DBCross-Tab??? Как сделать дополнительное поле и туда заносить данные для меня так и остается загадкой... конечно можно через запрос это все сделать, но с точки зрения программирования лучше это делать средствами отчета.... А что насчет Line# ? его можно пробывать? опишите пожалуйста...




  • gpigpi
    отредактировано 20:36
    Приведенный пример работает и с DBCross-Tab
    Изменяется поле с фамилиями. Перед фамилией ставится номер
    Если нужно номер выводить в отдельной ячейке, то всё равно нужно создавать вычисляемое поле в датасете, отсортированном по фамилиям, и при смене фамилии увеличивать номер
  • отредактировано 20:36
    gpi написал:
    Приведенный пример работает и с DBCross-Tab
    Изменяется поле с фамилиями. Перед фамилией ставится номер
    Если нужно номер выводить в отдельной ячейке, то всё равно нужно создавать вычисляемое поле в датасете, отсортированном по фамилиям, и при смене фамилии увеличивать номер
    Если в датасете его делать поле это - то отчетних ругается, что нет такого поля! Если тебе не сложно приведи пример пожалуйста... Как и что нужно делать, что все работало нормально...
  • gpigpi
    отредактировано March 2006
    В папку с проектом нужно поместить файл crosstest.db из FRDemo
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, DBTables, frxClass, frxDBSet, frxCross, StdCtrls;
    
    type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        frxDBDataset1: TfrxDBDataset;
        frxCrossObject1: TfrxCrossObject;
        Button1: TButton;
        Query1: TQuery;
        Query1Name: TStringField;
        Query1Year: TSmallintField;
        Query1Month: TSmallintField;
        Query1Days: TSmallintField;
        Query1Salary: TCurrencyField;
        Query1Num: TIntegerField;
        frxReport1: TfrxReport;
        procedure FormShow(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Query1CalcFields(DataSet: TDataSet);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      num: integer;
      PrevName: string;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormShow(Sender: TObject);
    begin
         Query1.Active:=True;
         num:=1;
         PrevName:=Query1Name.AsString;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         frxReport1.ShowReport();
    end;
    
    procedure TForm1.Query1CalcFields(DataSet: TDataSet);
    begin
         if Query1Name.AsString<>PrevName then
           begin
             PrevName:=Query1Name.AsString;
             inc(num);
           end;
         Query1Num.AsInteger:=num;  
    end;
    
    end.
    ======dfm=====
    object Form1: TForm1
      Left = 192
      Top = 114
      Width = 353
      Height = 339
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      OnShow = FormShow
      PixelsPerInch = 96
      TextHeight = 13
      object Button1: TButton
        Left = 110
        Top = 184
        Width = 75
        Height = 25
        Caption = 'ShowReport'
        TabOrder = 0
        OnClick = Button1Click
      end
      object DataSource1: TDataSource
        DataSet = Query1
        Left = 90
        Top = 80
      end
      object frxReport1: TfrxReport
        Version = '3.20'
        DotMatrixReport = False
        IniFile = '\Software\Fast Reports'
        PreviewOptions.Buttons = [pbPrint, pbLoad, pbSave, pbExport, pbZoom, pbFind, pbOutline, pbPageSetup, pbTools, pbEdit, pbNavigator, pbExportQuick]
        PreviewOptions.Zoom = 1.000000000000000000
        PrintOptions.Printer = 'По умолчанию'
        ReportOptions.CreateDate = 38790.700506319400000000
        ReportOptions.LastChange = 38790.712814178200000000
        ScriptLanguage = 'PascalScript'
        ScriptText.Strings = (
          'begin'
          ''
          'end.')
        Left = 54
        Top = 130
        Datasets = <
          item
            DataSet = frxDBDataset1
            DataSetName = 'frxDBDataset1'
          end>
        Variables = <>
        Style = <>
        object Page1: TfrxReportPage
          PaperWidth = 210.000000000000000000
          PaperHeight = 297.000000000000000000
          PaperSize = 9
          LeftMargin = 10.000000000000000000
          RightMargin = 10.000000000000000000
          TopMargin = 10.000000000000000000
          BottomMargin = 10.000000000000000000
          object DBCross1: TfrxDBCrossView
            Left = 2.000000000000000000
            Top = 14.000000000000000000
            Width = 80.000000000000000000
            Height = 16.000000000000000000
            DownThenAcross = False
            RowLevels = 2
            CellFields.Strings = (
              'Salary')
            ColumnFields.Strings = (
              'Month')
            DataSet = frxDBDataset1
            DataSetName = 'frxDBDataset1'
            RowFields.Strings = (
              'num'
              'Name')
            Memos = {
              3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574
              662D38223F3E3C63726F73733E3C63656C6C6D656D6F733E3C546672784D656D
              6F56696577204E616D653D2222204C6566743D2239312220546F703D22333222
              2057696474683D22343322204865696768743D2232322220416C6C6F77457870
              72657373696F6E733D2246616C736522204672616D652E5479703D2231352220
              476170583D22332220476170593D2233222048416C69676E3D22686152696768
              7422205374796C653D2263656C6C222056416C69676E3D22766143656E746572
              2220546578743D2230222F3E3C2F63656C6C6D656D6F733E3C636F6C756D6E6D
              656D6F733E3C546672784D656D6F56696577204E616D653D2222205461673D22
              31303022204C6566743D2239312220546F703D223130222057696474683D2234
              3322204865696768743D2232322220416C6C6F7745787072657373696F6E733D
              2246616C736522204672616D652E5479703D2231352220476170583D22332220
              476170593D2233222048416C69676E3D22686143656E74657222205374796C65
              3D22636F6C756D6E222056416C69676E3D22766143656E746572222054657874
              3D22222F3E3C2F636F6C756D6E6D656D6F733E3C636F6C756D6E746F74616C6D
              656D6F733E3C546672784D656D6F56696577204E616D653D2222205461673D22
              33303022204C6566743D223133342220546F703D223130222057696474683D22
              383122204865696768743D2232322220416C6C6F7745787072657373696F6E73
              3D2246616C73652220466F6E742E436861727365743D22312220466F6E742E43
              6F6C6F723D22302220466F6E742E4865696768743D222D31332220466F6E742E
              4E616D653D22417269616C2220466F6E742E5374796C653D223122204672616D
              652E5479703D2231352220476170583D22332220476170593D2233222048416C
              69676E3D22686143656E7465722220506172656E74466F6E743D2246616C7365
              22205374796C653D22636F6C6772616E64222056416C69676E3D22766143656E
              7465722220546578743D224772616E6420546F74616C222F3E3C2F636F6C756D
              6E746F74616C6D656D6F733E3C726F776D656D6F733E3C546672784D656D6F56
              696577204E616D653D2222205461673D2232303022204C6566743D2231302220
              546F703D223332222057696474683D22333322204865696768743D2232322220
              416C6C6F7745787072657373696F6E733D2246616C736522204672616D652E54
              79703D2231352220476170583D22332220476170593D2233222048416C69676E
              3D22686143656E74657222205374796C653D22726F77222056416C69676E3D22
              766143656E7465722220546578743D22222F3E3C546672784D656D6F56696577
              204E616D653D2222205461673D2232303122204C6566743D2234332220546F70
              3D223332222057696474683D22343822204865696768743D2232322220416C6C
              6F7745787072657373696F6E733D2246616C736522204672616D652E5479703D
              2231352220476170583D22332220476170593D2233222048416C69676E3D2268
              6143656E74657222205374796C653D22726F77222056416C69676E3D22766143
              656E7465722220546578743D22222F3E3C2F726F776D656D6F733E3C726F7774
              6F74616C6D656D6F733E3C546672784D656D6F56696577204E616D653D222220
              5461673D2234303022204C6566743D2231302220546F703D2235342220576964
              74683D22383122204865696768743D2232322220416C6C6F7745787072657373
              696F6E733D2246616C73652220466F6E742E436861727365743D22312220466F
              6E742E436F6C6F723D22302220466F6E742E4865696768743D222D3133222046
              6F6E742E4E616D653D22417269616C2220466F6E742E5374796C653D22312220
              4672616D652E5479703D2231352220476170583D22332220476170593D223322
              2048416C69676E3D22686143656E7465722220506172656E74466F6E743D2246
              616C736522205374796C653D22726F776772616E64222056416C69676E3D2276
              6143656E7465722220546578743D224772616E6420546F74616C222F3E3C5466
              72784D656D6F56696577204E616D653D2222205461673D2234303122204C6566
              743D2234332220546F703D223534222057696474683D22343822204865696768
              743D223232222056697369626C653D2246616C73652220416C6C6F7745787072
              657373696F6E733D2246616C73652220466F6E742E436861727365743D223122
              20466F6E742E436F6C6F723D22302220466F6E742E4865696768743D222D3133
              2220466F6E742E4E616D653D22417269616C2220466F6E742E5374796C653D22
              3122204672616D652E5479703D2231352220476170583D22332220476170593D
              2233222048416C69676E3D22686143656E7465722220506172656E74466F6E74
              3D2246616C736522205374796C653D22726F77746F74616C222056416C69676E
              3D22766143656E7465722220546578743D22546F74616C222F3E3C2F726F7774
              6F74616C6D656D6F733E3C63656C6C66756E6374696F6E733E3C6974656D2031
              2F3E3C2F63656C6C66756E6374696F6E733E3C636F6C756D6E736F72743E3C69
              74656D20302F3E3C2F636F6C756D6E736F72743E3C726F77736F72743E3C6974
              656D20322F3E3C6974656D20302F3E3C2F726F77736F72743E3C2F63726F7373
              3E}
          end
        end
      end
      object frxDBDataset1: TfrxDBDataset
        UserName = 'frxDBDataset1'
        CloseDataSource = False
        DataSet = Query1
        Left = 126
        Top = 82
      end
      object frxCrossObject1: TfrxCrossObject
        Left = 166
        Top = 82
      end
      object Query1: TQuery
        OnCalcFields = Query1CalcFields
        SQL.Strings = (
          'select * from crosstest'
          'order by name')
        Left = 48
        Top = 82
        object Query1Name: TStringField
          FieldName = 'Name'
        end
        object Query1Year: TSmallintField
          FieldName = 'Year'
        end
        object Query1Month: TSmallintField
          FieldName = 'Month'
        end
        object Query1Days: TSmallintField
          FieldName = 'Days'
        end
        object Query1Salary: TCurrencyField
          FieldName = 'Salary'
        end
        object Query1Num: TIntegerField
          FieldKind = fkCalculated
          FieldName = 'Num'
          Calculated = True
        end
      end
    end
    
  • отредактировано 20:36
    gpi написал:
    В папку с проектом нужно поместить файл crosstest.db из FRDemo
    Так а что средствами из самого фаст-репорта это сделать никак нельзя? Вот вроде твоего первого примера? То есть добавить ячейку, и туда тулить вот это все?
  • отредактировано 20:36
    gpi написал:
    Приведенный пример работает и с DBCross-Tab
    Изменяется поле с фамилиями. Перед фамилией ставится номер
    Если нужно номер выводить в отдельной ячейке, то всё равно нужно создавать вычисляемое поле в датасете, отсортированном по фамилиям, и при смене фамилии увеличивать номер
    Ok! Cоздал я вычисляемое поле в датасете, что мне писать в скрипте чтобы получить нумерацию ?
  • gpigpi
    отредактировано 20:36
    написал:
    Ok! Cоздал я вычисляемое поле в датасете, что мне писать в скрипте чтобы получить нумерацию ?
    В скрипте отчёта ничего писать не надо
    Нумерация выполняется в самой программе
    procedure TForm1.FormShow(Sender: TObject);
    begin
        Query1.Active:=True;
        num:=1;
        PrevName:=Query1Name.AsString;
    end;
    
    procedure TForm1.Query1CalcFields(DataSet: TDataSet);
    begin
        if Query1Name.AsString<>PrevName then
          begin
            PrevName:=Query1Name.AsString;
            inc(num);
          end;
        Query1Num.AsInteger:=num;  
    end;
    
    В кросс-табе выполняется группировка по строкам сначала по вычисляемому полю, затем по фамилии
  • отредактировано 20:36
    написал:
    =gpi,Mar 15 2006, 02:14 PM В кросс-табе выполняется группировка по строкам сначала по вычисляемому полю, затем по фамилии
    Спасибо - все работает нормально...... разобрался.......

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

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