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

📄 tuneinvqty.pas

📁 文件包含程序源原文件
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  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 + -