⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wzck.pas

📁 物资管理系统 包括屋子入库出库管理
💻 PAS
字号:
unit WZCK;

interface

uses
  Windows, SysUtils, Variants, Classes, Controls, Forms, ADODB, Dialogs,
  StdCtrls, ExtCtrls, WZGLCommon, DB, Grids, DBGrids, CKD;

type
  TWZCKForm = class(TForm)
    pnlToolBar: TPanel;
    dbWZCK: TDBGrid;
    dsWZCK: TDataSource;
    adoqWZCK: TADOQuery;
    btAdd: TButton;
    btDel: TButton;
    procedure btAddClick(Sender: TObject);
    procedure btDelClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure dsWZCKDataChange(Sender: TObject; Field: TField);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    procedure SaveCKRK(ACKID: Integer; ABm: string; ACksl: Double);
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); reintroduce;
  end;

var
  WzckForm: TWzckForm;
  
implementation

{$R *.dfm}

constructor TWZCKForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  with adoqWZCK do
  begin
    Connection := AdoWzgl;
    SQL.Text := 'select b.CKID, b.Ckrq, b.Bm, a.MC, a.GG, a.DW, a.DJ, b.CKSL, ' +
      'a.DJ * b.CKSL as HJ from WZZD a, CKXX b where a.Bm = b.Bm Order by Ckrq';
    Open;
  end;
end;

procedure TWZCKForm.btAddClick(Sender: TObject);
begin
  with TCKDForm.Create(Self) do
  try
    ShowModal;
    if ModalResult = mrOK then
      with adoqWzck, FWZRec do
      begin
        Append;
        FieldByName('BM').AsString := BM;
        FieldByName('CKSL').AsFloat := CKSL;
        FieldByName('CKRQ').AsDateTime := Date;
        Post;
        ReQuery;
        Last;

        // 保存出库关联入库信息
        SaveCKRK(FieldByName('CKID').AsInteger, BM, CKSL);
      end;
  finally
    free;
  end;
end;

procedure TWZCKForm.btDelClick(Sender: TObject);
begin
  if Application.MessageBox('是否删除?', '确认', 1) = 1 then
    with TAdoQuery.Create(nil) do
    try
      Connection := AdoWzgl;
      Sql.Text := 'Delete from CKRK where CKID = ' +
                  IntToStr(adoqWzck.FieldByName('CKID').asInteger);
      ExecSQL;
      Close;
      Sql.Text := 'Delete From CKXX where CKID = ' +
                  IntToStr(adoqWzck.FieldByName('CKID').AsInteger);
      ExecSql;
      adoqWzck.Requery;
    finally
      Free;
    end;
end;

procedure TWZCKForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  WzckForm := nil;
end;

procedure TWZCKForm.dsWZCKDataChange(Sender: TObject; Field: TField);
begin
  btDel.Enabled := not (adoqWzck.Eof and adoqWzck.Bof);
end;

procedure TWZCKForm.FormDestroy(Sender: TObject);
begin
  if adoqWzck.Active then adoqWzck.Close;
end;

procedure TWZCKForm.SaveCKRK(ACKID: Integer; ABm: string; ACksl: Double);
var
  l_RKID: Integer;
  l_KCSL, l_CKSL: Double;
  l_Adoq: TAdoQuery;
begin
  l_Adoq := TAdoQuery.Create(nil);
  l_Adoq.Connection := AdoWzgl;

  l_CKSL := ACksl;
  with TAdoQuery.Create(nil) do
  try
    //根据物资编码找到入库信息中库存量大于0的记录,然后再根据出库数量进行匹配,
    //将对应的每条入库信息的出库量保存到出库关联入库信息表中
    Connection := AdoWzgl;
    Sql.Text := 'select c.RKID, c.RKSL, c.KCSL from (select a.RKID, RKSL, RKSL - b.CKSL as KCSL ' +
                'from RKXX a left join (select RKID, sum(SL) as CKSL from CKRK ' +
                'Group by RKID) b on a.RKID = b.RKID where Bm = ' + QuotedStr(ABm) +
                ') c where c.KCSL > 0 or c.KCSL is Null';
    Open;
    while not Eof do
    begin
      l_RKID := FieldByName('RKID').AsInteger;
      if FieldByName('KCSL').AsFloat = 0 then
        l_KCSL := FieldByName('RKSL').AsFloat
      else
        l_KCSL := FieldByName('KCSL').AsFloat;

      if l_KCSL - l_CKSL >= 0 then
      begin
        l_Adoq.SQL.Text := 'Insert Into CKRK (RKID, CKID, SL) Values (' +
          IntToStr(l_RKID) + ', ' + IntToStr(ACKID) + ', ' + FloatToStr(l_CKSL) + ')';
        l_Adoq.ExecSQL;
        Break;
      end
      else begin
        l_CKSL := l_CKSL - l_KCSL;
        l_Adoq.SQL.Text := 'Insert Into CKRK (RKID, CKID, SL) Values (' +
          IntToStr(l_RKID) + ', ' + IntToStr(ACKID) + ', ' + FloatToStr(l_KCSL) + ')';
        l_Adoq.ExecSQL;
        Next;
      end;
    end;
  finally
    Free;
  end;
  l_adoq.Free;
end;

end.

⌨️ 快捷键说明

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