📄 inv_opoutsale_d.pas
字号:
//
unit Inv_OpOutSale_D;
//委外加工领料明细单元
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Detail, Db, AdODB, ExtCtrls, StdCtrls, ExtEdit;
Type
TFrm_Inv_OpOutSale_D = Class(TFrm_Base_Entry_Detail)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Lbl_PoRealQty: TLabel;
Lbl_PoCtrlQty: TLabel;
Lbl_UomName: TLabel;
Lbl_ItemName: TLabel;
Lbl_PoNo: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Edt_PoLineNo: TEdit;
ExtEdt_ItemCode: TExtEdit;
Edt_PoOutQty: TEdit;
Label4: TLabel;
lbl_useable: TLabel;
Label5: TLabel;
edt_remArk: TEdit;
Label6: TLabel;
Edit_BatchNo: TEdit;
Label7: TLabel;
edt_taxPrice: TEdit;
Label8: TLabel;
edt_taxAmount: TEdit;
Label14: TLabel;
Label15: TLabel;
edt_NotaxPrice: TEdit;
edt_NotaxAmount: TEdit;
Edt_TmpField: TEdit;
Label16: TLabel;
procedure FormActivate(Sender: TObject);
procedure IntegerCheck(Sender: TObject);
procedure ItemCodeCheck(Sender: TObject);
procedure FloatCheck(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ExtEdt_ItemCodeExit(Sender: TObject);
procedure Edit_BatchNoKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edit_BatchNoExit(Sender: TObject);
procedure Edt_PoLineNoKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure edt_taxPriceExit(Sender: TObject);
procedure Edt_PoOutQtyChange(Sender: TObject);
procedure edt_taxPriceChange(Sender: TObject);
procedure edt_taxAmountChange(Sender: TObject);
procedure edt_NotaxPriceChange(Sender: TObject);
procedure edt_NotaxAmountChange(Sender: TObject);
private
BillDate:String;
BillLines,LockFlag,PriceType :Integer;
FPoNo :String; //单据号
WhCode :String; //仓库代码
Position :String; //仓位
VendorCode:string; //供应商
taxpercent:integer; //税率
IsOverPlan :Boolean; //标志是否超计划
PriOutQty :Double;
AllowNegative :String; //是否允许负数
FUom:string;
function ItemCheckRepeat(ItemCode,PoLineNo,pono:string):boolean;
procedure SaveBodyData; Override;
{ Private declarations }
public
procedure SetUserParam(Param1,Param2,Param3,Param4,Param5,Param6:string);OverRide;
procedure SetFormParam(FrmParam1,FrmParam2,FrmParam3,FrmParam4,FrmParam5,FrmParam6:string);OverRide;
procedure InitControls; Override;
procedure SetStatus(CurrentStatus:String;var EnableControls:String); OverRide;
{ Public declarations }
end;
var
Frm_Inv_OpOutSale_D: TFrm_Inv_OpOutSale_D;
implementation
uses Sys_Global,Inv_OpOutSale_B, Inv_OpOutSale_H,Inv_Global,Inv_PoHint;
{$R *.DFM}
{ TFrm_Inv_OpOut_D }
procedure TFrm_Inv_OpOutSale_D.SetStatus(CurrentStatus: String;
var EnableControls: String);
begin
inherited;
if (CurrentStatus='AllEdit') then
begin
EnableControls:='Edt_PoOutQty,edt_remArk,Edit_BatchNo,edt_taxPrice,edt_taxAmount,edt_NotaxPrice,edt_NotaxAmount,';
end
else if (CurrentStatus='Add') then
begin
EnableControls:='Edt_PoOutQty,Edt_PoLineNo,ExtEdt_ItemCode,edt_remArk,Edit_BatchNo,edt_taxPrice,edt_taxAmount,edt_NotaxPrice,edt_NotaxAmount,';
end;
end;
procedure TFrm_Inv_OpOutSale_D.FormActivate(Sender: TObject);
begin
inherited;
PriOutQty:=0;
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select PriceType From Warehouse'
+' Where WHCode='''+whCode+'''';
AdoQry_Tmp.Open;
if AdoQry_Tmp.fieldbyname('PriceType').AsString='0' then
PriceType:=0
else
PriceType:=1;
end;
procedure TFrm_Inv_OpOutSale_D.InitControls;
begin
LockFlag:=1;
// VendorCode:=getCode(Frm_Inv_OpOutSale_B.Lbl_VendorCodeName.Caption);
// taxpercent:=strtoint(Frm_Inv_OpOutSale_B.lbl_taxpercent.Caption);
IF Status='Add' then
SetFocus_Control:=Edt_PoLineNo
else
SetFocus_Control:=Edt_PoOutQty;
inherited;
with AdoQry_Body do
if Pnl_Add.Caption='修改' then
begin
Lbl_PoRealQty.Caption:=fieldbyname('PoRealQty').AsString;
Lbl_PoCtrlQty.Caption:=fieldbyname('PoCtrlQty').AsString;
Lbl_UomName.Caption:=fieldbyname('UomName').AsString;
Edit_BatchNo.Text:=fieldbyname('BatchNo').asstring;
Lbl_ItemName.Caption:=fieldbyname('ItemName').AsString;
Lbl_PoNo.Caption:=FPoNo;
Edt_PoLineNo.Text:=fieldbyname('PoLineNo').AsString;
ExtEdt_ItemCode.Text:=fieldbyname('ItemCode').AsString;
Edt_PoOutQty.Text:=fieldbyname('PoOutQty').AsString;
edt_taxPrice.Text:=fieldbyname('sp2Price').asstring;
edt_taxAmount.Text:=fieldbyname('taxAmount').asstring;
edt_NotaxPrice.Text:=fieldbyname('sp2notaxPrice').asstring;
edt_taxAmount.Text:=fieldbyname('notaxAmount').asstring;
lbl_useable.Caption:=fieldbyname('UseableStore').asstring;
end
else
begin
Lbl_PoRealQty.Caption:='0';
Lbl_PoCtrlQty.Caption:='0';
Lbl_UomName.Caption:='';
Lbl_ItemName.Caption:='';
Lbl_PoNo.Caption:=FPoNo;
Edt_PoLineNo.Text:='';
ExtEdt_ItemCode.Text:='';
Edt_PoOutQty.Text:='0';
lbl_useable.Caption:='';
edt_taxPrice.Text:='0';
edt_taxAmount.Text:='0.00';
edt_NotaxPrice.Text:='0';
edt_taxAmount.Text:='0.00';
end;
LockFlag:=0;
If UpperCase(Param1)='OverSalE' then
begin
Caption:='委外加工超订单材料销售';
end
Else
begin
Caption:='委外加工材料销售';
end;
end;
procedure TFrm_Inv_OpOutSale_D.SaveBodyData;
var
i,NotZeroRecord:Integer;
Book1:TBookMArk;
begin
inherited;
with AdoQry_Body do
begin
Book1:=GetBookmArk;
First;
for i:=0 to RecordCount-1 do
begin
if fieldbyname('POOutQty').asinteger<>0 then
NotZeroRecord:=NotZeroRecord+1;
Next;
end;
GotoBookmArk(Book1);
end;
if NotZeroRecord>=BillLines then
begin
DispInfo('本单据最多只允许输入'+inttostr(BillLines)+'条单据行',1);
abort;
end
else
with AdoQry_Body do
begin
insert;
fieldbyname('PoLineNo').AsString:=Edt_PoLineNo.Text;
fieldbyname('UomName').AsString:=FUom;
fieldbyname('ItemName').AsString:=Lbl_ItemName.Caption;
fieldbyname('PoCtrlQty').AsString:=Lbl_PoCtrlQty.Caption;
fieldbyname('PoRealQty').AsString:=Lbl_PoRealQty.Caption;
fieldbyname('ItemCode').AsString:=ExtEdt_ItemCode.Text;
fieldbyname('UseableStore').AsString:=lbl_useable.Caption;
fieldbyname('PoOutQty').AsString:=Edt_PoOutQty.Text;
fieldbyname('sp2Price').AsString:=Edt_taxPrice.Text;
fieldbyname('sp2notaxPrice').AsString:=Edt_NotaxPrice.Text;
fieldbyname('taxAmount').AsString:=Edt_taxAmount.Text;
fieldbyname('notaxAmount').AsString:=Edt_NotaxAmount.Text;
fieldbyname('BatchNo').asstring:=Edit_BatchNo.text;
fieldbyname('BillLineRemArk').asstring:=edt_remArk.Text;
fieldbyname('usestyle').Value:=1;
Post;
end;
edt_remArk.Text:='';
end;
procedure TFrm_Inv_OpOutSale_D.IntegerCheck(Sender: TObject);
begin
inherited;
//
With AdoQry_Tmp do
begin
Close; //检查订单行号是否存在。
Sql.clear;
Sql.Add('Select Count(*) as RecCount from Poline Where PoNo='''+FPoNo+''''+
' and PoLineNo='+Trim(Edt_PoLineNo.Text));
Open;
If fieldbyname('RecCount').AsInteger<=0 then
begin
DispInfo('该采购订单行号不存在!',1);
Edt_PoLineNo.SetFocus;
Abort;
end;
Close;
sql.clear;
sql.Add('select POLineStatus from poline where PoNo='''+FPoNo+''' and '+
' PoLineNo='+Trim(Edt_PoLineNo.Text));
open;
If fieldbyname('POLineStatus').asstring<>'6' then
begin
DispInfo('不能输入非下达状态的订单行!',1);
Edt_PoLineNo.SetFocus;
Abort;
end;
end;
end;
procedure TFrm_Inv_OpOutSale_D.ItemCodeCheck(Sender: TObject);
begin
inherited;
//物料的领料查询
With AdoQry_Tmp do
begin
Close;
Sql.clear;
Sql.Add('Select Count(*) as RecCount from OPItemList Where PoNo='''+FPoNo+''''+
' and PoLineNo='+Trim(Edt_PoLineNo.Text)+
' and ItemCode='''+Trim(ExtEdt_ItemCode.Text)+'''');
Open;
If fieldbyname('RecCount').AsInteger>0 then
begin
DispInfo('该物料的记录已经存在,不允许增加!',1);
ExtEdt_ItemCode.SetFocus;
Abort;
end;
end;
Lbl_PoCtrlQty.Caption:='0';
Lbl_PoRealQty.Caption:='0';
end;
procedure TFrm_Inv_OpOutSale_D.FloatCheck(Sender: TObject);
begin
inherited;
if not InvQtyCheck(False,
AdoQry_Body,AdoQry_tmp,WhCode,Position,
Trim(ExtEdt_ItemCode.Text),'POOutQty',
StrToFloat(Edt_PoOutQty.Text),False,Status='Add') then
abort;
If (Status<>'Add') and (Not IsOverPlan)
And (StrToFloat(Edt_PoOutQty.Text)>
(StrToFloat(Lbl_PoCtrlQty.Caption)-StrToFloat(Lbl_PoRealQty.Caption))) then
begin
DispInfo('本次销售数量不能超过未销售数量!',1);
Edt_PoOutQty.SetFocus;
Abort;
end;
If (StrToFloat(Lbl_PoRealQty.Caption)+StrToFloat(Edt_PoOutQty.Text)<0)
and (StrToFloat(Edt_PoOutQty.Text)<0) then
begin
DispInfo('冲消的数量不能大于累计领料数量!',1);
Edt_PoOutQty.SetFocus;
Abort;
end;
//如果已经存在负数输入正数,或者已经存在正数输入负数,或者原单据无正无负,但是与上条输入异号
IF ((UpperCase(AllowNegative)='YES') and (StrToFloat(Edt_PoOutQty.Text)>0))
Or ((UpperCase(AllowNegative)='NO') and (StrToFloat(Edt_PoOutQty.Text)<0))
Or ((UpperCase(AllowNegative)='NONE') and (PriOutQty*StrToFloat(Edt_PoOutQty.Text)<0)) then
begin
DispInfo('同一张材料销售单,不允许出现正负数混合的情况!',1);
Edt_PoOutQty.SetFocus;
Abort;
end;
if strtofloat(Edt_PoOutQty.text)>strtofloat(lbl_useable.Caption) then
begin
DispInfo('本次销售数量不能大于当前库存!',1);
Edt_PoOutQty.SetFocus;
Abort;
end;
If StrToFloat(Edt_PoOutQty.Text)<>0 then PriOutQty:=StrToFloat(Edt_PoOutQty.Text);
end;
procedure TFrm_Inv_OpOutSale_D.SetFormParam(FrmParam1, FrmParam2, FrmParam3,
FrmParam4, FrmParam5, FrmParam6: String);
begin
inherited;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -