⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pm_enter_autopo_d.pas

📁 一个MRPII系统源代码版本
💻 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 + -