線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1536
推到 Plurk!
推到 Facebook!

報表格式問題

尚未結案
melody_chang
一般會員


發表:16
回覆:11
積分:5
註冊:2004-09-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-06 17:29:18 IP:218.32.xxx.xxx 未訂閱
我想設計一報表可顯示訂單數量 & 出貨數量, 但因可能會有訂單的一筆Item分成多次出貨的狀況, 當我使用DBGrid列出相關資料時, 會造成訂單數量重覆, 請問是否有解決的方法? 我有使用Fast Report, 還不知該如何達到我要的功能, 可否請各位高手指點迷津, 謝謝~~~    我貼上報表範例, 有助於各位了解我說的內容 Melody
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-06 19:57:11 IP:61.59.xxx.xxx 未訂閱
看起來像是出貨單 Join 訂單的資料源, 可以將 [訂單,訂單數量] 作 Group 處理. 另外一個方法就是用 M/D 架構, M 為訂單 D 為出貨單, 關聯欄位設定即可. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
melody_chang
一般會員


發表:16
回覆:11
積分:5
註冊:2004-09-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-07 09:43:15 IP:218.32.xxx.xxx 未訂閱
我再補充說明一下    我在程式中有設定Group by 專案代號,訂單編號,內部料號,出貨日,出貨單號,訂單數量 我知道若不顯示出貨日 & 出貨單號, 則相同料號只會出現一筆, 就不會有訂單數量重覆的問題, 但User要求一定要顯示出貨日 & 出貨單號,  這樣用DBGrid顯示時, 就會訂單數量重覆    bestlong大哥, 您提到M/D 架構, 但我不知道如何做, 可否再說清楚一點?    我想這種顯示的技巧, 應該在報表工具上比較可能實現, 但不知Fast Report上該如何做?    Melody 
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-07 22:15:12 IP:61.59.xxx.xxx 未訂閱
這裡我沒說清楚, 我所說的 Group 的功能是在報表中的處理. 並不是指 SQL 語法的部份. 我覺得基本上你所下的 SQL 本來就會在每一筆紀錄出現訂單數量的欄位. 訂單明細一筆Item 可分批出貨, 這樣就是一對多的狀況, 所以在這裡把訂單數量欄位作合計可以說是錯誤的計算處理. 而且看起來你的處理應該是只有用一個 TQuery 來結合資料. 這樣直接配合報表時就要用報表系統的 Group 功能. 而 M/D 結構就是用 qryMaster 取訂單明細, qryDetail 連接出貨單明細,兩者用出貨單編號做關聯, 在來就接上報表同樣作 M/D 處理. 而關於 Fast Report 的使用, 在安裝的目錄下應該有一個 Demos 目錄內有很多的程式可以參考, 再你的 Delphi 安裝好後, 可以開啟其中的reports 目錄範例. 其中的 Nested groups 或是 Master-Detail-Subdetail 應該就可以解決你的問題. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
melody_chang
一般會員


發表:16
回覆:11
積分:5
註冊:2004-09-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-08 16:21:31 IP:211.76.xxx.xxx 未訂閱
哇~~~我終於知道問題在那裡了, 感謝前輩 bestlong的指導, 我已經有頭緒知道該如何做了~~~ 待我研究看看, 再向各位報告好消息    感恩啦~~~~ 
melody_chang
一般會員


發表:16
回覆:11
積分:5
註冊:2004-09-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-14 17:46:28 IP:211.76.xxx.xxx 未訂閱
我試過 bestlong所教的方法, 設定兩個Query, ADOQuery1 取訂單明細, ADOQuery2 連接出貨單明細,兩者用訂單編號做關聯,  在報表上, MasterData Band抓ADOQuery1, DetailData Band抓ADOQuery2, 結果, 很糟啦~~~ Ex. 該筆訂單有5個項次,只有其中一筆分兩次出貨, 但結果出現一筆項次會對應到所有出貨數量, 訂單 項次  訂單數量   出貨數量 AAA  001     1                          1                          2                          8...... AAA  002     2                          1                          2                          8...... 這不是我要的啊......請問該如何解啊?    後來, 我想到一個方法, 只用一個Query, 這樣訂單數量會重覆出現, 我只要設定每次在印訂單數量前, 先去判斷, 若訂單編號&訂單項次都相同, 則該欄位就不要顯示, 這樣問題就可以解決了, 但又衍生出另一個問題, 我不知該如何判斷啊? 是在MasterData Band的(OnBeforePrint)嗎? 還是在訂單數量按右鍵, Edit中設定呢?    各位高手們, 救救我啊~~~
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-18 13:35:02 IP:211.22.xxx.xxx 未訂閱
引言: 我試過 bestlong所教的方法, 設定兩個Query, ADOQuery1 取訂單明細, ADOQuery2 連接出貨單明細,兩者用訂單編號做關聯, 在報表上, MasterData Band抓ADOQuery1, DetailData Band抓ADOQuery2, 結果, 很糟啦~~~ Ex. 該筆訂單有5個項次,只有其中一筆分兩次出貨, 但結果出現一筆項次會對應到所有出貨數量,
應該是 DetailData Band抓ADOQuery2 的 SQL 你沒有處理好. ADOQuery2.SQL := 'select 訂單 項次 訂單數量 from 訂單明細'; ADOQuery2.SQL := 'select 出貨數量 from 出貨明細 where 訂單編號 = :訂單'; 其中的 訂單就是關聯欄位. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
melody_chang
一般會員


發表:16
回覆:11
積分:5
註冊:2004-09-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-18 18:44:55 IP:211.76.xxx.xxx 未訂閱
我在ADOQuery2的SQL有設定關聯, 但不Work, 當ADOQuery2的Active設定為True時, 會出現錯誤訊息, "提供不一致或不完全的資訊導致參數物件不適當地被拒" 但我實在查不出那裡有錯, 請各位高手幫幫忙啊~~~~    我在ADOQuery1設定連接訂單明細 SELECT  DISTINCT  POLN.COD_CUST as COD_CUST , POLN.NUM_PO as NUM_PO , POLN.NUM_LINE as NUM_LINE , POLN.COD_ITEM as COD_ITEM , POLN.QTY_REQ as 訂單數量 FROM MF2000.POLN    在ADOQuery2設定連接出貨明細 SELECT  DELD.QTY_PRPA as 出貨量 FROM MF2000.DELD WHERE DELD.NUM_CUST =: COD_CUST and DELD.NUM_PO =: NUM_PO and DELD.LIN_PO =: NUM_LINE    這兩個Table是用3個欄位來關聯, 我是設定 出貨明細的欄位 =: 訂單明細的欄位  還有那裡漏掉了嗎?  請各位高手幫幫忙啊~~~~
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-19 18:06:26 IP:211.22.xxx.xxx 未訂閱
引言: 我在ADOQuery2的SQL有設定關聯, 但不Work, 當ADOQuery2的Active設定為True時, 會出現錯誤訊息, "提供不一致或不完全的資訊導致參數物件不適當地被拒" 但我實在查不出那裡有錯, 請各位高手幫幫忙啊~~~~ 我在ADOQuery1設定連接訂單明細 SELECT DISTINCT POLN.COD_CUST as COD_CUST , POLN.NUM_PO as NUM_PO , POLN.NUM_LINE as NUM_LINE , POLN.COD_ITEM as COD_ITEM , POLN.QTY_REQ as 訂單數量 FROM MF2000.POLN 在ADOQuery2設定連接出貨明細 SELECT DELD.QTY_PRPA as 出貨量 FROM MF2000.DELD WHERE DELD.NUM_CUST =: COD_CUST and DELD.NUM_PO =: NUM_PO and DELD.LIN_PO =: NUM_LINE 這兩個Table是用3個欄位來關聯, 我是設定 出貨明細的欄位 =: 訂單明細的欄位 還有那裡漏掉了嗎? 請各位高手幫幫忙啊~~~~ < face="Verdana, Arial, Helvetica"> 建議手動處理動態參數
 
procedure TForm1.ADOQuery1AfterOpen(DataSet: TDataSet);
begin
  ADOQuery2.Open;
end;    procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
  ADOQuery2.Close;
  ADOQuery2.Open;
end;    procedure TForm1.ADOQuery2BeforeOpen(DataSet: TDataSet);
begin
  ADOQuery2.Parameters.ParamByName('COD_CUST').Value :=
    ADOQuery1.FieldByName('COD_CUST').AsString;
  ADOQuery2.Parameters.ParamByName('NUM_PO').Value :=
    ADOQuery1.FieldByName('NUM_PO').AsString;
  ADOQuery2.Parameters.ParamByName('NUM_LINE').Value :=
    ADOQuery1.FieldByName('NUM_LINE').AsString;
end;
雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
melody_chang
一般會員


發表:16
回覆:11
積分:5
註冊:2004-09-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-19 19:57:05 IP:211.76.xxx.xxx 未訂閱
哇~~真是高明啊~~~ 這樣我用DBGrid時, 就可以做到Master/Detail的關聯了, bestlong前輩, 真是感謝您的鼎力相助~~ 但我最終目的是要在FastReport上設計Report, 當ADOQuery2的Active設定為True時, 會出現錯誤訊息, "提供不一致或不完全的資訊導致參數物件不適當地被拒" 這樣我就無法拉出欄位, 請問該如何解? 還有啊, 我的資料庫是用Oracle, 難道在Oracle下用ADOQuery建Master/Detail, 是不允許的嗎? 我有換成系統預設的資料庫來測試, 都可以work啊, 真的很奇怪耶~~~~ Melody
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-19 21:22:07 IP:61.59.xxx.xxx 未訂閱
引言: 當ADOQuery2的Active設定為True時, 會出現錯誤訊息, "提供不一致或不完全的資訊導致參數物件不適當地被拒"
FastReport 會在設計時期預設是開啟所連接的 DataSet. 而這段錯誤訊息實際上就是 ADOQuery2 的 Parameters 沒有設定就將其 Active 所造成. 所以在 ADOQuery2.SQL 在語法上可以先不要加入動態參數部份, 改移到 FormCreate 時再作 ADOQuery2.SQL.Add('where 條件欄位 = :動態參數'); 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-04-19 21:28:11 IP:61.59.xxx.xxx 未訂閱
引言: 還有啊, 我的資料庫是用Oracle, 難道在Oracle下用ADOQuery建Master/Detail, 是不允許的嗎? 我有換成系統預設的資料庫來測試, 都可以work啊, 真的很奇怪耶~~~~
我本身尚未使用 ADO 連接 Oracle 的經驗, 不過建議先以一個關聯欄位來測試看看. 另外 Parameters 本身也有資料型態的要求也要注意一下. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
melody_chang
一般會員


發表:16
回覆:11
積分:5
註冊:2004-09-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-04-25 09:13:46 IP:211.76.xxx.xxx 未訂閱
問題已解決了, 謝謝bestlong大哥的費心指導~~~~
系統時間:2024-05-11 14:14:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!