⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qd_rep.pas

📁 工程预算系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit qd_rep;

interface
uses
    Windows, Messages, Variants, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Db, ADODB, ImgList, StdCtrls, Buttons, ComCtrls, dbctrls, menus,
    Math,ComObj,Gauges,grids,DBGrids,pubunit,Contnrs,printers, FR_Class,DBGridEh,
    hu_pub,Types,OleCtrls,ExtCtrls,pub_rep;

   {取得清单字体}
  function getqdzt(str:string):string;
  {取得清单字号}
  function getqdzh(str:string):integer;
  {取得清单字体颜色}
  function getqdys(str:string):integer;
  {取得框的高度}
  function getqdh(fontname,str:string;fontsize:integer):integer;
  {取得框的宽度}
  function getqdw(fontname,str:string;fontsize:integer):integer;
  {创建清单报表标题部分}
  procedure creatqdbt(frrep:TfrReport;npage:integer;mygrid:Tstringgrid);
  {创建清单表注下}
  procedure createqdbzx(frrep:TfrReport;npage:integer;nup:integer;mygrid:TStringgrid);
  {创建清单报表表头标题部分}
  procedure createqdbtbb(frrep:TfrReport;npage:integer;mygrid:TStringGrid);
  {创建工程量清单封面}
  procedure rep_qdfm(frrep:TfrReport;dmrepmode:TRepMode;npage:integer);   ///创建报表
  {取得分部分项工程量清单数据}
  procedure getgcqdlist(mygrid:TStringGrid);
  {创建分部分项工程量清单}
  procedure creatgcqd(frrep:TfrReport;mygrid:TStringGrid;dmDocMode:TDocMode;dmrepmode:TRepMode;npage:integer;strselectid:string);    //创建报表
  {给分部分项工程量数祖值}
  procedure setqdlist;
  {计算分部分项工程量清单}
  function calgclqd(i:integer;mygrid:TStringGrid;ncol:integer):string;
  {取得分部工程清单项目费汇总表数据}
  procedure getxmqdlist(mygrid:TStringGrid);
  {取得分部分项工程量清单计价表数据}
  procedure getjjbqdlist(mygrid:TStringGrid);
  {取得分部分项工程量清单计算表数据}
  procedure getjsbqdlist(mygrid:TStringGrid);
  {创建分部分项工程量清单综合单价计算表表头部分}
  procedure creatqddjbt(frrep:TfrReport;npage,ntop:integer;mygrid:TStringgrid);
  {给数组}
  procedure setqdjsblist(i:integer);
  {取得清单表注部分字符(相对于分部分项工程量单价计算表而言的)}
  function getqdstr(str:string):string;
  {创建分部分项工程量清单综合单价计算表报表表头标题部分}
  procedure createqdjsbbtbb(frrep:TfrReport;npage:integer;mygrid:TStringGrid;nt:integer);
  {创建分部分项工程量清单综合单价计算表}
  procedure creatgcqdjsb(frrep:TfrReport;mygrid:TStringGrid;b_falg:boolean);  //分两种格式来处理
  procedure creatgcqdjsb1(frrep:TfrReport;mygrid:TStringGrid;dmrepmode:TRepMode;npage:integer);  //创建报表
  {取得其他项目清单的数据}
  procedure getqtxmqd;
  {取得零星工作项目数据}
  procedure getlxgzxm;
  {计算其他项目清单数据}
  function calqtxmqd(i:integer;mygrid:TStringGrid;ncol:integer):string;
  {计算零星工作项目清单数据}
  function callxxm(i:integer;mygrid:TStringGrid;ncol:integer):string;
  {创建其他项目工程量清单}
  procedure createqtxmqd(frrep:TfrReport;mygrid:TStringGrid;dmDocMode:TDocMode;dmrepmode:TRepMode;npage:integer;strselectid:string);   //创建报表
  {取得分部分项工程量清单综合单价计算表数据}
  procedure getzhdjqdlist(mygrid:TStringGrid);
  {创建零星工作项目工作表报表}
  procedure createlxxm(frrep:TfrReport;mygrid:TStringGrid;dmDocMode:TDocMode;dmrepmode:TRepMode;npage:integer;strselectid:string);  //创建报表
  {创建人才机综合报表}
  procedure cretercjzh(frrep:TfrReport;mygrid:TStringGrid;dmDocMode:TDocMode;IsAllrcj:TdmAllrcj;dmrepmode:TRepMode;npage:integer;strselectid,strselectbh:string);   //创建报表
  //---------------------------------------------提取数据部分
  {提取分部分项工程量清单数据到万用表中}
  procedure getfbfxgclqd(mygrid,mygrid1:TStringgrid);
  {提取其他项目或零星工作项目数据}
  procedure getqtxmlxxm(str:string;mygrid:TStringGrid);
  //end 提取数据
  {创建清单万用表表格}
  procedure createqdwyb(frrep:TfrReport;mygrid:TStringGrid;dmDocMode:TDocMode;dmrepmode:TRepMode;npage:integer;strselectid:string);   //创建报表
  {取得三个数中最大的数}
  function getmax(n1,n2,n3:integer):integer;
  {取得取费表的数据}
  procedure getqdqf(strtemp:string);
  {计算清单取费数据}
  function calqdqf(i:integer;mygrid:TStringGrid;ncol:integer):string;
  {创建取费汇总报表}
  procedure creteqdhz(frrep:TfrReport;mygrid:TStringGrid;dmDocMode:TDocMode;dmrepmode:TRepMode;npage:integer;strselectid,strselectbh:string);   //创建报表
  {取得清单或措施项目数据}
  procedure getqd_xmlist(mygrid:TStringGrid);
  {取得清单所有人材机数据}
  procedure getqd_allrcj;

  {取得万用表总页数}
  function getwybpagecount(str:string;mygrid:TStringGrid):integer;
  {取得计算表报表总页数}
  function getjsbpagecount(str1:string;mygrid:TStringgrid):integer;
  {取得计算表竖排表报表总页数}
  function gethjsbjpagecount:integer;
  {取得单价分析总页数}
  function getdjfxpagetcount(str1:string;mygrid:TStringgrid):integer;
  {取得动态费率报表总页数}
  function getdtflpagecount(str:string;mygrid:TStringgrid):integer;
  {取得人材机,价差报表总页数}
  function getrcjpagecount(strselectid,str:string;mygrid:TStringgrid;IsAllrcj:TdmAllrcj):integer;
  {取得取费报表总页数}
  function getqfpagecount(strselectid,str:string;mygrid:TStringgrid):integer;
  {取得清单封面设计数据}
  function getqdfmsjpage(str:string;mygrid:TStringgrid):integer;
  {取得分部分项工程量清单,措施项目清单报表总页数}
  function getgclqdpage(str:string;mygrid:TStringgrid):integer;
  {取得工程量清单报表总页数}
  function getgclqdjsbpage(mygrid:TStringGrid):integer;
  {取得其他项目报表总页数}
  function getqtxmpage(str:String;mygrid:TStringgrid):integer;
  {取得零星项目报表总页数}
  function getlxxmpage(str:string;mygrid:Tstringgrid):integer;
  {取得清单人材机报表总页数}
  function getqdrcjpage(strselectid,str:string;mygrid:TStringGrid;IsAllrcj:TdmAllrcj):integer;
  {取得清单取费报表总页数}
  function getqdqfpage(str:string;mygrid:TStringGrid;strselectbh:string):integer;
  {创建所有报表即报表连继预览,可以连继打印}
  procedure Allreplist(frrep:TfrReport;mygrid:TStringGrid;mytree:TTreeview);  
