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

📄 invquery.~pas

📁 文件包含程序源原文件
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
  end;
end;


procedure TfrmBalance.SetBalanceList(RID: LongInt; List: TList; DT: TDateTime);
var i, j, UPriceType: Integer;
    STS: Boolean;
    lcP: PINVENTORY;
    lcBalP: PBALANCE;
begin
  for i:=0 to List.Count-1 do Dispose(List[i]);
  List.Clear;
  UPriceType := StrToIntDef(frmMain.IniData.OutPrice, 0);
  for i:=0 to FList.Count-1 do begin
    lcP := FList[i];
    if lcP^.REC_ID = RID then Continue;
    if (DT>=strtodatetime(formatDatetime('yy/mm/dd',lcP^.DATE)+' 00:00'))and (lcP^.DATE > 2) then begin
      STS := False;
      for j:=0 to List.Count-1 do begin
        lcBalP := List[j];
        if ((lcp^.STK_ID=lcBalP^.STK_ID)and(lcP^.MAT_RID=lcBalP^.CODE)and(lcp^.GUAGE_ID=lcBalP^.GUAGE_ID))  then begin
          lcBalP^.QUANTITY := lcBalP^.QUANTITY + lcP^.QUANTITY;
          //-- get 4 mode unit_price
          if (lcP^.KIND=0)and(UPriceType in [1, 2]) then begin
            if UPriceType = 1 then STS := (lcBalP^.DATE < lcP^.DATE)
            else STS := (lcBalP^.DATE > lcP^.DATE);
            if STS then begin
              lcBalP^.Date := lcP^.DATE;
              lcBalP^.U_PRICE := lcP^.UNT_PRICE;
            end;
          end;
          lcBalP^.T_PRICE := lcBalP^.T_PRICE + lcP^.TTL_PRICE;

          //-- current Quantity < Safety Quantity
          //lcBalP^.SAFE_QTY := 1;

          if lcBalP^.QUANTITY < dm_inventory.Get_MatGuageSafety(lcP^.MAT_RID,lcp^.GUAGE_ID) then
            lcBalP^.IS_SAFETY := 0
          else
            lcBalP^.IS_SAFETY := 1;          //-- Default Normal


          STS := True;
          Break;
        end;
      end;

      if not(STS) then begin
        New(lcBalP);
        ZeroMemory(lcBalP, Sizeof(TBALANCE));
        lcBalP^.STK_ID   := lcp^.STK_ID;
        lcBalP^.DATE     := lcP^.DATE;
        lcBalP^.CODE     := lcP^.MAT_RID;
        StrPCopy(lcBalP^.NAME, lcP^.MAT_NM);
        lcBalP^.GUAGE_ID := lcp^.GUAGE_ID;
        strPCopy(lcBalP^.GUAGE_NAME,dm_Inventory.Get_GuageName(lcP^.MAT_RID,lcp^.GUAGE_ID));
        lcBalP^.QUANTITY := lcP^.QUANTITY;
        lcBalP^.U_PRICE  := lcP^.UNT_PRICE;
        lcBalP^.T_PRICE  := lcP^.TTL_PRICE;
        
        if lcP^.QUANTITY < dm_inventory.Get_MatGuageSafety(lcP^.MAT_RID,lcp^.GUAGE_ID) then
            lcBalP^.IS_SAFETY := 0
          else
            lcBalP^.IS_SAFETY := 1;          //-- Default Normal
        //lcBalP^.SAFE_QTY := 1;

        List.Add(lcBalP);
      end;
    end;
  end;

  if UPriceType = 0 then
  begin
    for i:=0 to List.Count-1 do begin
      lcBalP := List[i];
      if lcBalP^.QUANTITY = 0 then lcBalP^.U_PRICE := 0
      else  lcBalP^.U_PRICE := lcBalP^.T_PRICE / lcBalP^.QUANTITY;
    end;
  end;

  if UPriceType = 3 then     //-- standard Price
  begin
    for i := 0 to List.Count-1 do begin
      lcBalP := List[i];
      lcBalP^.U_PRICE := dm_inventory.GetStdUnitPrice(lcBalP^.CODE);
      lcBalP^.T_PRICE := lcBalP^.U_PRICE * lcBalP^.QUANTITY;
    end;
  end;

end;


