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

📄 upartoutputstock.pas

📁 天涯進銷存系統
💻 PAS
字号:
unit uPartOutPutStock;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,StdCtrls, jpeg, DBCtrls,
  LBDBScrollBar, dbcgrids, Mask, LBCtrls, DB, DBClient, SimpleDS,
  LBMorphVCLBase, LBMorphButton;

type
  TfrmPartOutPutStock = class(TForm)
    Image2: TImage;
    WindowCaption: TLabel;
    SysCloseButton: TLBMorphButton;
    Panel4: TPanel;
    Panel6: TPanel;
    Panel3: TPanel;
    Label2: TLabel;
    DBText2: TDBText;
    Label1: TLabel;
    DBText7: TDBText;
    Label3: TLabel;
    DBText1: TDBText;
    Label5: TLabel;
    DBText3: TDBText;
    Label6: TLabel;
    DBText4: TDBText;
    Panel12: TPanel;
    Panel1: TPanel;
    Shape1: TShape;
    Panel2: TPanel;
    Label4: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label7: TLabel;
    DBCtrlGrid: TDBCtrlGrid;
    LBDBScrollBar1: TLBDBScrollBar;
    Panel5: TPanel;
    Shape9: TShape;
    Shape10: TShape;
    Shape11: TShape;
    Shape12: TShape;
    Shape14: TShape;
    Panel7: TPanel;
    PartCodeDBEdit: TDBEdit;
    PartNameDBEdit: TDBEdit;
    UnitsDBEdit: TDBEdit;
    QuantityDBEdit: TDBEdit;
    OutQtyDBEdit: TDBEdit;
    StockQtyDBEdit: TDBEdit;
    Label10: TLabel;
    SaveButton: TLBButton;
    CancelButton: TLBButton;
    Shape3: TShape;
    BillHandData: TSimpleDataSet;
    BillHandDs: TDataSource;
    BillBodyData: TSimpleDataSet;
    BillBodyDs: TDataSource;
    BillHandDataBILLCODE: TStringField;
    BillHandDataBILLDATE: TSQLTimeStampField;
    BillHandDataORIGINALITYNO: TStringField;
    BillHandDataORIGINALITYUNITCODE: TStringField;
    BillHandDataORIGINALITYUNITNAME: TStringField;
    BillHandDataSTOCKMAGMAN: TStringField;
    BillHandDataDEPOTCODE: TStringField;
    BillBodyDataBILLCODE: TStringField;
    BillBodyDataID: TIntegerField;
    BillBodyDataPARTCODE: TStringField;
    BillBodyDataPARTNAME: TStringField;
    BillBodyDataBORNCODE: TStringField;
    BillBodyDataCARMODEL: TStringField;
    BillBodyDataPRODUCING: TStringField;
    BillBodyDataUNITS: TStringField;
    BillBodyDataQUANTITY: TBCDField;
    BillBodyDataSTOCKQTY: TBCDField;
    BillBodyDataOUTQUANTITY: TBCDField;
    BillBodyDataTOTALSUM: TBCDField;
    procedure FormShow(Sender: TObject);
    procedure OutQtyDBEditEnter(Sender: TObject);
    procedure OutQtyDBEditExit(Sender: TObject);
    procedure SaveButtonClick(Sender: TObject);
    procedure CancelButtonClick(Sender: TObject);
    procedure PartCodeDBEditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormDeactivate(Sender: TObject);
    procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmPartOutPutStock: TfrmPartOutPutStock;
  OldOutQty: double;

implementation

uses  uDataMo, uPublicvar, uMain, uConst;

{$R *.dfm}

procedure TfrmPartOutPutStock.FormShow(Sender: TObject);
var
  isNoQty : Boolean;
