起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 361|回复: 11

【结帖】这个代码应该在哪里实现?**

[复制链接]
发表于 2008-3-26 17:36:14 | 显示全部楼层 |阅读模式
我的一个表的主键字段‘合同编号’的值由一个业务参数自动填充,而该业务参数的值又取决于该表中的另一个字段‘合同类型’,用户在功能中填完合同的基本信息后点击保存按钮系统会判断‘合同类型’的选值然后给业务参数赋值,然后再自动填充到主键字段,请问判断‘合同类型’的选值的这段代码在哪里写啊?
回复

使用道具 举报

发表于 2008-3-26 17:42:47 | 显示全部楼层
没有看的太懂,你的意思是‘合同类型’这个字段必须填充吗?还是只要‘合同类型’这个字段变化,‘合同编号’的值就会变化,如果‘合同类型’没有值,那么,‘合同编号’的值就为空。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-26 18:29:53 | 显示全部楼层
它们都是一个表中的字段,我只有在点击“保存”按钮时才会判断合同类型的选值而自动生成“合同编号”的值!‘合同类型’必须得选!
回复 支持 反对

使用道具 举报

发表于 2008-3-27 08:45:47 | 显示全部楼层
那就在数据导航条的BeforeAction去做,代码参考,请在bbs上以“BeforeAction”搜索
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-27 10:09:43 | 显示全部楼层
我的功能实现了,但是我每次修改数据集的任何一个字段合同编号都会变,怎么样只让‘合同类型’这个字段发生变化时才会改变‘合同登记编号’?
procedure TMainForm.Action1Execute(Sender: TObject);
const
  cZeroLeng = '0000';
var
  //lParam: TBizParam;
  lBizURL: TBizURL;
  //lContextCurrent: TContextCurrent;
  tempstr : String;
  htlx : String;
  CurHTBH: Business.Model.TBizParam;
  lDateStr, lTmpStr: string;
begin
    htlx :='';
    //tempstr := Business.Model.TSheetDoc(DocView1.Doc).Sheet.Values[1,13].ToString;
    tempstr := DataSetBrokerjbxx.DataSet.FieldByName('HTLX').AsString;
    if tempstr='采购' then
      htlx := 'CG';
    if tempstr = '基建调试' then
      htlx := 'JJTS';
    if tempstr = '外协' then
      htlx := 'WX';
    if tempstr = '技术服务' then
      htlx := 'JSFW';
    if tempstr ='技术监督' then
      htlx :='JSJD';
    if tempstr = '管理合同' then
      htlx := 'GLHT';
    if tempstr ='技术开发' then
      htlx := 'JSKF';
    //Dialogs.ShowMessage(htlx);

    lBizURL := TBizURL.Create;
    lBizURL.URL := 'Biz:\HTGLXTYWKJ\GGYWCSZ.ParamGroup';
    CurHTBH := SystemUtils.TContextUtils.GetParam(Self.Context,lBizURL,'HTBHCS');
    if CurHTBH<>nil then
    begin
      lTmpStr := TCommonUtils.GetAutoIncreaseID(Self.Context,
    SysUtils.FormatDateTime('yyyymm', Business.Data.SysSrv.SysService.Time), '');

  lTmpStr := StringUtils.Copy(cZeroLeng, 1, Length(cZeroLeng) - Length(lTmpStr))
    + lTmpStr;
  lDateStr := SysUtils.FormatDateTime('yyyymm', Business.Data.SysSrv.SysService.Time);

      CurHTBH.Value := htlx+lDateStr + lTmpStr;
      DataSetBrokerjbxx.DataSet.FieldByName('HTDJBH').Value:= CurHTBH.Value.ToString;
      //Dialogs.ShowMessage('--->'+CurHTBH.Value.ToString+'<');
    end;
    lBizURL.Free;
end;

procedure TMainForm.DataNavigator1BeforeAction(Sender: TObject; var Accept: Boolean);
begin
   if DataSetBrokerjbxx.DataSet.UpdatesPending then
     begin
         ActionList1.Actions[0].Execute;
         Accept :=true;

     end;

end;
回复 支持 反对

使用道具 举报

发表于 2008-3-27 10:33:46 | 显示全部楼层
楼主可以在数据集的OnFieldchange中处理
procedure TfileSystemInfo.DataSetHSZWJQDFieldChange(DataSet: TDataSet; Field: TDataField);
begin
    可以判断Field是否‘合同类型’这个字段
end;
回复 支持 反对

使用道具 举报

发表于 2008-3-27 10:51:52 | 显示全部楼层
那在数据集的字段变化事件上去判断,“合同类型”是否有变化,然后再在beforeAction进行相应的处理。
数据集的字段变化事件上去判断,参考 http://bbs.justep.com/forum.php?mod=viewthread&tid=1946
判断字段是否变化,参考 http://bbs.justep.com/forum.php?mod=viewthread&tid=14613
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-27 15:26:08 | 显示全部楼层
你好,我在数据集的字段变化事件中根据判断结果调用datanavigator的beforeaction事件,但是老是编译不通过,请问,这样调用不对吗?
procedure TMainForm.DataSetBrokerjbxxDataChange(Sender: TObject; Field: TDataField);
begin
  if (Field <> nil) and (Field.FieldName = 'HTLX') then
  begin
     DataNavigator1BeforeAction(Sender;True);
  end;


end;
回复 支持 反对

使用道具 举报

发表于 2008-3-27 15:34:18 | 显示全部楼层
DataNavigator1BeforeAction(Sender;True);
用逗号不是分号
回复 支持 反对

使用道具 举报

发表于 2008-3-27 15:35:43 | 显示全部楼层
你搞个变量,给个初始值,然后在字段变化事件中判断是否修改,修改给变量再赋一个值,最后在BeforeAction 的事件上通过这个变量来决定是否需要重新计算合同编号
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 18:37 , Processed in 0.040694 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表