2009-05-22 4 views
1

저는 3 층 창고 모델링을 담당합니다. 여기에는 문서 상자가 저장됩니다. 방정식에 행, 열 및 선반이 있습니다. 또한이 지그재그 데이터를 어떻게 모델링 할 수 있습니까?

는 :

일부 층/행/열/선반 조합 가기 2 개 박스 일부 3.

일부 행 열의 양 정상 없다.

그들은 (한 번에 20) 인쇄 라벨 자동 증가에 내 응용 프로그램 사용자가 그들을 검사로 상자가 어디로 이야기를합니다. 그래서 1 f1r1c1s1b2 인쇄 할 상자 2 f1r1c1s1b1 인쇄 할 스캔 상자. .. f3r26c26b3

나는 모든 가능한 콤보로 채우고 예외 데이터를 빼는 MSSql 데이터베이스를 만들려고했다. (vb.net2005을 사용하여 채우기 작업 수행) smalldatetime 또는 테이블의 타임 스탬프 열을 기반으로 spotFilled 열 집합이없는 다음 개체를 잡습니다.

이 방법이 유용할까요? 거기에 더 좋은 방법이 있습니까?

(다음 단계는 2 명의 사용자가 동일한 바닥/행/열에서 서로 부딪히지 않고 상자를 스캔 할 수 있도록 한 번에 20 개를 차단합니다. 대부분의 바닥/행/열/선반 콤보는 21 개의 상자, 1 bump는 아마 괜찮을 것입니다. 또한 상자를 대략 동일한 순서로 받기를 원합니다)

MSSQL 서버와 VS2005는 이미 내 작업 환경에 있으므로 가장 익숙한 도구입니다.

답변

1

전체 위치 벡터를 간단한 정수 인덱스에 매핑 할 수 있도록 간단한 스키마가 있다고 가정합니다. 예를 들어, 항상 3 개의 상자를 허용하는 첫 번째 열인 경우 f3r26c26s1b3 벡터를 정수로 매핑 할 수 있습니다.

그렇지 않으면 최상의 솔루션은 각각의 모든 조합을 저장하지 않는 것입니다. 대신 실제로 각 선반에 3 개의 상자를 저장하고 세 번째 상자의 "spotFilled"를 더미 값 (-1 또는 그 이상, NULL = 채워지지 않은 것)으로 설정한다고 가정합니다. 이것은 이것을 보통 직사각형 배열로 취급 할 것입니다. 배열이 거의 규칙적이기 때문에 작동합니다.하지만 실제 IT 부서는 예외에 대한 예외를 인식하는 것입니다.

+0

, 나는 가능한 다음 상자 자리를 잡아, 또는 해제 차단에 대해 어떻게 갈 것 한 번에 20 개의 연속 된 공백이있어 다른 사람이 충돌하지 않습니다. 나는 신원 열을 가지고 있고 spotfilled이 단일 대기열에 대해 null 인 min (id)을 얻으려고 시도하고있었습니다. – Maslow

+0

아마도 spotfilled가 null 인 상자에서 상위 20 개의 항목을 선택하십시오. 다음으로 하단 20을 선택하십시오. (spotfilled가 null 인 상자에서 상단 40 * 선택) ID는 – Maslow

+0

입니다. 둘 다 답을 찾지 못했지만이 항목은 최고 – Maslow

1

일반 테이블이 비틀린 것처럼 보이지 않는 이유 (columns : Floor, Row , 칼럼, 셀프, 박스); 데이터에 적절한 범위를 두어 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