begin
  isNoQty:=False;
  OpenData('select * from OutPutStockHand where BillCode=''''', BillHandData);
  with BillHandData do
  begin
    Edit;
    Fieldbyname('BILLCODE').asstring:='新单据';
    Fieldbyname('BILLDATE').asDatetime:=Date;
    Fieldbyname('ORIGINALITYNO').asstring:=PickUpGoodsNo;
    Fieldbyname('STOCKMAGMAN').asstring:=UserName;
    Fieldbyname('ORIGINALITYUNITCODE').asstring:=PickUpGoodsUnitCode;
    Fieldbyname('ORIGINALITYUnitNAME').asstring:=PickUpGoodsUnit;
    Fieldbyname('DEPOTCODE').asstring:=PickUpDepotCode;
    Post;
  end;
  OpenData('select a.*, b.StockQuantity From '+PickBodyTableName+' a, StockPart b where a.BillCode='+
            #39+PickUpGoodsNo+#39+' and a.Quantity>a.OutPutQry and a.PartCode=b.PartCode'+
            ' and b.DepotCode='+#39+PickUpDepotCode+#39, dmData.sdsPublic);
  OpenData('select * from OutPutStockBody where BillCode='''+'新单据''', BillBodyData);
  while not dmData.sdsPublic.Eof do
  begin
    BillBodyData.Append;
    BillBodyData.Fieldbyname('BillCode').asString:='新单据'; 
    BillBodyData.Fieldbyname('ID').asInteger:=BillBodyData.RecordCount+1;
    BillBodyData.FieldByName('PARTCODE').asstring:=
       dmData.sdsPublic.FieldByName('PARTCODE').asstring;
    BillBodyData.FieldByName('PARTNAME').asstring:=
       dmData.sdsPublic.FieldByName('PARTNAME').asstring;
    BillBodyData.FieldByName('BORNCODE').asstring:=
       dmData.sdsPublic.FieldByName('BORNCODE').asstring;
    BillBodyData.FieldByName('CARMODEL').asstring:=
       dmData.sdsPublic.FieldByName('CARMODEL').asstring;
    BillBodyData.FieldByName('PRODUCING').asstring:=
       dmData.sdsPublic.FieldByName('PRODUCING').asstring;
    BillBodyData.FieldByName('UNITS').asstring:=
       dmData.sdsPublic.FieldByName('UNITS').asstring;
    BillBodyData.FieldByName('QUANTITY').asfloat:=
       dmData.sdsPublic.FieldByName('QUANTITY').asfloat;
    BillBodyData.FieldByName('StockQty').asfloat:=
       dmData.sdsPublic.FieldByName('StockQuantity').asfloat;
    if dmData.sdsPublic.FieldByName('StockQuantity').asfloat<
       dmData.sdsPublic.FieldByName('QUANTITY').asfloat then
    begin
      BillBodyData.FieldByName('OutQuantity').asfloat:=
        dmData.sdsPublic.FieldByName('StockQuantity').asfloat;
      isNoQty:=True;
    end
    else
    begin
      BillBodyData.FieldByName('OutQuantity').asfloat:=
        dmData.sdsPublic.FieldByName('QUANTITY').asfloat;
    end;
    dmData.sdsPublic.Next;
  end;
  dmData.sdsPublic.Close;
  if isNoQty then
     Application.MessageBox('有些商品库存数量不足,将按最大库存出库。',Hintinfo,$30);

end;

procedure TfrmPartOutPutStock.OutQtyDBEditEnter(Sender: TObject);
begin
  if Trim(OutQtyDBEdit.Text)='' then OutQtyDBEdit.Text:='0';
  OldOutQty:=BillBodyData.FieldByName('OutQuantity').asfloat;
end;

procedure TfrmPartOutPutStock.OutQtyDBEditExit(Sender: TObject);
begin
  if Trim(OutQtyDBEdit.Text)='' then OutQtyDBEdit.Text:='0';
  if StrToFloat(OutQtyDBEdit.Text)>StrToFloat(QuantityDBEdit.Text) then
  begin
    Application.MessageBox('本次出库数量不可大于未出库数量。',Hintinfo,$30);
    BillBodyData.Edit;
    BillBodyData.FieldByName('OutQuantity').asfloat:=OldOutQty;
    BillBodyData.Post;
    Exit;
  end;
  if StrToFloat(OutQtyDBEdit.Text)>StrToFloat(StockQtyDBEdit.Text) then
  begin
    Application.MessageBox('本次出库数量不可大于库存数量。',Hintinfo,$30);
    StockQtyDBEdit.Text:=FloatToStr(OldOutQty);
    BillBodyData.Edit;
    BillBodyData.FieldByName('OutQuantity').asfloat:=OldOutQty;
    BillBodyData.Post;
    Exit;
  end;
end;

procedure TfrmPartOutPutStock.SaveButtonClick(Sender: TObject);
var
  isNoQty : Boolean;
  BillQuty, StockQuty, OutQuty : Extended;
