csh510_02.pas.svn-base

来自「一个用Delphi开发的ERP软件」· SVN-BASE 代码 · 共 996 行 · 第 1/3 页

SVN-BASE
996
字号
  qryCsh500.Open;
  if AcctNo=0 then
  begin
    qryCsh500.Locate('C500_003;C500_004',VarArrayOf([ADate,ABillNo]),[]);
  end else
    qryCsh500.Locate('C500_001;C500_003;C500_004',VarArrayOf([AcctNo,ADate,ABillNo]),[]);
  qryCsh500.EnableControls;
  qryCsh500AfterScroll(qryCsh500);
end;

procedure TCsh510_02Form.SetInterface;
begin
  Caption:=GetDBString('CSH51002001');  //收支单
  lblCode.Caption:=GetDBString('CSH51002002');  //原始单号
  lblAcct.Caption:=GetDBString('CSH51002003');  //帐户名称
  lblFrom.Caption:=GetDBString('CSH51002004');  //来源类型
  lblObj.Caption:=GetDBString('CSH51002005');  //对象类型
  lblCust.Caption:=GetDBString('CSH51002006');  //对象编号
  lblClass.Caption:=GetDBString('CSH51002007');  //业务类别
  lblRemark.Caption:=GetDBString('CSH51002008');  //摘要说明
  lblBillNo.Caption:=GetDBString('CSH51002009');  //单据编号
  lblDate.Caption:=GetDBString('CSH51002010');  //收支日期
  lblAmount.Caption:=GetDBString('CSH51002011');  //收支金额
  lblProject.Caption:=GetDBString('CSH51002012');  //项目名称
  lblDept.Caption:=GetDBString('CSH51002013');  //部门名称
  lblName.Caption:=Caption;
  cbType.Clear;
  cbType.Items.Add(GetDBString('CSH51002014'));  //收入单
  cbType.Items.Add(GetDBString('CSH51002015'));  //支出单
  cbType.Items.Add(GetDBString('CSH51002017'));  //借入单
  cbType.Items.Add(GetDBString('CSH51002018'));  //借出单
  cbType.Items.Add(GetDBString('CSH51002019'));  //还入单
  cbType.Items.Add(GetDBString('CSH51002020'));  //还出单
  cbType.ItemIndex:=0;
  cbFrom.Clear;
  cbFrom.Items.Add(GetDBString('CSH51002021'));  //手工输入
  cbFrom.Items.Add(GetDBString('CSH51002022'));  //销售定单
  cbFrom.Items.Add(GetDBString('CSH51002023'));  //采购定单
  cbFrom.Items.Add(GetDBString('CSH51002016'));  //任务工单
  cbFrom.ItemIndex:=0;
  cbObj.Clear;
  cbObj.Items.Add(GetDBString('CSH51002024'));  //客户
  cbObj.Items.Add(GetDBString('CSH51002025'));  //员工
  cbObj.Items.Add(GetDBString('CSH51002026'));  //空白
  cbObj.ItemIndex:=2;
  bbtnBack.Caption:=GetDBString('CSH51002027');  //上一步(&B)
  bbtnNext.Caption:=GetDBString('CSH51002028');  //下一步(&N)
  PageControl1.ActivePageIndex:=0;

  qryOrd150FCode.DisplayLabel:=GetDBString('CSH51002029');  //编号
  qryOrd150FName.DisplayLabel:=GetDBString('CSH51002030');  //名称
  qryTas520.FieldByName('T520_001').DisplayLabel:=GetDBString('CSH51002031');  //工单编号
  qryTas520.FieldByName('T520_002').DisplayLabel:=GetDBString('CSH51002032');  //任务编号
  qryTas520.FieldByName('T510_002').DisplayLabel:=GetDBString('CSH51002033');  //任务名称
end;

procedure TCsh510_02Form.FormCreate(Sender: TObject);
begin
  inherited;
  SetInterface;

  qryCsh140.Open;
  qryCsh150.Open;
  qryHrm100.Open;
  qryOrd150.Open;
  edtDate.Date:=GetServerDate;
  //取单据编号
  edtBillNo.Text:=GetBillNo(edtDate.Date);
end;

procedure TCsh510_02Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  qryCsh140.Close;
  qryOrd150.Close;
  qryCsh150.Close;
  qryHrm100.Close;
  qryCsh500.Close;
end;

//检查数据有效性
procedure TCsh510_02Form.CheckData;
var
  AStartDate:TDateTime;
  ABalance:Double;
begin
  if cbAcct.Text='' then
  begin
    ShowMsg('UMS10000176');  //帐户名称不能为空
    PageControl1.ActivePageIndex:=0;
    cbAcct.SetFocus;
    Abort;
  end;
  //取得帐户编号及建帐日期
  qryQuery.Close;
  qryQuery.SQL.Clear;
  qryQuery.SQL.Add('select C550_001,C550_007 from CSH550 where C550_002='+''''+cbAcct.Text+'''');
  qryQuery.Open;
  AccNo:=qryQuery.Fields[0].Value;
  AStartDate:=qryQuery.Fields[1].Value;
  if edtWork.Visible then
  begin
    if trim(edtCust.Text)='' then
    begin
      ShowMsg('UMS10000241');  //工单编号不能空
      edtWork.SetFocus;
      Abort;
    end;
    edtWorkExit(edtWork);
  end;
  //检验类别的合法性
  if cbClass.Text='' then
  begin
    ShowMsg('UMS10000158');  //类别不能为空
    PageControl1.ActivePageIndex:=0;
    cbClass.SetFocus;
    Abort;
  end;
  if edtCust.Enabled then
  begin
    if trim(edtCust.Text)='' then
    begin
      ShowMsg('UMS10000590');  //对象编号不能为空
      edtCust.SetFocus;
      Abort;
    end;
    edtCustExit(edtCust);
  end;
  //检验票据编号的合法性
  if edtBillNo.Text='' then
  begin
    ShowMsg('UMS10000159');  //票据编号不能为空
    PageControl1.ActivePageIndex:=0;
    edtBillNo.SetFocus;
    Abort;
  end;
  try
    StrToInt(edtBillNo.Text);  //单据编号
  except
    ShowMsg('UMS10000160');  //无效的票据编号,编号只能为数字
    PageControl1.ActivePageIndex:=0;
    edtBillNo.SetFocus;
    Abort;
  end;
  if StrToInt(edtBillNo.Text)<=0 then
  begin
    ShowMsg('UMS10000161');  //无效的票据编号,编号不能为负数或零
    PageControl1.ActivePageIndex:=0;
    edtBillNo.SetFocus;
    Abort;
  end;
  //如果单据编号没有修改,则不检查票据编号是否重复
  if AOldBillNo<>StrToInt(edtBillNo.Text) then
  begin
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select 1 from CSH500 where C500_003='+GetDateString(edtDate.Date)+' and C500_004='+edtBillNo.Text);
    SYSDM.qryQuery.Open;
    if not SYSDM.qryQuery.IsEmpty then
    begin
      ShowMsg('UMS10000162');  //票据编号重复,请重新输入
      PageControl1.ActivePageIndex:=0;
      edtBillNo.SetFocus;
      Abort;
    end;
  end;
  //检验日期的合法性
  if edtDate.Text='' then
  begin
    ShowMsg('UMS10000163');  //日期不能为空
    PageControl1.ActivePageIndex:=0;
    edtDate.SetFocus;
    Abort;
  end;
  if edtDate.Date<AStartDate then
  begin
    ShowMsg('UMS10000164');  //日期不能小于建帐日期
    PageControl1.ActivePageIndex:=0;
    edtDate.SetFocus;
    Abort;
  end;
  //检验金额的合法性
  if edtAmount.Text='' then
  begin
    ShowMsg('UMS10000165');  //金额不能为空
    PageControl1.ActivePageIndex:=0;
    edtAmount.SetFocus;
    Abort;
  end;
  try
    StrToFloat(edtAmount.Text);
  except
    ShowMsg('UMS10000166');  //无效的金额,金额只能为数字
    PageControl1.ActivePageIndex:=0;
    edtAmount.SetFocus;
    Abort;
  end;
  if StrToFloat(edtAmount.Text)=0 then
  begin
    ShowMsg('UMS10000167');  //金额不能为零
    PageControl1.ActivePageIndex:=0;
    edtAmount.SetFocus;
    Abort;
  end;
  //允许记帐时收入支出金额为负数
  if GetSysParams('CSH0002')='N' then
  begin
    if StrToFloat(edtAmount.Text)<0 then
    begin
      ShowMsg('UMS10000186');  //金额不能为负数
      PageControl1.ActivePageIndex:=0;
      edtAmount.SetFocus;
      Abort;
    end;
  end;

  if cbType.ItemIndex in [1,3,5] then     //支出
  begin
    //取得帐户的余额
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select top 1 C500_014 from CSH500 where C500_001='+IntToStr(AccNo)+' order by C500_001, C500_003 desc, C500_004 desc');
    SYSDM.qryQuery.Open;
    ABalance:=SYSDM.qryQuery.Fields[0].Value;
    if AMode='ADD' then
    begin
      //允许帐户余额为负数
      if GetSysParams('CSH0001')='N' then
      begin
        if StrToFloat(edtAmount.Text)>ABalance then
        begin
          ShowMsg('UMS10000168');  //金额不能大于帐户余额
          PageControl1.ActivePageIndex:=0;
          edtAmount.SetFocus;
          Abort;
        end;
      end;
    end
    else if AMode='UPD' then
    begin
      //允许帐户余额为负数
      if GetSysParams('CSH0001')='N' then
      begin
        if StrToFloat(edtAmount.Text)-AOldAmount>ABalance then
        begin
          ShowMsg('UMS10000168');  //金额不能大于帐户余额
          PageControl1.ActivePageIndex:=0;
          edtAmount.SetFocus;
          Abort;
        end;
      end;
    end;
  end;
end;

procedure TCsh510_02Form.bbtnSaveClick(Sender: TObject);
begin
//保存
  //检验输入的数据
  CheckData;
  if PageControl1.ActivePageIndex=1 then
  begin
    if dxDBGrid1FFactAmt.SummaryFooterValue=0 then
    begin
      ShowMsg('UMS10000167');  //金额不能为零
      PageControl1.ActivePageIndex:=1;
      Abort;
    end;
    edtAmount.Text:=FloatToStr(dxDBGrid1FFactAmt.SummaryFooterValue);
  end;
  //保存数据
  try
    SYSDM.ADOC.BeginTrans;
    SaveData;
    SYSDM.ADOC.CommitTrans;
  except
    SYSDM.ADOC.RollbackTrans;
    ShowMsg(SYSDM.ADOC.Errors[0].Description,1);
    Abort;
  end;
  PageControl1.ActivePageIndex:=0;

  //新增模式下则继续新增下一条记录,否则关闭
  if AMode='ADD' then
  begin
    SetEmptyInit;
    cbType.SetFocus;
  end else
  begin
    Close;
  end;
  inherited;
end;

procedure TCsh510_02Form.edtDateCloseUp(Sender: TObject);
begin
  inherited;
  //取票据编号
  edtBillNo.Text:=GetBillNo(edtDate.Date);
end;

procedure TCsh510_02Form.edtDateExit(Sender: TObject);
begin
  inherited;
  //取票据编号
  edtBillNo.Text:=GetBillNo(edtDate.Date);
end;

procedure TCsh510_02Form.sbCustClick(Sender: TObject);
begin
  inherited;
//对象编号
  if not edtCust.Focused then edtCust.SetFocus;
  HwSelDataForm:=THwSelDataForm.Create(Application);
  HwSelDataForm.OpenSelData(qryOrd150,nil);
  if HwSelDataForm.ShowModal=1 then
  begin
    edtCust.Text:=qryOrd150.FieldByName('FCode').AsString;
    edtCustName.Text:=qryOrd150.FieldByName('FName').AsString;
    edtCust1.Text:=qryOrd150.FieldByName('FCode').AsString;
    edtCustName1.Text:=qryOrd150.FieldByName('FName').AsString;
  end;
end;

procedure TCsh510_02Form.cbFromChange(Sender: TObject);
begin
  inherited;
  bbtnBack.Enabled:=False;
  bbtnBack.Visible:=cbFrom.ItemIndex in [1,2];
  bbtnNext.Visible:=bbtnBack.Visible;
  bbtnSave.Visible:=not bbtnNext.Visible;

⌨️ 快捷键说明

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