📄 pm_vendoritemassign_d.pas
字号:
unit Pm_VendorItemAssign_D;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Detail, StdCtrls, Db, AdODB, ExtCtrls, ExtEdit, Grids, DBGridEh;
Type
TFrm_Pm_VendorItemAssign_D = Class(TFrm_Base_Detail)
Label2: TLabel;
ExtEdt_ItemCode: TExtEdit;
lbl_ItemName: TLabel;
Label3: TLabel;
AdoQry_Vendor: TAdoQuery;
DataSource1: TDataSource;
DBGridEh1: TDBGridEh;
btn_Del: TButton;
procedure FormCreate(Sender: TObject);
procedure btn_okClick(Sender: TObject);
procedure DBGridEh1ColExit(Sender: TObject);
procedure DBGridEh1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure AdoQry_VendorBeforePost(DataSet: TDataSet);
procedure btn_DelClick(Sender: TObject);
procedure AdoQry_VendorAfterDelete(DataSet: TDataSet);
procedure AdoQry_VendorAfterEdit(DataSet: TDataSet);
procedure InOutItemCodeCheck(Sender: TObject);
private
LockFlag:Integer;
ispost:boolean;
oldValue:string;
procedure InitControls; Override;
procedure SaveData; Override;
function checkdbgrd(fieldNames:string):boolean;
procedure checkfullAssignrate;
function getVendorCode:string;
procedure checkVendorCode;
procedure showdbgrid;
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_Pm_VendorItemAssign_D: TFrm_Pm_VendorItemAssign_D;
implementation
uses Sys_Global, Sys_QuickPick;
{$R *.DFM}
function TFrm_Pm_VendorItemAssign_D.getVendorCode:string;
begin
Frm_Sys_QuickPick:=TFrm_Sys_QuickPick.Create(Application);
Frm_Sys_QuickPick.InitFrom(AdoQry_tmp.Connection,'Vendor','VendorCode'+','+
'VendorName','供应商代码'+','+'供应商名称',AdoQry_Vendor.fieldbyname('VendorCode').asstring,'VendorUsable=1');
if Frm_Sys_QuickPick.ShowModal=mrOk then
begin
Result:=Frm_Sys_QuickPick.quickpickQry.fieldbyname('VendorCode').AsString;
end
else
Result:='';
Frm_Sys_QuickPick.Release;
end;
procedure TFrm_Pm_VendorItemAssign_D.checkfullAssignrate;
var
Assignrate:real;
saveplace:tBookmArk;
begin
with AdoQry_Vendor do
begin
saveplace:=getBookmArk;
disablecontrols;
First;
while not eof do
begin
Assignrate:=Assignrate+fieldbyname('Assignrate').asfloat;
next;
end;
enablecontrols;
gotoBookmArk(saveplace);
freeBookmArk(saveplace);
end;
if Assignrate<>100.0 then
begin
DispInfo('总的分配比例必须等于100%!',1);
abort;
end;
end;
function TFrm_Pm_VendorItemAssign_D.checkdbgrd(fieldNames:string):boolean;
var
myindex : integer;
begin
Result:=True; //通过有效有检验
//录入时检验
if (pos(' VendorCode ',fieldNames)<>0) then
begin
Result:=True;
with AdoQry_tmp do
begin
Close;
sql.clear;
sql.Add('select VendorCode,VendorName from Vendor ');
sql.Add(' where VendorCode='''+AdoQry_Vendor.fieldbyname('VendorCode').asstring+'''');
open;
if eof then
begin
Result:=False;
DispInfo('供应商代码不正确',1);
end
else
begin
AdoQry_Vendor.edit;
AdoQry_Vendor.fieldbyname('VendorName').asstring:=fieldbyname('VendorName').asstring;
end;
end;
end;
end;
procedure TFrm_Pm_VendorItemAssign_D.Showdbgrid;
begin
if Extedt_ItemCode.text<>'' then
with AdoQry_Vendor do
begin
Close;
sql.clear;
sql.Add('select s.VendorCode,'+
' v.VendorName,'+
' s.Assignrate'+
' from VendorItemAssign s '+
' left join Vendor v on s.VendorCode=v.VendorCode '+
' where s.ItemCode='''+Extedt_ItemCode.text+'''');
open;
end;
end;
procedure TFrm_Pm_VendorItemAssign_D.InitControls;
begin
inherited;
with AdoQry_Maintain do
begin
ExtEdt_ItemCode.Text:=fieldbyname('ItemCode').AsString;
lbl_ItemName.Caption:=fieldbyname('ItemName').AsString;
end;
AdoQry_Vendor.Connection :=AdoQry_tmp.Connection;
showdbgrid;
end;
procedure TFrm_Pm_VendorItemAssign_D.SaveData;
var
sqltext:string;
saveplace:tBookmArk;
begin
with AdoQry_Vendor do
begin
saveplace:=getBookmArk;
First;
disablecontrols;
sqltext:='';
while not eof do
begin
ExecuteSql(AdoQry_Tmp,'select * from PcLine'
+' join Pc on PcLIne.PcNo=Pc.PcNo '
+' and Pc.VendorCode='+QuotedStr(fieldbyname('VendorCode').AsString)
+' where ItemCode='+QuotedStr(Trim(ExtEdt_ItemCode.Text))
,0);
If AdoQry_Tmp.RecordCount=0 then
begin
If DispInfo('在采购价格单中无供应商'+QuotedStr(fieldbyname('VendorCode').AsString
+' '+fieldbyname('VendorName').AsString)
+'物料'+QuotedStr(Extedt_ItemCode.Text+' '+lbl_ItemName.Caption)+'的记录!是否继续保存?',
2)<>'y' then
begin
ModalResult := MrNone;
abort;
end;
end;
if fieldbyname('VendorCode').asstring<>'' then
begin
sqltext:=sqltext+
' Insert VendorItemAssign '+
' (VendorCode,'+
'ItemCode,'+
'Assignrate) '+
'ValueS ('''+fieldbyname('VendorCode').asstring+''','+
''''+Extedt_ItemCode.text+''','+
fieldbyname('Assignrate').asstring+')';
end;
next;
end;
gotoBookmArk(saveplace);
freeBookmArk(saveplace);
sqltext:=' delete from VendorItemAssign '+
' where ItemCode='''+Extedt_ItemCode.text+''''+sqltext;
enablecontrols;
end;
with AdoQry_Tmp do
begin
Close;
SQL.clear;
sql.Add(sqltext);
ExecSQL;
btn_ok.Enabled :=False;
DispInfo('保存成功!',3);
end;
Inherited;
end;
procedure TFrm_Pm_VendorItemAssign_D.FormCreate(Sender: TObject);
begin
inherited;
SetFocus_Control:=ExtEdt_ItemCode;
oldValue:='';
end;
procedure TFrm_Pm_VendorItemAssign_D.btn_okClick(Sender: TObject);
begin
checkVendorCode;
checkfullAssignrate;
savedata;
//inherited;
end;
procedure TFrm_Pm_VendorItemAssign_D.DBGridEh1ColExit(Sender: TObject);
begin
inherited;
if (AdoQry_Vendor.state in [dsedit,dsinsert]) and (not checkdbgrd(' '+dbgrideh1.selectedfield.fieldName+' ')) then
abort;
end;
procedure TFrm_Pm_VendorItemAssign_D.DBGridEh1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
if (key=vk_f9) and
(AdoQry_Vendor.state in [dsedit,dsinsert]) and
(dbgrideh1.selectedfield.fieldName='VendorCode') then
AdoQry_Vendor.fieldbyname('VendorCode').asstring:=getVendorCode;
if (key=vk_Delete) then
btn_Del.Click;
end;
procedure TFrm_Pm_VendorItemAssign_D.checkVendorCode;
var
tmp_VendorCode:string;
a,M:integer;
SavePlace: TBookmArk;
B:Array of string;
begin
if (AdoQry_Vendor.state in [dsinsert,dsedit]) then
AdoQry_Vendor.post;
with AdoQry_Vendor do
begin
SavePlace := GetBookmArk;
disablecontrols;
M:=recordCount;
setlength(B,M);
First;
M:=M-1;
while not eof do
begin
B[M]:=fieldbyname('VendorCode').asstring;
M:=M-1;
next;
end;
gotoBookmArk(saveplace);
freeBookmArk(saveplace);
enablecontrols;
end;
with AdoQry_Vendor do
begin
tmp_VendorCode:=fieldbyname('VendorCode').asstring;
SavePlace := GetBookmArk;
First;
disablecontrols;
while not eof do
begin
a:=0;
for M:=0 to recordCount-1 do
begin
if fieldbyname('VendorCode').asstring=B[M] then
a:=a+1;
end;
if a>1 then
begin
DispInfo(fieldbyname('VendorCode').asstring+'代码重复!',1);
GotoBookmArk(SavePlace);
FreeBookmArk(SavePlace);
enablecontrols;
abort;
end;
next;
end;
GotoBookmArk(SavePlace);
FreeBookmArk(SavePlace);
enablecontrols;
end;
end;
procedure TFrm_Pm_VendorItemAssign_D.AdoQry_VendorBeforePost(
DataSet: TDataSet);
begin
inherited;
btn_ok.Enabled :=True;
if AdoQry_Vendor.fieldbyname('Assignrate').asstring='' then
AdoQry_Vendor.fieldbyname('Assignrate').asstring:='0'
else
begin
if AdoQry_Vendor.fieldbyname('VendorCode').asstring='' then
begin
DispInfo('供应商代码不正确',1);
abort;
end;
end;
end;
procedure TFrm_Pm_VendorItemAssign_D.btn_DelClick(Sender: TObject);
begin
inherited;
if not AdoQry_Vendor.eof then
begin
if DispInfo('确定要删除些供应商比例?',2)='y' then
begin
AdoQry_Vendor.delete;
end;
end;
end;
procedure TFrm_Pm_VendorItemAssign_D.AdoQry_VendorAfterDelete(
DataSet: TDataSet);
begin
inherited;
btn_ok.Enabled :=True;
end;
procedure TFrm_Pm_VendorItemAssign_D.AdoQry_VendorAfterEdit(
DataSet: TDataSet);
begin
inherited;
btn_ok.Enabled :=True;
end;
procedure TFrm_Pm_VendorItemAssign_D.InOutItemCodeCheck(Sender: TObject);
begin
inherited;
if oldValue<>Extedt_ItemCode.text then
showdbgrid;
oldValue:=Extedt_ItemCode.text;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -