mrp_enter_automo_d.pas
来自「一个MRPII系统源代码版本」· PAS 代码 · 共 393 行
PAS
393 行
unit Mrp_Enter_AutoMo_D;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Detail, Db, AdODB, ExtCtrls, StdCtrls, Mask, ExtEdit, linkedit;
Type
TFrm_Mrp_Enter_AutoMo_D = Class(TFrm_Base_Entry_Detail)
edt_qty: TEdit;
Label4: TLabel;
Label3: TLabel;
medt_Modate: TMaskEdit;
Label2: TLabel;
Label1: TLabel;
MEdt_MoStArtWorkDate: TMaskEdit;
Label5: TLabel;
Label6: TLabel;
cmbBackflush: TComboBox;
ExtEdt_ItemCode: TLinkEdit;
edt_ItemName: TEdit;
Label7: TLabel;
edt_remArk: TEdit;
procedure DateCheck(Sender: TObject);
procedure btn_okClick(Sender: TObject);
procedure ExtEdt_ItemCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ExtEdt_ItemCodeExit(Sender: TObject);
procedure FloatCheck(Sender: TObject);
procedure MEdt_MoStArtWorkDateExit(Sender: TObject);
procedure ExtEdt_ItemCodeButtonClick(Sender: TObject);
private
UomName:String; //记录当前单位
MnldTime:Integer;//记录制造提前期
runlt:integer;
LineNo:Integer;//行号
MoStArtWorkDate:String;//当前开工日期
{ Private declarations }
public
procedure InitControls; Override;
procedure SaveBodyData; Override;
procedure SetStatus(CurrentStatus:String;var EnableControls:String);Override;
function existSalterson(ItemCode:string):boolean;
end;
var
Frm_Mrp_Enter_AutoMo_D: TFrm_Mrp_Enter_AutoMo_D;
implementation
uses Sys_Global,Mrp_Enter_AutoMo;
{$R *.DFM}
procedure TFrm_Mrp_Enter_AutoMo_D.InitControls;
var
SqlText:String;
begin
SetFocus_Control:=medt_Modate;
Inherited;
with AdoQry_Body do
begin
ExtEdt_ItemCode.Text:=fieldbyname('ItemCode').AsString;
edt_ItemName.text:=fieldbyname('ItemName').AsString;
UomName := fieldbyname('UomName').AsString;
If (Status='Add') then
begin
LineNo:=RecordCount+1;
Medt_MoDate.Text:=Formatdatetime('yyyy.mm.dd',date);
MEdt_MoStArtWorkDate.Text:=FormatDateTime('yyyy.mm.dd',Date);
MoStArtWorkDate:=FormatDateTime('yyyy.mm.dd',Date);
cmbBackflush.ItemIndex:=0;
end
else
begin
SqlText:=' Select Item.MnldTime,runlt,Uom.UomName '
+' From Item '
+' Left Outer Join Uom On Item.UomCode=Uom.UomCode '
+' Where ItemCode='+''''+Trim(ExtEdt_ItemCode.Text)+''''
+' And PmCode In (0,3)';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.Open;
UomName:=AdoQry_Tmp.fieldbyname('UomName').AsString;
MnldTime:=AdoQry_Tmp.fieldbyname('MnldTime').AsInteger;
runlt:=AdoQry_tmp.fieldbyname('runlt').asinteger;
LineNo:=fieldbyname('MoLineNo').AsInteger;
MEdt_MoStArtWorkDate.Text:=FormatDateTime('yyyy.mm.dd',fieldbyname('MoStArtWorkDate').Asdatetime);
MoStArtWorkDate:=FormatDateTime('yyyy.mm.dd',fieldbyname('MoStArtWorkDate').Asdatetime);
Medt_MoDate.Text:=FormatDateTime('yyyy.mm.dd',fieldbyname('MoLineDate').Asdatetime);
cmbBackflush.ItemIndex:=fieldbyname('Backflush').asinteger;
end;
Edt_Qty.Text:=FormatFloat('##0.####',fieldbyname('MoQty').AsFloat);
edt_remArk.Text:=fieldbyname('remArk').asstring;
end;
end;
procedure TFrm_Mrp_Enter_AutoMo_D.SaveBodyData;
var tMpsqltext:string;
ParentMoLineno:integer;
begin
with AdoQry_Body do
begin
fieldbyname('MoLineNo').Asinteger:=LineNo;
fieldbyname('ItemCode').AsString:=Trim(ExtEdt_ItemCode.Text);
fieldbyname('ItemName').AsString:=edt_ItemName.text;
fieldbyname('MoLineDate').Asdatetime:=strtodatetime(Medt_MoDate.Text);
fieldbyname('MoStArtWorkDate').Asdatetime:=strtodatetime(Medt_MoStArtWorkDate.Text);
fieldbyname('MoQty').AsFloat:=strtofloat(Edt_Qty.Text);
// fieldbyname('SsQty').AsFloat:=strtofloat(Edt_Qty.Text);
fieldbyname('MoNoFinishQty').AsFloat:=strtofloat(Edt_Qty.Text);
fieldbyname('MoLineStatus').Asinteger:=5;
fieldbyname('UomName').AsString:=UomName;
fieldbyname('Backflush').asinteger:=cmbBackflush.ItemIndex;
fieldbyname('remArk').asstring:=Trim(edt_remArk.text);
Post;
end;
ParentMoLineno:=lineno;
tMpsqltext:='select Bom.ItemCode, '
+' Item.ItemName, '
+' Bom.Bomqty, '
+' Uom.UomName '
+' from Bom '
+' join Item on Bom.ItemCode=Item.ItemCode '
+' left outer join Uom on Item.UomCode=Uom.UomName '
+' where ite_ItemCode='+quotedstr(Trim(ExtEdt_ItemCode.Text))
+' and BomItemType=4';
Executesql(AdoQry_tmp,tMpsqltext,0);
if AdoQry_tmp.RecordCount=0 then exit;
with AdoQry_tmp do
begin
First;
while not eof do
begin
If Status='Add' Then
begin
lineno:=AdoQry_Body.RecordCount+1;
AdoQry_Body.Append;
AdoQry_Body.fieldbyname('MoLineNo').Asinteger:=LineNo;
AdoQry_Body.fieldbyname('ItemCode').AsString:=fieldbyname('ItemCode').AsString;
AdoQry_Body.fieldbyname('ItemName').AsString:=fieldbyname('ItemName').AsString;
AdoQry_Body.fieldbyname('MoLineDate').Asdatetime:=strtodatetime(Medt_MoDate.Text);
AdoQry_Body.fieldbyname('MoStArtWorkDate').Asdatetime:=strtodatetime(Medt_MoStArtWorkDate.Text);
AdoQry_Body.fieldbyname('MoQty').AsFloat:=StrtoFloat(Edt_Qty.Text)*fieldbyname('Bomqty').asfloat;
AdoQry_Body.fieldbyname('MoNoFinishQty').AsFloat:=strtofloat(Edt_Qty.Text)*fieldbyname('Bomqty').asfloat;
AdoQry_Body.fieldbyname('byProduct').asinteger:=1;
AdoQry_Body.fieldbyname('ParentMoLineno').asinteger:=ParentMoLineno;
If (Status='Add') Then
AdoQry_Body.fieldbyname('MoLineStatus').AsInteger:=5;
AdoQry_Body.fieldbyname('UomName').AsString:=fieldbyname('UomName').asstring;
AdoQry_Body.Post;
end
else
begin
AdoQry_Body.First;
while not AdoQry_Body.Eof do
begin
if AdoQry_Body.fieldbyname('ParentMoLineno').asinteger=lineno then
begin
AdoQry_Body.Edit;
AdoQry_Body.fieldbyname('mostArtworkdate').asdatetime:=strtodatetime(Medt_MoStArtWorkDate.Text);
AdoQry_Body.fieldbyname('MoLineDate').Asdatetime:=strtodatetime(Medt_MoDate.Text);
AdoQry_Body.fieldbyname('MoQty').AsFloat:=StrtoFloat(Edt_Qty.Text)*fieldbyname('Bomqty').asfloat;
AdoQry_Body.fieldbyname('MoNoFinishQty').AsFloat:=strtofloat(Edt_Qty.Text)*fieldbyname('Bomqty').asfloat;
AdoQry_Body.Post;
end;
AdoQry_Body.next;
end;
end;
next;
end;
end;
end;
procedure TFrm_Mrp_Enter_AutoMo_D.SetStatus(CurrentStatus: String;
var EnableControls: String);
begin
inherited;
EnableControls:='medt_Modate,edt_qty,edt_remArk,MEdt_MoStArtWorkDate,cmbBackflush,';
end;
procedure TFrm_Mrp_Enter_AutoMo_D.DateCheck(Sender: TObject);
begin
If ActiveControl.Name='btn_Cancel' Then
Exit;
inherited;
If SlCalendar(DbConnect,MEdt_MoDate.Text,0)<>MEdt_MoDate.Text Then
begin
DispInfo(MEdt_MoDate.Text+'不是工作日!',3);
MEdt_MoDate.Text:=SlCalendar(DbConnect,MEdt_MoDate.Text,0);
if MEdt_MoDate.CanFocus then
MEdt_MoDate.SetFocus;
Abort;
end;
If MoStArtWorkDate<>SlCalendar(DbConnect,MEdt_MoDate.Text,runlt) Then
MEdt_MoStArtWorkDate.Text:=SlCalendar(DbConnect,MEdt_MoDate.Text,runlt);
If (StrToDateTime(MEdt_MoStArtWorkDate.Text)<Date()) Then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=' Select DateDiff(Day,'''+DateTimeToStr(Date)+''','''+MEdt_MoStArtWorkDate.Text+''') As Day1 ';
AdoQry_Tmp.Open;
DispInfo('理论开工日('+Medt_MoStArtWorkDate.Text+ ')小于了系统工作日('+DateToStr(Date())+') '+IntToStr(Abs(AdoQry_Tmp.fieldbyname('Day1').AsInteger))+' 天!',3);
Medt_MoStArtWorkDate.Text:=FormatDateTime('yyyy.mm.dd',Date);
MoStArtWorkDate:=SlCalendar(DbConnect,MEdt_MoDate.Text,runlt);
end;
end;
procedure TFrm_Mrp_Enter_AutoMo_D.btn_okClick(Sender: TObject);
var
I:String;
begin
If (StrToFloat(Edt_Qty.Text)=0) And (Status='Add') Then
begin
DispInfo('约定交货量不能为0!',1);
if Edt_Qty.CanFocus then
Edt_Qty.SetFocus;
Abort;
end;
If (Status='Add') Then
begin
if cmbBackflush.ItemIndex=1 then
if existSalterson(Trim(Extedt_ItemCode.text)) then
begin
DispInfo(Trim(Extedt_ItemCode.text)+'物料有替代件子项,不能拉式领料!',3);
abort;
end;
If AdoQry_Body.RecordCount>0 Then
begin
AdoQry_Body.First;
While Not AdoQry_Body.Eof Do
begin
If (Trim(ExtEdt_ItemCode.Text)=Trim(AdoQry_Body.fieldbyname('ItemCode').AsString))
And (StrToDateTime(MEdt_MoDate.Text)=AdoQry_Body.fieldbyname('MoLineDate').AsDateTime) Then
begin
DispInfo('你不能输入两笔相同(物料代码+约定交货日)的记录!',1);
Btn_Ok.Enabled:=False;
ExtEdt_ItemCode.SelectAll;
if ExtEdt_ItemCode.CanFocus then ExtEdt_ItemCode.SetFocus;
Abort;
end;
AdoQry_Body.Next;
end; //end while
end; //end if
end; //end (Add)
If (Status<>'Add') Then
begin
if cmbBackflush.ItemIndex=1 then
if existSalterson(Trim(Extedt_ItemCode.text)) then
begin
DispInfo(Trim(Extedt_ItemCode.text)+'物料有替代件子项,不能拉式领料!',3);
abort;
end;
I:=AdoQry_Body.BookmArk;
AdoQry_Body.First;
While Not AdoQry_Body.Eof Do
begin
If (Trim(ExtEdt_ItemCode.Text)=Trim(AdoQry_Body.fieldbyname('ItemCode').AsString))
And (StrToDateTime(MEdt_MoDate.Text)=AdoQry_Body.fieldbyname('MoLineDate').AsDateTime)
And (I<>AdoQry_Body.BookmArk) Then
begin
DispInfo('你不能输入两笔相同(物料代码+约定交货日)的记录!',3);
Btn_Ok.Enabled:=False;
ExtEdt_ItemCode.SelectAll;
if ExtEdt_ItemCode.CanFocus then
ExtEdt_ItemCode.SetFocus;
Close;
Abort;
end;
AdoQry_Body.Next;
end; //end while
AdoQry_Body.BookmArk:=I;
end;
inherited;
end;
procedure TFrm_Mrp_Enter_AutoMo_D.ExtEdt_ItemCodeKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
inherited;
If (Key=120) Then
CommonHint(Sender,AdoQry_Tmp,'ItemName','物料描述','ItemCode',
'物料代码','Item',' PmCode In (0,3) and ItemUsable=1');
end;
procedure TFrm_Mrp_Enter_AutoMo_D.ExtEdt_ItemCodeExit(Sender: TObject);
var
SqlText:String;
begin
inherited;
If ActiveControl.Name='btn_Cancel' Then
Exit;
If Trim(TEdit(Sender).Text)='' Then
begin
DispInfo('物料代码不能为空!',3);
if TWinControl(Sender).CanFocus then
TWinControl(Sender).SetFocus;
Abort;
end;
SqlText:=' Select Item.ItemName,Item.MnldTime,runlt,Uom.UomName '
+' From Item '
+' Left Outer Join Uom On Item.UomCode=Uom.UomCode '
+' Where ItemCode='+''''+Trim(ExtEdt_ItemCode.Text)+''''
+' And PmCode In (0,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;
UomName:=AdoQry_Tmp.fieldbyname('UomName').AsString;
MnldTime:=AdoQry_Tmp.fieldbyname('MnldTime').AsInteger;
runlt:=AdoQry_tmp.fieldbyname('runlt').asinteger;
edt_ItemName.text:=AdoQry_Tmp.fieldbyname('ItemName').AsString;
end;
procedure TFrm_Mrp_Enter_AutoMo_D.FloatCheck(Sender: TObject);
begin
If ActiveControl.Name='btn_Cancel' Then
Exit;
inherited;
If (Status='Add') And (StrToFloat(Edt_Qty.Text)<=0 ) Then
begin
DispInfo('增加数据时约定交货量不能小于能于0!',3);
TWincontrol(Sender).SetFocus;
Abort;
end;
Edt_Qty.Text:=FormatFloat('##0.####',StrToFloat(Edt_Qty.Text));
end;
procedure TFrm_Mrp_Enter_AutoMo_D.MEdt_MoStArtWorkDateExit(
Sender: TObject);
begin
If (ActiveControl.Name ='btn_Cancel') Or (ActiveControl.Name='medt_Modate') Then
Exit;
If SlCalendar(DbConnect,Medt_MoStArtWorkDate.Text,0)<>Medt_MoStArtWorkDate.Text Then
begin
DispInfo(Medt_MoStArtWorkDate.Text+'不是工作日!',3);
Medt_MoStArtWorkDate.Text:=SlCalendar(DbConnect,Medt_MoStArtWorkDate.Text,0);
if Medt_MoStArtWorkDate.CanFocus then
Medt_MoStArtWorkDate.SetFocus;
Abort;
end; //约定开工日必须是工作日,否则返回前一个工作日
If (Status='Add') And ((StrToDate(Medt_MoStArtWorkDate.Text)>StrToDate(Medt_MoDate.Text))
Or (StrToDate(Medt_MoStArtWorkDate.Text)<Date())) Then
begin
DispInfo('约定开工日必须为系统工作日与约定交货日之间的日期,请修改!',3);
if TWinControl(Sender).CanFocus then
TWinControl(Sender).SetFocus;
Abort;
end;
If (Status<>'Add') And (StrToDate(Medt_MoStArtWorkDate.Text)>StrToDate(Medt_MoDate.Text)) Then
begin
DispInfo('约定开工日必须小于约定交货日,请修改!',3);
if TWinControl(Sender).CanFocus then
TWinControl(Sender).SetFocus;
Abort;
end;
end;
function TFrm_Mrp_Enter_AutoMo_D.existSalterson(ItemCode: string): boolean;
var AdoQry:TAdoQuery;
sqltext:string;
begin
Result:=False;
AdoQry:=TAdoQuery.Create(self);
AdoQry.Connection:=dbconnect;
sqltext:='select ItemCode from Bom where BomItemType=6 and ite_ItemCode='+quotedstr(ItemCode);
try
Executesql(AdoQry,sqltext,0);
if AdoQry.RecordCount>0 then Result:=True;
finally
AdoQry.Free;
end;
end;
procedure TFrm_Mrp_Enter_AutoMo_D.ExtEdt_ItemCodeButtonClick(
Sender: TObject);
begin
inherited;
CommonHint(Sender,AdoQry_Tmp,'ItemName','物料描述','ItemCode',
'物料代码','Item',' PmCode In (0,3) and ItemUsable=1');
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?