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

📄 othermatout.pas

📁 文件包含程序源原文件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 10;
  Column.Caption := GetMultiLingalMsg(90081, 'Out Guage');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 6;
  Column.Caption := GetMultiLingalMsg(90032, 'Unit Name');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 7;
  Column.Caption := GetMultiLingalMsg(90033, 'Unit Price');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 7;
  Column.Caption := GetMultiLingalMsg(90082, 'out Quantity');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 9;
  Column.Caption := GetMultiLingalMsg(90083, 'Out Amount');
  Inc(FColCnt);

  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 10;
  Column.Caption := GetMultiLingalMsg(90084, 'Use Guage');
  Inc(FColCnt);

  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 7;
  Column.Caption := GetMultiLingalMsg(90085, 'Use Quantity');
  Inc(FColCnt);

  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 9;
  Column.Caption := GetMultiLingalMsg(90086, 'Use Amount');
  Inc(FColCnt);

  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 8;
  Column.Caption := GetMultiLingalMsg(90057, 'Suplier');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 8;
  Column.Caption := GetMultiLingalMsg(90058, 'Maker');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 10;
  Column.Caption := GetMultiLingalMsg(90064, 'Part Code');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 8;
  Column.Caption := GetMultiLingalMsg(90052, 'Out Date');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 12;
  Column.Caption := GetMultiLingalMsg(90239,'Out Paper');
  Inc(FColCnt);
  //--
  Column         := sListView.Columns.Add;
  Column.Width   := sListView.Font.Size * 16;
  Column.Caption := GetMultiLingalMsg(90065, 'Remarks');
  Inc(FColCnt);
end;

procedure TfrmOtherMatOut.MakeItemCaption(Item: TListItem);
  //-- Init int value and '' to 0 value
  function IntToStrNull(INum: Integer): string;
  begin
    if INum = 0 then Result := ''
    else Result := IntToStr(INum);
  end;
var lcP: PINVENTORY;
begin
  if Item = nil then Exit;
  if Item.Data = nil then Exit;
  lcP := Item.Data;
  Item.ImageIndex := lcP^.KIND;

  Item.Caption      := lcp^.STK_ID;
  Item.SubItems[00] := dm_inventory.GetOrderNo(lcp^.ODR_RID);
  Item.SubItems[01] := dm_inventory.GetMaterialCode(lcP^.MAT_RID);
  Item.SubItems[02] := lcP^.MAT_NM;
  Item.SubItems[03] := dm_inventory.Get_GuageName(lcP^.MAT_RID,lcp^.GUAGE_ID);
  Item.SubItems[04] := dm_inventory.GetUnitTypeName(lcP^.MAT_RID);
  Item.SubItems[05] := FormatFloat('#,##0.00',abs(RoundTo(lcP^.UNT_PRICE,-2)));
  Item.SubItems[06] := FormatFloat('#,##0.00',abs(RoundTo(lcP^.QUANTITY,-2)));
  Item.SubItems[07] := FormatFloat('#,##0.00',abs(UserDecimalDefine(lcP^.TTL_PRICE,2)));
  Item.SubItems[08] := lcp^.USE_GUAGE;
  Item.SubItems[09] := FormatFloat('#,##0.00',abs(RoundTo(lcP^.USE_QUANTITY,-2)));
  Item.SubItems[10] := FormatFloat('#,##0.00',abs(RoundTo(lcP^.USE_AMOUNT,-2)));
  Item.SubItems[11] := dm_inventory.GetShigenName(lcp^.SUP_CD);
  Item.SubItems[12] := dm_inventory.GetShigenName(lcp^.MAK_CD);
  Item.SubItems[13] := dm_inventory.GetPartCode(lcp^.ODR_RID,lcp^.PAT_RID);
  Item.SubItems[14] := formatDatetime('yy/mm/dd',lcp^.DATE);
  Item.SubItems[15] := lcp^.PAPERNO;
  Item.SubItems[16] := lcp^.NOTE;
end;


procedure TfrmOtherMatOut.rdoGroupByClick(Sender: TObject);
begin
  Read_IOChangedList;
end;

procedure TfrmOtherMatOut.tabsGroupChange(Sender: TObject);
begin
  inherited;
  dm_Inventory.Read_IOHistory(FMatIOList,trim(edtStkID.Text),1,sFDate,sEDate);
  Set_QueryedList(FQueryList);
  Set_QryList_FromTabs(TabsGroup.TabIndex, FQueryList);
  SetListView;

  if ListViewMatIN.Items.Count>0 then begin
    ListViewMatIN.ToPItem.Selected := False;
    ListViewMatIN.ToPItem.Selected := True;
  end;
end;



procedure TfrmOtherMatOut.cbxStkChange(Sender: TObject);
begin
  inherited;
  edtStkID.Text   := Get_PosBeforeStr(cbxStk.Text,'_');
  edtStkName.Text := Get_PosAfterStr(cbxStk.Text,'_');
  edtStkID.SetFocus;
end;

procedure TfrmOtherMatOut.cbxOutGuageDropDown(Sender: TObject);
begin
  inherited;
  dm_Inventory.Read_GuageInfoToCbx(edtMatCode,cbxOutGuage);
end;

procedure TfrmOtherMatOut.cbxOutGuageChange(Sender: TObject);
var lcp: PInventory;
    View: TInventory;
begin
  inherited;
  lcp := Selected;
  edtIssGuageID.Value  := StrToInt(Get_PosBeforeStr(cbxOutGuage.Text,'_'));
  edtIssGuageName.Text := Get_PosAfterStr(cbxOutGuage.Text,'_');
  edtIssGuageID.SetFocus;
  lcp^.GUAGE_ID := StrToIntDef(edtIssGuageID.Text,0);
  SetUpdateList(lcP^.REC_ID, @lcP^.GUAGE_ID, LongInt(@View.GUAGE_ID)-LongInt(@View), 0, lcP);
  //lcp^.USE_GUAGE := lcp^.GUAGE_ID;
  SetUpdateList(lcP^.REC_ID, @lcP^.USE_GUAGE, LongInt(@View.USE_GUAGE)-LongInt(@View), 0, lcP);
end;

procedure TfrmOtherMatOut.cbxMatOutDropDown(Sender: TObject);
begin
  inherited;
  dm_inventory.Read_IOIDInfo_ToCbx(cbxMatOut,2);
end;

procedure TfrmOtherMatOut.cbxMatOutChange(Sender: TObject);
var lcp: PInventory;
    View: TInventory;
begin
  inherited;
  lcp := Selected;
  edtMatOutID.Text   := Get_PosBeforeStr(cbxMatOut.Text,'_');
  edtOutIDName.Text  := Get_PosAfterStr(cbxMatOut.Text,'_');
  edtMatOutID.SetFocus;
  strPCopy(lcp^.INOUT_ID,trim(edtMatOutID.Text));
  SetUpdateList(lcP^.REC_ID, @lcP^.INOUT_ID, LongInt(@View.INOUT_ID)-LongInt(@View), 0, lcP);
end;

procedure TfrmOtherMatOut.cbxRecDropDown(Sender: TObject);
begin
  inherited;
  dm_inventory.Read_EmpInfoToCbx(cbxRec);
end;

procedure TfrmOtherMatOut.cbxRecChange(Sender: TObject);
var lcp: PInventory;
    View: TInventory;
begin
  inherited;
  lcp := Selected;
  edtRecEmpID.Text    := Get_PosBeforeStr(cbxRec.Text,'_');
  edtRecEmpName.Text  := Get_PosAfterStr(cbxRec.Text,'_');
  edtRecEmpID.SetFocus;
  strPCopy(lcp^.RECIEVE_EMPID,trim(edtRecEmpID.Text));
  SetUpdateList(lcP^.REC_ID, @lcP^.RECIEVE_EMPID, LongInt(@View.RECIEVE_EMPID)-LongInt(@View), 0, lcP);
end;

procedure TfrmOtherMatOut.cbxInputDropDown(Sender: TObject);
begin
  inherited;
  dm_inventory.Read_EmpInfoToCbx(cbxInput);
end;

procedure TfrmOtherMatOut.cbxInputChange(Sender: TObject);
var lcp: PInventory;
    View: TInventory;
begin
  inherited;
  lcp := Selected;
  edtInputEmpID.Text    := Get_PosBeforeStr(cbxInput.Text,'_');
  edtInputEmpName.Text  := Get_PosAfterStr(cbxInput.Text,'_');
  edtInputEmpID.SetFocus;
  strPCopy(lcp^.INPUT_EMPID,trim(edtInputEmpID.Text));
  SetUpdateList(lcP^.REC_ID, @lcP^.INPUT_EMPID, LongInt(@View.INPUT_EMPID)-LongInt(@View), 0, lcP);
end;


function  TfrmOtherMatOut.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 TfrmOtherMatOut.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;

          //-- 判断当前存量是否小于安全存量
          //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;

          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  TfrmOtherMatOut.SetInventoryQty(rec_id,mat_rec_id,guage_id: LongInt; stk_id: string; DT: TDateTime; var Cnt: Double; iMode: Integer): Double;
var List: TList;
    i: Integer;
    lcP: PBalance;
begin
  Screen.Cursor := crSqlWait;
  Cnt    := 0;
  Result := 0;
  List := TList.Create;
  dm_inventory.ReadInventory3(FListInvUPrice, mat_rec_id, stk_id);

  SetInvUnitPrice(rec_id, List, DT, iMode);
  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  TfrmOtherMatOut.SetInvUnitPrice(RID: LongInt; List: TList; DT: TDateTime; iMode: Integer);
var i, j, UPriceType:

⌨️ 快捷键说明

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