cshcomm.pas.svn-base

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

SVN-BASE
667
字号
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('select A510B_003,A510B_004,sum(A510B_010) as FAmount');
    SYSDM.qryQuery.SQL.Add('from ACP510B,ACP510A where A510B_001=A510A_001 and A510A_002=1 and A510B_003='+''''+ACode+''''+' and A510B_004='+IntToStr(ALineNo));
    SYSDM.qryQuery.SQL.Add('group by A510B_003,A510B_004');
    SYSDM.qryQuery.Open;
    AAmount:=AAmount-SYSDM.qryQuery.FieldByName('FAmount').AsFloat;
    if AType='DEL' then AAmount:=AAmount*-1;
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('update PUR510B set P510B_024='+FloatToStr(AAmount)+' where P510B_001='+''''+ACode+''''+' and P510B_002='+IntToStr(ALineNo));
    SYSDM.qryQuery.ExecSQL;
    AQuery.Next;
  end;

  //更新折扣额
  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('select A500B_003,A500B_004,sum(A500B_007) as FAmount');
  AQuery.SQL.Add('from ACP500B where A500B_003='+''''+ACode+'''');
  AQuery.SQL.Add('group by A500B_003,A500B_004');
  AQuery.Open;
  while not AQuery.Eof do
  begin
    AAmount:=AQuery.FieldByName('FAmount').AsFloat;
    ALineNo:=AQuery.FieldByName('A500B_004').Value;
    if AType='DEL' then AAmount:=AAmount*-1;
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('update PUR510B set P510B_025='+FloatToStr(AAmount)+' where P510B_001='+''''+ACode+''''+' and P510B_002='+IntToStr(ALineNo));
    SYSDM.qryQuery.ExecSQL;
    AQuery.Next;
  end;

  //更新收款金额
  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('select A510B_003,A510B_004,sum(C510_008) as FAmount');
  AQuery.SQL.Add('from CSH510,CSH500,ACP510B');
  AQuery.SQL.Add('where C510_001=C500_001 and C510_002=C500_002 and C510_003=C500_003 and C510_004=C500_004 and C510_005=A510B_001 and C510_006=A510B_002 and ');
  AQuery.SQL.Add('      C500_016=2 and A510B_003='+''''+ACode+'''');
  AQuery.SQL.Add('group by A510B_003,A510B_004');
  AQuery.Open;
  while not AQuery.Eof do
  begin
    AAmount:=AQuery.FieldByName('FAmount').AsFloat;
    ALineNo:=AQuery.FieldByName('A510B_004').Value;
    if AType='DEL' then AAmount:=AAmount*-1;
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('update PUR510B set P510B_027='+FloatToStr(AAmount)+' where P510B_001='+''''+ACode+''''+' and P510B_002='+IntToStr(ALineNo));
    SYSDM.qryQuery.ExecSQL;
    AQuery.Next;
  end;

  AQuery.Close;
  AQuery.Free;
end;

//反写销售定单ORD510B的已收款额
//AType:  增加=ADD,减少=DEL
procedure UpdateORD510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AField,AType:String);
var
  AQuery:TADOQuery;
  AAmount:Double;
  ALineNo:Integer;
begin
  AQuery:=TADOQuery.Create(nil);
  AQuery.Connection:=SYSDM.ADOC;

  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('select A510B_003,A510B_004,sum(C510_008) as FAmount');
  AQuery.SQL.Add('from CSH510,ACR510B');
  AQuery.SQL.Add('where C510_005=A510B_001 and C510_006=A510B_002 and');
  AQuery.SQL.Add('      C510_001='+IntToStr(AccNo)+' and C510_003='+GetDateString(ADate)+' and C510_004='+IntToStr(ABillNo));
  AQuery.SQL.Add('group by A510B_003,A510B_004');
  AQuery.Open;
  while not AQuery.Eof do
  begin
    AAmount:=AQuery.FieldByName('FAmount').Value;
    ALineNo:=AQuery.FieldByName('A510B_004').Value;
    if AType='DEL' then AAmount:=AAmount*-1;
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('update ORD510B set O510B_027=O510B_027+'+FloatToStr(AAmount)+' where O510B_001='+''''+AQuery.FieldByName('A510B_003').AsString+''''+' and O510B_002='+IntToStr(ALineNo));
    SYSDM.qryQuery.ExecSQL;
    AQuery.Next;
  end;
  AQuery.Close;
  AQuery.Free;
end;

//反写采购定单PUR510B的已付款额
//AType:  增加=ADD,减少=DEL
procedure UpdatePUR510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AField,AType:String);
var
  AQuery:TADOQuery;
  AAmount:Double;
  ALineNo:Integer;
begin
  AQuery:=TADOQuery.Create(nil);
  AQuery.Connection:=SYSDM.ADOC;

  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('select A510B_003,A510B_004,sum(C510_008) as FAmount');
  AQuery.SQL.Add('from CSH510,ACP510B');
  AQuery.SQL.Add('where C510_005=A510B_001 and C510_006=A510B_002 and');
  AQuery.SQL.Add('      C510_001='+IntToStr(AccNo)+' and C510_003='+GetDateString(ADate)+' and C510_004='+IntToStr(ABillNo));
  AQuery.SQL.Add('group by A510B_003,A510B_004');
  AQuery.Open;
  while not AQuery.Eof do
  begin
    AAmount:=AQuery.FieldByName('FAmount').Value;
    ALineNo:=AQuery.FieldByName('A510B_004').Value;
    if AType='DEL' then AAmount:=AAmount*-1;
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('update PUR510B set P510B_027=P510B_027+'+FloatToStr(AAmount)+' where P510B_001='+''''+AQuery.FieldByName('A510B_003').AsString+''''+' and P510B_002='+IntToStr(ALineNo));
    SYSDM.qryQuery.ExecSQL;
    AQuery.Next;
  end;
  AQuery.Close;
  AQuery.Free;
end;

//反写销售发票ACR510B的已收支金额
//AType:  增加=ADD,减少=DEL
procedure UpdateACR510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AType:String);
var
  AQuery:TADOQuery;
  AAmount:Double;
  ALineNo:Integer;
begin
  AQuery:=TADOQuery.Create(nil);
  AQuery.Connection:=SYSDM.ADOC;

  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('select C510_005,C510_006,sum(C510_008) as FAmount');
  AQuery.SQL.Add('from CSH510');
  AQuery.SQL.Add('where C510_001='+IntToStr(AccNo)+' and C510_003='+GetDateString(ADate)+' and C510_004='+IntToStr(ABillNo));
  AQuery.SQL.Add('group by C510_005,C510_006');
  AQuery.Open;
  while not AQuery.Eof do
  begin
    AAmount:=AQuery.FieldByName('FAmount').Value;
    if AType='DEL' then AAmount:=AAmount*-1;
    ALineNo:=AQuery.FieldByName('C510_006').Value;
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('update ACR510B set A510B_012=A510B_012+'+FloatToStr(AAmount)+' where A510B_001='+''''+AQuery.FieldByName('C510_005').AsString+''''+' and A510B_002='+IntToStr(ALineNo));
    SYSDM.qryQuery.ExecSQL;
    AQuery.Next;
  end;
  AQuery.Close;
  AQuery.Free;
end;

//反写采购发票ACP510B的已收支金额
//AType:  增加=ADD,减少=DEL
procedure UpdateACP510B(AccNo:Integer;ADate:TDateTime;ABillNo:Integer;AType:String);
var
  AQuery:TADOQuery;
  AAmount:Double;
  ALineNo:Integer;
begin
  AQuery:=TADOQuery.Create(nil);
  AQuery.Connection:=SYSDM.ADOC;

  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('select C510_005,C510_006,sum(C510_008) as FAmount');
  AQuery.SQL.Add('from CSH510');
  AQuery.SQL.Add('where C510_001='+IntToStr(AccNo)+' and C510_003='+GetDateString(ADate)+' and C510_004='+IntToStr(ABillNo));
  AQuery.SQL.Add('group by C510_005,C510_006');
  AQuery.Open;
  while not AQuery.Eof do
  begin
    AAmount:=AQuery.FieldByName('FAmount').Value;
    if AType='DEL' then AAmount:=AAmount*-1;
    ALineNo:=AQuery.FieldByName('C510_006').Value;
    SYSDM.qryQuery.Close;
    SYSDM.qryQuery.SQL.Clear;
    SYSDM.qryQuery.SQL.Add('update ACP510B set A510B_012=A510B_012+'+FloatToStr(AAmount)+' where A510B_001='+''''+AQuery.FieldByName('C510_005').AsString+''''+' and A510B_002='+IntToStr(ALineNo));
    SYSDM.qryQuery.ExecSQL;
    AQuery.Next;
  end;
  AQuery.Close;
  AQuery.Free;
end;

//取CSH610的顺序编号
function GetSeqNo(ADateTime:TDateTime):string;
begin
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select max(C610_011) from CSH610 where C610_005<>0 and C610_006='+GetDateString(ADateTime));
  SYSDM.qryQuery.Open;
  if SYSDM.qryQuery.Fields[0].IsNull then
    Result:='1'
  else
    Result:=IntToStr(SYSDM.qryQuery.Fields[0].Value+1);
  SYSDM.qryQuery.Close;
end;

//取得应收应付帐的期初余额
function GetAcrOpen(AInOut,ACustNo,ACurrNo,AType:Integer;AFromDate:TDateTime):Double;
var
  AQuery:TADOQuery;
begin
  AQuery:=TADOQuery.Create(nil);
  AQuery.Connection:=SYSDM.ADOC;

  //如果查询起始日期在建帐之后,则取上一条记录的余额,如果查询起始日期在建帐之前,则取建立的期初余额
  AQuery.Close;
  AQuery.SQL.Clear;
  AQuery.SQL.Add('select top 1 C610_008 from CSH610 where C610_004='+IntToStr(AInOut)+' and C610_001='+IntToStr(AType)+' and C610_002='+IntToStr(ACustNo)+' and C610_003='+IntToStr(ACurrNo)+' and C610_006<'+GetDateString(AFromDate)+' order by C610_006 desc,C610_011 desc');
  AQuery.Open;
  if AQuery.IsEmpty then
  begin
    AQuery.Close;
    AQuery.SQL.Clear;
    AQuery.SQL.Add('select C610_008 from CSH610 where C610_004='+IntToStr(AInOut)+' and C610_001='+IntToStr(AType)+' and C610_002='+IntToStr(ACustNo)+' and C610_003='+IntToStr(ACurrNo)+' and C610_005=0');
    AQuery.Open;
  end;
  Result:=AQuery.FieldByName('C610_008').AsFloat;

  AQuery.Close;
  AQuery.Free;
end;

//更新债权债务帐本表
//新增时:UpdateCSH610(AObjType,ACustNo,ACurrNo,AInOut,ATypeNo,ABillNo,ABillType,ADate,AAmount,edtCode.Text,'','ADD');
//删除时:UpdateCSH610(AOldObjType,AOldCustNo,AOldCurrNo,0,0,AOldBillNo,0,AOldDate,AOldAmount,'','','DEL');
//修改时,保存前,删除旧的调用一次,保存后,增加新的调用一次
//  UpdateCSH610(AOldObjType,AOldCustNo,AOldCurrNo,0,0,AOldBillNo,0,AOldDate,AOldAmount,'','','DEL');
//  UpdateCSH610(AObjType,ACustNo,ACurrNo,AInOut,ATypeNo,ABillNo,ABillType,ADate,AAmount,edtCode.Text,'','ADD');
//AObjType:  对象类型(0=客户,1=员工)
//ATypeNo: 债权债务(0=债权,1=债务)   销售发票=0,采购发票=1
//AInOut:  收支类型(0=期初,1=应收应付,2=已收已付)  销售发票=1,采购发票=1,销售退货=1,采购退货=1,销售收款=2,采购付款=2
//ABillType: 单据类型(0=期初单号,1=销售发票,2=采购发票,3=收支单)
//AType: ADD=新增,DEL=删除
procedure UpdateCSH610(AObjType,ACustNo,ACurrNo,AInOut,ATypeNo,ABillNo,ABillType:Integer;ADate:TDateTime;AAmount:Double;AOrder,ARemark,AType:String);
var
  AQuery:TADOQuery;
  ABalance:Double;
  S,ABill:String;
begin
  if AObjType>=2 then Exit;
  AQuery:=TADOQuery.Create(nil);
  AQuery.Connection:=SYSDM.ADOC;

  if AType='ADD' then
  begin
    ABill:=GetSeqNo(ADate);
    if ABillType=0 then ABill:='0';
    AQuery.Close;
    AQuery.SQL.Clear;
    AQuery.SQL.Add('select top 1 C610_008 from CSH610 where C610_001='+IntToStr(AObjType)+' and C610_002='+IntToStr(ACustNo)+' and C610_003='+IntToStr(ACurrNo)+' and ');
    AQuery.SQL.Add('  ((C610_006='+GetDateString(ADate)+' and C610_011<'+ABill+') or (C610_006<'+GetDateString(ADate)+'))');
    AQuery.SQL.Add('order by C610_006 desc,C610_011 desc');
    AQuery.Open;
    ABalance:=AQuery.FieldByName('C610_008').AsFloat;

    case ATypeNo of
      0:S:=GetDBString('COM00009010');  //销售
      1:S:=GetDBString('COM00009011');  //采购
    end;
    case AInOut of
      1:S:=S+GetDBString('COM00009012');  //发票
      2:S:=S+GetDBString('COM00009013');  //退货
    end;
    if ABillType in [0,3] then S:=ARemark;

    AQuery.Close;
    AQuery.SQL.Clear;
    AQuery.SQL.Add('select * from CSH610 where C610_001 is null');
    AQuery.Open;
    AQuery.Append;
    AQuery.FieldByName('C610_001').Value:=AObjType;  //对象类型(0=客户,1=员工)
    AQuery.FieldByName('C610_002').Value:=ACustNo;  //对象编号
    AQuery.FieldByName('C610_003').Value:=ACurrNo;  //币别编号
    AQuery.FieldByName('C610_004').Value:=ATypeNo;  //债权债务(0=债权,1=债务)
    AQuery.FieldByName('C610_005').Value:=AInOut;  //收支类型(0=期初,1=收入,2=支出)
    AQuery.FieldByName('C610_006').Value:=ADate;  //收支日期
    AQuery.FieldByName('C610_007').Value:=AAmount;  //收支金额
    AQuery.FieldByName('C610_008').Value:=ABalance;  //收支余额
    AQuery.FieldByName('C610_009').Value:=S;  //摘要说明
    AQuery.FieldByName('C610_010').Value:=AOrder;  //相关单号
    AQuery.FieldByName('C610_011').AsString:=ABill;  //顺序单号
    AQuery.FieldByName('C610_012').Value:=ABillType;  //单据类型(0=期初单号,1=销售发票,2=采购发票,3=收支单)
    AQuery.Post;

    if AType='DEL' then AAmount:=AAmount*-1;
    if AInOut=2 then AAmount:=AAmount*-1;

    //更新后面记录的余额字段
    AQuery.Close;
    AQuery.SQL.Clear;
    AQuery.SQL.Add('update CSH610 set C610_008=C610_008+'+FloatToStr(AAmount));
    AQuery.SQL.Add('where C610_001='+IntToStr(AObjType)+' and C610_002='+IntToStr(ACustNo)+' and ');
    AQuery.SQL.Add('      C610_003='+IntToStr(ACurrNo)+' and ');
    AQuery.SQL.Add('      ((C610_006='+GetDateString(ADate)+' and C610_011>='+ABill+') or (C610_006>'+GetDateString(ADate)+'))');
    AQuery.ExecSQL;
  end else
  if AType='DEL' then
  begin
    AQuery.Close;
    AQuery.SQL.Clear;
    AQuery.SQL.Add('delete from CSH610 where C610_001='+IntToStr(AObjType)+' and C610_002='+IntToStr(ACustNo)+' and C610_003='+IntToStr(ACurrNo)+' and ');
    AQuery.SQL.Add('  C610_006='+GetDateString(ADate)+' and C610_011='+IntToStr(ABillNo));
    AQuery.ExecSQL;

    if AType='DEL' then AAmount:=AAmount*-1;
    if AInOut=2 then AAmount:=AAmount*-1;

    //更新后面记录的余额字段
    AQuery.Close;
    AQuery.SQL.Clear;
    AQuery.SQL.Add('update CSH610 set C610_008=C610_008+'+FloatToStr(AAmount));
    AQuery.SQL.Add('where C610_001='+IntToStr(AObjType)+' and C610_002='+IntToStr(ACustNo)+' and ');
    AQuery.SQL.Add('      C610_003='+IntToStr(ACurrNo)+' and ');
    AQuery.SQL.Add('      ((C610_006='+GetDateString(ADate)+' and C610_011>='+IntToStr(ABillNo)+') or (C610_006>'+GetDateString(ADate)+'))');
    AQuery.ExecSQL;
  end;

  AQuery.Close;
  AQuery.Free;
end;

end.

⌨️ 快捷键说明

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