📄 pm_enter_closepo.pas
字号:
unit Pm_Enter_ClosePo;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Check, Menus, Db, ActnList, AdODB, Grids, DBGridEh, StdCtrls,
ExtCtrls, ComCtrls, ToolWin, DBCtrls, jpeg;
Type
TFrm_Pm_Enter_ClosePo = Class(TFrm_Base_Check)
AdoQry_HeadPONO: TStringField;
AdoQry_HeadPOLINENo: TIntegerField;
AdoQry_HeadItemCode: TStringField;
AdoQry_HeadPOLineDATE: TDateTimeField;
AdoQry_HeadPOQTY: TFloatField;
AdoQry_HeadPONoFinishQty: TFloatField;
AdoQry_HeadPOREFERENCEDPRICE: TIntegerField;
AdoQry_HeadPOLINESTATUS: TIntegerField;
AdoQry_HeadPoNoTaxPrice: TFloatField;
AdoQry_HeadPONoTaxAmount: TBCDField;
AdoQry_HeadPoTaxPrice: TFloatField;
AdoQry_HeadPoTaxAmount: TBCDField;
AdoQry_HeadPOStArtWorkDate: TDateTimeField;
AdoQry_HeadVendorCode: TStringField;
AdoQry_HeadVendorName: TStringField;
AdoQry_HeadItemName: TStringField;
AdoQry_HeadPoDate: TDateTimeField;
AdoQry_HeadEmployeeCode: TStringField;
AdoQry_HeadEmployeeName: TStringField;
AdoQry_HeadUomName: TStringField;
AdoQry_HeadEmployeeFlag: TStringField;
AdoQry_HeadItemFlag: TStringField;
AdoQry_HeadVendorFlag: TStringField;
Label2: TLabel;
Label3: TLabel;
DBText2: TDBText;
DBText3: TDBText;
AdoQry_HeadPoLineCheck: TIntegerField;
AdoQry_HeadCloseRemArk: TStringField;
Label1: TLabel;
DBText1: TDBText;
procedure Act_CancelCheckExecute(Sender: TObject);
procedure Act_CheckExecute(Sender: TObject);
procedure DBGridEhDblClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure DBGridEhTitleClick(Column: TColumnEh);
procedure AdoQry_HeadBeforeInsert(DataSet: TDataSet);
private
Flag:Boolean;
Function SavePoLineHistory:Boolean;//保存历史记录
procedure CloseRecord; //关闭
procedure OpenRecord; //打开
{ Private declarations }
public
procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);Override;
{ Public declarations }
end;
var
Frm_Pm_Enter_ClosePo: TFrm_Pm_Enter_ClosePo;
implementation
uses Sys_Global;
{$R *.DFM}
procedure TFrm_Pm_Enter_ClosePo.InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);
begin
Application.ProcessMessages;
Inherited;
SelectFromSql:=' Select Distinct PoLine.*,Po.*,Vendor.VendorName,Item.ItemName,Employee.EmployeeName,Uom.UomName,'
+' Employee.EmployeeCode+'''+' '+'''+Employee.EmployeeName As EmployeeFlag,'
+' Item.ItemCode+'''+' '+'''+Item.ItemName As ItemFlag, '
+' Vendor.VendorCode+'''+' '+'''+Vendor.VendorName As VendorFlag '
+' From PoLine '
+' Join Po On Po.PoNo=PoLine.PoNo '
+' Join Item On PoLine.ItemCode=Item.ItemCode '
+' And (PoLine.POLineStatus=6 Or PoLine.PoLineStatus=7) '
+' Left Join Vendor On Po.VendorCode=Vendor.VendorCode '
+' Left Join Buyer On Po.EmployeeCode=Buyer.EmployeeCode '
+' Left Join Employee On Employee.EmployeeCode=Buyer.EmployeeCode'
+' Join Uom On Uom.UomCode=Item.UomCode ';
ConditionUserDefine:=' (Po.PoNo Not In(Select PoNo From Po Where PoSpecial=1))';
Condition:= ' PoLine.POLineStatus=6';
OrderByFields:='EmployeeCode,PoNo,';
GetData;
Flag:=False;
end;
Function TFrm_Pm_Enter_ClosePo.SavePoLineHistory:Boolean;
var
SqlText:String;
begin
Try
SqlText:='Insert PoLineHistory '
+' (PoNo,PoLineNo,ItemCode,POLineDate,PoStArtWorkDate,POQty,POTaxPrice,POTaxAmount,PONoTaxPrice,'
+' PONoTaxAmount,PONoFinishQty,POReferencedPrice,POLineStatus,PolChgEmployeeCode,PolChgTime,PolChgType)'
+'Values('
+''''+AdoQry_Head.fieldbyname('PoNo').AsString+''''+','
+''''+IntToStr(AdoQry_Head.fieldbyname('PoLineNo').AsInteger)+''''+','
+''''+AdoQry_Head.fieldbyname('ItemCode').AsString+''''+','
+''''+DatetimeToStr(AdoQry_Head.fieldbyname('PoLineDate').AsDateTime)+''''+','
+''''+DatetimeToStr(AdoQry_Head.fieldbyname('PoStArtWorkDate').AsDateTime)+''''+','
+''''+FloatToStr(AdoQry_Head.fieldbyname('PoQty').AsFloat)+''''+','
+''''+FloatToStr(AdoQry_Head.fieldbyname('POTaxPrice').AsFloat)+''''+','
+''''+FloatToStr(AdoQry_Head.fieldbyname('POTaxAmount').AsFloat)+''''+','
+''''+FloatToStr(AdoQry_Head.fieldbyname('PONoTaxPrice').AsFloat)+''''+','
+''''+FloatToStr(AdoQry_Head.fieldbyname('PONoTaxAmount').AsFloat)+''''+','
+''''+FloatToStr(AdoQry_Head.fieldbyname('PONoFinishQty').AsFloat)+''''+','
+''''+IntToStr(AdoQry_Head.fieldbyname('POReferencedPrice').AsInteger)+''''+','
+''''+IntToStr(AdoQry_Head.fieldbyname('POLineStatus').AsInteger)+''''+','
+''''+UserCode+''''+','
+'GetDate(),'
+''''+'更改行状态'+''''+')';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.ExecSQL;
Result:=True;
Except
Result:=False;
end;
end;
procedure TFrm_Pm_Enter_ClosePo.OpenRecord;
var
SqlText,BookMArk:String;
I:Integer;
begin
BookMArk:=AdoQry_Head.BookmArk;
AdoQry_Head.First;
DbConnect.beginTrans;
I:=1;
Try
While Not AdoQry_Head.Eof Do
If (AdoQry_Head.fieldbyname('PoLineCheck').AsInteger=1)
And (AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=7) Then
begin
SqlText:=' Select * From PoLine '
+' Where PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
+' And PoLineNo='''+IntToStr(AdoQry_Head.fieldbyname('PoLineNo').AsInteger)+'''';
// +' And PoLineStatus=7';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.Open;
If AdoQry_Tmp.Eof Then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('选定的第'+IntToStr(I)+'条采购订单记录已被删除,请刷新!',3);
Abort;
end
else
begin
if AdoQry_Tmp.fieldbyname('PoLineStatus').asfloat<>7 then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('选定的第'+IntToStr(I)+'条采购订单记录行状态已被其它用户修改,请刷新!',3);
Abort;
end;
end;
{ If AdoQry_Tmp.Eof Then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('选定的第'+IntToStr(I)+'条采购订单记录行状态已被其它用户修改,请刷新!',3);
Abort;
end;}
SavePoLineHistory;
SqlText:=' Update PoLine '
+' set PoLineStatus=6,'
+' CloseRemArk='''+AdoQry_Head.fieldbyname('CloseRemArk').AsString+''''
+' Where PoLine.PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
+' And PoLine.PoLineNo='''+AdoQry_Head.fieldbyname('PoLineNo').AsString+''''
+' And PoLine.PoLineStatus=7';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.ExecSQL;
AdoQry_Head.Edit;
AdoQry_Head.fieldbyname('PoLineStatus').AsInteger:=6;
AdoQry_Head.fieldbyname('PoLineCheck').AsInteger:=0;
AdoQry_Head.Post;
I:=I+1;
AdoQry_Head.Next;
end
Else
begin
I:=I+1;
AdoQry_Head.Next;
end;
DbConnect.CommitTrans;
Except
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
AdoQry_Head.BookmArk:=BookMArk;
Abort;
end;
AdoQry_Head.BookMArk:=BookmArk;
Flag:=Not Flag;
end;
procedure TFrm_Pm_Enter_ClosePo.CloseRecord;
var
SqlText,BookMArk:String;
I:Integer;
begin
BookMArk:=AdoQry_Head.BookmArk;
AdoQry_Head.First;
DbConnect.beginTrans;
I:=1;
Try
While Not AdoQry_Head.Eof Do
If (AdoQry_Head.fieldbyname('PoLineCheck').AsInteger=1)
And (AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=6) Then
begin
SqlText:=' Select * From PoLine '
+' Where PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
+' And PoLineNo='''+IntToStr(AdoQry_Head.fieldbyname('PoLineNo').AsInteger)+''''
+' And PoLineStatus=6';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.Open;
If AdoQry_Tmp.Eof Then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('选定的第'+IntToStr(I)+'条采购订单记录行状态已被其它用户修改,请刷新!',3);
exit;
end
else
begin
if AdoQry_tmp.fieldbyname('poinqty').asfloat>0 then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('选定的第'+IntToStr(I)+'条采购订单有待检库存,不能关闭!',3);
exit;
end
end;
SavePoLineHistory;
SqlText:=' Update PoLine '
+' set PoLineStatus=7,'
+' CloseRemArk='''+AdoQry_Head.fieldbyname('CloseRemArk').AsString+''''
+' Where PoLine.PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
+' And PoLine.PoLineNo='''+AdoQry_Head.fieldbyname('PoLineNo').AsString+''''
+' And PoLine.PoLineStatus=6';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.ExecSQL;
AdoQry_Head.Edit;
AdoQry_Head.fieldbyname('PoLineStatus').AsInteger:=7;
AdoQry_Head.fieldbyname('PoLineCheck').AsInteger:=0;
AdoQry_Head.Post;
I:=I+1;
AdoQry_Head.Next;
end
Else
begin
I:=I+1;
AdoQry_Head.Next;
end;
DbConnect.CommitTrans;
Except
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
AdoQry_Head.BookmArk:=BookMArk;
Abort;
end;
AdoQry_Head.BookMArk:=BookmArk;
Flag:=Not Flag;
end;
procedure TFrm_Pm_Enter_ClosePo.Act_CancelCheckExecute(Sender: TObject);
begin
inherited;
If AdoQry_Head.RecordCount=0 Then
Exit;
IF DispInfo('确认真的要打开此记录吗',2)='y' Then
OpenRecord;
end;
procedure TFrm_Pm_Enter_ClosePo.Act_CheckExecute(Sender: TObject);
begin
inherited;
If AdoQry_Head.RecordCount=0 Then
Exit;
IF DispInfo('确认关闭选定的采购记录码?',2)='y' Then
CloseRecord;
end;
procedure TFrm_Pm_Enter_ClosePo.DBGridEhDblClick(Sender: TObject);
begin
inherited;
IF AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=6 Then
begin
Frm_Pm_Enter_ClosePo.Act_CheckExecute(Act_Check);
Abort;
end;
IF AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=7 Then
begin
Frm_Pm_Enter_ClosePo.Act_CancelCheckExecute(Act_CancelCheck);
Abort;
end;
end;
procedure TFrm_Pm_Enter_ClosePo.FormDestroy(Sender: TObject);
begin
inherited;
Frm_Pm_Enter_ClosePo:=Nil;
end;
procedure TFrm_Pm_Enter_ClosePo.DBGridEhTitleClick(Column: TColumnEh);
var
BookMArk:String;
begin
inherited;
If Trim(Column.Title.Caption)<>'标记' Then
Abort;
If AdoQry_Head.RecordCount=0 Then
Abort;
BookMArk:=AdoQry_Head.BookmArk;
If Not Flag Then
begin
AdoQry_Head.First;
While Not AdoQry_Head.Eof Do
begin
AdoQry_Head.Edit;
AdoQry_Head.fieldbyname('PoLineCheck').AsInteger:=1;
AdoQry_Head.Post;
AdoQry_Head.Next;
end;
end
Else
begin
AdoQry_Head.First;
While Not AdoQry_Head.Eof Do
begin
AdoQry_Head.Edit;
AdoQry_Head.fieldbyname('PoLineCheck').AsInteger:=0;
AdoQry_Head.Post;
AdoQry_Head.Next;
end;
end;
AdoQry_Head.BookmArk:=BookMArk;
Flag:=Not Flag;
end;
procedure TFrm_Pm_Enter_ClosePo.AdoQry_HeadBeforeInsert(DataSet: TDataSet);
begin
inherited;
Abort;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -