2009-05-22 43 views
1

我負責爲3層倉庫建模,其中將存儲文件箱。等式中有行,列和架子。如何模擬這種鋸齒形數據?

除了:

一些地板/行/列/擱板組合商店2盒,一些3.

一些行不具有列的正常量。

他們希望我的應用程序自動遞增打印標籤(20一次),告訴那裏的箱子去當用戶掃描他們。 所以箱1掃描將打印f1r1c1s1b1 箱2將打印f1r1c1s1b2 。 .. f3r26c26b3

我正在考慮建立一個MSSQL數據庫,用所有可能的組合和填充它減去例外數據。 (使用vb.net2005 for循環做填充) 然後根據table上的smalldatetime或者timestamp列,抓住沒有spotFilled列集的下一個列。

這項工作?有沒有更好的辦法?

(下一步是一次關閉20個,這樣2個用戶就可以在同一樓層/行/列上互相碰撞而不會碰到箱子,大多數樓層/行/列/貨架組合存儲21個箱子, 1凹凸可能會好,他們也希望收到大致相同的訂單)

MSSQL服務器和VS2005已經出現在我的工作環境中,所以這些是我最熟悉的工具。

回答

1

我假設沒有不重要的模式,因此您可以將整個位置矢量映射到一個簡單的整數索引?例如,如果它始終是允許3個框的第一列,則仍然可以將f3r26c26s1b3向量映射爲整數。

否則,最好的解決方案可能不是存儲每個組合。相反,假設每個貨架實際上存儲了3個箱子,並將第三個箱子的「spotFilled」設置爲虛擬值(-1左右;除NULL之外的任何其他值都未填充)。這將把你看作一個普通的矩形陣列。它只適用於你的數組幾乎是常規的,但嘿 - 真實世界的IT全都是關於識別例外的例外

+0

所以飼養的所有組合和僞估價出異常之後,我怎麼會去抓住下一個可用的箱點,或堵住一次有20個連續的空間,所以其他人的工作不會相互碰撞?我正在考慮擁有一個標識列,並試圖獲取單個隊列中填充爲空的min(id)。 – Maslow 2009-05-22 15:34:17

1

爲什麼不只是有一個正常的表,就好像它是非鋸齒狀的(列:Floor,Row ,Column,Shelf,Box);在數據上設置適當的界限,以儘量減少事物db的大小,然後將假箱子存儲在假點中。

0
Public Function SecondFloor() As List(Of List(Of bDatafield)) 
    Dim result As New List(Of List(Of bDatafield)) 
    For Aisle As Short = 1 To MaxAisle 
     For Column As Short = 1 To MaxColumn 
      If Not SecondFloorExceptions(Aisle, Column) Then 
       For shelf As Short = 1 To MaxShelf 
        For Position As Short = 1 To MaxPositions 
         Dim Location As New List(Of bDatafield) 
         Location.Add(MakeNewField("Floor", Floor2)) 
         Location.Add(MakeNewField("Aisle", Aisle.ToString)) 
         Location.Add(MakeNewField("Column", Column.ToString)) 
         Location.Add(MakeNewField("Shelf", shelf.ToString)) 
         Location.Add(MakeNewField("Position", Position.ToString)) 
         result.Add(Location) 
        Next 
       Next 

      End If 
     Next 
    Next 
    Return result 
End Function 

Public Function MakeNewField(ByVal column As String, ByVal value As String) As bDatafield 
    MakeNewField = New bDatafield(column, New Nullable(Of Integer)) 
    MakeNewField.SqlColumnTransformer = New TransformField(AddressOf MapSqlColumn) 
    MakeNewField.Value = value 
End Function 

Public Function SecondFloorExceptions(ByVal Aisle As Short, ByVal column As Short) As Boolean 
    If column > MinAisleLength Then 
    ElseIf column > MaxColumn Then 
     SecondFloorExceptions = True 
    Else 
     Select Case Aisle 
      Case 2 ''//Items with 39 
       If column > 39 Then SecondFloorExceptions = True 
      Case 3 To 10, 26 To 30, 32 To 38 ''//Items with 41 
       If column > 41 Then SecondFloorExceptions = True 
      Case 11 ''//Items with 32 
       If column > 32 Then SecondFloorExceptions = True 
      Case 12, 13 ''//Items with 38 
       If column > 38 Then SecondFloorExceptions = True 
      Case 14 To 24 ''//Items with 36 
       If column > 36 Then SecondFloorExceptions = True 
      Case 25, 31 ''//Item with 35 
       If column > 35 Then SecondFloorExceptions = True 

     End Select 
    End If 
End Function 

然後,我傾倒入數據庫:

Public Sub InsertLocationRow(ByVal cn As bInheritance.bCnNativeMs _ 
     , ByVal data As List(Of bDatafield)) 
    Dim leftSide As String = "insert into " + My.Settings.ProjectSchema + "." + My.Settings.tblLocations + "(" 
    Dim rightSide As String = " values (" 
    Dim first As Boolean = True 
    For index As Integer = 0 To data.Count - 1 
     If data(index).isValid Then 
      If Not first Then 
       leftSide += "," 
       rightSide += "," 
      End If 
      leftSide += data(index).SqlColumn() 
      rightSide += BLib.AddQSafe(data(index).Value, True) 
      first = False 
     End If 

    Next 
    leftSide += ")" 
    rightSide += ")" 

    cn.ExeNonQuery(leftSide + rightSide) 
End Sub