📄 inv_saleproduct_d.pas
字号:
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 + -