📄 upartoutputstock.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 + -