var
  gcqdlist:Tobjectlist;
  qtxmqdlist:Tobjectlist;
  array_hj:array[1..40] of real;
  array_dj:array[1..6] of string;
  array_qd:array[1..26] of string;

implementation
  uses MAIN,ys,F_qdfm,Hu_jsfy;

{取得清单字体}
function getqdzt(str:string):string;
begin
  if Trim(str)<>'' then
    Result:=Trim(str)
  else
    result:='宋体';
end;


{取得清单字号}
function getqdzh(str:string):integer;
begin
  if Trim(str)<>'' then
    Result:=strtoint(str)
  else
    Result:=9;
end;

{取得清单字体颜色}
function getqdys(str:string):integer;
begin
  if Trim(str)<>'' then
    Result:=strtoint(str)
  else
    Result:=-2147483640;
end;

{取得框的高度}
function getqdh(fontname,str:string;fontsize:integer):integer;
begin
  mainform.l_label.Canvas.Font.Name:=fontname;
  mainform.l_label.Canvas.Font.Size:=fontsize;
  Result:=mainform.l_label.Canvas.TextHeight(str)+7;
end;

{取得框的宽度}
function getqdw(fontname,str:string;fontsize:integer):integer;
begin
  mainform.l_label.Canvas.Font.Name:=fontname;
  mainform.l_label.Canvas.Font.Size:=fontsize;
  Result:=mainform.l_label.Canvas.TextWidth(str)+10;
end;

{创建报表标题表头部分}
procedure creatqdbt(frrep:TfrReport;npage:integer;mygrid:Tstringgrid);
var
  v:TfrMemoView;
  line:TfrLineView;
  page:TfrPage;
  ntopdis,nleftdis,nbottomdis:integer;//报表上,下,左,右边距的值
  dx,dy:integer;                                //报表纸张的宽度和高度  ntop:integer;                                //表头离纸的高度
  nwidth:integer;                             //报表实际宽度
  nw,nh:integer;
  nl:integer;
  ntemp:integer;
  nmax_width:array[1..3] of integer;
  nmax,i:integer;
begin
  page:=frrep.Pages.Pages[npage];
  nleftdis:=strtoint(array_jbxx[4])*3;
  ntopdis:=strtoint(array_jbxx[5])*3;
  nbottomdis:=strtoint(array_jbxx[7])*3;

  if Trim(array_jbxx[8])='1' then
  begin
    dx:=getpagew(0,True);
    dy:=getpageh(0,True);
  end
  else
  begin
    dx:=getpagew(0,False);
    dy:=getpageh(0,False);
  end;

  ntemp:=0;
  for i:=0 to mygrid.ColCount-1 do
    ntemp:=ntemp+mygrid.ColWidths[i];

  if Trim(array_jbxx[1])='1' then               //表头框架的宽度
    nwidth:=ntemp
  else
    nwidth:=ntemp-mygrid.ColWidths[0];

//创建报表的页眉和页脚是否有下划线
  if Trim(array_jbxx[2])='1' then
  begin
    line:=TfrLineView.Create;
    line.SetBounds(nleftdis,ntopdis,nwidth,20);
    page.Objects.Add(line);
  end;

  if Trim(array_jbxx[3])='1' then
  begin
    line:=TfrLineView.Create;
    line.SetBounds(nleftdis,dy-nbottomdis,nwidth,20);
    page.Objects.Add(line);
  end;
//end************************************************
//创建报表页眉和页脚文字
//页眉
  if Trim(array_jbxx[20])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[2]),getstr(array_jbxx[20]),getqdzh(array_dyxx[3]));
    nh:=getqdh(getqdzt(array_dyxx[2]),getstr(array_jbxx[20]),getqdzh(array_dyxx[3]));
    v.SetBounds(nleftdis,ntopdis-18,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[2]);
    v.Font.Size:=getqdzh(array_dyxx[3]);
    v.Font.Color:=getqdys(array_dyxx[4]);
    v.Memo.Add(getstr(array_jbxx[20]));
    page.Objects.Add(v);
  end;

  if Trim(array_jbxx[21])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[2]),getstr(array_jbxx[21]),getqdzh(array_dyxx[3]));
    nh:=getqdh(getqdzt(array_dyxx[2]),getstr(array_jbxx[21]),getqdzh(array_dyxx[3]));
    v.SetBounds(Round(nwidth/2)-60,ntopdis-18,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[2]);
    v.Font.Size:=getqdzh(array_dyxx[3]);
    v.Font.Color:=getqdys(array_dyxx[4]);
    v.Memo.Add(getstr(array_jbxx[21]));
    page.Objects.Add(v);
  end;

  if Trim(array_jbxx[22])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[2]),getstr(array_jbxx[22]),getqdzh(array_dyxx[3]));
    nh:=getqdh(getqdzt(array_dyxx[2]),getstr(array_jbxx[22]),getqdzh(array_dyxx[3]));
    v.SetBounds(nwidth-nh+nleftdis,ntopdis-18,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[2]);
    v.Font.Size:=getqdzh(array_dyxx[3]);
    v.Font.Color:=getqdys(array_dyxx[4]);
    v.Alignment:=9;
    v.Memo.Add(getstr(array_jbxx[22]));
    page.Objects.Add(v);
  end;

//页脚

  if Trim(array_jbxx[23])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[5]),getstr(array_jbxx[23]),getqdzh(array_dyxx[6]));
    nh:=getqdh(getqdzt(array_dyxx[5]),getstr(array_jbxx[23]),getqdzh(array_dyxx[6]));
    v.SetBounds(nleftdis,dy-nbottomdis,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[5]);
    v.Font.Size:=getqdzh(array_dyxx[6]);
    v.Font.Color:=getqdys(array_dyxx[7]);
    v.Memo.Add(getstr(array_jbxx[23]));
    page.Objects.Add(v);
  end;

  if Trim(array_jbxx[24])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[5]),getstr(array_jbxx[24]),getqdzh(array_dyxx[6]));
    nh:=getqdh(getqdzt(array_dyxx[5]),getstr(array_jbxx[24]),getqdzh(array_dyxx[6]));
    v.SetBounds(Round(nwidth/2)-60,dy-nbottomdis,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[5]);
    v.Font.Size:=getqdzh(array_dyxx[6]);
    v.Font.Color:=getqdys(array_dyxx[7]);
    v.Memo.Add(getstr(array_jbxx[24]));
    page.Objects.Add(v)
  end;

  if Trim(array_jbxx[25])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[5]),getstr(array_jbxx[25]),getqdzh(array_dyxx[6]));
    nh:=getqdh(getqdzt(array_dyxx[5]),getstr(array_jbxx[25]),getqdzh(array_dyxx[6]));
    v.SetBounds(nwidth-nh+nleftdis,dy-nbottomdis,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[5]);
    v.Font.Size:=getqdzh(array_dyxx[6]);
    v.Font.Color:=getqdys(array_dyxx[7]);
    v.Alignment:=9;
    v.Memo.Add(getstr(array_jbxx[25]));
    page.Objects.Add(v);
  end;

//end***********************************************结束

//创建报表的标题部分
//题注左
  if Trim(array_jbxx[9])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[8]),getstr(array_jbxx[9]),getqdzh(array_dyxx[9]));
    nh:=getqdh(getqdzt(array_dyxx[8]),getstr(array_jbxx[9]),getqdzh(array_dyxx[9]));
    v.SetBounds(nleftdis,ntopdis,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[8]);
    v.Font.Size:=getqdzh(array_dyxx[9]);
    v.Font.Color:=getqdys(array_dyxx[10]);
    v.Memo.Add(getstr(array_jbxx[9]));
    page.Objects.Add(v);
  end;

  if Trim(array_jbxx[10])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[8]),getstr(array_jbxx[10]),getqdzh(array_dyxx[9]));
    nh:=getqdh(getqdzt(array_dyxx[8]),getstr(array_jbxx[10]),getqdzh(array_dyxx[9]));
    v.SetBounds(nleftdis,ntopdis+20,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[8]);
    v.Font.Size:=getqdzh(array_dyxx[9]);
    v.Font.Color:=getqdys(array_dyxx[10]);
    v.Memo.Add(getstr(array_jbxx[10]));
    page.Objects.Add(v);
  end;

  if Trim(array_jbxx[11])<>'' then
  begin
    v:=TfrMemoView.Create;
    nw:=getqdw(getqdzt(array_dyxx[8]),getstr(array_jbxx[11]),getqdzh(array_dyxx[9]));
    nh:=getqdh(getqdzt(array_dyxx[8]),getstr(array_jbxx[11]),getqdzh(array_dyxx[9]));
    v.SetBounds(nleftdis,ntopdis+40,nw,nh);
    v.Font.Name:=getqdzt(array_dyxx[8]);
    v.Font.Size:=getqdzh(array_dyxx[9]);
    v.Font.Color:=getqdys(array_dyxx[10]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -