我有一个需求:计算产品的成本
成本包括很多费用之和,比如直接人工,原材料费用,制造费用,其它费用(进出口费用,营销费用,折旧费用,薪资等一大堆,15项),成本就等于=直接人工+原材料费用+制造费用+其它费用之和
其中,前面三个:直接人工,原材料费用,制造费用必加,
但15项其它费用项目是选择性的计入成本:比如有时成本不需要考虑‘进出口费用‘,有时需要考虑,不考虑就不加上去
所有的其他费用我都放在t_overhead表中,每项费用的值都有
所以我在界面里的放了很多复选框,选中表示计入成本,不选中就表示不计入成本
请问怎么根据这些复选框的状态写SQL语句,点击按钮进时只合计我需要的那几项例如:
进出口费用 选择
营销费 不选择
折旧费用 选择
薪资 选择,
那我的其他费用总和=进出口费用+折旧费用+薪资而总成本=直接人工+原材料费用+制造费用+其它费用总和请问这样的需求该怎么实现?在此也借这个问题谢谢‘押宝新人’路飞,帮我解决了很多问题.
先谢谢大家了
成本包括很多费用之和,比如直接人工,原材料费用,制造费用,其它费用(进出口费用,营销费用,折旧费用,薪资等一大堆,15项),成本就等于=直接人工+原材料费用+制造费用+其它费用之和
其中,前面三个:直接人工,原材料费用,制造费用必加,
但15项其它费用项目是选择性的计入成本:比如有时成本不需要考虑‘进出口费用‘,有时需要考虑,不考虑就不加上去
所有的其他费用我都放在t_overhead表中,每项费用的值都有
所以我在界面里的放了很多复选框,选中表示计入成本,不选中就表示不计入成本
请问怎么根据这些复选框的状态写SQL语句,点击按钮进时只合计我需要的那几项例如:
进出口费用 选择
营销费 不选择
折旧费用 选择
薪资 选择,
那我的其他费用总和=进出口费用+折旧费用+薪资而总成本=直接人工+原材料费用+制造费用+其它费用总和请问这样的需求该怎么实现?在此也借这个问题谢谢‘押宝新人’路飞,帮我解决了很多问题.
先谢谢大家了
解决方案 »
- 求助: 如何在一个单元文件里面调用另一个单元文件的form?
- 麻烦大家帮帮我
- how convert the "String" data to the "Char" data, thanks !
- 请问如何建立全程过程,函数?
- OCX能否操作这个文件??
- 如何才能让局域网中的一个指定IP的机器访问我的机器,而别的机器不可以。
- 关于数据库的记录查找问题!
- 请教,我用WISE 9 打抱是一切正常,但生成的安装程序,我安装后在程序里找不到,怎么回事呀?是
- 新手请教:我用formatdatetime('mmmm dd,yyyy',now())为什么月份不能显示英文全称,而是显示汉字月份
- 哪位大虾帮我解决以下问题
- 请教IdHttpServer服务器如何取得对方连接IP
- suiskin能不能不对dbgrid渲染
打勾 tmpstr = '+' + 打勾对应的字段名称 ;
//当tmpstr 是空时 tmpstr = 打勾对应的字段名称
sql = select tmpstr as '合计' from table
sqlstr: string;
begin
if AA.checked = true then
sqlstr := sqlstr + '+' +strtoint('AA对应的值');
if BB.checked = true then
sqlstr := sqlstr + '+' +strtoint('BB对应的值')
..... adoquery.sql.text := 'select '+sqlstr + 'from table';
open;
end;
不知道这样是不是最好的办法,因我有45个checkbox需要判断,这样要判断45次,请问能不能用数组,循环之类的实现
费用代码 费用名称 费用金额
01 进出口费用 10000
02 营销费 10000
03 折旧费用 10000
……
45 薪资 1000045个费用项目对应这个有45条记录,根据checkbox的状态决定是否要算入成本合计中,
请大家给建议, 我现在是想借鉴moshao6的建议:Delphi(Pascal) codevar
sqlstr: string;
begin
if AA.checked = true then
sqlstr := sqlstr + 'or (费用代码=AA的代码)' ;
if BB.checked = true then
sqlstr := sqlstr + 'or (费用代码=AA的代码)';
..... //判断完45个费用项目的选定状态 adoquery.sql.text := 'select sum(费用金额) as 合计 from t_overhead where (1=0) ';
open;
end;
请问不知道这样会不会存在什么问题,或者还有没有什么更简便的方法
if checked then str := str + '+' + checkbox.name;
界面中你只要循环组件 如果是chexkbox 就做判断, 循环组件你会的吧?
if listview.checked[i] then
.....
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to self.ComponentCount-1 do
if self.Components[i] is Tcheckbox then
if Tcheckbox(self.Components[i]).Checked then
begin
...
end;
end;不想循环也可以这样:
1.定义一个全局变量strsql;
2.把所有的CheckBox的caption命名为对应的费用名称(应该是唯一的吧);
3.只写其中一个checkbox的onclick事件,比如只写CheckBox1的,其它的onclick就指向这个
procedure TForm1.CheckBox1Click(Sender: TObject);
var
s:string;
begin
s:=Quotedstr(TCheckBox(Sender).Caption)+',';
IF TCheckBox(Sender).Checked Then
strsql:=strsql+s
else
strsql:=stringreplace(strsql,s,'',[rfIgnoreCase]);
end;procedure TForm1.Button1Click(Sender: TObject);
var
ss:string;
begin
if Length(strsql)>0 Then
ss:=' 費用名稱 in ('+Copy(strsql,1,Length(strsql)-1)+')';
...
end;
感谢大家的热心帮助,讲得很详细谢谢kaikai_kk
(KAIKAI(开开一心))的详细说明
我马上去实践一下
结帖,鞠躬……