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

📄 inv_amountadjust_b.pas

📁 一个MRPII系统源代码版本
💻 PAS
字号:
unit Inv_AmountAdjust_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_AmountAdjust_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;
    procedure FormCreate(Sender: TObject);
    procedure DateCheck(Sender: TObject);
    procedure Act_PreviewExecute(Sender: TObject);
    procedure Act_PrintExecute(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_AmountAdjust_B: TFrm_Inv_AmountAdjust_B;

implementation

uses Sys_Global,Inv_AmountAdjust_D,Inv_Global;

{$R *.DFM}

procedure TFrm_Inv_AmountAdjust_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 InvInBill'
      +' 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'
    +' InvInBillLine.InvBillLineNo'
    +',InvInBillLine.ItemCode'
    +',Item.ItemName'
    +',Uom.UomName'
    +',InvInBillLine.BillLineRemArk'
    +',InvInBillLine.InvBillNoTaxAmount'
    +' From InvInBillLine'
    +' Join Item On InvInBillLine.ItemCode=Item.ItemCode'
    +' Join Uom On Item.UomCode=Uom.UomCode'
    +' Where InvInBillLine.InvBillId='+BillId+''
    +' Order By InvInBillLine.InvBillLineNo';
  AdoQry_Body.Open;

  if CmBx_WhCode.Items.Count=0 then
  begin
    InitUsableWHCmBx(AdoQry_Tmp,UserCode,CmBx_WhCode,False);
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select BillType2Code+'' ''+BillType2Name As BillType2CodeName'
      +' From BillType2'
      +' Where io2=0';
    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'
    +' InvInBill.WHCode'
    +',InvInBill.WHCode+'' ''+Warehouse.WHName As WHCodeName'
    +',InvInBill.InvBillNo'
    +',InvInBill.InvBillDate'
    +',InvInBill.WhPositionCode'
    +',InvInBill.InvBillRemArk'
    +',InvInBill.BillType2Code'
    +',InvInBill.BillType2Code+'' ''+BillType2.BillType2Name as BillType2CodeName'
    +' From InvInBill'
    +' Join Warehouse On InvInBill.WHCode=Warehouse.WHCode '
    +' Join BillType2 On InvInBill.BillType2Code=BillType2.BillType2Code'
    +' Where InvInBill.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;
  end;
end;

procedure TFrm_Inv_AmountAdjust_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_AmountAdjust_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_AmountAdjust_B.FormCreate(Sender: TObject);
begin
  inherited;
  Frm_Entry_Detail:=TFrm_Inv_AmountAdjust_D.Create(Self);
end;

procedure TFrm_Inv_AmountAdjust_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+'R'
      +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 InvInBill(CurrencyCode,InvBillNo,WHCode,InvBillDate,InvBillMonth'
      +',BillTypeCode,BillType2Code,EmployeeCode,Stk_EmployeeCode,WhPositionCode'
      +',InvBillRemArk,AmountAdjust)'
      +' Values('
      +' ''00'''
      +','''+BillNo+''''
      +','''+AdoQry_Head.fieldbyname('WHCode').AsString+''''
      +','''+AdoQry_Head.fieldbyname('InvBillDate').AsString+''''
      +','''+FormatDateTime('yyyy.mm',AdoQry_Head.fieldbyname('InvBillDate').AsDateTime)+''''
      +','''+Param1+''''
      +','''+AdoQry_Head.fieldbyname('BillType2Code').AsString+''''
      +','''+UserCode+''''
      +','''+UserCode+''''
      +','''+AdoQry_Head.fieldbyname('WhPositionCode').AsString+''''
      +','''+AdoQry_Head.fieldbyname('InvBillRemArk').AsString+''''
      +','+'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 InvInBillLine(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.Post;
end;

procedure TFrm_Inv_AmountAdjust_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_AmountAdjust_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_AmountAdjust_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_AmountAdjust_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;

end.

⌨️ 快捷键说明

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