////////////////////////////////////////////////////////////////////
procedure TfrmBalance.btnFilterQueryClick(Sender: TObject);
var frmBalQryCond: TfrmBalQryCond;
    i,j: Integer;
    lcP: PBalance;
    Item: TListItem;
begin

  frmBalQryCond := TfrmBalQryCond.Create(self);
  if chkStkLess0.Checked then frmBalQryCond.ichkStkLess0 := (1=1)
  else frmBalQryCond.ichkStkLess0 := (1<>1);
  frmBalQryCond.ShowModal;
  if frmBalQryCond.ModalResult = 1 then
  begin
  Screen.Cursor  := crHourGlass;
  ReViewProc;
  with ListView.Items do begin
    BeginUpdate;
    Clear;
    EndUpdate;
  end;

  //--
  ListView.Items.BeginUpdate;
  try
    ListSortKey := frmBalQryCond.iSortKey;
    FList.Sort(TListSortCompare(@ListSortCompare));

    for i :=0 to BalanceList.Count-1 do begin
      lcP  := BalanceList.Items[i];
      if not frmBalQryCond.Set_QryCondition(lcp) then continue;
      Item := ListView.Items.Add;
      for j :=0 to FColumnCount-2 do Item.Subitems.Add('');
      Item.Data := lcP;
      MakeItemCaption(Item);
    end;
  finally
    ListView.Items.EndUpdate;
    if ListView.Items.Count>0 then
    begin
      ListView.TopItem.Selected  := true;
      ListView.Selected.Selected := true;
    end;
    stsBarCnt.Panels[0].Text := '符合条件的记录有:'+ IntToStr(ListView.Items.Count)+' 条';
    Screen.Cursor := crDefault;
  end;
  end;
end;

procedure TfrmBalance.btnReViewClick(Sender: TObject);
begin
  ReViewProc;
end;

procedure TfrmBalance.btnCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmBalance.btnExcelClick(Sender: TObject);
begin
  if ListView.Items.Count > 0 then PrintProc;
end;

procedure TfrmBalance.ListViewColumnClick(Sender: TObject; Column: TListColumn);
  ////////////////////////////////////////
  function StrToFloatEx(S: string): Double;
  begin
    S := StringReplace(S, ',', '', [rfReplaceAll]);
    S := StringReplace(S, '\', '', [rfReplaceAll]);
    try    Result := StrToFloat(S);
    except Result := 0;
    end;
  end;
var WSB_Pos: Integer;
begin
  if ListView.Items.Count = 0 then Exit;
  WSB_Pos := GetScrollPos(ListView.Handle, SB_HORZ);
  ListSortKey := Column.Index + 1;
  with ListView do
    case ListSortKey of
      1: if Items[0].Caption < Items[Items.Count-1].Caption then
           ListSortKey := ListSortKey * -1;
      7..9: //--
         if StrToFloatEx(Items[0].SubItems[ListSortKey-2]) <
            StrToFloatEx(Items[Items.Count-1].SubItems[ListSortKey-2]) then
           ListSortKey := ListSortKey * -1;
    else if Items[0].SubItems[ListSortKey-2] <
            Items[Items.Count-1].SubItems[ListSortKey-2] then
           ListSortKey := ListSortKey * -1;
    end;
  BalanceList.Sort(TListSortCompare(@ListSortCompare));
  SetListView;
  ListView.Scroll(WSB_Pos, 0);
end;


{*********************************************************************}
procedure TfrmBalance.PrintProc;
var
  V: OleVariant;
  RecCnt, ColCnt: Integer;
  i: Integer;
  S: string;
  ireport,isheet: integer;
begin
  try
    V := CreateOleObject('Excel.Application');
  except
    MessageDlg('Excel Application is Created Error!', mtError, [mbOk], 0);
    Exit;
  end;
  V.Visible := True;
  V.WorkBooks.Add;
  V.WorkBooks[1].Activate;

  if chkboxchkQty.Checked then isheet := 2 else isheet := 1;
  for ireport := 1 to isheet do
  begin
    V.WorkSheets[ireport].Activate;
    if ireport = 1 then begin
      V.WorkSheets[ireport].Name := 'stock';
      V.ActiveSheet.Cells[1, 2].Value := '  ' +'Current Stock List';
    end
    else begin
      V.WorkSheets[ireport].Name := 'check';
      V.ActiveSheet.Cells[1, 2].Value := '  ' + 'Check Stock List';
    end;

  RecCnt := 0;
  ColCnt := 0;
  ClipBoard.asText := CopyToClipBoard(RecCnt, ColCnt);

  //-- setting Paper title/report
  V.ActiveSheet.PageSetUp.Orientation := xlPortrait;    //xlLandscape;()
  V.ActiveSheet.PageSetUp.PrintTitleRows := '$1:$3';        //--
  V.ActiveSheet.PageSetUp.RightHeader :=                    //--
                '&9 '+FormatDateTime('yyyy/mm/dd hh:nn', Now) + ' ' +
                 'Print Date';
  V.ActiveSheet.PageSetUp.CenterFooter := '&9&P/&N Page';  //--
  V.ActiveSheet.PageSetUp.Order := xlOverThenDown;          //--

  //page format
  V.ActiveSheet.PageSetUp.LeftMargin   := V.InchesToPoints(10/25.4); // 15mm
  V.ActiveSheet.PageSetUp.RightMargin  := V.InchesToPoints(10/25.4); // 15mm
  V.ActiveSheet.PageSetUp.TopMargin    := V.InchesToPoints(15/25.4); // 15mm
  V.ActiveSheet.PageSetUp.BottomMargin := V.InchesToPoints(15/25.4); // 15mm
  V.ActiveSheet.PageSetUp.HeaderMargin := V.InchesToPoints(10/25.4); // 10mm
  V.ActiveSheet.PageSetUp.FooterMargin := V.InchesToPoints(10/25.4); // 10mm

  //-- report title caption stytle
  V.ActiveSheet.Cells.Font.Size := 9;
  V.ActiveSheet.Cells[1, 1].HorizontalAlignment := xlLeft;
  V.ActiveSheet.Cells[1, 1].Font.Size := 16;
  V.ActiveSheet.Cells[1, 1].Font.Bold := True;
  V.ActiveSheet.Cells[1, 1].Font.Italic := True;
  V.ActiveSheet.Rows[3].HorizontalAlignment := xlCenter;
  V.ActiveSheet.Rows[3].Font.Size := 11;
  V.ActiveSheet.Rows[3].Font.Bold := True;

  ///--
  V.ActiveSheet.Columns[3].NumberFormatLocal := '@';    //--
  V.ActiveSheet.Columns[6].NumberFormatLocal := '#,##0.00';      //--
  V.ActiveSheet.Columns[7].NumberFormatLocal := '#,##0.00';      //--
  V.ActiveSheet.Columns[8].NumberFormatLocal := '#,##0.00';      //--

  //--
  if ireport = 1 then S := 'A3:'+Chr(Ord('A')+(ColCnt-1))+IntToStr(RecCnt+3)
  else S := 'A3:'+Chr(Ord('A')+(ColCnt-1)+1)+IntToStr(RecCnt+3);

  V.ActiveSheet.Range[S].Borders[xlDiagonalDown].LineStyle := xlNone;
  V.ActiveSheet.Range[S].Borders[xlDiagonalUp].LineStyle   := xlNone;
  V.ActiveSheet.Range[S].Borders[xlEdgeLeft].LineStyle  := xlContinuous;
  V.ActiveSheet.Range[S].Borders[xlEdgeLeft].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlEdgeLeft].ColorIndex := xlAutomatic;
  V.ActiveSheet.Range[S].Borders[xlEdgeTop].LineStyle  := xlContinuous;
  V.ActiveSheet.Range[S].Borders[xlEdgeTop].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlEdgeTop].ColorIndex := xlAutomatic;
  V.ActiveSheet.Range[S].Borders[xlEdgeBottom].LineStyle  := xlContinuous;
  V.ActiveSheet.Range[S].Borders[xlEdgeBottom].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlEdgeBottom].ColorIndex := xlAutomatic;
  V.ActiveSheet.Range[S].Borders[xlEdgeRight].LineStyle  := xlContinuous;
  V.ActiveSheet.Range[S].Borders[xlEdgeRight].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlEdgeRight].ColorIndex := xlAutomatic;
  V.ActiveSheet.Range[S].Borders[xlInsideVertical].LineStyle  := xlDot;
  V.ActiveSheet.Range[S].Borders[xlInsideVertical].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlInsideVertical].ColorIndex := xlAutomatic;
  V.ActiveSheet.Range[S].Borders[xlInsideHorizontal].LineStyle  := xlDot;
  V.ActiveSheet.Range[S].Borders[xlInsideHorizontal].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlInsideHorizontal].ColorIndex := xlAutomatic;

  if ireport = 1 then S := 'A3:'+Chr(Ord('A')+(ColCnt-1))+'3'
  else S := 'A3:'+Chr(Ord('A')+(ColCnt-1+1))+'3';

  V.ActiveSheet.Range[S].Borders[xlDiagonalDown].LineStyle := xlNone;
  V.ActiveSheet.Range[S].Borders[xlDiagonalUp].LineStyle   := xlNone;
  V.ActiveSheet.Range[S].Borders[xlEdgeLeft].LineStyle  := xlContinuous;
  V.ActiveSheet.Range[S].Borders[xlEdgeLeft].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlEdgeLeft].ColorIndex := xlAutomatic;
  V.ActiveSheet.Range[S].Borders[xlEdgeTop].LineStyle  := xlContinuous;
  V.ActiveSheet.Range[S].Borders[xlEdgeTop].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlEdgeTop].ColorIndex := xlAutomatic;
  V.ActiveSheet.Range[S].Borders[xlEdgeBottom].LineStyle  := xlContinuous;
  V.ActiveSheet.Range[S].Borders[xlEdgeBottom].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlEdgeBottom].ColorIndex := xlAutomatic;
  V.ActiveSheet.Range[S].Borders[xlEdgeRight].LineStyle  := xlContinuous;
  V.ActiveSheet.Range[S].Borders[xlEdgeRight].Weight     := xlThin;
  V.ActiveSheet.Range[S].Borders[xlEdgeRight].ColorIndex := xlAutomatic;

  //--
  V.ActiveSheet.Cells[3, 1].PasteSpecial;
  V.ActiveSheet.Cells[3, 1].Select;

  if ireport = 1 then V.ActiveSheet.Cells[3, 8] := GetMultiLingalMsg(90034, 'Inventory Quantity')
  else begin
    V.ActiveSheet.Cells[3, 8] := GetMultiLingalMsg(90034, 'Inventory Quantity');
    V.ActiveSheet.Cells[3, 9] := GetMultiLingalMsg(90043, 'Checked Quantity');
    V.ActiveSheet.Cells[3, 10] := GetMultiLingalMsg(90044, 'Checked result');
  end;

  //--
  V.ActiveSheet.Columns['A:'+Chr(Ord('A')+(ColCnt-1))].EntireColumn.AutoFit;

  for i:=1 to ColCnt do
    V.ActiveSheet.Columns[i].ColumnWidth := V.ActiveSheet.Columns[i].ColumnWidth + 2;
