VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

裝箱單 - 箱單檢查問題

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
catjoke



註冊時間: 2003-06-16
文章: 175
來自: 香港

第 1 樓

發表發表於: 星期五 一月 02, 2004 3:50 pm    文章主題: 裝箱單 - 箱單檢查問題 引言回覆

訂單明細中, 有一欄是 箱號: CTN_NOS C(30)

例子:
ITEM CTN_NOS
產品A 003,005-008
產品B 004,007-012
產品C 014,016,020-030
....

你也知道, 裝箱是 工人做的, 如果一張裝箱單內有很多資料, 箱號可能會有 錯亂...
就舉上面的例子, 如果用程式去 檢查, 要得出以下的結果:

箱號 範圍: 003-014,016,020-030
重疊 箱號: 007-008
缺欠 箱號: 013,015,017-019

以便 操作員 可以仔細檢查有問題的箱號, 以免遺漏 箱號..
這麼多 錯亂的資料, 只可能由電腦去尋找 錯誤, 怎樣寫好呢!?

這是一個很實際, 很實用的問題, 請幫幫忙~

_________________
喵喎~ 貓當然是 "茅" 的嘛! ^0^;
回頂端
檢視會員個人資料 發送私人訊息
朱育興



註冊時間: 2003-08-25
文章: 661
來自: 台中市大里區

第 2 樓

發表發表於: 星期五 一月 02, 2004 11:41 pm    文章主題: 引言回覆

* 為求排版美觀,空白為全形,若要測試,請轉為半形後再測試

* 條件評估及定出規則
* 1.假設你的訂單明細之 Alias 為 Detail
* 2.假設箱號範圍 001 到 999,每一個箱號都是 C(3)
* 3.假設 CTN_NOS 都是如你所舉例的樣式,且由小排到大
* 4.若有不符你的要求,那就由你自己去變通
* 5.你的結果中:
*  箱號 範圍: 003-014,016,020-030
*  要修正為
*  箱號 範圍: 003-012,014,016,020-030

* 前置作業
* > 測試資料
SELECT 0
CREATE CURSOR Detail ;
 (ITEM C(6), CTN_NOS C(30))
APPEND BLANK
REPLACE ITEM  WITH "產品A"
REPLACE CTN_NOS WITH "003,005-008"
APPEND BLANK
REPLACE ITEM  WITH "產品B"
REPLACE CTN_NOS WITH "004,007-012"
APPEND BLANK
REPLACE ITEM  WITH "產品C"
REPLACE CTN_NOS WITH "014,016,020-030"
* >
SELECT 0
CREATE CURSOR TMP_Sort ;
 (BoxNo C(3),Total N(3))
INDEX ON BoxNo TAG TAG01

* 整理
SELECT Detail
SCAN ALL
 M_cThisLine  = "," + ALLTRIM(Detail.CTN_NOS) + ","
 M_nCommaTotal = OCCURS(",",M_cThisLine) - 1
 SELECT TMP_Sort
 FOR W1_nSUB_A = 1 TO M_nCommaTotal
  M_cNoString = STREXTRA(M_cThisLine,",",",",W1_nSUB_A)
  DO CASE
  CASE LEN(M_cNoString) = 3 && 像 003   這種形式
     IF !SEEK(M_cNoString)
      APPEND BLANK
      REPLACE TMP_Sort.BoxNo WITH M_cNoString
     ENDIF
     REPLACE TMP_Sort.Total  WITH TMP_Sort.Total+1
  CASE LEN(M_cNoString) = 7 && 像 003-008 這種形式
     M_nStNo = VAL(SUBSTR(M_cNoString,1,3))
     M_nEnNo = VAL(SUBSTR(M_cNoString,5,3))
     FOR W1_nSUB_B = M_nStNo TO M_nEnNo
      MM_cBoxNo = TRANSFORM(W1_nSUB_B,"@L 999")
      IF !SEEK(MM_cBoxNo)
       APPEND BLANK
       REPLACE TMP_Sort.BoxNo WITH MM_cBoxNo
      ENDIF
      REPLACE TMP_Sort.Total  WITH TMP_Sort.Total+1
     ENDFOR
  ENDCASE
 ENDFOR
ENDSCAN

* 歸納
DIMENSION M_aResult(3,2)
STORE SPACE(0) TO M_aResult
SELECT TMP_Sort
SCAN ALL
 * > Set Relation
 M_cBoxNo = TMP_Sort.BoxNo

 * > 箱號範圍 與 重疊箱號
 FOR W1_nSUB_A = 1 TO 2 && 1:箱號範圍 2:重疊箱號
  * > Set Filter
  IF W1_nSUB_A = 2
  IF TMP_Sort.Total <= 1
   LOOP
  ENDIF
  ENDIF
  * >
  DO CASE
  CASE EMPTY(M_aResult(W1_nSUB_A,2))
     M_aResult(W1_nSUB_A,1) = M_cBoxNo
  CASE VAL(M_cBoxNo) - VAL(M_aResult(W1_nSUB_A,2)) = 1
     IF !RIGHT(M_aResult(W1_nSUB_A,1),1) = "-"
      M_aResult(W1_nSUB_A,1) = M_aResult(W1_nSUB_A,1) + "-"
     ENDIF
  OTHERWISE
     IF RIGHT(M_aResult(W1_nSUB_A,1),1) = "-"
      M_aResult(W1_nSUB_A,1) = M_aResult(W1_nSUB_A,1) + M_aResult(W1_nSUB_A,2)
     ENDIF
     M_aResult(W1_nSUB_A,1) = M_aResult(W1_nSUB_A,1) + "," + M_cBoxNo
  ENDCASE
  M_aResult(W1_nSUB_A,2) = M_cBoxNo
 ENDFOR

 * > 缺欠箱號
 IF !EMPTY(M_aResult(3,2))
 IF VAL(M_cBoxNo) - VAL(M_aResult(3,2)) > 1
  M_cStLoseNo = TRANSFORM(VAL(M_aResult(3,2))+1,"@L 999")
  M_cEnLoseNo = TRANSFORM(VAL(M_cBoxNo)-1,"@L 999")
  IF !EMPTY(M_aResult(3,1))
   M_aResult(3,1) = M_aResult(3,1) + ","
  ENDIF
  M_aResult(3,1) = M_aResult(3,1) + M_cStLoseNo
  IF !M_cStLoseNo == M_cEnLoseNo
   M_aResult(3,1) = M_aResult(3,1) + "-" + M_cEnLoseNo
  ENDIF
 ENDIF
 ENDIF
 M_aResult(3,2) = M_cBoxNo
ENDSCAN

* 補齊
FOR W1_nSUB_A = 1 TO 2
 IF RIGHT(M_aResult(W1_nSUB_A,1),1) = "-"
  M_aResult(W1_nSUB_A,1) = M_aResult(W1_nSUB_A,1) + M_aResult(W1_nSUB_A,2)
 ENDIF
ENDFOR

* 結果
? "箱號 範圍:"+M_aResult(1,1)
? "重疊 箱號:"+M_aResult(2,1)
? "缺欠 箱號:"+M_aResult(3,1)

* 後記
* 我這只是傳統寫法,不知可不可以用 SQL 的方式來找答案?我是找不出該如何用 SQL 寫(功力太淺)
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作