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

📄 qd_rep.pas

📁 工程预算系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      creatqdbt(frrep,npage,mygrid);
      //创建标题
      createqdbtbb(frrep,npage,mygrid);

      ntup:=ntop+nhheight;
      for i:=ntempcount to gcqdlist.Count-1 do
      begin
        rcj:=Tjc_rcj(gcqdlist.Items[i]);

        nmax:=1;
        for j:=1 to mygrid.ColCount-1 do
        begin
          nmin:=getlinecount(calgclqd(i,mygrid,j),mygrid.ColWidths[j]);
          if nmin>nmax then
            nmax:=nmin;
        end;

        if Trim(array_jbxx[1])='1' then
        begin
          v:=TfrMemoview.Create;
          v.SetBounds(nleftdis,ntup,mygrid.ColWidths[0],nht*nmax);
          v.FrameTyp:=15;
          v.Font.Name:=getqdzt(array_dyxx[11]);
          v.Font.Size:=getqdzh(array_dyxx[12]);
          v.Font.Color:=getqdys(array_dyxx[13]);
          v.Alignment:=10;
          v.Memo.Add(rcj.column1);
          page.Objects.Add(v);
        end;

        for j:=1 to mygrid.ColCount-1 do
        begin
          if isnumber(calgclqd(i,mygrid,j))=0  then
            array_hj[j]:=array_hj[j]+strtofloat(calgclqd(i,mygrid,j));
        
          v:=TfrMemoView.Create;
          v.SetBounds(getl(mygrid,j,nleftdis),ntup,mygrid.ColWidths[j],nht*nmax);
          v.FrameTyp:=15;
          v.Font.Name:=getqdzt(array_dyxx[11]);
          v.Font.Size:=getqdzh(array_dyxx[12]);
          v.Font.Color:=getqdys(array_dyxx[13]);
          if array_jbxx[47]='1' then
          begin
            if isnumber(calrcj(i,mygrid,j))=0 then
            begin
              if getlinecount(calgclqd(i,mygrid,j),mygrid.ColWidths[j])>=2 then
                v.Font.Size:=6;
            end;
          end;
          v.Alignment:=getalignment(mygrid,j);
  {说明如果是有*号,类型是清单的才是清单,falgd标志0清单1项目2是合计
    column[1]是清单的序号}
  {说明如果是有*号,类型是清单的才是清单,falgd标志:0清单,1项目,2是合计
    column[1]是清单的序号,本项目小计是3,定额材料是4,清单合计5}
          if rcj.flag=1 then
          begin
            if lowercase(Trim(mygrid.Cells[j,1]))='mc' then
              v.Memo.Add(calgclqd(i,mygrid,j))
            else
              v.Memo.Add('');
          end
          else if (rcj.flag=0) or (rcj.flag=4) then
            v.Memo.Add(calgclqd(i,mygrid,j))
          else if (rcj.flag=2) or (rcj.flag=3) or (rcj.flag=5) then
          begin
            if (lowercase(Trim(mygrid.Cells[j,1]))='mc') then
              v.Memo.Add(calgclqd(i,mygrid,j))
            else if (Trim(array_jbxx[46])='1')  and (Trim(mygrid.Cells[j,4])='') then
              v.Memo.Add('')
            else if i<gcqdlist.Count then
              v.Memo.Add(calgclqd(i,mygrid,j));

          end;
          page.Objects.Add(v);
        end;   //end for j

        if array_jbxx[46]='1' then
        begin
        if i+1=gcqdlist.Count-1 then    //创建本页小计  因为记录不够,那就在合计前
        begin
          if array_dyxx[1]='1' then
          begin
            b_frist:=True;                  //创建本页小计了
            ntup:=ntup+nht*nmax;
            nmax:=1;
            if Trim(array_jbxx[1])='1' then
            begin
              v:=TfrMemoview.Create;
              v.SetBounds(nleftdis,ntup,mygrid.ColWidths[0],nht*nmax);
              v.FrameTyp:=15;
              v.Memo.Add('');
              page.Objects.Add(v);
            end;

            for ncol:=1 to mygrid.ColCount-1 do
            begin
              v:=TfrMemoView.Create;
              v.SetBounds(getl(mygrid,ncol,nleftdis),ntup,mygrid.ColWidths[ncol],nht*nmax);
              v.FrameTyp:=15;
              v.Font.Name:=getqdzt(array_dyxx[11]);
              v.Font.Size:=getqdzh(array_dyxx[12]);
              v.Font.Color:=getqdys(array_dyxx[13]);
              if array_jbxx[47]='1' then
              begin
                if getlinecount(Trim(floattostr(array_hj[ncol])),mygrid.ColWidths[ncol])>=2 then
                  v.Font.Size:=6;
              end;
              v.Alignment:=getalignment(mygrid,ncol);;

              if (lowercase(Trim(mygrid.Cells[ncol,1]))='mc') then
                v.Memo.Add('本页小计')
              else if Trim(mygrid.Cells[ncol,4])='' then
                v.Memo.Add('')
              else if i<gcqdlist.Count then
                v.Memo.Add(Trim(floattostr(array_hj[ncol])));
            end;
          
          end;
        end;
        end;

        ntup:=ntup+nht*nmax;
        if ntup+50>nbottomtop then
          break;
      end;   //end for i:=ntempcount
      if b_frist=False then
      begin
      if array_dyxx[1]='1' then
      begin
        nmax:=1;
        if Trim(array_jbxx[1])='1' then
        begin
          v:=TfrMemoview.Create;
          v.SetBounds(nleftdis,ntup,mygrid.ColWidths[0],nht*nmax);
          v.FrameTyp:=15;
          v.Memo.Add('');
          page.Objects.Add(v);
        end;

        for ncol:=1 to mygrid.ColCount-1 do
        begin
          v:=TfrMemoView.Create;
          v.SetBounds(getl(mygrid,ncol,nleftdis),ntup,mygrid.ColWidths[ncol],nht*nmax);
          v.FrameTyp:=15;
          v.Font.Name:=getqdzt(array_dyxx[11]);
          v.Font.Size:=getqdzh(array_dyxx[12]);
          v.Font.Color:=getqdys(array_dyxx[13]);
          if array_jbxx[47]='1' then
          begin
            if getlinecount(Trim(floattostr(array_hj[ncol])),mygrid.ColWidths[ncol])>=2 then
              v.Font.Size:=6;
          end;
          v.Alignment:=getalignment(mygrid,ncol);;

          if (lowercase(Trim(mygrid.Cells[ncol,1]))='mc') then
            v.Memo.Add('本页小计')
          else if Trim(mygrid.Cells[ncol,4])='' then
            v.Memo.Add('')
          else if i<gcqdlist.Count then
            v.Memo.Add(Trim(floattostr(array_hj[ncol])));
        end;

      end;
      end;
      ntempcount:=i+1;
      createqdbzx(frrep,npage,ntup,mygrid);
      inc(npage);
    end;     //end while
  end;
