📄 stk_enter_checkinvbill.pas
字号:
unit Stk_Enter_CheckInvBill;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Body, Db, ActnList, AdODB, Grids, DBGridEh, ExtCtrls,
ComCtrls, ToolWin, StdCtrls, Mask, ExtEdit, DBCtrls, ExtPrintReport, jpeg,
linkedit;
Type
TFrm_Stk_Enter_CheckInvBill = Class(TFrm_Base_Entry_Body)
Label1: TLabel;
CmBx_Warehouse: TComboBox;
Label4: TLabel;
Label7: TLabel;
Edt_BillNo: TEdit;
Label8: TLabel;
MEdt_BillDate: TMaskEdit;
Label3: TLabel;
Label5: TLabel;
CmBx_WhPosition: TComboBox;
Edt_RemArk: TEdit;
AdoQry_BodyInvBillLineNo: TIntegerField;
AdoQry_BodyItemCode: TStringField;
AdoQry_BodyBatchNo: TStringField;
AdoQry_BodyItemName: TStringField;
AdoQry_BodyUomName: TStringField;
AdoQry_BodyAccountQty: TFloatField;
AdoQry_BodyCheckQty: TFloatField;
AdoQry_BodyProfitLossQty: TFloatField;
AdoQry_BodyPLCause: TStringField;
Label2: TLabel;
MEdt_InAccountDate: TMaskEdit;
Label6: TLabel;
LEdt_CheckEmployeeCode: TLinkEdit;
Edt_CheckEmployeeName: TEdit;
ExtEdt_VendorCode: TLinkEdit;
Lbl_VendorName: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure CmBx_WarehouseChange(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure DateCheck(Sender: TObject);
procedure Act_PreviewExecute(Sender: TObject);
procedure Act_PrintExecute(Sender: TObject);
procedure Act_InsertLineExecute(Sender: TObject);
procedure Act_ModifyExecute(Sender: TObject);
procedure DBGridEhColExit(Sender: TObject);
procedure DBGridEhColEnter(Sender: TObject);
procedure AdoQry_BodyBeforeEdit(DataSet: TDataSet);
procedure DBGridEhKeyPress(Sender: TObject; var Key: ChAr);
procedure DBGridEhExit(Sender: TObject);
procedure ExtEdt_VendorCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ExtEdt_VendorCodeButtonClick(Sender: TObject);
procedure ExtEdt_VendorCodeExit(Sender: TObject);
procedure LEdt_CheckEmployeeCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure LEdt_CheckEmployeeCodeButtonClick(Sender: TObject);
procedure LEdt_CheckEmployeeCodeExit(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure AdoQry_BodyCheckQtyChange(Sender: TField);
procedure CmBx_WhPositionChange(Sender: TObject);
private
{ Private declarations }
IsSpecial:Boolean;
OLDPoNo :String;
Invmodify:Boolean;
oldInvBillQTY:double;
CurrentInvField:string;
procedure SaveCheck;
public
{ Public declarations }
procedure SetStatus(CurrentStatus:String;var AnswerStatus,
EnableControls:String); Override;
procedure InitControls; Override;
procedure SaveHeadData; Override;
procedure SaveData; Override;
procedure SetFormParam(FrmParam1,FrmParam2,FrmParam3,FrmParam4,FrmParam5,
FrmParam6:String);Override;
end;
var
Frm_Stk_Enter_CheckInvBill: TFrm_Stk_Enter_CheckInvBill;
implementation
uses Sys_Global,Inv_Global, Stk_Enter_CheckInvBill_D,Stk_Enter_CheckInvBill_C;
{$R *.DFM}
procedure TFrm_Stk_Enter_CheckInvBill.InitControls;
var
Bill_ID,OnCheckBillId,Tempstr:String;
i:integer;
begin
SetFocus_Control:=CmBx_Warehouse;
inherited;
if (ShowFlag=True)and(Status<>'Add') then
Exit;
// if CmBx_Warehouse.Items.Count=0 then
// begin//设置可用仓库
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select WHAccessCtrl.WHCode+'' ''+Warehouse.WHName As WHCodeName'
+' From WHAccessCtrl'
+' Join Warehouse On WHAccessCtrl.WHCode=Warehouse.WHCode'
+' Where WHAccessCtrl.EmployeeCode='''+UserCode+''''
//+' And Warehouse.PriceType<>1'
+' Order By WHAccessCtrl.WHCode ';
{ SQl.Text := ' select WHAccessCtrl.WHCode+'' ''+Warehouse.WHName As WHCodeName' '
+' from WHAccessCtrl '
+' join Warehouse on WhAccessCtrl.WhCode=Warehouse.WhCode '
+' where WhAccessCtrl.EmployeeCode='+QuotedSTr(userCode)
+' and ( WhAccessCtrl.WhCode In (select WhCode from CurrentInv ) '
+' or WhAccessCtrl.WhCode in (select WhCode from Item where ItemCode in( select distinct ItemCode from opItemList '
+' where poNo ='''+AdoQry_Head.fieldbyname('Pono').asstring+ ''''
+' and Polineno='+AdoQry_Head.fieldbyname('Polineno').asstring+' ) ) ) '
+ ' Order by WhAccessCtrl.WHCode ';}
AdoQry_Tmp.Open;
AdoQry_Tmp.First;
while not AdoQry_Tmp.Eof do
begin
CmBx_Warehouse.Items.Add(AdoQry_Tmp.fieldbyname('WHCodeName').AsString);
AdoQry_Tmp.Next;
end;
if (Status='ReadOnly') or (Status='AllEdit') then
InitCmBxText(CmBx_Warehouse,AdoQry_Head.fieldbyname('WHCode').AsString)
else
CmBx_Warehouse.ItemIndex:=0;
CmBx_WarehouseChange(CmBx_Warehouse);
//end;
//取ID值
if (Status<>'Add') then
begin
Bill_ID:=AdoQry_Head.fieldbyname('InvBillNo').AsString;
Edt_BillNo.Text:=AdoQry_Head.fieldbyname('InvBillNo').AsString;
with AdoQry_tmp do
begin
Close;
sql.text:='select Inv_CheckInvBill.* , '+
' Dept.DeptName,'+
' Inv_CheckInvBill.whCode+'' ''+Warehouse.whName as whCodeName,'+
' Inv_CheckInvBill.WhPositionCode+'' ''+WhPosition.WhPositionName '+
' as WhPositionCodeName,'+
' Employee.EmployeeName as chEmployeeName'+
' from Inv_CheckInvBill '+
' left join Dept on Inv_CheckInvBill.DeptCode=Dept.DeptCode '+
' left join Warehouse on Inv_CheckInvBill.whCode=Warehouse.whCode '+
' left join WhPosition '+
' on Inv_CheckInvBill.WhPositionCode=WhPosition.WhPositionCode '+
' left join Employee '+
' on Inv_CheckInvBill.CheckEmployeeCode=Employee.EmployeeCode '+
' where Inv_CheckInvBill.InvBillNo='''+AdoQry_Head.fieldbyname('InvBillNo').AsString+'''';
open;
CmBx_Warehouse.text:=fieldbyname('whCodeName').asstring;
Edt_BillNo.text:=fieldbyname('InvBillNo').asstring;
MEdt_BillDate.text:=fieldbyname('InvBillDate').asstring;
CmBx_WhPosition.text:=fieldbyname('WhPositionCodeName').asstring;
Edt_RemArk.text:=fieldbyname('RemArk').asstring;
MEdt_InAccountDate.text:=fieldbyname('InAccountDate').asstring;
LEdt_CheckEmployeeCode.text:=fieldbyname('CheckEmployeeCode').asstring;
Edt_CheckEmployeeName.text:=fieldbyname('chEmployeeName').asstring;
ExtEdt_VendorCode.text:=fieldbyname('DeptCode').asstring;
Lbl_VendorName.text:=fieldbyname('DeptName').asstring;
end;
end
else
begin
Bill_ID:='-1';
Edt_BillNo.Text:='';
MEdt_InAccountDate.text:=FormatDateTime('yyyy.mm.dd',date());
MEdt_BillDate.text:=FormatDateTime('yyyy.mm.dd',date());
DBGridEh.Columns[6].ReadOnly :=False;
DBGridEh.Columns[8].ReadOnly :=False;
Act_Save.Enabled:=True;
end;
AdoQry_Body.Close;
AdoQry_Body.SQL.Text:='Select Inv_CheckInvBillLine.InvBillLineNo'
+',Inv_CheckInvBillLine.ItemCode'
+',Inv_CheckInvBillLine.BatchNo'
+',Item.ItemName'
+',Uom.UomName'
+',Inv_CheckInvBillLine.AccountQty'
+',Inv_CheckInvBillLine.CheckQty'
+',Inv_CheckInvBillLine.ProfitLossQty'
+',Inv_CheckInvBillLine.PLCause '
+' From Inv_CheckInvBillLine'
+' left Join Item On Inv_CheckInvBillLine.ItemCode=Item.ItemCode'
+' left Join Uom On Item.UomCode=Uom.UomCode'
+' Where Inv_CheckInvBillLine.InvBillno='''+Bill_ID+'''';
AdoQry_Body.Open;
AdoQry_Body.Sort:='InvBillLineNo';
if (Status='AllEdit') then
begin
CmBx_Warehouse.enabled:=True;
Edt_BillNo.enabled:=False;
//MEdt_BillDate.enabled:=False;
CmBx_Warehouse.enabled:=False;
CmBx_WhPosition.enabled:=False;
Edt_RemArk.enabled:=True;
MEdt_InAccountDate.enabled:=False;
LEdt_CheckEmployeeCode.enabled:=True;
ExtEdt_VendorCode.enabled:=True;
end;
end;
procedure TFrm_Stk_Enter_CheckInvBill.SaveData;
var
InvBillWHChck,Bill_No,OldSort,FromCheckIn,OverPlan:String;
Bill_Id,DispStr,Tempstr:string;
Bill_LineNo,i:Integer;
NeedChangePrice:Boolean;
edTEmployeeName:string;
begin
inherited;
DBGridEhColExit(dbgrideh);
SaveCheck;
if AdoQry_Body.State in [dsedit,dsinsert] then
AdoQry_Body.post;
DispStr:='单据保存失败,请稍后再试';
//先从PO中取出币种及税率
DBGridEhColExit(DBGridEh);
if AdoQry_Body.RecordCount=0 then
begin
DispStr:=' 新增的单据没有记录,不允许保存 ';
DispInfo(DispStr,3) ;
Abort;
end;
{with AdoQry_Body do
begin
First;
while not eof do
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=' select MoLineStatus from MoLine '
+' Where mONo='''+Trim(Edt_PoNO.Text)+''''
+' And MoLineNo='+AdoQry_Body.fieldbyname('POLineNo').AsString ;
AdoQry_Tmp.open;
if AdoQry_Tmp.fieldbyname('MoLineStatus').asinteger=7 then
begin
DispInfo('生产订单号:'+Edt_PoNO.Text+'中'+AdoQry_Body.fieldbyname('POLineNo').AsString+
'已关闭不能入库!',3);
abort;
end;
next;
end;
AdoQry_tmp.Close;
end;}
AdoQry_Body.DisableControls ;
DBConnect.beginTrans;
try
NeedChangePrice:=NeedChangeAveragePrice(AdoQry_Tmp,Copy(MEdt_BillDate.Text,1,7));
if (Status='Add') then
begin
Bill_No:=GetNo(DBConnect,GetCode(CmBx_Warehouse.Text)+'R'
+FormatDateTime('yymm',StrToDate(MEdt_BillDate.Text)),'InvBill');
edt_Billno.Text:=Bill_No;
AdoQry_Tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_Tmp.SQL.Text:='Insert Inv_CheckInvBill'
+'(InvBillNo,DeptCode,InvBillDate,WHCode,WhPositionCode,'
+' CheckEmployeeCode,InAccountDate'
+',CreateEmployeeCode,CreateDate,RemArk)'
+' Values('
+' '''+Bill_No+''''
+','''+ExtEdt_VendorCode.text+''''
+','''+FormatDateTime('yyyy.mm.dd',StrToDate(MEdt_BillDate.Text))+''''
+','''+GetCode(CmBx_Warehouse.Text)+''''
+','''+GetCode(Cmbx_WhPosition.Text)+''''
+','''+LEdt_CheckEmployeeCode.text+''''
+','''+MEdt_InAccountDate.text+''''
+','''+UserCode+''''
+',getdate()'
+','''+Edt_RemArk.Text+''''
+')';
AdoQry_Tmp.ExecSQL;
end;
if (Status='AllEdit') then
begin
Bill_No:=edt_Billno.Text;
AdoQry_Tmp.Close;
AdoQry_tmp.sql.clear;
AdoQry_Tmp.SQL.Text:=' update Inv_CheckInvBill '+
' set DeptCode='''+ExtEdt_VendorCode.text+''','+
' WHCode='''+GetCode(CmBx_Warehouse.Text)+''','+
' WhPositionCode='''+GetCode(Cmbx_WhPosition.Text)+''','+
' CheckEmployeeCode='''+LEdt_CheckEmployeeCode.text+''''+','+
' InvBillDate='''+FormatDateTime('yyyy.mm.dd',StrToDate(MEdt_BillDate.Text))+''''+','+
' EdItEmployeeCode='''+userCode+''''+','+
' EditDate=getdate(),'+
' RemArk='''+Edt_RemArk.Text+''''+
' where InvBillNo='''+Trim(edt_Billno.Text)+'''';
AdoQry_Tmp.ExecSQL;
//del Inv_CheckInvBillLine
Executesql(AdoQry_tmp,' delete Inv_CheckInvBillline where InvBillNo='''+Trim(edt_Billno.Text)+'''',1)
end;
{AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select @@identity as Bill_Id';
AdoQry_Tmp.Open;
Bill_Id:=AdoQry_Tmp.fieldbyname('Bill_Id').AsString;}
//更新库存标记
ChangeInvStatus(AdoQry_Tmp,GetCode(CmBx_Warehouse.Text),
FormatDateTime('yy.mm',StrToDate(MEdt_BillDate.Text)));
AdoQry_Body.First;
Bill_LineNo:=1;
dbgrideh.Enabled :=False;
try
while(not AdoQry_Body.Eof)do
begin
//检查库存
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Insert Inv_CheckInvBillLine (InvBillNo,InvBillLineNo'
+',ItemCode,BatchNo,AccountQty,CheckQty,ProfitLossQty,PLCause)'
+' Values('
+' '''+Bill_No+''''
+','+IntToStr(Bill_LineNo)+''
+','''+AdoQry_Body.fieldbyname('ItemCode').AsString+''''
+','''+AdoQry_Body.fieldbyname('BatchNo').AsString+''''
+','+AdoQry_Body.fieldbyname('AccountQty').AsString+''
+','+AdoQry_Body.fieldbyname('CheckQty').AsString+''
+','''+AdoQry_Body.fieldbyname('ProfitLossQty').AsString+''''
+','''+AdoQry_Body.fieldbyname('PLCause').AsString+''''
+')';
AdoQry_Tmp.ExecSQL;
AdoQry_Body.Next;
Bill_LineNo:=Bill_LineNo+1;
end;
finally
dbgrideh.Enabled :=True;
end;
DBConnect.CommitTrans;
AdoQry_Body.EnableControls ;
ExtEdt_VendorCode.Enabled :=False;
CmBx_Warehouse.Enabled :=False;
CmBx_WhPosition.Enabled:=False;
LEdt_CheckEmployeeCode.Enabled:=False;
MEdt_InAccountDate.Enabled:=False;
MEdt_BillDate.Enabled:=False;
Edt_RemArk.Enabled:=False;
Act_Save.Enabled:=False;
if (Status='Add') then
begin
AdoQry_Head.Edit ;
AdoQry_Head.fieldbyname ('InvBillNo').asstring:=Edt_BillNo.text;
AdoQry_Head.post;
end;
if (Status='AllEdit') then
begin
with AdoQry_tmp do
begin
Close;
sql.text:='select EmployeeName from Employee where EmployeeCode='''+userCode+'''';
open;
edTEmployeeName:=fieldbyname('EmployeeName').asstring;
Close;
end;
with AdoQry_Head do
begin//把根据表头当前数据初始化,表头控件
edit ;
fieldbyname('EdItEmployeeCode').AsString:=userCode;
fieldbyname('EditDate').AsString:=FormatDateTime('yyyy.mm.dd',now);
fieldbyname('edTEmployeeName').AsString:=edTEmployeeName;
post;
end;
end;
DBGridEh.Columns[6].ReadOnly :=True;
DBGridEh.Columns[8].ReadOnly :=True;
except
on e:Exception do
begin
DBConnect.RollBackTrans;
Act_Save.Enabled:=True;
RecOrderror(Self,AdoQry_tmp,E.message);
AdoQry_Body.EnableControls ;
DispInfo(DispStr,3);
Abort;
end;
end;
end;
procedure TFrm_Stk_Enter_CheckInvBill.SaveHeadData;
begin//把表头控件写入缓存,没Post
inherited;
with AdoQry_Head do
begin//把根据表头当前数据初始化,表头控件
fieldbyname('WHCode').AsString:=GetCode(CmBx_Warehouse.Text);
fieldbyname('WHName').AsString:=GetName(CmBx_Warehouse.Text);
fieldbyname('InvBillNo').AsString:=Edt_BillNo.Text;
fieldbyname('DeptCode').AsString:=ExtEdt_VendorCode.Text;
fieldbyname('DeptName').AsString:=Lbl_VendorName.text;
fieldbyname('WhPositionCode').AsString:=GetCode(CmBx_WhPosition.Text);
fieldbyname('WhPositionName').AsString:=GetName(CmBx_WhPosition.Text);
fieldbyname('InvBillNo').AsString:=Edt_BillNo.Text;
fieldbyname('InvBillDate').AsString:=MEdt_BillDate.Text;
fieldbyname('InAccountDate').AsString:=MEdt_InAccountDate.Text;
fieldbyname('RemArk').AsString:=Edt_ReMArk.Text;
fieldbyname('CheckEmployeeCode').asstring:=LEdt_CheckEmployeeCode.text;
fieldbyname('chEmployeeName').asstring:=Edt_CheckEmployeeName.text;
end;
end;
procedure TFrm_Stk_Enter_CheckInvBill.SetStatus(CurrentStatus: String;
var AnswerStatus, EnableControls: String);
begin//窗体状态设置
inherited;
if(CurrentStatus='Edit')then
begin
AnswerStatus:='Edit';
EnableControls:='Edt_RemArk,CmBx_WhPosition,MEdt_BillDate,';
end
else if (CurrentStatus='Add') then
begin
//AnswerStatus:='Add';
// EnableControls:='Edt_RemArk,';
end;
end;
procedure TFrm_Stk_Enter_CheckInvBill.FormCreate(Sender: TObject);
begin
inherited;
Act_Save.Enabled:=True;
Frm_Entry_Detail:=TFrm_Stk_Enter_CheckInvBill_D.Create(self);
end;
procedure TFrm_Stk_Enter_CheckInvBill.CmBx_WarehouseChange(Sender: TObject);
var
tmp_WhCode,tmp_WhPositionCode:string;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -