?? invquery.pas
字號:
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 + -