end;

{给分部分项工程量数祖值}
procedure setqdlist;
var
  i:integer;
begin
{基本信息: debh=定额编号、mc=定额名称及规格、dw=定额单位
          bds=工程量表达式、gcl=工程量、hl=工程含量、lx=定额类型

单价: rgdj=人工单价、cldj=材料单价、jxdj=机械单价、sbdj=设备单价、qtdj=其他单价、dj=单价
合价: rghj=人工合价、clhj=材料合价、jxhj=机械合价、sbhj=设备合价、qthj=其他合价、hj=合价
其它: zh=章号、zyh=专业号、jmhz=子目汇总类、bzxx=备注信息、hjmc=合计名称
}
    array_rcjbl[1]:='debh';
    array_rcjbl[2]:='mc';
    array_rcjbl[3]:='dw';
    array_rcjbl[4]:='bds';
    array_rcjbl[5]:='gcl';
    array_rcjbl[6]:='tx';
    array_rcjbl[7]:='lx';    //类型
    array_rcjbl[8]:='rgdj';
    array_rcjbl[9]:='cldj';
    array_rcjbl[10]:='jxdj';
    array_rcjbl[11]:='sbdj';
    array_rcjbl[12]:='qtdj';
    array_rcjbl[13]:='zcdj';
    array_rcjbl[14]:='dj';
    array_rcjbl[15]:='rghj';
    array_rcjbl[16]:='clhj';
    array_rcjbl[17]:='jxhj';
    array_rcjbl[18]:='sbhj';
    array_rcjbl[19]:='qthj';
    array_rcjbl[20]:='zchj';
    array_rcjbl[21]:='hj';
    array_rcjbl[22]:='zh';    //章号
    array_rcjbl[23]:='zyh';
    array_rcjbl[24]:='jmhz';  //子目汇总类
    array_rcjbl[25]:='bzxx';  //备注信息
    array_rcjbl[26]:='hjmc';
    for i:=27 to 48 do
      array_rcjbl[i]:='';
end;

{计算分部分项工程量清单}
function calgclqd(i:integer;mygrid:TStringGrid;ncol:integer):string;
var
  str1,sum_str:string;
  str:string;
  strtmp:string;
  r:integer;
  j:integer;
  tem_real:string;
  b_falg:boolean;
begin
  setqdlist;
  str:=Trim(mygrid.Cells[ncol,1]);
  getcalu_str(str);
  str1:='';
  sum_str:='';
  if Trim(str)<>'' then
  begin
    if (pos(array_rcjbl[1],str)<>0) or (pos(array_rcjbl[2],str)<>0) or (pos(array_rcjbl[3],str)<>0)
     or (pos(array_rcjbl[4],str)<>0) or (pos(array_rcjbl[7],str)<>0) or (pos(array_rcjbl[20],str)<>0)
     or (pos(array_rcjbl[21],str)<>0) or (pos(array_rcjbl[22],str)<>0) or (pos(array_rcjbl[23],str)<>0) then
    begin
      if lowercase(Trim(str))=Trim(array_rcjbl[1]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column5
      else if lowercase(Trim(str))=Trim(array_rcjbl[2]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column10
      else if lowercase(Trim(str))=Trim(array_rcjbl[3]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column11
      else if lowercase(Trim(str))=Trim(array_rcjbl[4]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column7
      else if lowercase(Trim(str))=Trim(array_rcjbl[6]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column9
      else if lowercase(Trim(str))=Trim(array_rcjbl[7]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column6
      else if lowercase(Trim(str))=Trim(array_rcjbl[22]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column26
      else if lowercase(Trim(str))=Trim(array_rcjbl[23]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column27
      else if lowercase(Trim(str))=Trim(array_rcjbl[24]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column28
      else if lowercase(Trim(str))=Trim(array_rcjbl[25]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column29
      else if lowercase(Trim(str))=Trim(array_rcjbl[26]) then
        strtmp:=Tjc_rcj(gcqdlist.Items[i]).column30
      else
        strtmp:='';
    end
    else
    begin
      for r:=1 to length(str) do
      begin
        if (str[r]<>'(') and (str[r]<>')') and (str[r]<>'+') and (str[r]<>'-') and (str[r]<>'*') and (str[r]<>'/') then
        begin
          str1:=str1+str[r];  //把表达式的某个字符串累加起来,以备后面查询
          // 如果已达到最后一个字符串则进行替换比较
          if r=length(str) then
          begin  //if r1=length(str) begin
            if isnumber(str1)=0 then
            begin
              sum_str:=sum_str+str1;
              str1:='';
            end
            else
            begin //val begin
              //先判断取出的字符串是否是内部函数,如果是则直接赋给用于计算的变量,否则进行比较替换
              if (str1='cos') or (str1='sin') or (str1='round')
              or (str1='tan') or (str1='arctan') or (str='abs')
              or (str1='exp') or (str1='ln') or (str1='sqr')
              or (str1='sqrt') or (str1='int') then
              begin
                sum_str:=sum_str+'0';
              end
              else
              begin

                b_falg:=False;
                for j:=5 to 21 do
                begin
                  if lowercase(str1)=Trim(array_rcjbl[j]) then
                  begin
                    b_falg:=True;
                    case j of
                      5: begin    //sl
                           if Trim(Tjc_rcj(gcqdlist.Items[i]).column8)='' then
                             sum_str:=sum_str+'0'
                           else
                             sum_str:=sum_str+Trim(Tjc_rcj(gcqdlist.Items[i]).column8);
                             break;
                         end;
                      8: begin
                           if Trim(Tjc_rcj(gcqdlist.Items[i]).column12)='' then
                             sum_str:=sum_str+'0'
                           else
                             sum_str:=sum_str+Trim(Tjc_rcj(gcqdlist.Items[i]).column12);
                             break;
                         end;
                      9: begin    //sl
                           if Trim(Tjc_rcj(gcqdlist.Items[i]).column13)='' then
                             sum_str:=sum_str+'0'
                           else
                             sum_str:=sum_str+Trim(Tjc_rcj(gcqdlist.Items[i]).column13);
                             break;
                         end;
                      10: begin     //
                           if Trim(Tjc_rcj(gcqdlist.Items[i]).column14)='' then
                             sum_str:=sum_str+'0'
                           else
                             sum_str:=sum_str+Trim(Tjc_rcj(gcqdlist.Items[i]).column14);
                             break;
                         end;
                      11: begin
                           if Trim(Tjc_rcj(gcqdlist.Items[i]).column16)='' then
                             sum_str:=sum_str+'0'
                           else
                             sum_str:=sum_str+Trim(Tjc_rcj(gcqdlist.Items[i]).column16);
                             break;
                         end;
                      12: begin    //sl
                           if Trim(Tjc_rcj(gcqdlist.Items[i]).column15)='' then
                             sum_str:=sum_str+'0'
                           else
                             sum_str:=sum_str+Trim(Tjc_rcj(gcqdlist.Items[i]).column15);
                             break;
                         end;
                      13: begin     //
                           if Trim(Tjc_rcj(gcqdlist.Items[i]).column17)='' then
                             sum_str:=sum_str+'0'
                           else
                             sum_str:=sum_str+Trim(Tjc_rcj(gcqdlist.Items[i]).column17);
                             break;
                         end;
                      14: begin
                           if Trim(Tjc_rcj(gcqdlist.Items[i]).column18)='' then
                             sum_str:=sum_str+'0'
                           else
                             sum_str:=sum_str+Trim(Tjc_rcj(gcqdlist.Items[i]).column18);
                             break;
                         end;

⌨️ 快捷键说明

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