📄 sal_enter_salecontract_d.pas
字号:
unit Sal_Enter_SaleContract_D;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Detail, Db, AdODB, ExtCtrls, StdCtrls, Mask, ExtEdit, linkedit;
Type
TFrm_Sal_Enter_SaleContract_D = Class(TFrm_Base_Entry_Detail)
Label1: TLabel;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Edt_SlcLineNo: TEdit;
Edt_StArtQty: TEdit;
Edt_EndQty: TEdit;
Edt_NoTaxPrice: TEdit;
Edt_TaxPrice: TEdit;
Edt_SlcLineRemArk: TEdit;
Lab_ItemName: TLabel;
Label14: TLabel;
Cmb_Linestatus: TComboBox;
MEdt_StArtDate: TMaskEdit;
Label6: TLabel;
MEdt_EndDate: TMaskEdit;
Cmb_ReferencedPrice: TComboBox;
Label12: TLabel;
Medt_Lastoperationtime: TMaskEdit;
Edt_ItemName: TEdit;
Edt_ItemCode: TLinkEdit;
Label3: TLabel;
procedure Edt_ItemCodeExit(Sender: TObject);
procedure Edt_StArtQtyExit(Sender: TObject);
procedure Edt_NoTaxPriceExit(Sender: TObject);
procedure Edt_ItemCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edt_TaxPriceExit(Sender: TObject);
procedure Edt_ItemCodeButtonClick(Sender: TObject);
procedure btn_okClick(Sender: TObject);
procedure MEdt_EndDateExit(Sender: TObject);
procedure Edt_EndQtyExit(Sender: TObject);
private
UomName:String; //记录当前单位
{ Private declarations }
public
LineNo:Integer;//行号
customerCode:string;
IsPriceRequestPass : Integer ; //销售价格是否需要批准 0 :不需要 1:需要
procedure InitControls; Override;
procedure SaveBodyData; Override;
procedure SetStatus(CurrentStatus:String;var EnableControls:String);Override;
function ExistsSlc(customerCode,ItemCode,sdate,edate:string;sqty,eqty:double):boolean;
{ Public declarations }
end;
var
Frm_Sal_Enter_SaleContract_D: TFrm_Sal_Enter_SaleContract_D;
implementation
uses Sys_Global, Sal_Enter_SaleContract;
{$R *.DFM}
{ TFrm_Sal_Enter_SaleOrder_D }
function TFrm_Sal_Enter_SaleContract_D.ExistsSlc(customerCode,ItemCode,sdate,edate:string;sqty,eqty:double):boolean;
var sqltext:string;
begin
Result:=False;
sqltext:='exec sp_SaleContractexists '+ QuotedStr(AdoQry_Body.fieldbyname('SlcNo').AsString)+','
+IntToStr(AdoQry_Body.fieldbyname('SlcLineno').AsInteger)+','
+IIFValue(status='Add','0','1')+','
+quotedstr(customerCode)+','
+quotedstr(ItemCode)+','
+quotedstr(sdate)+','
+quotedstr(edate)+','
+floattostr(sqty)+','
+floattostr(eqty);
Executesql(AdoQry_tmp,sqltext,0) ;
if AdoQry_tmp.RecordCount>0 then
begin
Result:=True;
exit;
end;
if status<>'Add' then exit;
AdoQry_Body.First;
while not AdoQry_Body.Eof do
begin
If AdoQry_Body.fieldbyname('ItemCode').AsString<>Trim(Edt_ItemCode.Text) then
begin
AdoQry_Body.Next;
continue;
end;
if ( (AdoQry_Body.fieldbyname('stArtdate').asstring<=sdate)
and (AdoQry_Body.fieldbyname('enddate').asstring<=sdate)
)
or ( (AdoQry_Body.fieldbyname('stArtdate').asstring>=edate)
and (AdoQry_Body.fieldbyname('enddate').asstring>=edate)
) then
begin
AdoQry_Body.Next;
continue;
end
{ if (AdoQry_Body.fieldbyname('stArtqty').asfloat=0) and (AdoQry_Body.fieldbyname('endqty').asfloat=0)
and (AdoQry_Body.fieldbyname('ItemCode').asstring=Trim(edt_ItemCode.text) ) then
begin
AdoQry_Body.Next;
continue;
end;
if not ( ( (AdoQry_Body.fieldbyname('stArtqty').asfloat<=sqty)
and (AdoQry_Body.fieldbyname('endqty').asfloat<=sqty) )
or ( (AdoQry_Body.fieldbyname('stArtqty').asfloat>=eqty)
and (AdoQry_Body.fieldbyname('endqty').asfloat>=eqty) )
)
and (AdoQry_Body.fieldbyname('ItemCode').asstring=Trim(edt_ItemCode.text) )
then
} else
begin
Result:=True;
break;
exit;
end;
AdoQry_Body.Next;
end;
end;
procedure TFrm_Sal_Enter_SaleContract_D.InitControls;
begin
If (status='Add') Then
SetFocus_Control:=Edt_ItemCode
Else
SetFocus_Control:=MEdt_StArtDate;
Inherited;
ExecuteSql(AdoQry_Tmp,'Select * from Sa_SalParam'
+' where SalParamCode='+QuotedStr('IsPriceRequestPass'),0);
IsPriceRequestPass := AdoQry_Tmp.fieldbyname('SalParamValueN').AsInteger;
with AdoQry_Body do
begin
Edt_ItemCode.Text:=fieldbyname('ItemCode').AsString;
Lab_ItemName.Caption:=fieldbyname('ItemName').AsString;
Edt_ItemName.Text:=fieldbyname('ItemName').AsString;
UomName:=fieldbyname('UomName').AsString;
If (Status='Add') then
begin
LineNo:=LineNo+1;
Edt_SlcLineNo.Text := inttostr(LineNo);
Edt_ItemCode.Text:='';
MEdt_StArtDate.Text:=Formatdatetime('yyyy.mm.dd',date);
MEdt_EndDate.Text:=Formatdatetime('yyyy.mm.dd',date);
MEdt_Lastoperationtime.Text:=Formatdatetime('yyyy.mm.dd',date);
Edt_StArtQty.Text := '0';
Edt_EndQty.Text:='0';
Edt_NoTaxPrice.Text:='0';
Edt_TaxPrice.Text:='0';
Cmb_ReferencedPrice.ItemIndex :=1;
Cmb_Linestatus.ItemIndex :=IIFInteger(IsPriceRequestPass=0,1,0);
Edt_SlcLineRemArk.Text:='';
end
else
begin
Edt_SlcLineNo.Text := fieldbyname('SlcLineNo').AsString;
Edt_ItemCode.Text:=fieldbyname('ItemCode').AsString;
MEdt_StArtDate.Text:=fieldbyname('StArtDate').AsString;
MEdt_EndDate.Text:=fieldbyname('endDate').AsString;
MEdt_Lastoperationtime.Text:=fieldbyname('Lastoperationtime').AsString;
Edt_StArtQty.Text:=fieldbyname('StArtQty').AsString;
Edt_EndQty.Text:=fieldbyname('endQty').AsString;
Edt_NoTaxPrice.Text:=fieldbyname('NoTaxPrice').AsString;
Edt_TaxPrice.Text:=fieldbyname('TaxPrice').AsString;
Cmb_ReferencedPrice.ItemIndex :=fieldbyname('ReferencedPrice').AsInteger;
Cmb_Linestatus.ItemIndex :=fieldbyname('Linestatus').AsInteger;
Edt_SlcLineRemArk.Text:=fieldbyname('SlcLineRemArk').AsString;
end;
end;
end;
procedure TFrm_Sal_Enter_SaleContract_D.SaveBodyData;
begin
If Status='Add' Then
AdoQry_Body.Append
Else
AdoQry_Body.Edit;
ExecuteSql(AdoQry_Tmp,'Select * from Sa_SalParam'
+' where SalParamCode='+QuotedStr('IsPriceRequestPass'),0);
IsPriceRequestPass := AdoQry_Tmp.fieldbyname('SalParamValueN').AsInteger;
with AdoQry_Body do
begin
fieldbyname('CheckFlag').AsInteger:=0;
if Status='Add' then
fieldbyname('CheckFlag').AsInteger := 1;
fieldbyname('SlcLineNo').AsString:=Edt_SlcLineNo.Text ;
fieldbyname('ItemCode').AsString:=Edt_ItemCode.Text;
fieldbyname('ItemName').AsString:=Edt_ItemName.Text;
fieldbyname('StArtDate').AsString:=MEdt_StArtDate.Text;
fieldbyname('endDate').AsString:=MEdt_EndDate.Text;
fieldbyname('Lastoperationtime').AsString:=MEdt_Lastoperationtime.Text;
fieldbyname('StArtQty').AsString:=Edt_StArtQty.Text;
fieldbyname('endQty').AsString:=Edt_EndQty.Text;
fieldbyname('NoTaxPrice').AsString:=Edt_NoTaxPrice.Text;
fieldbyname('TaxPrice').AsString:=Edt_TaxPrice.Text;
fieldbyname('ReferencedPrice').AsInteger:=Cmb_ReferencedPrice.ItemIndex ;
If Status='Add' then
fieldbyname('Linestatus').AsInteger:=IIFInteger((IsPriceRequestPass=0) and (StrToFloat(Edt_NoTaxPrice.Text)>0),1,0)//Cmb_Linestatus.ItemIndex ;
else fieldbyname('LineStatus').AsInteger := Cmb_LineStatus.ItemIndex;
fieldbyname('SlcLineRemArk').AsString:=Edt_SlcLineRemArk.Text;
fieldbyname('UomName').AsString:=UomName;
Post;
end;
end;
procedure TFrm_Sal_Enter_SaleContract_D.SetStatus(CurrentStatus: String;
var EnableControls: String);
begin
inherited;
if(CurrentStatus='Add') and (IsPriceRequestPass=1)then
EnableControls:=' Edt_ItemCode,MEdt_StArtDate,MEdt_EndDate,'
+' Edt_EndQty,Edt_NoTaxPrice,Edt_TaxPrice,Cmb_ReferencedPrice,'
+' Edt_SlcLineRemArk,MEdt_Lastoperationtime,Edt_StArtQty,'
else
EnableControls:=' Edt_ItemCode,MEdt_StArtDate,MEdt_EndDate,'
+' Edt_EndQty,'+IIFString(IsPriceRequestPass=1,'','Edt_NoTaxPrice,Edt_TaxPrice,')//Edt_NoTaxPrice,Edt_TaxPrice,
+' Cmb_ReferencedPrice,'
+' Edt_SlcLineRemArk,MEdt_Lastoperationtime,Edt_StArtQty,'
end;
procedure TFrm_Sal_Enter_SaleContract_D.Edt_ItemCodeExit(Sender: TObject);
var
SqlText:String;
begin
inherited;
If ActiveControl <> btn_Cancel Then
begin
SqlText:=' Select * from Item where ItemUsable=1 And ItemType=0 And ItemCode='''+Trim(Edt_ItemCode.Text)+'''';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.clear;
AdoQry_Tmp.SQL.Text :=SqlText;
AdoQry_Tmp.Open;
if AdoQry_Tmp.Eof then
begin
DispInfo('该物料无效,不能输入!',3);
TwinControl(sender).setfocus;
Abort;
end;
SqlText:=' Select Item.ItemName,UomName '
+' From Item '
+' Left Outer Join Uom On Item.UomCode=Uom.UomCode '
+' Where ItemCode='+''''+Trim(Edt_ItemCode.Text)+''''
+' and CanSale=1 ';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.Open;
If AdoQry_Tmp.Eof Then
begin
DispInfo('输入了错误的物料代码,请重新输入!',3);
TWincontrol(Sender).SetFocus;
Abort;
end;
UomName:=AdoQry_Tmp.fieldbyname('UomName').AsString;
Lab_ItemName.Caption:=AdoQry_Tmp.fieldbyname('ItemName').AsString;
Edt_ItemName.Text:=AdoQry_Tmp.fieldbyname('ItemName').AsString;
end;
end;
procedure TFrm_Sal_Enter_SaleContract_D.Edt_StArtQtyExit(Sender: TObject);
begin
inherited;
if(ActiveControl.Name='btn_Cancel')then
Abort;
FloatCheck(Sender);
if StrToFloat(Edt_StArtQty.Text)<0 then
begin
DispInfo('起始数量不能小于零',3);
TWinControl(Sender).SetFocus;
Abort;
end;
end;
procedure TFrm_Sal_Enter_SaleContract_D.Edt_NoTaxPriceExit(Sender: TObject);
var
aa:String;
begin
inherited;
if ActiveControl <> btn_Cancel then
begin
try
Edt_NoTaxPrice.Text := FloatToStr(StrToFloat(Edt_NoTaxPrice.Text));
except
DispInfo('请输入数据类型!',3);
TWincontrol(Sender).SetFocus;
Abort;
end;
if StrToFloat(Edt_NoTaxPrice.Text)<0 then
begin
DispInfo('未税单价不能小于0!',3);
TWincontrol(Sender).SetFocus;
Abort;
end
else
begin
aa:=TaxRate_Percent;
Edt_TaxPrice.Text:=FloatToStr(StrToFloat(Edt_NoTaxPrice.Text)*(1+StrtoFloat(aa)/100))
end;
end;
end;
procedure TFrm_Sal_Enter_SaleContract_D.Edt_ItemCodeKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
If key=120 Then
CommOnHint(Sender,AdoQry_Tmp,'ItemName','物料描述','ItemCode',
'物料代码',' Item ','ItemUsable=1 and ItemType=0 and CanSale =1 ');
end;
procedure TFrm_Sal_Enter_SaleContract_D.Edt_TaxPriceExit(Sender: TObject);
var
aa:String;
begin
inherited;
if ActiveControl <> btn_Cancel then
begin
try
Edt_TaxPrice.Text := FloatToStr(StrToFloat(Edt_TaxPrice.Text));
except
DispInfo('请输入数据类型!',3);
TWincontrol(Sender).SetFocus;
Abort;
end;
if StrToFloat(Edt_TaxPrice.Text)<=0 then
begin
DispInfo('含税价不能小于或等于0!',3);
TWincontrol(Sender).SetFocus;
Abort;
end
else
begin
aa:=TaxRate_Percent;
Edt_NoTaxPrice.Text:=FloatToStr(StrToFloat(Edt_TaxPrice.Text)/(1+StrtoFloat(aa)/100))
end;
end;
end;
procedure TFrm_Sal_Enter_SaleContract_D.Edt_ItemCodeButtonClick(
Sender: TObject);
begin
inherited;
CommOnHint(Sender,AdoQry_Tmp,'ItemName','物料描述','ItemCode',
'物料代码',' Item ','ItemUsable=1 and ItemType=0 and CanSale=1 ');
end;
procedure TFrm_Sal_Enter_SaleContract_D.btn_okClick(Sender: TObject);
begin
if existsSlC(customerCode,Trim(edt_ItemCode.text),medt_StArtdate.Text,medt_Enddate.Text,strtofloat(edt_StArtqty.Text),strtofloat(edt_Endqty.text)) then
begin
DispInfo('已存在该客户该时间段及数量段的合同!',3);
medt_StArtdate.SetFocus;
abort;
end;
Edt_NoTaxPrice.OnExit(Edt_NoTaxPrice);
Edt_TaxPrice.OnExit(Edt_TaxPrice);
inherited;
end;
procedure TFrm_Sal_Enter_SaleContract_D.MEdt_EndDateExit(Sender: TObject);
begin
inherited;
if(ActiveControl.Name='btn_Cancel')then
Abort;
DateCheck(Sender);
if MEdt_StArtDate.Text>=MEdt_EndDate.Text then
begin
DispInfo('起始日期不能大于等于终止日期',3);
TWinControl(Sender).SetFocus;
Abort;
end;
end;
procedure TFrm_Sal_Enter_SaleContract_D.Edt_EndQtyExit(Sender: TObject);
begin
inherited;
if(ActiveControl.Name='btn_Cancel')then
Abort;
FloatCheck(Sender);
if (StrToFloat(Edt_StArtQty.Text)>=StrToFloat(Edt_EndQty.Text))
and(not((StrToFloat(Edt_StArtQty.Text)=0)and(StrToFloat(Edt_EndQty.Text)=0))) then
begin
DispInfo('起始数量不能大于等于终止数量',3);
TWinControl(Sender).SetFocus;
Abort;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -