📄 sal_enter_closesaleorder.pas
字号:
unit Sal_Enter_CloseSaleOrder;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Check, Menus, Db, ActnList, AdODB, Grids, DBGridEh, StdCtrls,
ExtCtrls, ComCtrls, ToolWin, DBCtrls, jpeg, ExtPrintReport;
Type
TFrm_Sal_Enter_CloseSaleOrder = Class(TFrm_Base_Check)
DBText2: TDBText;
Label2: TLabel;
AdoQry_Headslocheck: TIntegerField;
AdoQry_Headcreatedate: TDateTimeField;
AdoQry_Headslono: TStringField;
AdoQry_Headslolineno: TIntegerField;
AdoQry_HeadItemCode: TStringField;
AdoQry_HeadItemName: TStringField;
AdoQry_HeadItemflag: TStringField;
AdoQry_Headslolinestatus: TIntegerField;
AdoQry_Headslolinedate: TDateTimeField;
AdoQry_Headsloqty: TFloatField;
AdoQry_HeadcustomerCode: TStringField;
AdoQry_HeadcustomerName: TStringField;
AdoQry_Headcustomerflag: TStringField;
AdoQry_HeadSaleTypeName: TStringField;
AdoQry_HeadSaleTypeflag: TStringField;
AdoQry_HeadSaleDeptCode: TStringField;
AdoQry_HeadDeptName: TStringField;
AdoQry_HeadDeptflag: TStringField;
AdoQry_HeadSaleEmployeeCode: TStringField;
AdoQry_HeadEmployeeName: TStringField;
AdoQry_HeadEmployeeflag: TStringField;
AdoQry_HeadslolineremArk: TStringField;
AdoQry_Headlastoperationtime: TDateTimeField;
AdoQry_HeadSaleTypeCode: TStringField;
AdoQry_HeadShipqty: TFloatField;
Label1: TLabel;
DBText1: TDBText;
AdoQry_HeadcustomerPmno: TStringField;
AdoQry_Headreferenceno: TStringField;
procedure FormDestroy(Sender: TObject);
procedure Act_CheckExecute(Sender: TObject);
procedure Act_CancelCheckExecute(Sender: TObject);
procedure DBGridEhDblClick(Sender: TObject);
procedure DBGridEhTitleClick(Column: TColumnEh);
procedure AdoQry_HeadBeforeInsert(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure Act_ExcelExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
Flag:Boolean;
{ Private declarations }
public
procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);Override;
{ Public declarations }
end;
var
Frm_Sal_Enter_CloseSaleOrder: TFrm_Sal_Enter_CloseSaleOrder;
i:integer;
implementation
uses Sys_Global;
{$R *.DFM}
procedure TFrm_Sal_Enter_CloseSaleOrder.InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);
var sqltext:string;
begin
Application.ProcessMessages;
Inherited;
sqltext:='select t2.slocheck, '
+' t1.Createdate, '
+' t1.customerPmno, '
+' t1.referenceno, '
+' t2.slono, '
+' t2.slolineno, '
+' t2.ItemCode, '
+' Item.ItemName, '
+' t2.ItemCode+'' ''+Item.ItemName as Itemflag, '
+' t2.slolinestatus, '
+' t2.slolinedate, '
+' t2.sloqty, '
+' t2.Shipqty, '
// +' t2.noFinishsloqty, '
+' t1.customerCode, '
+' customer.customerName, '
+' t1.customerCode+'' ''+customer.customerName as customerflag, '
+' t1.SaleTypeCode, '
+' SaleType.SaleTypeName, '
+' t1.SaleTypeCode+'' ''+SaleType.SaleTypeName as SaleTypeflag, '
+' t1.SaleDeptCode, '
+' Dept.DeptName, '
+' t1.SaleDeptCode+'' ''+Dept.DeptName as Deptflag, '
+' t1.SaleEmployeeCode, '
+' Employee.EmployeeName, '
+' t1.SaleEmployeeCode+'' ''+Employee.EmployeeName as Employeeflag, '
+' t2.lastoperationtime, '
+' t2.slolineremArk '
+' into #tMpSaleOrderClose '
+' from sa_SaleOrderline t2 '
+' join sa_SaleOrder t1 on t2.slono=t1.slono '
+' left outer join Item on t2.ItemCode=Item.ItemCode '
+' left outer join customer on t1.customerCode=customer.customerCode '
+' left outer join SaleType on t1.SaleTypeCode=SaleType.SaleTypeCode '
+' left outer join Dept on t1.SaleDeptCode=Dept.DeptCode '
+' left outer join Employee on t1.SaleEmployeeCode=Employee.EmployeeCode ';
condition:='slolinestatus=6';
conditionuserDefine:='(slolinestatus=6 or slolinestatus=7)';
Orderbyfields:='createdate,slono,slolineno';
Executesql(AdoQry_Head,sqltext,1);
selectfromsql:='select * from #tMpSaleOrderClose';
Executesql(AdoQry_Head,'select * from #tMpSaleOrderClose where slolinestatus=6',0);
Flag:=False;
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.FormDestroy(Sender: TObject);
begin
inherited;
Frm_Sal_Enter_CloseSaleOrder:=Nil;
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.Act_CheckExecute(Sender: TObject);
function checksloline:boolean;
var sqltext:string;
begin
Result:=False;
If (AdoQry_Head.fieldbyname('sloCheck').AsInteger=1) And (AdoQry_Head.fieldbyname('slolineStatus').AsInteger=6) Then
begin
SqlText:=' Select * From sa_SaleOrderline '
+' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
+' and slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger);
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
if AdoQry_Tmp.fieldbyname('slolineStatus').AsInteger <>6 then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('选定的第'+IntToStr(I)+'条销售订单行状态已被其它用户修改,请刷新!',3);
Abort;
end;
Result:=True;
end;
end;
procedure Closesloline;
var sqlstring:string;
begin
sqlstring:='Update sa_SaleOrderline '
+' set slolineStatus=7, '
+' lastoperationtime='+quotedstr(GetServerDateTime(dbconnect))
+' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
+' and slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger)
+' And slolineStatus=6 ';
AdoQry_tmp.Close;
AdoQry_tmp.SQL.Text:=Sqlstring;
AdoQry_tmp.ExecSQL;
Sqlstring:='Update #tMpSaleOrderClose '
+' set slolineStatus=7, '
+' lastoperationtime='+quotedstr(GetServerDateTime(dbconnect))
+' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
+' and slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger)
+' And slolineStatus=6 ';
AdoQry_tmp.Close;
AdoQry_tmp.SQL.Text:=Sqlstring;
AdoQry_tmp.ExecSQL;
end;
var
BookMArk:String;
begin
inherited;
If AdoQry_Head.RecordCount=0 Then
Abort;
BookMArk:=AdoQry_Head.BookmArk;
If DispInfo('确认关闭选定的销售订单吗?',2)='y' Then
begin
I:=1;
Try
AdoQry_Head.First;
While Not AdoQry_Head.Eof Do
begin
Dbconnect.beginTrans;
if checksloline then
begin
saveSaleOrderLineHistory(dbconnect,AdoQry_Head.fieldbyname('slono').asstring,AdoQry_Head.fieldbyname('slolineno').asinteger,userCode,5);
Closesloline;
AdoQry_Head.Edit;
AdoQry_Head.fieldbyname('slolineStatus').AsInteger:=7;
AdoQry_Head.fieldbyname('sloCheck').AsInteger:=0;
AdoQry_Head.Post;
I:=I+1;
DbConnect.CommitTrans;
AdoQry_Head.Next;
end
Else
begin
I:=I+1;
DbConnect.CommitTrans;
AdoQry_Head.Next;
end;
end;
Except
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
AdoQry_Head.BookMArk:=BookmArk;
Abort;
end;
end;
AdoQry_Head.BookMArk:=BookmArk;
Flag:=Not Flag;
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.Act_CancelCheckExecute(Sender: TObject);
function checksloline:boolean;
var sqltext:string;
begin
Result:=False;
If (AdoQry_Head.fieldbyname('sloCheck').AsInteger=1)
And (AdoQry_Head.fieldbyname('slolineStatus').AsInteger=7)
Then
begin
SqlText:=' Select * From sa_SaleOrderline '
+' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
+' and slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger);
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
if AdoQry_Tmp.fieldbyname('slolineStatus').asfloat <> 7 then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('选定的第'+IntToStr(I)+'条销售订单行状态已被其它用户修改,请刷新!',3);
abort;
end;
Result:=True;
end;
end;
procedure unClosesloline;
var sqlstring:string;
begin
Sqlstring:='Update sa_SaleOrderline '
+' set slolineStatus=6'
+' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
+' and slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger)
+' And slolineStatus=7 ';
AdoQry_tmp.Close;
AdoQry_tmp.SQL.Text:=Sqlstring;
AdoQry_tmp.ExecSQL;
Sqlstring:='Update #tMpSaleOrderClose '
+' set slolineStatus=6 '
+' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
+' and slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger)
+' And slolineStatus=7 ';
AdoQry_tmp.Close;
AdoQry_tmp.SQL.Text:=Sqlstring;
AdoQry_tmp.ExecSQL;
end;
var
BookMArk:String;
I:Integer;
begin
inherited;
If AdoQry_Head.RecordCount=0 Then
Abort;
BookMArk:=AdoQry_Head.BookmArk;
If DispInfo('确认取消关闭选定销售合同行吗?',2)='y' Then
begin
I:=1;
Try
AdoQry_Head.First;
While Not AdoQry_Head.Eof Do
begin
DbConnect.beginTrans;
if checksloline then
begin
saveSaleOrderLineHistory(dbconnect,AdoQry_Head.fieldbyname('slono').asstring,AdoQry_Head.fieldbyname('slolineno').asinteger,userCode,6);
unClosesloline;
AdoQry_Head.Edit;
AdoQry_Head.fieldbyname('slolineStatus').AsInteger:=6;
AdoQry_Head.fieldbyname('sloCheck').AsInteger:=0;
AdoQry_Head.Post;
I:=I+1;
AdoQry_Head.Next;
dbconnect.CommitTrans;
end
Else
begin
I:=I+1;
AdoQry_Head.Next;
DbConnect.CommitTrans;
end;
end;
Except
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
AdoQry_Head.BookMArk:=BookmArk;
Abort;
end;
end;
AdoQry_Head.BookMArk:=BookmArk;
Flag:=Not Flag;
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.DBGridEhDblClick(Sender: TObject);
begin
inherited;
If AdoQry_Head.RecordCount=0 Then
Abort;
If AdoQry_Head.fieldbyname('slolineStatus').AsInteger=6 then
Act_CheckExecute(Act_Check)
Else
Act_CancelCheckExecute(Act_CancelCheck);
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.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('sloCheck').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('sloCheck').AsInteger:=0;
AdoQry_Head.Post;
AdoQry_Head.Next;
end;
end;
AdoQry_Head.BookmArk:=BookMArk;
Flag:=Not Flag;
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.AdoQry_HeadBeforeInsert(
DataSet: TDataSet);
begin
inherited;
Abort;
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.FormCreate(Sender: TObject);
begin
inherited;
ToolButton6.Action:=act_excel;
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.Act_ExcelExecute(Sender: TObject);
begin
// inherited;
dbgridehtoexcel(dbgrideh);
end;
procedure TFrm_Sal_Enter_CloseSaleOrder.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
try
Executesql(AdoQry_tmp,'drop table #tMpSaleOrderClose',1);
except
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -