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

📄 inv_monthsumqry_c.pas

📁 一个MRPII系统源代码版本
💻 PAS
字号:
unit Inv_MonthSumQry_C;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Condition, Db, AdODB, StdCtrls, Mask;

Type
  TFrm_Inv_MonthSumQry_C = Class(TFrm_Base_Condition)
    Label1: TLabel;
    CmBx_Warehouse: TComboBox;
    Label2: TLabel;
    MEdt_Month: TMaskEdit;
    CkBx_ItemClass: TCheckBox;
    procedure btn_okClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure MonthCheck(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Frm_Inv_MonthSumQry_C: TFrm_Inv_MonthSumQry_C;

implementation

uses Sys_Global,Inv_Global;

{$R *.DFM}

procedure TFrm_Inv_MonthSumQry_C.btn_okClick(Sender: TObject);
var
  i:Integer;
  allwhCode,zzz:string;
begin
  inherited;
  zzz:='zzzzzzzzzzzzzzzzzzzz';
  if CkBx_ItemClass.Checked then
  begin
 {
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:=' select ItemCode,ItemName from Item '
                        +' where ClassCode Is Null or ClassCode=''''';
    AdoQry_Tmp.open;
    if not AdoQry_Tmp.eof then
    begin
       DispInfo('物料:'+AdoQry_Tmp.fieldbyname('ItemCode').asstring+' '+
               AdoQry_Tmp.fieldbyname('ItemName').asstring+' 没有进行存货分类定义!',1);
       exit;
    end;

  }
    if Trim(CmBx_Warehouse.Text)='全部仓库' then
        allwhCode:=' where InvMonthSum.InvMonth='''+MEdt_Month.Text+''''
    else
        allwhCode:=' Where InvMonthSum.WHCode='''+GetCode(CmBx_Warehouse.Text)+''''
      +' And InvMonthSum.InvMonth='''+MEdt_Month.Text+'''';

    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Delete #InvMonthSum';
    AdoQry_Tmp.ExecSQL;
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Insert #InvMonthSum'
      +' Select InvMonthSum.ItemCode'
      +',Item.ItemName'
      +',InvMonthSum.ItemCode+'' ''+Item.ItemName As ItemCodeName,0'
      +','''''
      +',Item.ClassCode'
      +',0'
      +',Uom.UomName'
      +',Sum(InvMonthSum.InvLmAmount)'
      +',Sum(InvMonthSum.InvInAmount)'
      +',Sum(InvMonthSum.InvOutAmount)'
      +',0'
      +',Sum(InvMonthSum.InvBlncAmount)'
      +',Sum(InvMonthSum.InvLmQty)'
      +',Sum(InvMonthSum.InvInQty)'
      +',Sum(InvMonthSum.InvOutQty)'
      +',0'
      +',Sum(InvMonthSum.InvBlncQty)'
      +',case when Sum(InvMonthSum.InvLmQty)<>0 then '
      +'    Sum(InvMonthSum.InvLmAmount)/Sum(InvMonthSum.InvLmQty) else 0 end '
      +',case when Sum(InvMonthSum.InvInQty)<>0 then '
      +'    Sum(InvMonthSum.InvInAmount)/Sum(InvMonthSum.InvInQty) else 0 end '
      +',case when Sum(InvMonthSum.InvOutQty)<>0 then '
      +'    Sum(InvMonthSum.InvOutAmount)/Sum(InvMonthSum.InvOutQty) else 0 end '
      +',case when Sum(InvMonthSum.InvBlncQty)<>0 then '
      +'    Sum(InvMonthSum.InvBlncAmount)/Sum(InvMonthSum.InvBlncQty) else 0 end '
      +' From InvMonthSum Join Item On InvMonthSum.ItemCode=Item.ItemCode'
      +' and Item.ClassCode is not null and Item.ClassCode<>'''''
      +' Join Uom On Item.UomCode=Uom.UomCode'
      +allwhCode
      +' group by InvMonthSum.ItemCode,Item.ItemName,Item.ClassCode,Uom.UomName Order by InvMonthSum.ItemCode ';;
    AdoQry_Tmp.ExecSQL;

    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Insert #InvMonthSum'
      +' Select #InvMonthSum.ClassCode'
      +',ItemClass.ClassName'
      +',#InvMonthSum.ClassCode+'' ''+ItemClass.ClassName+'' 合计'' As ClassCodeName,1'
      +','''''
      +',#InvMonthSum.ClassCode'
      +',1'
      +','''''
      +',Sum(#InvMonthSum.InvLmAmount)'
      +',Sum(#InvMonthSum.InvInAmount)'
      +',Sum(#InvMonthSum.InvOutAmount)'
      +',0'
      +',Sum(#InvMonthSum.InvBlncAmount)'
      +',Sum(#InvMonthSum.InvLmQty)'
      +',Sum(#InvMonthSum.InvInQty)'
      +',Sum(#InvMonthSum.InvOutQty)'
      +',0'
      +',Sum(#InvMonthSum.InvBlncQty)'
      +',case when Sum(#InvMonthSum.InvLmQty)<>0 then '
      +'    Sum(#InvMonthSum.InvLmAmount)/Sum(#InvMonthSum.InvLmQty) else 0 end '
      +',case when Sum(#InvMonthSum.InvInQty)<>0 then '
      +'    Sum(#InvMonthSum.InvInAmount)/Sum(#InvMonthSum.InvInQty) else 0 end '
      +',case when Sum(#InvMonthSum.InvOutQty)<>0 then '
      +'    Sum(#InvMonthSum.InvOutAmount)/Sum(#InvMonthSum.InvOutQty) else 0 end'
      +',case when Sum(#InvMonthSum.InvBlncQty)<>0 then '
      +'    Sum(#InvMonthSum.InvBlncAmount)/Sum(#InvMonthSum.InvBlncQty) else 0 end '
      +' From #InvMonthSum Join ItemClass On #InvMonthSum.ClassCode=ItemClass.ClassCode'
      +' Where #InvMonthSum.OrderInt=0 '
      +' Group By #InvMonthSum.ClassCode,ItemClass.ClassName';
    AdoQry_Tmp.ExecSQL;
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select ItemClass.PClassCode'
      +' From ItemClass'
      +' Where ItemClass.PClassCode<>'''''
      +' And ItemClass.ClassCode In'
      +' (Select #InvMonthSum.ClassCode'
      +' From #InvMonthSum'
      +' Where #InvMonthSum.OrderInt=1)';
    AdoQry_Tmp.Open;
    i:=2;
    while not AdoQry_Tmp.IsEmpty do
    begin
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='delete from #InvMonthSum where ItemCodeName in '
        +' (Select ItemClass.PClassCode+'' ''+p.ClassName+'' 合计'' As ClassCodeName '
        +' from ItemClass join #InvMonthSum on #InvMonthSum.ClassCode=ItemClass.ClassCode '
        +' and #InvMonthSum.OrderInt='+IntToStr(i-1)
        +' Join ItemClass p On ItemClass.PClassCode=p.ClassCode '
        +' where isnull(ItemClass.PClassCode,'''')<>'''' ) ' ;
      AdoQry_Tmp.ExecSQL;

      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Insert #InvMonthSum'
        +' Select ItemClass.PClassCode'
        +',p.ClassName'
        +',ItemClass.PClassCode+'' ''+p.ClassName+'' 合计'' As ClassCodeName,1'
        +','''''
        +',ItemClass.PClassCode'
        +','+IntToStr(i)
        +','''''
        +',Sum(#InvMonthSum.InvLmAmount)'
        +',Sum(#InvMonthSum.InvInAmount)'
        +',Sum(#InvMonthSum.InvOutAmount)'
        +',0'
        +',Sum(#InvMonthSum.InvBlncAmount)'
        +',Sum(#InvMonthSum.InvLmQty)'
        +',Sum(#InvMonthSum.InvInQty)'
        +',Sum(#InvMonthSum.InvOutQty)'
        +',0'
        +',Sum(#InvMonthSum.InvBlncQty)'
        +',case when Sum(#InvMonthSum.InvLmQty)<>0 then '
        +'   Sum(#InvMonthSum.InvLmAmount)/Sum(#InvMonthSum.InvLmQty) else 0 end '
        +',case when Sum(#InvMonthSum.InvInQty)<>0 then '
        +'   Sum(#InvMonthSum.InvInAmount)/Sum(#InvMonthSum.InvInQty) else 0 end '
        +',case when Sum(#InvMonthSum.InvOutQty)<>0 then '
        +'   Sum(#InvMonthSum.InvOutAmount)/Sum(#InvMonthSum.InvOutQty) else 0 end '
        +',case when Sum(#InvMonthSum.InvBlncQty)<>0 then '
        +'   Sum(#InvMonthSum.InvBlncAmount)/Sum(#InvMonthSum.InvBlncQty) else 0 end'
        +' From #InvMonthSum Join ItemClass On #InvMonthSum.ClassCode=ItemClass.ClassCode'
        +' Join ItemClass p On ItemClass.PClassCode=p.ClassCode'
        +' Where #InvMonthSum.OrderInt='+IntToStr(i-1)
        +' and ItemClass.PClassCode<>'''' and ItemClass.PClassCode is not null'
        +' Group By ItemClass.PClassCode,p.ClassName';
      AdoQry_Tmp.ExecSQL;
{
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Update #InvMonthSum Set'
        +' #InvMonthSum.ClassCodeOrder=ItemClass.PClassCode+#InvMonthSum.ClassCodeOrder'
        +' From #InvMonthSum Join ItemClass On #InvMonthSum.ClassCode=ItemClass.ClassCode';
      AdoQry_Tmp.ExecSQL;
 }

      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Select ItemClass.PClassCode'
        +' From ItemClass'
        +' Where ItemClass.PClassCode<>'''' and ItemClass.pClassCode is not null'
        +' And ItemClass.ClassCode In'
        +' (Select #InvMonthSum.ClassCode'
        +' From #InvMonthSum'
        +' Where #InvMonthSum.OrderInt='+IntToStr(i)+')';
      AdoQry_Tmp.Open;
      Inc(i);
    end;
    i:=1;
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='update #InvMonthSum set ClassCodeOrder=ClassCode';
    AdoQry_Tmp.ExecSQL;
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select ItemClass.PClassCode'
        +' From ItemClass'
        +' Where ItemClass.PClassCode<>'''' and ItemClass.PClassCode is not null'
        +' And ItemClass.ClassCode In'
        +' (Select #InvMonthSum.ClassCode'
        +' From #InvMonthSum)';
    AdoQry_Tmp.open;
    while not AdoQry_Tmp.IsEmpty do
    begin
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Update #InvMonthSum Set'
        +' #InvMonthSum.ClassCodeOrder=#InvMonthSum.ClassCodeOrder+left('+quotedstr(zzz)+',Orderint)'
        +' From ItemClass where #InvMonthSum.ClassCode=ItemClass.ClassCode '
        +' and (ItemClass.pClassCode='''' or ItemClass.pClassCode is null) '
        +' and (#InvMonthSum.ClassCode<>'''' or #InvMonthSum.ClassCode is not null)';
      AdoQry_Tmp.ExecSQL;

      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Update #InvMonthSum Set'
        +' #InvMonthSum.ClassCodeOrder=ItemClass.PClassCode+left('+quotedstr(zzz)+',1)+#InvMonthSum.ClassCodeOrder+left('+quotedstr(zzz)+',Orderint)'
        +' From ItemClass where #InvMonthSum.ClassCode=ItemClass.ClassCode '
        +' and ItemClass.pClassCode<>'''' and ItemClass.pClassCode is not null'
        +' and #InvMonthSum.ClassCode<>'''' and #InvMonthSum.ClassCode is not null';
      AdoQry_Tmp.ExecSQL;
 {
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='drop table aaaa'
        +' select * into aaaa From #InvMonthSum ';
      AdoQry_Tmp.execsql;
  }
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Update #InvMonthSum Set'
        +' #InvMonthSum.ClassCode=ItemClass.PClassCode '
        +' From ItemClass where #InvMonthSum.ClassCode=ItemClass.ClassCode ';
      AdoQry_Tmp.ExecSQL;
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='Select ItemClass.PClassCode'
        +' From ItemClass'
        +' Where ItemClass.PClassCode<>'''' and ItemClass.PClassCode is not null '
        +' And ItemClass.ClassCode In'
        +' (Select #InvMonthSum.ClassCode'
        +' From #InvMonthSum where ClassCode<>'''' and ClassCode is not null )';
      AdoQry_Tmp.open;
    end;
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Insert #InvMonthSum'
      +' Select InvMonthSum.ItemCode'
      +',Item.ItemName'
      +',InvMonthSum.ItemCode+'' ''+Item.ItemName As ItemCodeName,0'
      +',''zzzzzzzzzzzzzzz'''
      +',Item.ClassCode'
      +',0'
      +',Uom.UomName'
      +',Sum(InvMonthSum.InvLmAmount)'
      +',Sum(InvMonthSum.InvInAmount)'
      +',Sum(InvMonthSum.InvOutAmount)'
      +',0'
      +',Sum(InvMonthSum.InvBlncAmount)'
      +',Sum(InvMonthSum.InvLmQty)'
      +',Sum(InvMonthSum.InvInQty)'
      +',Sum(InvMonthSum.InvOutQty)'
      +',0'
      +',Sum(InvMonthSum.InvBlncQty)'
      +',case when Sum(InvMonthSum.InvLmQty)<>0 then '
      +'   Sum(InvMonthSum.InvLmAmount)/Sum(InvMonthSum.InvLmQty) else 0 end '
      +',case when Sum(InvMonthSum.InvInQty)<>0 then '
      +'   Sum(InvMonthSum.InvInAmount)/Sum(InvMonthSum.InvInQty) else 0 end '
      +',case when Sum(InvMonthSum.InvOutQty)<>0 then '
      +'   Sum(InvMonthSum.InvOutAmount)/Sum(InvMonthSum.InvOutQty) else 0 end '
      +',case when Sum(InvMonthSum.InvBlncQty)<>0 then '
      +'   Sum(InvMonthSum.InvBlncAmount)/Sum(InvMonthSum.InvBlncQty) else 0 end'
      +' From InvMonthSum Join Item On InvMonthSum.ItemCode=Item.ItemCode'
      +' and (Item.ClassCode is null or Item.ClassCode='''')'
      +' Join Uom On Item.UomCode=Uom.UomCode'
      +allwhCode
      +' group by InvMonthSum.ItemCode,Item.ItemName,Item.ClassCode,Uom.UomName Order by InvMonthSum.ItemCode ';
    AdoQry_Tmp.ExecSQL;
{
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='drop table aaaa'
        +' select * into aaaa From #InvMonthSum ';
    AdoQry_Tmp.execsql;
 }
    Condition:='Select ClassCodeOrder'
      +',ItemCode'
      +',ItemName'
      +',ItemCodeName'
      +',flag'
      +',UomName'
      +',InvLMQty'
      +',InvLMPrice'
      +',InvLMAmount'
      +',InvInQty'
      +',InvInPrice'
      +',InvInAmount'
      +',InvOutQty'
      +',InvOutPrice'
      +',InvOutAmount'
      +',InvtzQty'
      +',InvtzAmount'
      +',InvBlncQty'
      +',InvBlncPrice'
      +',InvBlncAmount'
      +' From #InvMonthSum'
      +' where (InvLMQty<>0 or InvLMAmount<>0 or InvInQty<>0 or InvInAmount<>0 '
      +' or InvOutQty<>0 or InvOutAmount<>0 or InvBlncQty<>0 or InvBlncAmount<>0)'
      +' Order By ClassCodeOrder,ItemCode ';
  end
  else
  begin
    Condition:='Select InvMonthSum.ItemCode'
      +',Item.ItemName'
      +',InvMonthSum.ItemCode+'' ''+Item.ItemName As ItemCodeName,0 flag '
      +',Uom.UomName'
      +',InvMonthSum.InvLMQty'
      +',InvMonthSum.InvLMPrice'
      +',InvMonthSum.InvLMAmount'
      +',InvMonthSum.InvInQty'
      +',InvMonthSum.InvInPrice'
      +',InvMonthSum.InvInAmount'
      +',InvMonthSum.InvOutQty'
      +',InvMonthSum.InvOutPrice'
      +',InvMonthSum.InvOutAmount'
      +',0 as InvtzQty'
      +',0 as InvtzAmount'
      +',InvMonthSum.InvBlncQty'
      +',InvMonthSum.InvBlncPrice'
      +',InvMonthSum.InvBlncAmount'
      +' From InvMonthSum Join Item On InvMonthSum.ItemCode=Item.ItemCode'
      +' Join Uom On Item.UomCode=Uom.UomCode'
      +' where (InvLMQty<>0 or InvLMAmount<>0 or InvInQty<>0 or InvInAmount<>0 '
      +' or InvOutQty<>0 or InvOutAmount<>0 or InvBlncQty<>0 or InvBlncAmount<>0)';
      if Trim(CmBx_Warehouse.Text)='全部仓库' then
        Condition:=Condition+' and InvMonthSum.InvMonth='''+MEdt_Month.Text+''''+
                             ' Order by InvMonthSum.ItemCode'
      else
        Condition:=Condition+' and InvMonthSum.WHCode='''+GetCode(CmBx_Warehouse.Text)+''''
      +' And InvMonthSum.InvMonth='''+MEdt_Month.Text+''''+
       ' Order by InvMonthSum.ItemCode';
  end;
  ConditionHint:='仓库:'+CmBx_Warehouse.Text+', 月份:'+MEdt_Month.Text;
  ModalResult:=mrOk;
end;

procedure TFrm_Inv_MonthSumQry_C.FormActivate(Sender: TObject);
begin
  inherited;
  if CmBx_Warehouse.Items.Count=0 then
  begin
    InitUsableWHCmBx(AdoQry_Tmp,UserCode,CmBx_Warehouse,False);
    CmBx_Warehouse.Items.insert(0,'全部仓库');
    CmBx_Warehouse.Refresh ;
    CmBx_Warehouse.ItemIndex:=0;
  end;
end;

procedure TFrm_Inv_MonthSumQry_C.MonthCheck(Sender: TObject);
begin
  inherited;
  if MEdt_Month.Modified then
  begin
    InvDataChangeCheck(AdoQry_Tmp,TEdit(Sender).Text);
    MEdt_Month.Modified:=False;
    MEdt_Month.SetFocus;
    abort;
  end;
end;

procedure TFrm_Inv_MonthSumQry_C.FormCreate(Sender: TObject);
begin
  inherited;
  MEdt_Month.Text:=FormatDateTime('yyyy.mm',IncMonth(Now,-1));
end;

end.

⌨️ 快捷键说明

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