end;

  if frmMain.IniData.isExcelPrint then V.Print;
end;

///////////////////////////////////////////////////////////////////
function TfrmBalance.CopyToClipBoard(var RecCnt, ColCnt: Integer): string;
var i, j: Integer;
    Buf: string;
begin
  RecCnt := 0; ColCnt := 0;
  Buf := '';
  for i:=0 to FColumnCount-1 do begin
    Buf := Buf + ListView.Column[i].Caption + #9;
    Inc(ColCnt);
  end;
  Buf := Buf + #13#10;
  for i:=0 to ListView.Items.Count-1 do begin
    for j:=0 to FColumnCount-1 do
      if j = 0 then Buf := Buf + Trim(ListView.Items[i].Caption) + #9
      else Buf := Buf + Trim(ListView.Items[i].SubItems[j-1]) + #9;
    Buf := Buf + #13#10;
    Inc(RecCnt);
  end;
  Result := Buf;
end;


procedure TfrmBalance.SetMultilingual;
begin
  self.Caption           := GetMultiLingalMsg(90021,'Inventory Query');
  pnlBalance.Caption     := GetMultiLingalMsg(90022,'Material Balance List');
  btnReView.Caption      := GetMultiLingalMsg(90023,'All Balance');
  btnFilterQuery.Caption := GetMultiLingalMsg(90024,'Banlance Filter');
  btnClose.Caption       := GetMultiLingalMsg(90025,'Exit');
  chkboxchkQty.Caption   := GetMultiLingalMsg(90026,'Inventory Check Report');
  chkPCS.Caption         := GetMultiLingalMsg(90274,'Weight TO PCS');
end;

end.

⌨️ 快捷键说明

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