📄 pm_enter_autopo_d.pas
字号:
unit Pm_Enter_AutoPo_D;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Detail, Db, AdODB, ExtCtrls, StdCtrls, Mask, ExtEdit;
Type
TFrm_Pm_Enter_AutoPo_D = Class(TFrm_Base_Entry_Detail)
Label1: TLabel;
Edt_LineNo: TEdit;
Label2: TLabel;
Lbl_UomName: TLabel;
Label3: TLabel;
Label4: TLabel;
Edt_PoQty: TEdit;
Label5: TLabel;
Label6: TLabel;
Edt_PoTaxPrice: TEdit;
Label7: TLabel;
Edt_PoTaxAmount: TEdit;
Label8: TLabel;
Edt_PoNoTaxPrice: TEdit;
Label9: TLabel;
Edt_PoNoTaxAmount: TEdit;
Label10: TLabel;
Medt_PoDate: TMaskEdit;
MEdt_PoStArtWorkDate: TMaskEdit;
Lbl_ItemName: TLabel;
Edt_ItemCode: TExtEdit;
procedure btn_okClick(Sender: TObject);
procedure Edt_ItemCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edt_ItemCodeExit(Sender: TObject);
procedure MEdt_PoStArtWorkDateExit(Sender: TObject);
procedure Medt_PoDateExit(Sender: TObject);
procedure FloatCheck(Sender: TObject);
private
POREFERENCEDPRICE:Integer;//是否参考价
MnldTime:Integer;//物料交货提前期
PcNo:String;
PcType:Integer;
PoStArtWorkDate:String;
{ Private declarations }
public
procedure InitControls;Override;
procedure SaveBodyData;Override;
procedure SetStatus(CurrentStatus:String;var EnableControls:String);Override;
procedure SetFormParam(FrmParam1,FrmParam2,FrmParam3,FrmParam4,FrmParam5,FrmParam6:String);Override;
{ Public declarations }
end;
var
Frm_Pm_Enter_AutoPo_D: TFrm_Pm_Enter_AutoPo_D;
implementation
uses Sys_Global;
{$R *.DFM}
procedure TFrm_Pm_Enter_AutoPo_D.SetFormParam(FrmParam1,FrmParam2,FrmParam3,FrmParam4,FrmParam5,FrmParam6:String);
begin
PcNo:=FrmParam1;
PcType:=StrToInt(FrmParam2);
end;
procedure TFrm_Pm_Enter_AutoPo_D.InitControls;
var
SqlText:String;
begin
SetFocus_Control:=Edt_PoQty;
Inherited;
with AdoQry_Body do
begin
If (Status='Add') Then
begin
Edt_LineNo.Text:=IntToStr(RecordCount+1);
MEdt_PoDate.Text:=FormatDateTime('yyyy.mm.dd',Date);
MEdt_PoStArtWorkDate.Text:=FormatDateTime('yyyy.mm.dd',Date);
PoStArtWorkDate:=FormatDateTime('yyyy.mm.dd',Date);
Edt_PoQty.Text:='0';
end
Else
begin
Edt_LineNo.Text:=IntToStr(fieldbyname('PoLineNo').AsInteger);
Medt_PoDate.Text:=Formatdatetime('yyyy.mm.dd',fieldbyname('PoLineDate').AsDateTime);
Edt_PoQty.Text:=Floattostr(fieldbyname('PoQty').AsFloat);
Medt_PoStArtWorkDate.Text:=Formatdatetime('yyyy.mm.dd',fieldbyname('PoStArtWorkDate').AsDateTime);
PoStArtWorkDate:=Formatdatetime('yyyy.mm.dd',fieldbyname('PoStArtWorkDate').AsDateTime);
end;
POREFERENCEDPRICE:=fieldbyname('POREFERENCEDPRICE').AsInteger;
Lbl_UomName.Caption:=fieldbyname('UomName').AsString;
Edt_ItemCode.Text:=fieldbyname('ItemCode').AsString;
Lbl_ItemName.Caption:=fieldbyname('ItemName').AsString;
Edt_PoTaxPrice.Text:=Floattostr(fieldbyname('PoTaxPrice').AsFloat);
Edt_PoTaxAmount.Text:=Floattostr(fieldbyname('PoTaxAmount').AsFloat);
Edt_PoNoTaxPrice.Text:=Floattostr(fieldbyname('PoNoTaxPrice').AsFloat);
Edt_PoNoTaxAmount.Text:=Floattostr(fieldbyname('PoNoTaxAmount').AsFloat);
end;
SqlText:=' Select Item.ItemName,Uom.UomName,Item.runlt as MnldTime '
+' From Item ,Uom '
+' Where Item.UomCode=Uom.UomCode And Item.ItemCode='
+''''+Trim(Edt_ItemCode.Text)+''''
+' And Item.ItemCode In (Select ItemCode From PcLine Where PcNo='''+PcNo+''')'
+' And Item.PmCode in (1,2,3)';
{ If (status<>'Add') Then
begin
If PcType<>1 Then
SqlText:=' Select Item.ItemName,Uom.UomName,Item.MnldTime '
+' From Item ,Uom '
+' Where Item.UomCode=Uom.UomCode And Item.ItemCode='
+''''+Trim(Edt_ItemCode.Text)+''''
+' And Item.ItemCode In (Select ItemCode From PcLine Where PcNo='''+PcNo+''')'
+' And Item.PmCode=1'
Else
SqlText:=' Select Item.ItemName,Uom.UomName,Item.MnldTime '
+' From Item ,Uom '
+' Where Item.UomCode=Uom.UomCode And Item.ItemCode='
+''''+Trim(Edt_ItemCode.Text)+''''
+' And Item.ItemCode In (Select ItemCode From PcLine Where PcNo='''+PcNo+''')'
+' And Item.PmCode In (2,3)'; }
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.Open;
If AdoQry_Tmp.Eof Then
begin
DispInfo('物料代码错误,请重新输入!',1);
// Edt_ItemCode.SelectAll;
// Edt_ItemCode.SetFocus;
Abort;
end
Else
MnldTime:=AdoQry_Tmp.fieldbyname('MnldTime').AsInteger;
// end;
end;
procedure TFrm_Pm_Enter_AutoPo_D.SetStatus(CurrentStatus:String;var EnableControls:String);
begin
inherited;
EnableControls:='Edt_PoQty,Medt_PoDate,MEdt_PoStArtWorkDate,';
end;
procedure TFrm_Pm_Enter_AutoPo_D.SaveBodyData;
var
SqlText:String;
begin
Inherited;
SqlText:=' Select Case when PcLine.FormalPricePass=1 then PcLine.PcTaxPrice_Formal '
+' else PcLine.PcTaxPrice '
+' end as PcTaxPrice, '
+' Case When PcLine.FormalPricePass=1 then PcLine.PcNoTaxPrice_Formal '
+' else PcLine.PcNoTaxPrice '
+' end as PcNoTaxPrice, '
+' Case When PcLine.FormalPricePass=1 then 0 '
+' else 1 end as PcReferencedPrice '
+' From PcLine '
+' Where ('''+Medt_PoDate.Text +''' >=PcStArtDate '
+' And '''+Medt_PoDate.Text +'''<=PcendDate) '
+' And (('''+Trim(Edt_PoQty.Text)+''' >=PcStArtQty'
+' And '''+Trim(Edt_PoQty.Text)+'''<PcendQty)'
+' Or (PcStArtQty=0 And PcendQty=0))'
+' And (ItemCode='''+Trim(Edt_ItemCode.Text)+''''
+' )And (PcNo='''+PcNo+''')'
+' And (PcLine.PcLineStatus=1)';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.Open;
If AdoQry_Tmp.Eof Then
begin
DispInfo('你所输入的物料代码在相应的采购合同中找不到相应的单价,不能保存!',1);
Btn_Ok.Enabled:=False;
Edt_ItemCode.SetFocus;
Abort;
end
Else
begin
POREFERENCEDPRICE:=AdoQry_Tmp.fieldbyname('PcReferencedPrice').AsInteger;
Edt_PoTaxPrice.Text:=FormatFloat('##0.##',AdoQry_Tmp.fieldbyname('PcTaxPrice').AsFloat);
Edt_PoTaxAmount.Text:=FormatFloat('##0.##',AdoQry_Tmp.fieldbyname('PcTaxPrice').AsFloat * StrToFloat(Trim(Edt_PoQty.Text)));
Edt_PoNoTaxPrice.Text:=FormatFloat('##0.##',AdoQry_Tmp.fieldbyname('PcNoTaxPrice').AsFloat);
Edt_PoNoTaxAmount.Text:=FormatFloat('##0.##',AdoQry_Tmp.fieldbyname('PcNoTaxPrice').AsFloat * StrToFloat(Trim(Edt_PoQty.Text)));
end;
with AdoQry_Body do
begin
fieldbyname('POREFERENCEDPRICE').AsInteger:=POREFERENCEDPRICE;
fieldbyname('PoLineNo').AsInteger:=StrToInt(Trim(Edt_LineNo.Text));
fieldbyname('ItemCode').AsString:=Trim(Edt_ItemCode.Text);
fieldbyname('ItemName').AsString:=Lbl_ItemName.Caption;
fieldbyname('UomName').AsString:=Lbl_UomName.Caption;
fieldbyname('PoStArtWorkDate').Asdatetime:=strtodatetime(Medt_PoStArtWorkDate.Text);
fieldbyname('PoLineDate').Asdatetime:=strtodatetime(Medt_PoDate.Text);
fieldbyname('PoQty').AsFloat:=strtofloat(Trim(Edt_PoQty.Text));
fieldbyname('PoLineStatus').AsInteger:=5;
fieldbyname('PoTaxPrice').AsFloat:=strtofloat(Trim(Edt_PoTaxPrice.Text));
fieldbyname('PoTaxAmount').AsFloat:=strtofloat(Trim(Edt_PoTaxAmount.Text));
fieldbyname('PoNoTaxPrice').AsFloat:=strtofloat(Trim(Edt_PoNoTaxPrice.Text));
fieldbyname('PoNoTaxAmount').AsFloat:=strtofloat(Trim(Edt_PoNoTaxAmount.Text));
fieldbyname('PoNoFinishQty').AsFloat:=strtofloat(Trim(Edt_PoQty.Text));
// fieldbyname('SsQty').AsFloat:=strtofloat(Trim(Edt_PoQty.Text));
Post;
end;
end;
procedure TFrm_Pm_Enter_AutoPo_D.btn_okClick(Sender: TObject);
var
I:String;
begin
Inherited;
end;
procedure TFrm_Pm_Enter_AutoPo_D.Edt_ItemCodeKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
If (Key=120) Then
If PcType<>1 Then
CommonHint(Sender,AdoQry_Tmp,'ItemName','物料描述','ItemCode',
'物料代码','Item',' Item.ItemCode In (Select ItemCode From PcLine Where PcLine.PcNo='''+PCNo+''') And Item.PmCode=1')
Else
CommonHint(Sender,AdoQry_Tmp,'ItemName','物料描述','ItemCode',
'物料代码','Item',' Item.ItemCode In (Select ItemCode From PcLine Where PcLine.PcNo='''+PCNo+''') And Item.PmCode In (2,3)');
end;
procedure TFrm_Pm_Enter_AutoPo_D.Edt_ItemCodeExit(Sender: TObject);
var
SqlText:String;
begin
inherited;
if Activecontrol.Name='btn_Cancel' Then
Exit;
SqlText:=' Select Item.ItemName,Uom.UomName,Item.runlt as MnldTime '
+' From Item ,Uom '
+' Where Item.UomCode=Uom.UomCode And Item.ItemCode='
+''''+Trim(Edt_ItemCode.Text)+''''
+' And Item.ItemCode In (Select ItemCode From PcLine Where PcNo='''+PcNo+''')'
+' And Item.PmCode in (1,2,3)';
{ If PcType<>1 Then //不为委外时
SqlText:=' Select Item.ItemName,Uom.UomName,Item.MnldTime '
+' From Item ,Uom '
+' Where Item.UomCode=Uom.UomCode And Item.ItemCode='
+''''+Trim(Edt_ItemCode.Text)+''''
+' And Item.ItemCode In (Select ItemCode From PcLine Where PcNo='''+PcNo+''')'
+' And Item.PmCode=1'
Else
SqlText:=' Select Item.ItemName,Uom.UomName,Item.MnldTime '
+' From Item ,Uom '
+' Where Item.UomCode=Uom.UomCode And Item.ItemCode='
+''''+Trim(Edt_ItemCode.Text)+''''
+' And Item.ItemCode In (Select ItemCode From PcLine Where PcNo='''+PcNo+''')'
+' And Item.PmCode In (2,3)'; }
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.Open;
If AdoQry_Tmp.Eof Then
begin
DispInfo('物料代码错误,请重新输入!',3);
Twincontrol(Sender).SetFocus;
Abort;
end;
Lbl_UomName.Caption:=AdoQry_Tmp.fieldbyname('UomName').AsString;
MnldTime:=AdoQry_Tmp.fieldbyname('MnldTime').AsInteger;
Lbl_ItemName.Caption:=AdoQry_Tmp.fieldbyname('ItemName').AsString;
AdoQry_Tmp.Close;
end;
procedure TFrm_Pm_Enter_AutoPo_D.MEdt_PoStArtWorkDateExit(Sender: TObject);
var
SqlText:String;
begin
inherited;
If (ActiveControl.Name='btn_Cancel') Or (ActiveControl.Name='Medt_PoDate') Then
Exit;
Try
StrToDateTime(Medt_PoStArtWorkDate.Text);
Except
DispInfo('日期格式错误!',1);
TMaskEdit(Sender).SetFocus;
Abort;
end;
If SlCalendar(DbConnect,Medt_PoStArtWorkDate.Text,0)<>Medt_PoStArtWorkDate.Text Then
begin
DispInfo(Medt_PoStArtWorkDate.Text+'不是工作日!',3);
Medt_PoStArtWorkDate.Text:=SlCalendar(DbConnect,Medt_PoStArtWorkDate.Text,0);
Medt_PoStArtWorkDate.SetFocus;
Abort;
end; //约定开工日必须是工作日,否则返回前一个工作日
If ((StrToDateTime(Medt_PoStArtWorkDate.Text)>StrToDateTime(Medt_PoDate.Text))
Or (StrToDateTime(Medt_PoStArtWorkDate.Text)<Date())) And (Status='Add') Then
begin
DispInfo('约定开工日必须为系统工作日与约定交货日之间的日期,请修改!',3);
TWinControl(Sender).SetFocus;
Abort;
end;
SqlText:=' Select PcLine.PcTaxPrice,PcLine.PcNoTaxPrice,PcLine.PcReferencedPrice '
+' From PcLine '
+' Where ('''+Medt_PoDate.Text +''' >=PcStArtDate '
+' And '''+Medt_PoDate.Text +'''<=PcendDate) '
+' And (('''+Trim(Edt_PoQty.Text)+'''>=PcStArtQty '
+' And '''+Trim(Edt_PoQty.Text)+'''<PcendQty)'
+' Or PcendQty=0) '
+' And (ItemCode='''+Trim(Edt_ItemCode.Text)+''''
+' )And (PcNo='''+PcNo+''')'
+' And (PcLine.PcLineStatus=1)';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.Open;
If AdoQry_Tmp.Eof Then
begin
DispInfo('你所输入的物料代码在对应的采购合同中找不到相应的单价,请重新输入!',3);
Btn_Ok.Enabled:=False;
If (Status='Add') Then
begin
Edt_ItemCode.SelectAll;
Edt_ItemCode.SetFocus;
end
Else
begin
Edt_PoQty.SetFocus;
end;
Abort;
end
Else
begin
POREFERENCEDPRICE:=AdoQry_Tmp.fieldbyname('PcReferencedPrice').AsInteger;
Edt_PoTaxPrice.Text:=FormatFloat('##0.##',AdoQry_Tmp.fieldbyname('PcTaxPrice').AsFloat);
Edt_PoTaxAmount.Text:=FormatFloat('##0.##',AdoQry_Tmp.fieldbyname('PcTaxPrice').AsFloat * StrToFloat(Trim(Edt_PoQty.Text)));
Edt_PoNoTaxPrice.Text:=FormatFloat('##0.##',AdoQry_Tmp.fieldbyname('PcNoTaxPrice').AsFloat);
Edt_PoNoTaxAmount.Text:=FormatFloat('##0.##',AdoQry_Tmp.fieldbyname('PcNoTaxPrice').AsFloat * StrToFloat(Trim(Edt_PoQty.Text)));
end;
end;
procedure TFrm_Pm_Enter_AutoPo_D.Medt_PoDateExit(Sender: TObject);
begin
If ActiveControl.Name ='btn_Cancel' Then
Exit;
Try
StrToDateTime(Medt_PoDate.Text);
Except
DispInfo('约定交货日错误,请重新输入!',3);
TWinControl(Sender).SetFocus;
Abort;
end;
If SlCalendar(DbConnect,MEdt_PoDate.Text,0)<>MEdt_PoDate.Text Then
begin
DispInfo(MEdt_PoDate.Text+'不是工作日!',3);
MEdt_PoDate.Text:=SlCalendar(DbConnect,MEdt_PoDate.Text,0);
MEdt_PoDate.SetFocus;
Abort;
end;
If (PoStArtWorkDate<>Trim(SlCalendar(DbConnect,MEdt_PoDate.Text,MnldTime)))
And ((Status='Add') OR (Status='AllEdit')) Then
MEdt_PoStArtWorkDate.Text:=Trim(SlCalendar(DbConnect,MEdt_PoDate.Text,MnldTime));
If (StrToDateTime(MEdt_PoStArtWorkDate.Text)<Date())
And ((Status='Add')or (Status='AllEdit')) Then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=' Select DateDiff(Day,'''+DateTimeToStr(Date)+''','''+MEdt_PoStArtWorkDate.Text+''') As Day1 ';
AdoQry_Tmp.Open;
ShowMessage('理论开工日('+MEdt_PoStArtWorkDate.Text+')小于了系统工作日('+DateTimeToStr(Date)+') '+IntToStr(Abs(AdoQry_Tmp.fieldbyname('Day1').AsInteger))+' 天!');
MEdt_PoStArtWorkDate.Text:=FormatDateTime('yyyy.mm.dd',Date);
PoStArtWorkDate:=Trim(SlCalendar(DbConnect,MEdt_PoDate.Text,MnldTime));
end;
end;
procedure TFrm_Pm_Enter_AutoPo_D.FloatCheck(Sender: TObject);
begin
inherited;
If (Status='Add') And (StrToFloat(Edt_PoQty.Text)<=0 ) Then
begin
DispInfo('增加数据时约定交货量不能小于能于0!',3);
TWincontrol(Sender).SetFocus;
Abort;
end;
Edt_PoQty.Text:=FormatFloat('##0.##',StrToFloat(Edt_PoQty.Text));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -