csh510_02.pas.svn-base

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

SVN-BASE
996
字号
unit Csh510_02;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Bas200_07, StdCtrls, Buttons, ExtCtrls, DB, ADODB,
  dxExEdtr, dxEdLib, dxEditor, dxdbtrel, Menus, wwdbdatetimepicker,
  dxDBELib, dxCntner, ComCtrls, dxTL, dxDBCtrl, dxDBGrid;

type
  TCsh510_02Form = class(TBas200_07Form)
    qryCsh150: TADOQuery;
    dsCsh150: TDataSource;
    qryHrm100: TADOQuery;
    dsHrm100: TDataSource;
    qryQuery: TADOQuery;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Shape2: TShape;
    Shape3: TShape;
    qryCsh140: TADOQuery;
    dsCsh140: TDataSource;
    lblAcct: TLabel;
    lblFrom: TLabel;
    lblClass: TLabel;
    lblRemark: TLabel;
    lblBillNo: TLabel;
    lblDate: TLabel;
    lblAmount: TLabel;
    lblProject: TLabel;
    lblDept: TLabel;
    cbItem: TdxLookupTreeView;
    cbDept: TdxLookupTreeView;
    cbClass: TdxLookupTreeView;
    edtAmount: TdxCalcEdit;
    edtDate: TwwDBDateTimePicker;
    lblType: TLabel;
    cbType: TComboBox;
    lblCode: TLabel;
    cbFrom: TComboBox;
    cbAcct: TComboBox;
    lblObj: TLabel;
    cbObj: TComboBox;
    edtCode: TEdit;
    edtRemark: TEdit;
    edtBillNo: TEdit;
    dxDBGrid1: TdxDBGrid;
    lblName: TLabel;
    dsCsh510: TDataSource;
    adsCsh510: TADODataSet;
    bbtnBack: TBitBtn;
    bbtnNext: TBitBtn;
    adsCsh510FCode: TStringField;
    adsCsh510FLineNo: TIntegerField;
    adsCsh510FOrder: TStringField;
    adsCsh510FOrderLine: TIntegerField;
    adsCsh510FItemID: TStringField;
    adsCsh510FItemName: TStringField;
    adsCsh510FItemSpec: TStringField;
    adsCsh510FUnitName: TStringField;
    adsCsh510FTotAmt: TFloatField;
    adsCsh510FFactAmt: TFloatField;
    dxDBGrid1FCode: TdxDBGridMaskColumn;
    dxDBGrid1FOrder: TdxDBGridMaskColumn;
    dxDBGrid1FItemID: TdxDBGridMaskColumn;
    dxDBGrid1FItemName: TdxDBGridMaskColumn;
    dxDBGrid1FUnitName: TdxDBGridMaskColumn;
    dxDBGrid1FTotAmt: TdxDBGridMaskColumn;
    dxDBGrid1FFactAmt: TdxDBGridMaskColumn;
    edtCust1: TEdit;
    edtCustName1: TEdit;
    lblCust: TLabel;
    qryOrd150: TADOQuery;
    qryOrd150FNo: TAutoIncField;
    qryOrd150FCode: TWideStringField;
    qryOrd150FName: TWideStringField;
    qryCsh500: TADOQuery;
    Label1: TLabel;
    edtCust: TEdit;
    sbCust: TSpeedButton;
    edtCustName: TEdit;
    edtWork: TEdit;
    sbWork: TSpeedButton;
    qryTas520: TADOQuery;
    qryTas520T520_001: TWideStringField;
    qryTas520T520_002: TWideStringField;
    qryTas520T510_002: TWideStringField;
    qryTas520T510_004: TIntegerField;
    qryTas520T510_016: TIntegerField;
    qryTas520T510_017: TIntegerField;
    qryTas520T510_005: TSmallintField;
    qryTas520T510_018: TWideStringField;
    qryTas520T520_003: TWideStringField;
    qryTas520T520_019: TWideStringField;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbtnSaveClick(Sender: TObject);
    procedure edtDateCloseUp(Sender: TObject);
    procedure edtDateExit(Sender: TObject);
    procedure sbCustClick(Sender: TObject);
    procedure cbFromChange(Sender: TObject);
    procedure cbObjChange(Sender: TObject);
    procedure bbtnBackClick(Sender: TObject);
    procedure bbtnNextClick(Sender: TObject);
    procedure cbTypeChange(Sender: TObject);
    procedure qryCsh500AfterScroll(DataSet: TDataSet);
    procedure edtCustExit(Sender: TObject);
    procedure sbWorkClick(Sender: TObject);
    procedure edtWorkExit(Sender: TObject);
    procedure dxDBGrid1ColumnMoved(Sender: TObject; FromIndex,
      ToIndex: Integer);
  private
    AccNo:Integer;
    AMode:String;
    AOldAccNo:Integer;
    AOldDate:TDateTime;
    AOldBillNo:Integer;
    AOldAmount:Double;
    AOldTasks:String;
    AOldObjType,AOldCustNo,AOldCurrNo:Integer;
    procedure SaveData;
    procedure SetInterface;
    procedure CheckData;
    procedure SetEmptyInit;
    { Private declarations }
  public
    procedure OpenData(AcctNo:Integer;ADate:TDateTime;ABillNo:Integer);
    { Public declarations }
  end;

