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

📄 sal_enter_salecontract_d.pas

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