begin
  isNoQty :=False;
  DBCtrlGrid.SetFocus;
  BillBodyData.First;
  while not BillBodyData.Eof do
  begin
    {为解决网络版问题,重取未提货数量}
    OpenData('select ID, Quantity, OutPutQry From '+PickBodyTableName+
             ' where BillCode='+#39+PickUpGoodsNo+#39+' and PartCode='+
             #39+BillBodyData.Fieldbyname('PartCode').asstring+#39+
             'and OutPutQry<Quantity', dmData.sdsPublic);
    //如果还有记录
    if not dmData.sdsPublic.IsEmpty then
       BillQuty:=dmData.sdsPublic.FieldByName('Quantity').AsFloat-
       dmData.sdsPublic.FieldByName('OutPutQry').AsFloat
    else //否则未提货数量为0
       BillQuty:=0;

    {重取库存数量}
    OpenData('select PartCode, StockQuantity From StockPart '+
            'where PartCode='+#39+BillBodyData.Fieldbyname('PartCode').asstring+#39+
            ' and DepotCode='+#39+PickUpDepotCode+#39, dmData.sdsPublic);
    if not dmData.sdsPublic.IsEmpty then
      StockQuty:=dmData.sdsPublic.FieldByName('StockQuantity').asfloat
    else //如果没有记录则库存数为“0”
      StockQuty:=0;

    {如果未提货数量小库存数量则取未提货数量,否则取库存数量}
    if BillQuty<StockQuty then  OutQuty:=BillQuty
    else   OutQuty:=StockQuty;

    {如果本次提货数量小于或等于要可取数量,则取本次提货数量}
    if BillBodyData.Fieldbyname('OutQuantity').asfloat<=OutQuty then
      OutQuty:=BillBodyData.Fieldbyname('OutQuantity').asfloat
    else
      isNoQty:=True;
    {如果本次提货数量大于零则执行程序,否则删除记录}
    if OutQuty>0 then
    begin
      //更新出库单
      with dmData.SQLQuery do
      begin
        Close;
        SQL.Clear;
        Sql.Text:='Update '+PickBodyTableName+
                  ' set OutPutQry=OutPutQry+'+FloatToStr(OutQuty)+
                  ' where BillCode='+#39+PickUpGoodsNo+#39+' and PartCode='+
                  #39+BillBodyData.Fieldbyname('PartCode').asstring+#39;
        ExecSQL;
        //更新仓库数量
        Close;
        SQL.Clear;
        Sql.Text:='Update StockPart '+
                  ' set StockQuantity=StockQuantity-'+FloatToStr(OutQuty)+
                  ' where PartCode='+#39+BillBodyData.Fieldbyname('PartCode').asstring+#39+
                  ' and DepotCode='+#39+PickUpDepotCode+#39;
        ExecSQL;
        //更新商品数量
        Close;
        SQL.Clear;
        Sql.Text:='Update Partinfo '+
                  ' set StockQuantity=StockQuantity-'+FloatToStr(OutQuty)+
                  ' where Code='+#39+BillBodyData.Fieldbyname('PartCode').asstring+#39;
        ExecSQL;
      end;
      //如果本次出库的数量与输入的出库数不同,则更改输入的数量  
      if BillBodyData.Fieldbyname('OutQuantity').asfloat<>OutQuty then
      begin
        BillBodyData.Edit;
        BillBodyData.Fieldbyname('OutQuantity').asfloat:=OutQuty;
        BillBodyData.Post;
      end;
    end
    else  //如果出库量为零则删除记录
      BillBodyData.Delete;
    BillBodyData.Next;
  end;
  //如果单据记录不为空
  if not BillBodyData.IsEmpty then
  begin
    BillHandData.Edit;
    BillHandData.Fieldbyname('BILLCode').asstring:=ComDepotCode+'-'+'CK'+'-'+
               GetBillID('30', BillHandData.Fieldbyname('BILLDATE').asstring);
    BillHandData.Post;
    BillBodyData.First;
    while not BillBodyData.Eof do
    begin
      BillBodyData.Edit;
      BillBodyData.FieldByName('BillCode').asstring:=
      BillHandData.Fieldbyname('BILLCode').asstring;
      BillBodyData.Next;
    end; 
    BillBodyData.ApplyUpdates(-1);
    BillHandData.ApplyUpdates(-1);
  end;
  //查找是否还有未出库的记录
  OpenData('select ID From '+PickBodyTableName+
           ' where BillCode='+#39+PickUpGoodsNo+#39+
           'and OutPutQry<Quantity', dmData.sdsPublic);
  //如果没有则更改出库单据为以出库
  if dmData.sdsPublic.IsEmpty then
  begin
    dmData.SQLQuery.Close;
    dmData.SQLQuery.SQL.Clear;
    dmData.SQLQuery.Sql.Text:='Update '+PickHandTableName+
           ' set ISEXECUTE='''+'1'''+', EXECUTEMAN='+#39+UserName+#39+
           ', EXECUTEDATE='+#39+DateToStr(Date)+#39+
           ' where BillCode='+#39+PickUpGoodsNo+#39;
    dmData.SQLQuery.ExecSQL;
  end;
  //如果是商品移仓单
  if PickUpType =2 then
  begin
  SavePartData:=TClientDataSet.Create(Nil);
    SavePartData.Data:=BillBodyData.Data;
    PartInPutDataSave(PickUpGoodsUnitCode,  PickUpGoodsUnit,
                      BillHandData.FieldByName('BillDate').asDateTime,
                      4);
  end;
  dmData.SQLQuery.Close;
  dmData.sdsPublic.Close;
  if isNoQty then
     Application.MessageBox('有些商品库存数量不足,将按最大库存出库。',Hintinfo,$30);
  Close;
end;

procedure TfrmPartOutPutStock.CancelButtonClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmPartOutPutStock.PartCodeDBEditKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  BillKeyDown(Key, BillBodyData, 13);
end;

procedure TfrmPartOutPutStock.FormDeactivate(Sender: TObject);
begin
  BillHandData.CancelUpdates;
  BillBodyData.CancelUpdates;
end;

procedure TfrmPartOutPutStock.Image2MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  SendMessage(Handle, wm_SysCommand ,$F012, 0);
end;

procedure TfrmPartOutPutStock.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=27 then Close;
end;

end.

⌨️ 快捷键说明

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