var
  Csh510_02Form: TCsh510_02Form;

implementation

uses SYSDATA, CommFun, CshComm, HwSelData;

{$R *.dfm}

//保存数据到帐本资料表[CSH500]
procedure TCsh510_02Form.SaveData;
var
  ACustNo, AItemNo, ADeptNo:string;
  ADateTime:TDateTime;
  ABillNo,AInOut,ACurrNo,ATypeNo:Integer;
begin
  Screen.Cursor:=crHourGlass;
  //取得币别编号
  ACurrNo:=GetValue('select C550_005 from CSH550 where C550_001='+IntToStr(AccNo));
  //修改时,先删除旧的记录,再插入新的记录
  if AMode='UPD' then
  begin
    if cbFrom.ItemIndex=1 then  //销售
    begin
      //反写销售发票ACR510B的已收支金额
      UpdateACR510B(AOldAccNo,AOldDate,AOldBillNo,'DEL');
      //反写销售定单ORD510B的已收支金额
      UpdateORD510B(AOldAccNo,AOldDate,AOldBillNo,'O510B_027','DEL');
    end else
    if cbFrom.ItemIndex=2 then  //采购
    begin
      //反写采购发票ACR510B的已收支金额
      UpdateACP510B(AOldAccNo,AOldDate,AOldBillNo,'DEL');
      //反写采购定单PUR510B的已收支金额
      UpdatePUR510B(AOldAccNo,AOldDate,AOldBillNo,'P510B_027','DEL');
    end;
    //更新债权债务帐本表的余额字段
    if (PageControl1.ActivePageIndex=1) or (cbType.ItemIndex in [2,3,4,5]) then
    begin
      UpdateCSH610(AOldObjType,AOldCustNo,AOldCurrNo,0,0,AOldBillNo,0,AOldDate,AOldAmount,'','','DEL');
    end;
    qryQuery.Close;
    qryQuery.SQL.Clear;
    qryQuery.SQL.Add('delete from CSH510 where C510_001='+IntToStr(AOldAccNo)+' and C510_003='+GetDateString(AOldDate)+' and C510_004='+IntToStr(AOldBillNo));
    qryQuery.ExecSQL;
    qryQuery.Close;
    qryQuery.SQL.Clear;
    qryQuery.SQL.Add('delete from CSH500 where C500_001='+IntToStr(AOldAccNo)+' and C500_003='+GetDateString(AOldDate)+' and C500_004='+IntToStr(AOldBillNo));
    qryQuery.ExecSQL;
    if AccNo<>AOldAccNo then
    begin
      //取上条记录的日期&编号
      GetPriorRecord(AOldAccNo,AOldDate,AOldBillNo,ADateTime,ABillNo);
      //计算余额
      ReCalcBalance(AOldAccNo, ADateTime, ABillNo);
    end;
  end;
  //取得客户编号
  if edtCust.Enabled then
  begin
    if qryOrd150.Locate('FCode',edtCust.Text,[]) then
      ACustNo:=qryOrd150.FieldByName('FNo').AsString
    else
      ACustNo:='';
  end;
  qryQuery.Close;
  qryQuery.SQL.Clear;
  qryQuery.SQL.Add('select * from CSH500 where C500_001 is null');
  qryQuery.Open;
  qryQuery.Append;
  qryQuery.FieldByName('C500_001').Value:=AccNo; //帐户编号
  //收支类型(1=收入单,2=支出单,3=转帐单,4=借入单,5=借出单,6=还入单,7=还出单)
  ATypeNo:=1;
  case cbType.ItemIndex of
    0:ATypeNo:=1;
    1:ATypeNo:=2;
    2:ATypeNo:=4;
    3:ATypeNo:=5;
    4:ATypeNo:=6;
    5:ATypeNo:=7;
  end;
  qryQuery.FieldByName('C500_002').Value:=ATypeNo;
  qryQuery.FieldByName('C500_003').Value:=edtDate.Date;  //收支日期
  qryQuery.FieldByName('C500_004').Value:=StrToInt(edtBillNo.Text);  //单据编号
  qryQuery.FieldByName('C500_005').AsString:=ACustNo;  //对象编号
  if qryCsh140.Locate('C140_002',cbClass.Text,[]) then
    qryQuery.FieldByName('C500_006').Value:=qryCsh140.FieldByName('C140_001').Value  //业务类别
  else
    qryQuery.FieldByName('C500_006').Value:=0;
  qryQuery.FieldByName('C500_007').Value:=StrToFloat(edtAmount.Text);  //收支金额
  AInOut:=0;
  case cbType.ItemIndex of
    0,2,4:AInOut:=0;
    1,3,5:AInOut:=1;
  end;
  qryQuery.FieldByName('C500_008').Value:=AInOut;   //0=收入,1=支出
  qryQuery.FieldByName('C500_009').Value:=edtRemark.Text;  //摘要
  if edtCode.Text<>'' then qryQuery.FieldByName('C500_010').Value:=edtCode.Text;   //票据编号
  if cbItem.Text='' then
    AItemNo:=''
  else
    AItemNo:=qryCsh150.FieldByName('C150_001').AsString;
  qryQuery.FieldByName('C500_011').AsString:=AItemNo;  //项目
  if cbDept.Text='' then
    ADeptNo:=''
  else
    ADeptNo:=qryHrm100.FieldByName('H100_001').AsString;
  qryQuery.FieldByName('C500_012').AsString:=ADeptNo;  //部门
  qryQuery.FieldByName('C500_013').AsString:='';  //经办人员
  qryQuery.FieldByName('C500_014').Value:=0;  //帐户余额
  qryQuery.FieldByName('C500_015').Value:=cbObj.ItemIndex;  //对象类型(0=客户,1=员工,2=空白)
  qryQuery.FieldByName('C500_016').Value:=cbFrom.ItemIndex;  //来源类型(0=手工输入,1=销售定单,2=采购定单,3=任务工单)
  qryQuery.FieldByName('C500_017').AsString:=edtCode.Text;  //原始单号
  qryQuery.FieldByName('C500_018').AsString:=edtWork.Text;  //任务工单
  qryQuery.Post;

  //保存出纳帐本-子表
  qryQuery.Close;
  qryQuery.SQL.Clear;
  qryQuery.SQL.Add('select * from CSH510 where C510_001 is null');
  qryQuery.Open;
  if PageControl1.ActivePageIndex=1 then
  begin
    adsCsh510.First;
    while not adsCsh510.Eof do
    begin
      qryQuery.Append;
      qryQuery.FieldByName('C510_001').Value:=AccNo;  //帐户编号
      qryQuery.FieldByName('C510_002').Value:=ATypeNo;  //单据类型
      qryQuery.FieldByName('C510_003').Value:=edtDate.Date;  //收支日期
      qryQuery.FieldByName('C510_004').Value:=edtBillNo.Text;  //单据编号
      qryQuery.FieldByName('C510_005').Value:=adsCsh510.FieldByName('FCode').Value;  //发票编号
      qryQuery.FieldByName('C510_006').Value:=adsCsh510.FieldByName('FLineNo').Value;  //发票行号
      qryQuery.FieldByName('C510_007').Value:=adsCsh510.FieldByName('FTotAmt').Value;  //应收金额
      qryQuery.FieldByName('C510_008').Value:=adsCsh510.FieldByName('FFactAmt').Value;  //实收金额
      qryQuery.Post;
      adsCsh510.Next;
    end;
  end;
  //取上条记录的日期&编号
  GetPriorRecord(AccNo,edtDate.Date,StrToInt(edtBillNo.Text),ADateTime,ABillNo);
  //计算余额
  ReCalcBalance(AccNo, ADateTime, ABillNo);

  if cbFrom.ItemIndex=1 then  //销售
  begin
    //反写销售发票ACR510B的已收支金额
    UpdateACR510B(AccNo,edtDate.Date,ABillNo,'ADD');
    //反写销售定单ORD510B的已收支金额
    UpdateORD510B(AccNo,edtDate.Date,ABillNo,'O510B_027','ADD');
  end else
  if cbFrom.ItemIndex=2 then  //采购
  begin
    //反写采购发票ACP510B的已收支金额
    UpdateACP510B(AccNo,edtDate.Date,ABillNo,'ADD');
    //反写采购定单PUR510B的已收支金额
    UpdatePUR510B(AccNo,edtDate.Date,ABillNo,'P510B_027','ADD');
  end;

  //插入到债权债务帐本表CSH610
  if (PageControl1.ActivePageIndex=1) or (cbType.ItemIndex in [2,3,4,5]) then
  begin
    if cbObj.ItemIndex<>2 then
    begin
      case cbFrom.ItemIndex of
        1:ATypeNo:=0;  //债权债务(0=债权,1=债务)
        2:ATypeNo:=1;  //债权债务(0=债权,1=债务)
      end;
      case cbType.ItemIndex of
        3,4:ATypeNo:=0;  //债权债务(0=债权,1=债务)
        2,5:ATypeNo:=1;  //债权债务(0=债权,1=债务)
      end;

      case cbType.ItemIndex of
        0:AInOut:=2;  //收入单
        1:AInOut:=2;  //支出单
        2:AInOut:=1;  //借入单
        3:AInOut:=1;  //借出单
        4:AInOut:=2;  //还入单
        5:AInOut:=2;  //还出单
      end;
      UpdateCSH610(cbObj.ItemIndex,StrToInt(ACustNo),ACurrNo,AInOut,ATypeNo,StrToInt(edtBillNo.Text),3,edtDate.Date,StrToFloat(edtAmount.Text),edtBillNo.Text,edtRemark.Text,'ADD');
    end;
  end;

  Screen.Cursor:=crDefault;
end;

procedure TCsh510_02Form.OpenData(AcctNo:Integer;ADate:TDateTime;ABillNo:Integer);
begin
  //取得所有帐户名称
  GetAllAcct(cbAcct,qryQuery);
  qryQuery.Locate('C550_001',AcctNo,[]);
  cbAcct.ItemIndex:=cbAcct.Items.IndexOf(qryQuery.FieldByName('C550_002').AsString);

  if ABillNo=0 then AMode:='ADD' else AMode:='UPD';
  qryCsh500.DisableControls;
  qryCsh500.Close;
  qryCsh500.SQL.Clear;
  qryCsh500.SQL.Add('select * from CSH500,CSH140 where C500_002<>3 and C500_006=C140_001 order by C500_001,C500_003,C500_004');

⌨️ 快捷键说明

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