📄 pm_enter_newfreepasspo.pas
字号:
unit Pm_Enter_NewFreePassPo;
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_Pm_Enter_NewFreePassPo = 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;
DBText2: TDBText;
Label3: TLabel;
DBText3: TDBText;
AdoQry_HeadPoLineCheck: TIntegerField;
AdoQry_HeadPmCode: TIntegerField;
AdoQry_HeadQclt: TIntegerField;
Label1: TLabel;
DBText1: TDBText;
AdoQry_HeadPOQTY2: TFloatField;
AdoQry_HeadPOType: TIntegerField;
AdoQry_HeadPassEmployeeCode: TStringField;
AdoQry_HeadVendorOrdinal: TIntegerField;
AdoQry_HeadReferenceNo: TStringField;
Button5: TButton;
procedure Act_CancelCheckExecute(Sender: TObject);
procedure Act_CheckExecute(Sender: TObject);
procedure DBGridEhDblClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure AdoQry_HeadBeforeInsert(DataSet: TDataSet);
procedure DBGridEhTitleClick(Column: TColumnEh);
procedure Act_LookExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Act_DeleteExecute(Sender: TObject);
procedure Act_ModifyExecute(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
Flag:Boolean;
Function SavePoLineHistory(Status1:String):Boolean;//保存历史记录
Function SavePoLineHistory1(Status1:String):Boolean;//保存历史记录
procedure UpDatePoline(PoNo:string;PoLineNo:integer);
procedure CloseRecord; //关闭
procedure OpenRecord; //打开
{ Private declarations }
public
procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);Override;
procedure DeleteRecord;
function getQclt(ItemCode:string):string;{ Public declarations }
function beendilivered(pono:string;polineno:integer):boolean;
function existssonItem(ItemCode:string):boolean;
function IsBomChange(ItemCode:String;MoDate:String):boolean;
{ Public declarations }
end;
var
Frm_Pm_Enter_NewFreePassPo: TFrm_Pm_Enter_NewFreePassPo;
implementation
uses Sys_Global,Pm_Enter_PoSsParent, Pm_Enter_PassPo_D,
Mrp_Global, Mrp_Enter_NewMoSsParent, Bas_BomQry;
{$R *.DFM}
function TFrm_Pm_Enter_NewFreePassPo.IsBomChange(ItemCode:String;MoDate:String):boolean;
var AdoQry : TAdoQuery;
SqlText : String;
begin
Result := False;
AdoQry := TAdoQuery.Create(self) ;
AdoQry.Connection := Dbconnect;
AdoQry.EnableBCD := False;
try
SqlText := 'select logid from BomChangeInfo '
+ ' where ite_ItemCode='+QuotedStr(ItemCode)
+' and LogDate> '+QuotedStr(MoDate);
ExecuteSql(AdoQry,SqlText,0) ;
if AdoQry.RecordCount>0 then Result := True;
finally
AdoQry.free;
end;
end;
function TFrm_Pm_Enter_NewFreePassPo.existssonItem(ItemCode:string):boolean;
var sqltext:string;
AdoQry:TAdoQuery;
begin
Result:=True;
SqlText:=' Select * From Bom '
+' Where ite_ItemCode='+quotedstr(ItemCode)
+' And Bomstatus in (0,2)';
AdoQry:=TAdoQuery.Create(self);
AdoQry.Connection:=dbconnect;
try
AdoQry.Close;
AdoQry.SQL.Text:=SqlText;
AdoQry.Open;
if AdoQry.RecordCount=0 then Result:=False;
finally
AdoQry.Free;
end;
end;
procedure TFrm_Pm_Enter_NewFreePassPo.InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);
begin
Application.ProcessMessages;
Inherited;
SelectFromSql:=' Select Distinct PoLine.*, Po.*,Vendor.VendorName,Item.ItemName,Item.PmCode,Item.Qclt,Employee.EmployeeName,Uom.UomName,'
+' Employee.EmployeeCode+'''+' '+'''+Employee.EmployeeName As EmployeeFlag,'
+' Item.ItemCode+'''+' '+'''+Item.ItemName As ItemFlag, '
+' Vendor.VendorCode+'''+' '+'''+Vendor.VendorName As VendorFlag '
+' From Po'
+' Left Join PoLine On Po.PoNo=PoLine.PoNo '
+' Left Join Item On PoLine.ItemCode=Item.ItemCode '
// +' And ((POLineStatus=5) Or (POLineStatus=6))'
+' Left Join Vendor On Po.VendorCode=Vendor.VendorCode '
+' Left Join Employee On Employee.EmployeeCode=Po.EmployeeCode '
+' Left Join Uom On Uom.UomCode=Item.UomCode ';
condition:='POLineStatus=5 ';
ConditionUserDefine:='(Po.PoNo In (Select Po.PoNo From Po join PoLine on Po.PoNo=PoLine.PoNo) and (po.PoSpecial=1) and (PoLine.POlinestatus in (5,6)))';
OrderByFields:='EmployeeCode,PoNo';
GetData;
{ Frm_Sys_Condition:=TFrm_Pm_Enter_FreePassPo_C.Create(Self);
ConditionUserDefine:=' (Po.PoNo In (Select po.PoNo From Po join PoLine on Po.PoNo=PoLine.PoNo) and (po.PoSpecial=1) and (PoLine.POlinestatus in (5,6)))';
OrderByFields:='EmployeeCode,PoNo';
Act_Filter.Execute;}
Flag:=False;
Application.ProcessMessages;
DbgridEh.SetFocus;
end;
Function TFrm_Pm_Enter_NewFreePassPo.SavePoLineHistory(Status1:String):Boolean;
var
SqlText:String;
begin
Try
SqlText:='Insert PoLineHistory '
+' (PoNo,PoLineNo,ItemCode,POLineDate,PoStArtWorkDate,POQty,POTaxPrice,POTaxAmount,PONoTaxPrice,'
+' PONoTaxAmount,PONoFinishQty,POReferencedPrice,POLineStatus,PassEmployeeCode,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)+''''+','
+quotedstr(AdoQry_Head.fieldbyname('PassEmployeeCode').asstring)+','
+''''+UserCode+''''+','
+'GetDate(),';
if Status1='Edit' then
SqlText:=SqlText+''''+'更改行状态'+''''+')'
else
if Status1='Delete' then
SqlText:=SqlText+''''+'删除记录'+''''+')';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.ExecSQL;
Result:=True;
Except
Result:=False;
end;
end;
procedure TFrm_Pm_Enter_NewFreePassPo.OpenRecord;
var
SqlText,BookMArk:String;
I,tmpordinal:Integer;
begin
BookMArk:=AdoQry_Head.BookmArk;
AdoQry_Head.First;
I:=1;
Try
While Not AdoQry_Head.Eof Do
If (AdoQry_Head.fieldbyname('PoLineCheck').AsInteger=1)
And (AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=5) Then
begin
SqlText:=' Select * From PoLine '
+' Where PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
+' And PoLineNo='''+IntToStr(AdoQry_Head.fieldbyname('PoLineNo').AsInteger)+'''';
// +' And PoLineStatus=5';
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<> 5 then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
DispInfo('选定的第'+IntToStr(I)+'条采购订单记录行状态已被其它用户修改,请刷新!',3);
Abort;
end;
if AdoQry_Head.fieldbyname('poType').asinteger=1 then
if not existssonItem(AdoQry_tmp.fieldbyname('ItemCode').asstring) then
begin
if DispInfo('选定的第'+IntToStr(i)+'条采购订单行物料 '+quotedstr(AdoQry_Head.fieldbyname('Itemflag').asstring)+ ' 无子项,是否批准?',2)<>'y' then
begin
If DbConnect.InTransaction Then
DbConnect.RollBackTrans;
AdoQry_Head.Next;
i:=i+1;
continue;
end;
end;
end;
DbConnect.beginTrans;
SavePoLineHistory('Edit');
sqltext:='select max(Vendorordinal) as ordinal from po where VendorCode='
+quotedstr(AdoQry_Head.fieldbyname('VendorCode').asstring);
Executesql(AdoQry_tmp,sqltext,0);
if AdoQry_tmp.RecordCount<>0 then
tmpordinal:=AdoQry_tmp.fieldbyname('ordinal').asinteger;
SqlText:=' Update PoLine '
+' set PoLineStatus=6,'
+' PassEmployeeCode='+quotedstr(userCode)+','
+' confirmtime=Getdate()'
+' Where PoLine.PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
+' And PoLine.PoLineNo='''+AdoQry_Head.fieldbyname('PoLineNo').AsString+''''
+' And PoLine.PoLineStatus=5';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.ExecSQL;
savepohistory(dbconnect,AdoQry_Head.fieldbyname('pono').asstring,userCode,3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -