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

📄 inv_saleproduct_d.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Inv_SaleProduct_D;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Entry_Detail, Db, AdODB, ExtCtrls, StdCtrls, ExtEdit;

Type
  TFrm_Inv_SaleProduct_D = Class(TFrm_Base_Entry_Detail)
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    ExtEdt_ItemCode: TExtEdit;
    Lbl_ItemName: TLabel;
    Edt_InvBillQty: TEdit;
    Edt_InvBillSalePrice: TEdit;
    Edt_InvBillSaleAmount: TEdit;
    Edt_InvBillNoTaxSalePrice: TEdit;
    Edt_InvBillNoTaxSaleAmount: TEdit;
    Edt_MpsId: TEdit;
    Label1: TLabel;
    Label9: TLabel;
    Edt_RemArk: TEdit;
    procedure ExtEdt_ItemCodeExit(Sender: TObject);
    procedure Edt_InvBillQtyExit(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edt_MpsIdExit(Sender: TObject);
    procedure Edt_MpsIdKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edt_InvBillQtyChange(Sender: TObject);
    procedure Edt_InvBillSalePriceChange(Sender: TObject);
    procedure Edt_InvBillSaleAmountChange(Sender: TObject);
    procedure Edt_InvBillNoTaxSalePriceChange(Sender: TObject);
    procedure Edt_InvBillNoTaxSaleAmountChange(Sender: TObject);
    procedure ExtEdt_ItemCodeKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edt_BatchNoExit(Sender: TObject);
    procedure Edt_BatchNoKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    LineCount,LockFlag:Integer;
  public
    { Public declarations }
    procedure InitControls; Override;
    procedure SaveBodyData; Override;
    procedure SetStatus(CurrentStatus:String;var EnableControls:String); Override;
  end;

var
  Frm_Inv_SaleProduct_D: TFrm_Inv_SaleProduct_D;

implementation

uses Sys_Global,Inv_MpsHint, Sys_Hint, Inv_Global;

{$R *.DFM}

{ TFrm_Inv_SaleMaterial_D }

procedure TFrm_Inv_SaleProduct_D.InitControls;
begin//初始化窗体控件
  if Param2='NoMps' then
  begin
    FormCaption:='非主计划销售发货单制单';
  end
  else
  begin
    FormCaption:='主计划销售发货单制单';
  end;      
  SetFocus_Control:=ExtEdt_ItemCode;//焦点控件
  inherited;
  LockFlag:=1;
  with AdoQry_Body do
  begin
    ExtEdt_ItemCode.Text:=fieldbyname('ItemCode').AsString;
    Lbl_ItemName.Caption:=fieldbyname('ItemName').AsString;
    //Edt_BatchNo.Text:=fieldbyname('BatchNo').AsString;
    Edt_MpsId.Text:=fieldbyname('MpsId').AsString;
    Edt_RemArk.Text:=fieldbyname('BillLineRemArk').AsString;
    if (Status='Add')and(AdoQry_Body.IsEmpty) then
    begin
      Edt_InvBillQty.Text:='0';
      Edt_InvBillSalePrice.Text:='0.00';
      Edt_InvBillSaleAmount.Text:='0.00';
      Edt_InvBillNoTaxSalePrice.Text:='0.00';
      Edt_InvBillNoTaxSaleAmount.Text:='0.00';
    end
    else
    begin
      Edt_InvBillQty.Text:=fieldbyname('InvBillQty').AsString;
      Edt_InvBillSalePrice.Text:=fieldbyname('InvBillSalePrice').AsString;
      Edt_InvBillSaleAmount.Text:=fieldbyname('InvBillSaleAmount').AsString;
      Edt_InvBillNoTaxSalePrice.Text:=fieldbyname('InvBillNoTaxSalePrice').AsString;
      Edt_InvBillNoTaxSaleAmount.Text:=fieldbyname('InvBillNoTaxSaleAmount').AsString;
    end;
  end;
  LockFlag:=0;
end;

procedure TFrm_Inv_SaleProduct_D.SaveBodyData;
begin//写入缓存
  inherited;
  with AdoQry_Body do
  begin
    fieldbyname('ItemCode').AsString:=ExtEdt_ItemCode.Text;
    fieldbyname('ItemName').AsString:=Lbl_ItemName.Caption;
    fieldbyname('MpsId').AsString:=Edt_MpsId.Text;
    //fieldbyname('BatchNo').AsString:=Edt_BatchNo.Text;
    fieldbyname('InvBillQty').AsString:=Edt_InvBillQty.Text;
    fieldbyname('InvBillSalePrice').AsString:=Edt_InvBillSalePrice.Text;
    fieldbyname('InvBillSaleAmount').AsString:=Edt_InvBillSaleAmount.Text;
    fieldbyname('InvBillNoTaxSalePrice').AsString:=Edt_InvBillNoTaxSalePrice.Text;
    fieldbyname('InvBillNoTaxSaleAmount').AsString:=Edt_InvBillNoTaxSaleAmount.Text;
    fieldbyname('BillLineRemArk').AsString:=Edt_RemArk.Text;
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select UomName From Uom'
      +' Join Item On Uom.UomCode=Item.UomCode'
      +' Where Item.ItemCode='''+ExtEdt_ItemCode.Text+'''';
    AdoQry_Tmp.Open;
    fieldbyname('UomName').AsString:=AdoQry_Tmp.fieldbyname('UomName').AsString;
    Post;
  end;
end;

procedure TFrm_Inv_SaleProduct_D.SetStatus(CurrentStatus: String;
  var EnableControls: String);
begin
  inherited;
  AdoQry_Tmp.Close;
  AdoQry_Tmp.SQL.Text:='Select MrpParamValueN From MrpParam'
    +' Where MrpParamCode=''autoBalanceMps''';
  AdoQry_Tmp.Open;
  if (AdoQry_Tmp.fieldbyname('MrpParamValueN').AsString='1')
    Or(Param2='NoMps') then
  begin
    EnableControls:='ExtEdt_ItemCode,Edt_InvBillQty,Edt_InvBillSalePrice'
      +',Edt_InvBillSaleAmount,Edt_InvBillNoTaxSalePrice'
      +',Edt_InvBillNoTaxSaleAmount,Edt_RemArk,';
    if Param2='NoMps' then
    begin
      Label1.Visible:=False;
      Edt_MpsId.Visible:=False;
    end;
  end;
  if CurrentStatus='Add' then
  begin
    if LineCount=-1 then
    begin
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Select BillLines'
        +' From BillType'
        +' Where BillTypeCode='''+Param1+'''';
      AdoQry_Tmp.Open;
      LineCount:=AdoQry_Tmp.fieldbyname('BillLines').AsInteger;
    end;
    if AdoQry_Body.RecordCount>=LineCount then
    begin
      EnableControls:='None';
      DispInfo('本单据最多只允许输入'+IntToStr(LineCount)+'条单据行',3);
    end;
  end;
end;

procedure TFrm_Inv_SaleProduct_D.ExtEdt_ItemCodeExit(Sender: TObject);
begin
  inherited;
  if(ActiveControl.Name='btn_Cancel')then
    Exit;
  CommonCodeCheck(Sender,AdoQry_Tmp,'ItemName','物料名称','ItemCode',
    '物料代码','Item','ItemUsable=1 and CanSale=1');
  if not DefaultWHCheck(AdoQry_Tmp,AdoQry_Head.fieldbyname('WHCode').AsString
    ,TEdit(Sender).Text) then
  begin
    TWinControl(Sender).SetFocus;
    Abort;
  end;
  AdoQry_Tmp.Close;
  AdoQry_Tmp.SQL.Text:='Select SP2Price'
    +' From SalePrice2'
    +' Where CustomerCode='''+AdoQry_Head.fieldbyname('CustomerCode').AsString+''''
    +' And ItemCode='''+TEdit(Sender).Text+''''
    +' And SP2StArtDate<='''+AdoQry_Head.fieldbyname('InvBillDate').AsString+''''
    +' And SP2endDate>'''+AdoQry_Head.fieldbyname('InvBillDate').AsString+'''';
  AdoQry_Tmp.Open;
  if AdoQry_Tmp.fieldbyname('SP2Price').AsString<>'' then
    Edt_InvBillSalePrice.Text:=AdoQry_Tmp.fieldbyname('SP2Price').AsString;
  if Param2<>'NoMps' then
  begin
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select ItemCode'
      +' From Mps Where MpsStatus=3'
      +' And ItemCode='''+TEdit(Sender).Text+'''';
    AdoQry_Tmp.Open;
    if AdoQry_Tmp.fieldbyname('ItemCode').AsString='' then
    begin
      DispInfo('主生产计划中找不到该计划,不能输入',3);
      TWinControl(Sender).SetFocus;
      Abort;
    end;
  end;
  {if not BatchCtrl(AdoQry_Tmp,ExtEdt_ItemCode.Text) then
  begin
    Edt_BatchNo.Text:='';
    Edt_BatchNo.ReadOnly:=True;
  end
  else
  begin
    Edt_BatchNo.ReadOnly:=False;
  end;}
end;

procedure TFrm_Inv_SaleProduct_D.Edt_InvBillQtyExit(Sender: TObject);
var
  FloatTemp1,FloatTemp2:Double;
  NeedChangePrice:Boolean;
begin
  inherited;
  FloatCheck(Sender);
  if(ActiveControl.Name='btn_Cancel')then
    Exit;
  if TEdit(Sender).Text='0' then
  begin
    DispInfo(' 发货数量不能等于零!',3);
    TWinControl(Sender).SetFocus;
    Abort;
  end;
  if((AdoQry_Body.RecordCount>1)or((AdoQry_Body.RecordCount=1)and(Status='Add')))
    and(AdoQry_Body.fieldbyname('InvBillQty').AsFloat*StrToFloat(TEdit(Sender).Text)<0) then
  begin
    DispInfo('同一次发货,不能出现正负数量混合的情况',3);
    TWinControl(Sender).SetFocus;
    Abort;
  end;
  
  NeedChangePrice:=NeedChangeAveragePrice(AdoQry_Tmp,FormatDateTime('yyyy.mm',
    AdoQry_Head.fieldbyname('InvBillDate').AsDateTime));
  if InvQtyCheck(NeedChangePrice,AdoQry_Body,AdoQry_Tmp,AdoQry_Head.fieldbyname('WHCode').AsString,
    AdoQry_Head.fieldbyname('WhPositionCode').AsString,ExtEdt_ItemCode.Text,
    'InvBillQty',StrToFloat(TEdit(Sender).Text),False,Status='Add')=False then
  begin
    TWinControl(Sender).SetFocus;
    Abort;
  end;

  if Param2<>'NoMps' then
  begin
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select MrpParamValueN From MrpParam'
      +' Where MrpParamCode=''autoBalanceMps''';
    AdoQry_Tmp.Open;
    if AdoQry_Tmp.fieldbyname('MrpParamValueN').AsString<>'1' then
    begin
      if Edt_MpsId.Text='' then
      begin
        with TFrm_Inv_MpsHint.Create(Self) do
        begin
          InitForm(DBConnect,ExtEdt_ItemCode.Text,Lbl_ItemName.Caption,Edt_MpsId.Text);
          if ShowModal=mrOk then
            Edt_MpsId.Text:=MpsID;
          Release;
        end;
        Edt_MpsId.SetFocus;
        Abort;
      end;
    end;

    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select MrpParamValueN From MrpParam'
      +' Where MrpParamCode=''autoBalanceMps''';
    AdoQry_Tmp.Open;
    if AdoQry_Tmp.fieldbyname('MrpParamValueN').AsString<>'1' then
    begin
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Select MpsQty-MpsOutQty-MpsFinishQty As GetCount'
        +' From Mps Where MpsId='+Edt_MpsId.Text+'';
      AdoQry_Tmp.Open;
      FloatTemp1:=StrToFloat(Edt_InvBillQty.Text);
      FloatTemp2:=AdoQry_Tmp.fieldbyname('GetCount').AsFloat;
      if FloatTemp1>FloatTemp2 then
      begin
        AdoQry_Tmp.Close;
        AdoQry_Tmp.SQL.Text:='Select MrpParamValueN From MrpParam'
          +' Where MrpParamCode=''canOverPlan''';
        AdoQry_Tmp.Open;
        if AdoQry_Tmp.fieldbyname('MrpParamValueN').AsString<>'1' then
        begin
          DispInfo(' 累计发货数量不能超过主计划未结量!',3);
          TWinControl(Sender).SetFocus;
          Abort;
        end;
      end;
      if StrToFloat(Edt_InvBillQty.Text)<0 then

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -