📄 qd_rep.pas
字号:
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 + -