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

📄 unitprodsetaccount.pas

📁 此代码为企业原料管理代码
💻 PAS
字号:
unit UnitProdSetAccount;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, Grids, DBGrids, ComCtrls, StdCtrls, Buttons, Db, DBTables;

type
  TfrmProdSetAccount = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    DBGrid1: TDBGrid;
    Panel1: TPanel;
    Label1: TLabel;
    lCurdate: TLabel;
    lAccDate: TLabel;
    Label2: TLabel;
    Query1: TQuery;
    Query2: TQuery;
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure zdySettleAccount(dDateFrom,dDateTo:Tdate); // 过程声明 填写月报表
    procedure zdyFilterAcc(dDate:Tdate); // 过程声明 过滤月报表
    procedure zdyMonthCheck(dCheckMonth:TDate;sProdID:string;iNum:integer); // 过程声明 写盘存记录
  end;

var
  frmProdSetAccount: TfrmProdSetAccount;
  dyrq:Tdate;
implementation

uses UnitDM, UnitProdSetAccPrt, UnitAccSet;

{$R *.DFM}

procedure TfrmProdSetAccount.BitBtn4Click(Sender: TObject);
begin
  close;
end;
//=====表中只保留结帐日期那天的结帐情况
procedure TfrmProdSetAccount.zdyFilterAcc(dDate:Tdate); // 过程声明 过滤月报表
begin
  with dm.tabProdSetAcc do
  begin
    filter:= format('AccDate = ''%S''',[datetostr(dDate)]);
    filtered:=true;
    close;
    open;
  end; //with

  lCurdate.caption:=datetostr(dDate);
  lAccDate.caption:=formatdatetime('yyyy"年"mm"月" 报表',dDate);
end;


//======================
// 过程实现 写盘存记录
//======================
procedure TfrmProdSetAccount.zdyMonthCheck(dCheckMonth:TDate;sProdID:string;iNum:integer);
begin
//=================================
// 是否已经有该记录 如果有 就删除
//=================================
  with dm.tabProdMonthCheck do
  begin
    open;
    setkey;
    if findkey([dCheckMonth,sProdID]) then
    begin
//==============
// 删除原有记录
//==============
      delete;
    end; //if

//===========
// 添加记录
//===========
    insert;
    fieldbyname('MonthCheck').asdatetime:=dCheckMonth;
    fieldbyname('ProdID').asstring:=sProdID;
    fieldbyname('Number').asinteger:=iNum;
//    showmessage(inttostr(iNum));
    post;
  end; //with

  dm.tabProdMonthCheck.close;
end;

//======================
// 过程实现 填写月报表
//======================
procedure TfrmProdSetAccount.zdySettleAccount(dDateFrom,dDateTo:Tdate);
var
  sProdID,sStartID,sEndID:string;
  i,iLastNum,iThisIn,iThisOut,iThisNum:integer;
  fPrice:real;
begin
  sStartID := formatdatetime('yymmdd',dDateFrom+1)+'000';
  sEndID:= formatdatetime('yymmdd',dDateTo+1)+'000';
  dyrq:=dDateFrom;
// 先清空月报表
  with dm.qryExe do
  begin
    close;
    sql.clear;
    sql.add('delete from ProdSettleAccount where accdate = :vdate ');
    parambyname('vdate').asdatetime:=dDateTo;
   // parambyname('vdate').asdatetime:=dDateFrom;
    execsql;
  end; //with

//=================
//开始建表 月报表
//=================
  with dm.tabProdStock do
  begin
    open;
    first;
    while not eof do
    begin
//==========================
// 就每一种成品进行总结
//==========================
      sProdID:=fieldbyname('ProdID').asstring;
//==========================
// 确定上月库存 iLastNum
//==========================
      iLastNum:=dm.zdyGetProdCheckNum(dm.zdyGetProdCheckDate,sProdID);

//==========================
// 确定本月入库 iThisIn
//==========================
      with dm.qryExe do
      begin
        close;
        sql.clear;
        sql.add('select sum(Number) from ProdInCard ');
       // sql.add('where CardID between :StartID and :EndID ');
         sql.add('where InDate > :StartID and InDate<= :EndID ');
        sql.add('and ProdID = :ProdID ');
        if dm.zdyGetProdCheckDate=strtodate('00-01-01') then
        parambyname('StartID').asdate:=frmCommAccSet.dtpFrom.date;
        if dm.zdyGetProdCheckDate<>strtodate('00-01-01') then
        parambyname('StartID').asdate:=dm.zdyGetProdCheckDate;
        parambyname('EndID').asdate  :=frmCommAccSet.dtpTo.date;

       // sql.add('where CardID > :StartID and CardID<= :EndID ');
       // sql.add('and ProdID = :ProdID ');
       // parambyname('StartID').asstring:=sStartID;
       // parambyname('EndID').asstring  :=sEndID;
        parambyname('ProdID').asstring:=sProdID;
        open;
        iThisIn:=fields[0].asinteger;
      end; //with

//==========================
// 确定本月出库 iThisOut
//==========================
      with dm.qryExe do
      begin
        close;
        sql.clear;
        sql.add('select sum(Number) from ProdOutCard ');
       //sql.add('where CardID between :StartID and :EndID ');
        sql.add('where OutDate > :StartID and OutDate<= :EndID ');
        sql.add('and ProdID = :ProdID ');
        if dm.zdyGetProdCheckDate=strtodate('00-01-01') then
        parambyname('StartID').asdate:=frmCommAccSet.dtpFrom.date;
        if dm.zdyGetProdCheckDate<>strtodate('00-01-01') then
        parambyname('StartID').asdate:=dm.zdyGetProdCheckDate;
        parambyname('EndID').asdate  :=frmCommAccSet.dtpTo.date;

      // sql.add('where CardID > :StartID and CardID<= :EndID ');
       // sql.add('and ProdID = :ProdID ');
       // parambyname('StartID').asstring:=sStartID;
       // parambyname('EndID').asstring  :=sEndID;
        parambyname('ProdID').asstring:=sProdID;
        open;
        iThisOut:=fields[0].asinteger;
      end; //with


//==========================
// 确定本月库存 iThisNum
//==========================
      iThisNum:=abs(iLastNum + iThisIn - iThisOut);

//=====================================
// 确定该成品单价 fPrice
//=====================================
      fPrice:=dm.zdyGetProdPrice(sProdID);

//=========================
// 向月报表中添加一条记录
//=========================
      with dm.tabProdSetAcc do
      begin
        open;
        insert;
        fieldbyname('AccDate').asdatetime:=dDateTo;
        fieldbyname('ProdID').asstring:=sProdID;
        //showmessage(inttostr(iLastNum));
        fieldbyname('LastNum').asinteger:=iLastNum;
        fieldbyname('ThisIn').asinteger:=iThisIn;
        fieldbyname('ThisOut').asinteger:=iThisOut;
        fieldbyname('ThisNum').asinteger:=iThisNum;
        fieldbyname('Price').asfloat:=fPrice;
        post;
      end; //with
      next;
    end; //while
 {
    for i:=1 to 50 do
    begin
     with Query1 do
      begin
        close;
        sql.clear;
        sql.add('select ProdID,sellprice from ProdDictionary ');
        sql.add('where FigID like :tu');
        parambyname('tu').asstring:=inttostr(i)+'$'+'%';
        open;
        //showmessage(inttostr(recordcount));
        if recordcount=0 then
        Continue;
        iLastNum:=0;
         iThisIn:=0;
         iThisOut:=0;
         iThisNum:=0;
        first;
        while not eof do
       begin

         Query2.Close;
         Query2.sql.clear;
         Query2.sql.add('select * from ProdSettleAccount ');
         Query2.sql.add('where ProdID = :tu and accdate = :vdate');
         Query2.parambyname('vdate').asdatetime:=dDateTo;
         //showmessage(Query1.fieldbyname('ProdID').asstring);
         Query2.parambyname('tu').asstring:=Query1.fieldbyname('ProdID').asstring;
         Query2.open;
         //showmessage(inttostr(Query2.fieldbyname('LastNum').asinteger));
         iLastNum:=iLastNum+Query2.fieldbyname('LastNum').asinteger;
        // showmessage(inttostr(iLastNum));
         iThisIn:=iThisIn+Query2.fieldbyname('ThisIn').asinteger;
         iThisOut:=iThisOut+Query2.fieldbyname('ThisOut').asinteger;
         iThisNum:=iThisNum+Query2.fieldbyname('ThisNum').asinteger;
         //Query2.Close;
         //Query2.sql.clear;
         //Query2.sql.add('delete from ProdSettleAccount ');
         //Query2.sql.add('where ProdID = :tu');
         //Query2.parambyname('tu').asstring:=Query1.fieldbyname('ProdID').asstring;
         //Query2.execsql;
        // end;
         next;
         end;
         end;
         with dm.tabProdSetAcc do
          begin
           open;
           insert;
           fieldbyname('AccDate').asdatetime:=dDateTo;
           fieldbyname('ProdID').asstring:=Query1.fieldbyname('ProdID').asstring;
           fieldbyname('LastNum').asinteger:=iLastNum;
          // showmessage(inttostr(iThisIn)+'我们');
           fieldbyname('ThisIn').asinteger:=iThisIn;
           fieldbyname('ThisOut').asinteger:=iThisOut;
           fieldbyname('ThisNum').asinteger:=iThisNum;
           fieldbyname('Price').asfloat:=Query1.fieldbyname('SellPrice').asfloat;
           post;
          end; //with
     
  // end;//with Query1
  end; //for

}


  end; //with dm.tabProdNum

//=========================
// 填写新的 ProdMonthCheck
//=========================
  with dm.qryExe do
  begin
    close;
    sql.clear;
    sql.add('delete from ProdMonthCheck where MonthCheck = :MonthCheck ');
    parambyname('MonthCheck').asdatetime:=dDateTo;
    execsql;
  end; //with
  
  with dm.tabProdSetAcc do
  begin
    filter:= format('AccDate = ''%S''',[datetostr(dDateTo)]);
    filtered:=true;
    open;
    first;
    while not eof do
    begin
      sProdID:=fieldbyname('ProdID').asstring;
      iThisNum:=fieldbyname('ThisNum').asinteger;
      zdyMonthCheck(dDateto,sProdID,iThisNum);
      next;
    end; //while
    filtered:=false;
    first;
  end; //with

//==========================
// 填写新的 ProdCheckDiary
//==========================
  with dm.tabProdCheckDiary do
  begin
     open;
     append;
     fieldbyname('CheckDate').asdatetime:=dDateTo;
     post;
     close;
  end; //with

//===============
// 刷新月报表
//===============
  dm.tabProdSetAcc.close;
  dm.tabProdSetAcc.open;

end;


procedure TfrmProdSetAccount.BitBtn2Click(Sender: TObject);
begin
  with frmProdSetAccPrt do
  begin
    //QRLabelb1.Caption:='';
    //QRLabelb2.Caption:='';
    //QRLabelb3.Caption:='';
   // QRLabelb4.Caption:='';
   // QRLabelb5.Caption:='';
    //QRLabel3.Caption:='';
    QRLabel4.Caption:=formatdatetime('yy"年"mm"月"dd"日"',dyrq)+'---'+formatdatetime('yy"年"mm"月"dd"日"',strtodate(lCurDate.caption));
    QRLDate.caption:=formatdatetime('yyyy"年"mm"月"dd"日"',strtodate(lCurDate.caption));
    QuickRep1.Preview;
  end; //with
end;

procedure TfrmProdSetAccount.BitBtn1Click(Sender: TObject);
begin
  with frmProdSetAccPrt do
  begin
   // QRLabelb1.Caption:='';
    //QRLabelb2.Caption:='';
    //QRLabelb3.Caption:='';
   // QRLabelb4.Caption:='';
   // QRLabelb5.Caption:='';
   // QRLabel3.Caption:='';

    QRLDate.caption:=formatdatetime('yyyy"年"mm"月"dd"日"',strtodate(lCurDate.caption));
    QuickRep1.print;
  end; //with

end;

procedure TfrmProdSetAccount.BitBtn3Click(Sender: TObject);
begin
  close;
end;

end.

⌨️ 快捷键说明

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