2015-04-17 53 views
-1

我必須表明我們多少書爲每個訂單號(由PO號排序)名單象下面這樣:如何劃分/分發書箱

**LIST 1:** 

**PO No**  **TOTAL BOOKS** 
PO-0001    12 
PO-0002    15 
PO-0003    26 

現在我想發佈/將這些書分成盒子,每盒最多可獲得10本書。像下面的列表:

LIST 2: 

**BOX NO**  **BOOKS**  **PO NO** 
    0001   BOOK 1~10  PO-0001 
    0002   BOOK 11~12  PO-0001 
    0002   BOOK 1~8   PO-0002 
    0003   BOOK 9~15  PO-0002 
    0003   BOOK 1~3   PO-0003 
    0004   BOOK 4~13  PO-0003 
    0005   BOOK 14~23  PO-0003 

如何通過查詢或編碼自動生成列表1中的列表2?

+0

爲什麼Box No 0002 Book 1〜8 PO-0002'沒有書本'1-10'? –

+0

你是對的我犯了一個錯誤(我很着急),我必須改變list2 – masoud

+0

對不起,列表2是好的,因爲po-0001的全部書籍是12本書,當我們把10本書放在箱子0001中時,我們有從12本書中剩下2本書,所以我們把這兩本書(第11〜12冊)放在0002 +第1〜8冊po-0002 – masoud

回答

0

一個人解決了我的問題,所以關閉我的問題我想補充的答案如下:

創建新表「PACKINGLIST」包含字段「BoxNo」(龍),「PONO」(文本),「 TotalBooks「(長),」StartNo「(長)和」EndNo「(長)。主鍵開啓(BoxNo,PONo)。

然後下面的代碼應該給你結果。

Public Sub PackBooks() 

Dim db As DAO.Database 
Dim bk As DAO.Recordset ' Books 
Dim qdf As DAO.QueryDef 

Dim BoxNo  As Long ' No of box currently being packed 
Dim BooksInBox As Long ' How many books are already in the box that is currently being packed 
Dim BooksPacked As Long ' How many books are already packed for the current PONo 
Dim Remaining As Long ' How many books remain to be packed for the current PONo 
Dim BooksToPack As Long ' How many books are to be packed for the current PONo into the current box 
Dim StartNo  As Long 
Dim EndNo  As Long 

Set db = CurrentDb 
Set qdf = db.CreateQueryDef("", "Delete * From PackingList") ' start with an empty packing list 
qdf.Execute dbFailOnError 
qdf.Close 
Set bk = db.OpenRecordset("Select * From Books Order By PONo") 
If Not bk.EOF Then 
BoxNo = 1 
BooksInBox = 0 

Do While Not bk.EOF 
    BooksPacked = 0 
    EndNo = 0 

    Do While BooksPacked < bk!TotalBooks 
    Remaining = bk!TotalBooks - BooksPacked 
    If Remaining >= 10 - BooksInBox Then 
     BooksToPack = 10 - BooksInBox 
    Else 
     BooksToPack = Remaining 
    End If 
    StartNo = EndNo + 1 
    EndNo = StartNo + BooksToPack - 1 

    Set qdf = db.CreateQueryDef("", " Insert Into PackingList (BoxNo, PONo, TotalBooks, StartNo, EndNo) " & _ 
            " Values (" & BoxNo & ", '" & bk!PONo & "', " & bk!TotalBooks & ", " & StartNo & ", " & EndNo & ")") 
    qdf.Execute dbFailOnError 
    qdf.Close 

    BooksPacked = BooksPacked + BooksToPack 
    BooksInBox = BooksInBox + BooksToPack 
    If BooksInBox = 10 Then 
     BoxNo = BoxNo + 1 
     BooksInBox = 0 
     End If 
    Loop 
    bk.MoveNext 
Loop 
End If 

Set qdf = Nothing 
    bk.Close 
    Set bk = Nothing 
    db.Close 
    Set db = Nothing 

End Sub