📄 tuneinvqty.pas
字号:
DEC(FNewRecid);
lcNewP^.REC_ID := FNewRecid;
if lcNewP^.DATE <= 2 then lcNewP^.DATE := NOW;
iPaper := strToIntDef(frmMain.IniData.PaperNo,20);
StrPCopy(lcNewP^.PAPERNO, dm_Inventory.Get_PaperNO(lcp^.SUP_CD, lcp^.DATE, iPaper,3));
//StrPCopy(lcNewP^.PaperNo,dm_inventory.Get_AutoPaperNo('TUNE PAPER NO'));
lcNewP^.USE_GUAGE := '';
lcNewP^.USE_QUANTITY := 0;
lcNewP^.USE_AMOUNT := 0;
SetData(lcNewP);
AddTab(lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.STK_ID, LongInt(@View.STK_ID)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.ISS_PAPERNO,LongInt(@View.ISS_PAPERNO)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.inout_id, LongInt(@View.inout_id)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.input_empid, LongInt(@View.input_empid)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.PAPERNO,LongInt(@View.PAPERNO)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.KIND, LongInt(@View.KIND)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.DATE, LongInt(@View.DATE)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.MAT_RID,LongInt(@View.MAT_RID)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.MAT_NM, LongInt(@View.MAT_NM)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.GUAGE_ID, LongInt(@View.GUAGE_ID)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.QUANTITY, LongInt(@View.QUANTITY)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.UNT_PRICE,LongInt(@View.UNT_PRICE)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.TTL_PRICE,LongInt(@View.TTL_PRICE)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.USE_GUAGE,LongInt(@View.USE_GUAGE)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.USE_QUANTITY, LongInt(@View.USE_QUANTITY)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.USE_AMOUNT, LongInt(@View.USE_AMOUNT)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.SUP_CD, LongInt(@View.SUP_CD)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.MAK_CD, LongInt(@View.MAK_CD)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.MAK_PRICE,LongInt(@View.MAK_PRICE)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.ODR_RID,LongInt(@View.ODR_RID)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.PAT_RID,LongInt(@View.PAT_RID)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.SEQUAL_NO,LongInt(@View.SEQUAL_NO)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.HAT_RID,LongInt(@View.HAT_RID)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.HAT_CODE,LongInt(@View.HAT_CODE)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.INVOICE_NO,LongInt(@View.INVOICE_NO)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.NOTE, LongInt(@View.NOTE)-LongInt(@View), 0, lcNewP);
{
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.recieve_empid,
LongInt(@View.recieve_empid)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.invoice_no,
LongInt(@View.invoice_no)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.ODR_RID,
LongInt(@View.ODR_RID)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.PAT_RID,
LongInt(@View.PAT_RID)-LongInt(@View), 0, lcNewP);
SetUpdateList(lcNewP^.REC_ID, @lcNewP^.HAT_RID,
LongInt(@View.HAT_RID)-LongInt(@View), 0, lcNewP);
}
end;
{**********************************************************************************}
{**********************************************************************************}
procedure TfrmTuneInvQty.SetNew(Index: Integer);
var lcP: PINVENTORY;
View: TINVENTORY;
iPaper: integer;
begin
New(lcP);
ZeroMemory(lcP, SizeOf(TINVENTORY));
Dec(FNewRecid);
lcP^.REC_ID := FNewRecid;
lcp^.KIND := 3;
if lcp^.DATE <= 2 then lcp^.DATE := NOW;
lcp^.USE_GUAGE := '';
lcp^.USE_QUANTITY := 0;
lcp^.USE_AMOUNT := 0;
lcp^.MAK_PRICE := 0;
strPCopy(lcp^.STK_ID, default_stkid);
iPaper := strToIntDef(frmMain.IniData.PaperNo,20);
StrPCopy(lcp^.PAPERNO, dm_Inventory.Get_PaperNO(lcp^.SUP_CD, lcp^.DATE, iPaper,3));
SetUpdateList(lcP^.REC_ID, @lcP^.STK_ID, LongInt(@View.STK_ID)-LongInt(@View), 0, lcP);
SetUpdateList(lcP^.REC_ID, @lcP^.KIND, LongInt(@View.KIND)-LongInt(@View), 0, lcP);
SetUpdateList(lcP^.REC_ID, @lcP^.DATE, LongInt(@View.DATE)-LongInt(@View), 0, lcP);
SetUpdateList(lcP^.REC_ID, @lcP^.PAPERNO,LongInt(@View.PAPERNO)-LongInt(@View), 0, lcP);
SetUpdateList(lcP^.REC_ID, @lcP^.USE_GUAGE, LongInt(@View.USE_GUAGE)-LongInt(@View), 0, lcP);
SetUpdateList(lcP^.REC_ID, @lcP^.PAPERNO, LongInt(@View.USE_QUANTITY)-LongInt(@View), 0, lcP);
SetUpdateList(lcP^.REC_ID, @lcP^.USE_AMOUNT,LongInt(@View.USE_AMOUNT)-LongInt(@View), 0, lcP);
SetUpdateList(lcP^.REC_ID, @lcP^.MAK_PRICE, LongInt(@View.MAK_PRICE)-LongInt(@View), 0, lcP);
SetData(lcP);
if Index < 0 then AddTab(lcP)
else InsertTab(lcP, Index);
end;
function TfrmTuneInvQty.RECExists(RecID: LongInt): Boolean;
var i: Integer;
WObj: Pointer;
lcP: PINVENTORY;
begin
Result := False;
for i:=0 to TabControl.Tabs.Count-1 do begin
WObj := TabControl.Tabs.Objects[i];
lcP := WObj;
if lcP^.REC_ID = RecID then begin
Result := True;
Exit;
end;
end;
end;
{**********************************************************************************}
function TfrmTuneInvQty.SetInventoryCnt(rec_id,mat_rec_id,guage_id: LongInt; stk_id: string; DT: TDateTime; var Cnt: Double): Double;
var List: TList;
i: Integer;
lcP: PBalance;
begin
Screen.Cursor := crSqlWait;
Cnt := 0;
Result := 0;
List := TList.Create;
dm_inventory.ReadInventory3(FList, mat_rec_id, stk_id);
SetBalanceList(rec_id, List, DT);
for i:=0 to List.Count-1 do begin
lcP := List[i];
if ((lcP^.CODE = mat_rec_id) and (lcp^.GUAGE_ID=guage_id) and(lcp^.STK_ID=stk_id)) then begin
Cnt := lcP^.QUANTITY;
Result := lcP^.U_PRICE;
Break;
end;
end;
for i:=0 to List.Count-1 do Dispose(List[i]);
List.Clear;
List.Free;
Screen.Cursor := crDefault;
end;
procedure TfrmTuneInvQty.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;
//-- if Inventory Quantity < Safety Quantity
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;
{**********************************************************************************}
function TfrmTuneInvQty.GetTabCaption(Item: Pointer): string;
var lcP: PINVENTORY;
begin
lcP := Item;
Result := dm_Inventory.GetMaterialCode(lcP^.MAT_RID);
end;
procedure TfrmTuneInvQty.SetKomoku(Item: Pointer);
begin
Selected := nil;
if Item <> nil then begin
SetData(Item);
Selected := Item;
end else SetNull;
end;
{**********************************************************************************}
{**********************************************************************************}
procedure TfrmTuneInvQty.btnNewClick(Sender: TObject);
begin
if Selected <> nil then
if ErrorCheck(Selected) = 0 then begin
UpdateCheck;
case MessageDlg('确定要复制内容到新入库数据以简化编辑吗!',
mtConfirmation, mbYesNoCancel, 0) of
mrYes: SetCopy;
mrNo: SetNew(-1);
mrCancel: edtStkID.SetFocus;
end;
end else edtStkID.SetFocus;
end;
procedure TfrmTuneInvQty.ckbNewClick(Sender: TObject);
begin
inherited;
edtStkID.SetFocus;
end;
procedure TfrmTuneInvQty.btnSaveClick(Sender: TObject);
var UpdateListList, List: TList;
begin
UpdateListList := GetUpdateListList;
if (UpdateListList.Count>0)then begin
List := UpdateListList[0];
if (List.Count=0) then Exit;
if ErrorCheck(Selected) <> 0 then Exit;
UpdateProc(UpdateListList);
TabControl.Tabs.Clear;
SetNew(-1);
if TabControl.Tabs.Count > 0 then SelectTabIndex(0);
Read_IOChangedList;
end
else begin
TabControl.Tabs.Clear;
SetNew(-1);
if TabControl.Tabs.Count > 0 then SelectTabIndex(0);
Read_IOChangedList;
end;
end;
procedure TfrmTuneInvQty.btnDeleteClick(Sender: TObject);
var lcP: PINVENTORY;
begin
if Selected <> nil then begin
if MessageDlg('你已选中一笔记录编辑/取消本次编辑的内容吗!',
mtConfirmation, [mbYes, mbNo], 0) = mrNo then begin
SetCtrlFocusFromIndex(0);
Exit;
end;
lcP := Selected;
if lcP^.REC_ID > 0 then dm_inventory.DeleteDatabase('inventory_sheet', lcP^.REC_ID);
FreeUpdateList(Selected);
DeleteTab(Selected, False);
if TabControl.TabIndex = -1 then Close;
end;
end;
procedure TfrmTuneInvQty.btnExcelClick(Sender: TObject);
begin
inherited;
//
end;
procedure TfrmTuneInvQty.btnExitClick(Sender: TObject);
begin
inherited;
close;
end;
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
procedure TfrmTuneInvQty.Read_IOChangedList;
begin
dm_Inventory.Read_IOHistory(FMatIOList,trim(edtStkID.Text),3,sFDate,sEDate);
Set_QueryedList(FQueryList);
CreateTabs_ByGroup(rdoGroupBy.ItemIndex,FQueryList);
tabsGroupChange(Self);
end;
Function TfrmTuneInvQty.Set_QueryedList(sList: TList): TList;
function SetQryCheck(lcP: PINVENTORY): Boolean;
var i: Integer;
WDate: array[0..1] of TDateTime;
begin
Result := True;
//--
WDate[0] := strtodatetime(formatdatetime('yyyy/mm/dd 00:00',Now));
WDate[1] := strtodatetime(formatdatetime('yyyy/mm/dd 23:59',Now));
if ((WDate[0] > 2) and (WDate[0] > lcP^.DATE))or
((WDate[1] > 2) and (WDate[1] < lcP^.DATE))then begin
Result := False;
Exit;
end;
if (lcp^.KIND <> 3) then begin
result := false;
exit;
end;
end;
var
ix: integer;
lcpA: PINVENTORY;
begin
sList.Clear;
for ix := 0 to FMatIOList.Count - 1 do
begin
lcpA := FMatIOList[ix];
if not SetQryCheck(lcpA) then continue;
sList.Add(lcpA);
end;
result := sList
end;
procedure TfrmTuneInvQty.CreateTabs_ByGroup(rdoIndex: integer; sList: TList);
var tmpTabIndex: integer;
i,j: integer;
lcp: PINVENTORY;
tmpGroupTitle: variant;
iGroupFind: Boolean;
begin
tmpTabIndex := 0;
tabsGroup.Tabs.Clear;
for i := 0 to sList.Count - 1 do
begin
lcp := sList[i];
if lcp = nil then continue;
case rdoIndex of
0: tmpGroupTitle := strPas(lcp^.STK_ID);
1: tmpGroupTitle := strPas(lcp^.paperno);
2: tmpGroupTitle := formatDatetime('yy/mm/dd',lcp^.DATE);
3: tmpGroupTitle := dm_inventory.GetMaterialCode(lcp^.MAT_RID);
4: tmpGroupTitle := dm_inventory.Get_EmpName(lcp^.INPUT_EMPID);
5: tmpGroupTitle := dm_inventory.Get_IOIDName(lcp^.INOUT_ID,4);
6: tmpGroupTitle := dm_Inventory.GetShigenName(lcp^.SUP_CD);
7: tmpGroupTitle := 'ALL';
end;
//-- 判断是否有找到抬头信息
iGroupFind := false;
for j := 0 to tmpTabIndex - 1 do
begin
try
if tmpGroupTitle = FGroupValue[j] then begin
iGroupFind := true;
break;
end;
except
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -