📄 inv_amountoutadjust_b.pas
字号:
unit Inv_AmountoutAdjust_B;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Body, Db, ActnList, AdODB, Grids, DBGridEh, ExtCtrls,
ComCtrls, ToolWin, Mask, StdCtrls, ExtEdit, DBCtrls, ExtPrintReport, jpeg;
Type
TFrm_Inv_AmountoutAdjust_B = Class(TFrm_Base_Entry_Body)
Label1: TLabel;
Label5: TLabel;
Label7: TLabel;
Label8: TLabel;
Label10: TLabel;
MEdt_Date: TMaskEdit;
CmBx_WhCode: TComboBox;
CmBx_BillType2Code: TComboBox;
Edt_RemArk: TEdit;
Edt_BillNo: TEdit;
AdoQry_HeadNew: TAdoQuery;
Label2: TLabel;
edt_Dept: TEdit;
lbl_Dept: TLabel;
procedure FormCreate(Sender: TObject);
procedure DateCheck(Sender: TObject);
procedure Act_PreviewExecute(Sender: TObject);
procedure Act_PrintExecute(Sender: TObject);
procedure edt_DeptExit(Sender: TObject);
private
{ Private declarations }
AdoQry_HeadOld:TAdoQuery;
public
{ Public declarations }
procedure InitControls;Override;
procedure SaveHeadData;Override;
procedure SaveData; Override;
procedure SetStatus(CurrentStatus:String;var AnswerStatus,
EnableControls:String);Override;
procedure InitForm(AdOConnection:TAdOConnection;FormStatus:String;
AdoQuery:TAdoQuery); Override;
end;
var
Frm_Inv_AmountoutAdjust_B: TFrm_Inv_AmountoutAdjust_B;
implementation
uses Sys_Global,Inv_AmountoutAdjust_D,Inv_Global;
{$R *.DFM}
procedure TFrm_Inv_AmountoutAdjust_B.InitControls;
var
BillId:String;
begin
SetFocus_Control:=CmBx_WhCode;
Caption:='金额调整出库单';
Pnl_Title.Caption:='金额调整出库单';
inherited;
if Status<>'Add' then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select InvBillId From InvOutBill'
+' Where InvBillNo='''+AdoQry_HeadOld.fieldbyname('InvBillNo').AsString+''''
+' And WHCode='''+AdoQry_HeadOld.fieldbyname('WHCode').AsString+'''';
AdoQry_Tmp.Open;
BillId:=AdoQry_Tmp.fieldbyname('InvBillId').AsString;
end
else
BillId:='-1';
AdoQry_Body.Close;
AdoQry_Body.SQL.Text:='Select'
+' InvOutBillLine.InvBillLineNo'
+',InvOutBillLine.ItemCode'
+',Item.ItemName'
+',Uom.UomName'
+',InvOutBillLine.BillLineRemArk'
+',InvOutBillLine.InvBillNoTaxAmount'
+' From InvOutBillLine'
+' Join Item On InvOutBillLine.ItemCode=Item.ItemCode'
+' Join Uom On Item.UomCode=Uom.UomCode'
+' Where InvOutBillLine.InvBillId='+BillId+''
+' Order By InvOutBillLine.InvBillLineNo';
AdoQry_Body.Open;
if CmBx_WhCode.Items.Count=0 then
begin
CmBx_WhCode.clear;
with AdoQry_Tmp do
begin
Close;
SQL.clear;
SQL.Text:='select a.WHCode,w.WHName from WHAccessCtrl a,Warehouse w where a.EmployeeCode='''+userCode+''' and a.WHCode=w.WHCode Order by w.WHCode ';
Open;
if not Eof then
begin
First;
while not Eof do
begin
CmBx_WhCode.Items.Add(fieldbyname('whCode').AsString+' '+fieldbyname('whName').asstring);
Next;
end;
CmBx_WhCode.ItemIndex:=0;
end;
end;
// InitUsableWHCmBx(AdoQry_Tmp,UserCode,CmBx_WhCode,False);
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select BillType2Code+'' ''+BillType2Name As BillType2CodeName'
+' From BillType2'
+' Where io2=1';
AdoQry_Tmp.Open;
CmBx_BillType2Code.clear;
AdoQry_Tmp.First;
while not AdoQry_Tmp.Eof do
begin
CmBx_BillType2Code.Items.Add(AdoQry_Tmp.fieldbyname('BillType2CodeName').AsString);
AdoQry_Tmp.Next;
end;
CmBx_BillType2Code.ItemIndex:=0;
end;
AdoQry_Head.Close;
AdoQry_Head.SQL.Text:='Select'
+' InvOutBill.WHCode'
+',InvOutBill.WHCode+'' ''+Warehouse.WHName As WHCodeName'
+',InvOutBill.InvBillNo'
+',InvOutBill.InvBillDate'
+',InvOutBill.WhPositionCode'
+',InvOutBill.InvBillRemArk'
+',InvOutBill.DeptCode'
+',Dept.DeptName'
+',InvOutBill.BillType2Code'
+',InvOutBill.BillType2Code+'' ''+BillType2.BillType2Name as BillType2CodeName'
+' From InvOutBill'
+' left join Dept on InvOutBill.DeptCode=Dept.DeptCode'
+' Join Warehouse On InvOutBill.WHCode=Warehouse.WHCode '
+' Join BillType2 On InvOutBill.BillType2Code=BillType2.BillType2Code'
+' Where InvOutBill.InvBillId='+BillId+'';
AdoQry_Head.Open;
with AdoQry_Head do
begin
if Status<>'Add' then
begin
Edt_BillNo.Text:=fieldbyname('InvBillno').AsString;
MEdt_Date.Text:=fieldbyname('InvBilldate').AsString;
end
else
begin
Edt_BillNo.Text:='';
MEdt_Date.Text:=FormatDateTime('yyyy.mm.dd',Now);
end;
CmBx_WhCode.Text:=fieldbyname('whCode').AsString;
CmBx_BillType2Code.Text:=fieldbyname('BillType2Code').AsString;
Edt_RemArk.Text:=fieldbyname('InvBillremArk').AsString;
edt_Dept.Text:=fieldbyname('DeptCode').AsString;
lbl_Dept.Caption:=fieldbyname('DeptName').AsString;
end;
end;
procedure TFrm_Inv_AmountoutAdjust_B.SetStatus(CurrentStatus:String;var AnswerStatus,
EnableControls:String);
begin
inherited;
if CurrentStatus='Add' then
begin
AnswerStatus:='Add';
EnableControls:='Edt_RemArk,';
end
else
begin
AnswerStatus:='ReadOnly';
EnableControls:='';
end;
end;
procedure TFrm_Inv_AmountoutAdjust_B.SaveHeadData;
begin
inherited;
with AdoQry_Head do
begin
fieldbyname('WHCode').AsString:=GetCode(CmBx_WhCode.Text);
fieldbyname('InvBillDate').AsString:=MEdt_Date.Text;
fieldbyname('InvBillRemArk').AsString:=Edt_RemArk.Text;
fieldbyname('BillType2Code').AsString:=GetCode(CmBx_BillType2Code.Text);
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select WhPosition.WhPositionCode'
+' From WhPosition'
+' Where WhPosition.WHCode='''+
GetCode(CmBx_WhCode.Text)+'''';
AdoQry_Tmp.Open;
fieldbyname('WhPositionCode').AsString:=AdoQry_Tmp.fieldbyname('WhPositionCode').AsString;
end;
end;
procedure TFrm_Inv_AmountoutAdjust_B.FormCreate(Sender: TObject);
begin
inherited;
Frm_Entry_Detail:=TFrm_Inv_AmountoutAdjust_D.Create(Self);
end;
procedure TFrm_Inv_AmountoutAdjust_B.SaveData;
var
BillNo,BillId:String;
m:Integer;
begin
inherited;
DBConnect.beginTrans;
try
if AdoQry_Body.RecordCount=0 then
begin
DispInfo('新增的单据没有记录,不允许保存!',1);
Abort;
end;
BillNo:=GetNo(DBConnect,AdoQry_Head.fieldbyname('WHCode').AsString+'C'
+FormatDateTime('yymm',AdoQry_Head.fieldbyname('InvBillDate').AsDateTime),'InvBill');
ChangeInvStatus(AdoQry_Tmp,AdoQry_Head.fieldbyname('WHCode').AsString,
FormatDateTime('yy.mm',AdoQry_Head.fieldbyname('InvBillDate').AsDateTime));
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Insert InvOutBill(CurrencyCode,InvBillNo,WHCode,InvBillDate,InvBillMonth'
+',BillTypeCode,BillType2Code,EmployeeCode,Stk_EmployeeCode,DeptCode,WhPositionCode'
+',InvBillRemArk,AmountAdjust,InvBillwhchck)'
+' Values('
+' ''00'''
+','''+BillNo+''''
+','''+AdoQry_Head.fieldbyname('WHCode').AsString+''''
+','''+AdoQry_Head.fieldbyname('InvBillDate').AsString+''''
+','''+FormatDateTime('yyyy.mm',AdoQry_Head.fieldbyname('InvBillDate').AsDateTime)+''''
+','''+Param1+''''
+','''+'100'+''''
+','''+UserCode+''''
+','''+UserCode+''''
+','''+edt_Dept.Text+''''
+','''+AdoQry_Head.fieldbyname('WhPositionCode').AsString+''''
+','''+AdoQry_Head.fieldbyname('InvBillRemArk').AsString+''''
+','+'1,1'+''
+')';
AdoQry_Tmp.ExecSQL;
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select @@IDENTITY As BillId';
AdoQry_Tmp.open;
BillId:=AdoQry_Tmp.fieldbyname('BillId').AsString;
m:=1;
AdoQry_Body.First;
while not AdoQry_Body.Eof do
begin
if NeedChangeAveragePrice(AdoQry_Tmp,copy(MEdt_Date.text,1,7)) then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='If Not Exists ('
+' Select ApQty From AveragePrice'
+' Where WHCode='''+AdoQry_Head.fieldbyname('WHCode').AsString+''''
+' And ItemCode='''+AdoQry_Body.fieldbyname('ItemCode').AsString+''''
+')'
+' Insert AveragePrice(WHCode,ItemCode)'
+' Values('
+' '''+AdoQry_Head.fieldbyname('WHCode').AsString+''''
+','''+AdoQry_Body.fieldbyname('ItemCode').AsString+''''
+')'
+' Update AveragePrice Set'
+' ApAmount=ApAmount-('+AdoQry_Body.fieldbyname('InvBillNoTaxAmount').AsString+')'
+' Where WHCode='''+AdoQry_Head.fieldbyname('WHCode').AsString+''''
+' And ItemCode='''+AdoQry_Body.fieldbyname('ItemCode').AsString+''''
+' Update AveragePrice Set'
+' AveragePrice=Case When ApQty=0 Then AveragePrice'
+' Else ApAmount/ApQty end'
+' Where WHCode='''+AdoQry_Head.fieldbyname('WHCode').AsString+''''
+' And ItemCode='''+AdoQry_Body.fieldbyname('ItemCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
end;
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Insert InvOutBillLine(InvBillId,InvBillLineNo'
+',ItemCode,InvBillQty,BillLineRemArk,InvBillNoTaxAmount,InvBillNoTaxPrice)'
+' Values('
+' '+BillId+''
+','+inttostr(m)+''
+','''+AdoQry_Body.fieldbyname('ItemCode').AsString+''''
+','+'0'+''
+','''+AdoQry_Body.fieldbyname('BillLineRemArk').asstring+''''
+','+AdoQry_Body.fieldbyname('InvBillNoTaxAmount').asstring+''
+','+'0'+''
+')' ;
AdoQry_Tmp.ExecSQL;
Inc(m);
AdoQry_Body.next;
end;
DBConnect.CommitTrans;
except
DBConnect.RollBackTrans;
DispInfo(' 存盘不成功,请稍后再试! ',1);
abort;
end;
AdoQry_HeadOld.Append;
AdoQry_HeadOld.fieldbyname('InvBillNo').AsString:=BillNo;
AdoQry_HeadOld.fieldbyname('WHCode').AsString:=GetCode(CmBx_WhCode.Text);
AdoQry_HeadOld.fieldbyname('WHName').AsString:=GetName(CmBx_WhCode.Text);
AdoQry_HeadOld.fieldbyname('InvBillDate').AsString:=MEdt_Date.Text;
AdoQry_HeadOld.fieldbyname('InvBillRemArk').AsString:=Edt_RemArk.Text;
AdoQry_HeadOld.fieldbyname('BillType2Code').AsString:=GetCode(CmBx_BillType2Code.Text);
AdoQry_HeadOld.fieldbyname('BillType2Name').AsString:=GetName(CmBx_BillType2Code.Text);
AdoQry_HeadOld.fieldbyname('DeptCode').AsString:=edt_Dept.Text;
// AdoQry_HeadOld.fieldbyname('DeptName').AsString:=lbl_Dept.Caption;
AdoQry_HeadOld.Post;
end;
procedure TFrm_Inv_AmountoutAdjust_B.DateCheck(Sender: TObject);
begin
inherited;
if not WHClsPeriodCheck(AdoQry_Tmp,GetCode(CmBx_WhCode.Text),Copy(TEdit(Sender).Text,1,7)) then
begin
TWinControl(Sender).SetFocus;
Abort;
end;
end;
procedure TFrm_Inv_AmountoutAdjust_B.Act_PreviewExecute(Sender: TObject);
begin
//inherited;
BillPrint(DBConnect,GetCode(CmBx_WhCode.text),edt_Billno.text,Param1,ModuleCode,True,False,True,'');
end;
procedure TFrm_Inv_AmountoutAdjust_B.Act_PrintExecute(Sender: TObject);
begin
//inherited;
BillPrint(DBConnect,GetCode(CmBx_WhCode.text),edt_Billno.text,Param1,ModuleCode,False,False,True,'');
end;
procedure TFrm_Inv_AmountoutAdjust_B.InitForm(AdOConnection: TAdOConnection;
FormStatus: String; AdoQuery: TAdoQuery);
begin
if DBConnect=nil then
begin
SetDBConnect(AdOConnection);
AdoQry_Body.Connection:=AdOConnection;
AdoQry_HeadNew.Connection:=AdOConnection;
AdoQry_HeadOld:=AdoQuery;
AdoQry_Head:=AdoQry_HeadNew;
end;
Status:=FormStatus;
end;
procedure TFrm_Inv_AmountoutAdjust_B.edt_DeptExit(Sender: TObject);
begin
inherited;
with AdoQry_Tmp do
begin
Close;
sql.text:='select DeptName from Dept where DeptCode='+quotedstr(edt_Dept.text);
open;
if not eof then
lbl_Dept.Caption:=fieldbyname('DeptName').AsString
else
begin
DispInfo('部门代码有误,请重新输入!',1);
edt_Dept.text:='';
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -