Как я могу смоделировать эти неровные данные?

StackOverflow https://stackoverflow.com/questions/898069

  •  23-08-2019
  •  | 
  •  

Вопрос

Я отвечаю за моделирование 3-этажного склада, где будут храниться коробки с документами.В уравнении есть строки, столбцы и полки.

в дополнение:

в некоторых комбинациях этаж / ряд / колонна / полка хранятся 2 коробки, в некоторых - 3.

в некоторых строках нет нормального количества столбцов.

Они хотят, чтобы мое приложение автоматически увеличивалось для печати этикеток (по 20 за раз), указывающих, куда помещаются коробки, когда пользователь их сканирует.Таким образом, в поле 1 при сканировании будет выведен f1r1c1s1b1 в поле 2 будет выведен f1r1c1s1b2 ...f3r26c26b3

Я подумывал о создании базы данных MSSql, заполнении ее всеми возможными комбинациями и вычитании данных об исключениях.(используя vb.net2005 для создания циклов для заполнения) затем, основываясь на smalldatetime или, возможно, на столбце timestamp в таблице, просто возьмите следующий столбец, в котором нет набора столбцов spotFilled.

сработает ли это?есть ли лучший способ?

(следующий шаг - заблокировать 20 ящиков за раз, чтобы 2 пользователя могли сканировать коробки, не сталкиваясь друг с другом на одном этаже / строке / столбце, большинство комбинаций этаж / строка / столбец / полка хранят 21 коробку, 1 удар, вероятно, будет в порядке.также они хотели бы, чтобы коробки были получены примерно в том же порядке)

MSSQL server и VS2005 уже присутствуют в моей рабочей среде, так что это инструменты, с которыми я больше всего знаком.

Это было полезно?

Решение

Я предполагаю, что не существует тривиальной схемы, чтобы вы могли сопоставить весь вектор местоположения с простым целочисленным индексом?Например, если это всегда первый столбец, который допускает 3 поля, вы все равно можете сопоставить вектор f3r26c26s1b3 с целым числом.

В противном случае лучшим решением, вероятно, будет не хранить все без исключения комбинации.Вместо этого предположим, что на каждой полке на самом деле хранятся 3 коробки, и установите для параметра "Заполнено" третьей коробки фиктивное значение (-1 или около того;что угодно, кроме NULL=незаполненный).Это позволит вам рассматривать это как обычный прямоугольный массив.Это работает только потому, что ваш массив почти обычный, но в реальном мире все дело в распознавании исключений из исключений

Другие советы

Почему бы просто не создать обычную таблицу, как если бы она была без зазубрин (столбцы:Пол, Ряд, Колонна, Полка, Коробка);установите соответствующие границы для данных, которые сведут к минимуму размер базы данных thing, а затем просто сохраните поддельные поля в поддельных местах.

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top