none
三聯發票的做法 RRS feed

  • 問題

  • 各位大大,小弟想詢問Crystal Report 三聯式的問題

    環境是Visual Sutdio 2008,那我的作法是,用DataSet

    把TableAdapter裡面的查詢,丟到報表引擎上輸出˙

    因為報表中有  表首  頁首  細目  頁尾  和  報表尾  

    以往都是用這些去寫日常報表,那我要何種方式

    怎麼做出A4的三聯式發票呢??   請各位大大可以提供

    方法和思路  讓小弟參考  >"<   一頁裡面三張發票,不一定要用

    Crystal Report 也可以用  微軟的報表引擎,小弟想問有經驗的

    怎麼去做出這樣類似三連發票 ,因為有不少公司用雷射印表機

    然後套印在套版上對印欄位~~


    修改標題:(方便key 關鍵字)  遇到同樣問題的人能夠參考該篇文章,也是一個分享




    2014年8月29日 上午 01:48

解答

  • 你好,
    請問您目前是透過ADO.NET下取回資料嗎?
    SQL的長度我要想一下,所以目前的想法是,
    先不要在SQL加入換行,而是把換行及每個設定成固定長度的方式改到程式中去設定!
    如在程式中取出Details欄位值,依 逗號,去取出各行的值,再依 @ 去取出 品名、數量、單價等資料,
    然後處理完後再更新回DataTable之中,
    最後再Assign給CR。
    請您研究一下哦!

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月4日 上午 01:47
  • 我目前的作法是 先把資料丟到DataSet裡面,然後把整段SQL丟在TableAdapter

    單純的TableAdapter.Fill

    然後再指定來源~~

    這部分測試OK  我再把它改成程式去寫和控制~~利用空白DataSet和

    DataTable 接者再用程式撈資料方式丟到報表引擎做輸出~~




    2014年9月4日 上午 01:53

所有回覆

  • 用 Graphics 去畫...

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年8月29日 下午 01:40
  • 特殊報表可以考慮送到WORD文件套表顯示, 您可以參考這篇文件的做法:Generating Word Reports / Documents

    2014年8月30日 上午 01:39
  • 各位大大 ,這個沒辦法用所謂的Crystal Report 或是 微軟報表引擎去處理???  

    只能用Word套版方向去做嗎???

    因為若是用日期區間的話,這個方案可不可行???  因為小弟用Crystal Report的部分  還是搞不出來= =#


    2014年8月31日 上午 03:03
  • 報表引擎能不能做到這麼複雜,講實在要試才知道。

    我會一開始就排除報表引擎,不然就考慮自建。

    Word 套版比較簡單,不過綁在 User 必須要有 Word 才能列印,套表這塊如果熟 WordML ,把底圖插入後,直接拉框定位處理,存成 .xml 後,當文字檔處理。但 Word 列印時會參照印表機解析度,印表機型號不一樣可能會發生位移或跳行。

    用 .Net 內建的 Graphics 類別:

    如果是單機版,就是要會取得印表機解析度,當然也可以裝傻直接用 600 DPI ,目前印表機基本上都支援這個解析度。

    若是要轉網頁系統,可以先在網頁說明告知出血寬,就可以丟到 client 端列印圖檔。當然若是 User 用 IE ,開相容模式跑 VML 印 .emz 向量檔,檔案小,也漂亮,列印無格放。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年8月31日 上午 03:47
  • 您好,
    您可以一個A4中自行去配置出這3個區塊。

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月1日 上午 01:49
  • 亂馬大大,就你的經驗也是會使用繪圖方面去做就對了???
    2014年9月1日 上午 04:16
  • 您好,
    使用Crystal Report的話,我有使用過以下的方式。

    1.套表的方式

       紙張上已經有那些格子、線、及文字,CR報表中在相關的位子拉文字方塊上去!

    2.在CR中刻

        畫圖或是把圖Scan成圖檔,放到CR之中,也可以Scan某個圖就好,如印章。

    另外還要注意品名會不會太多項的問題哦!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月1日 上午 06:48
  • 我目前是有套表了,可是我遇到一個問題是

    上面會買那三聯套版方式,只是我把報表首和頁首

    報表尾,頁尾關閉,因為我要怎麼把Master群組

    我目前想到就是在Detail中做

    我目前的做法是先把Master-Detail Inner join起來
    2014年9月1日 上午 07:56
  • 嗯,只在Detail裡面處理!

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月1日 上午 08:00
  • 因為Detail 裡面  我已經做好SQL Inner Join 部分  所以卡在Master 如何群組= =

    目前Detail 會顯示如下,我先用DataSet的TableAdapter底下SQL丟到報表引擎裡面,因為

    怕改寫成自己在程式處理也是會這樣,所以想請教亂大大

    id   ItemNO  Qty

    1      001      1

    1      002      2

    1      003      4

    2      001      1

    2      002      2

    2      003      5





    2014年9月1日 上午 08:05
  • 您好,
    可以在Detail中,同時一併顯示出Group的值,

    類似Product & OrderDetail一樣,如下的 SQL,您參考看看,

    USE tempdb
    GO
    
    CREATE TABLE Product
    ( 
    ItemNo VARCHAR(30), 
    Price MONEY)
    GO
    
    INSERT INTO Product( ItemNo, Price)
    VALUES( '0001', 100);
    
    INSERT INTO Product( ItemNo, Price)
    VALUES( '0002', 200);
    
    INSERT INTO Product( ItemNo, Price)
    VALUES( '0003', 300);
    
    CREATE TABLE OrderDetail
    (id INT,
    ItemNo VARCHAR(30), 
    Qty INT )
    GO
    
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 1, '0001', 1);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 1, '0002', 2);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 1, '0003', 4);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 2, '0001', 1);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 2, '0002', 2);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 2, '0003', 5);
    
    SELECT o.id, p.ItemNo, p.Price , o.Qty, o.Qty * p.Price AS Total
    , SUM(o.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    FROM Product p INNER JOIN OrderDetail o
    ON p.ItemNo = o.ItemNo;
    您可以試看看,如果依每聯(GroupNo)來Group再調整,
    WITH cte_order
    AS
    (
    SELECT o.id, p.ItemNo, p.Price , o.Qty, o.Qty * p.Price AS Total
    , SUM(o.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    , 1 AS GroupNo
    FROM Product p INNER JOIN OrderDetail o
    ON p.ItemNo = o.ItemNo
    UNION ALL
    SELECT id, ItemNo, Price, Qty, Total, OrderTotal, GroupNo + 1
    FROM cte_order
    WHERE GroupNo < 3 -- 3聯所以產生3個
    )
    SELECT * FROM cte_order
    ORDER BY GroupNo, id, ItemNo;



    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2014年9月1日 上午 09:04
    2014年9月1日 上午 08:52
  • 小弟的作法也是跟大大一樣  只是我下一步,不知如何著手...我在SQL是 Master Join in  Detail部分

    當然也可以直接撈取Detail部分  因為我Detail裡面有產品名稱了,只是我要怎麼呈現出 三個 部份去下手...

    類似上面的id,name,qty,我目前做法是用DataSet底下Datatable裡面的TableAdapter底下SQL丟到報表引擎裡面,當然也可以改成程式去寫,只是下一步這邊不知如何下手...小弟在研究上面部分







    2014年9月1日 上午 08:59
  • 亂馬大大 那我要怎麼在Report中 顯示獨立 如 客戶名稱  申請日期  獨立起來的Master這些呢?  

    我改寫成如下  產生三聯資料


    SELECT       m.id,   M.FormID,D.ItemName,D.ItemPrice,d.ItemAmt,M.InvAmt,1 AS GroupNo
    FROM              DebitNote AS M INNER JOIN
                                DebitNote_Detail AS D ON M.FormID = D.FormID
     
    UNION ALL
    SELECT       m.id,   M.FormID,D.ItemName,D.ItemPrice,d.ItemAmt,M.InvAmt,2 AS GroupNo
    FROM              DebitNote AS M INNER JOIN
                                DebitNote_Detail AS D ON M.FormID = D.FormID
    UNION ALL
    SELECT       m.id,   M.FormID,D.ItemName,D.ItemPrice,d.ItemAmt,M.InvAmt,3 AS GroupNo
    FROM              DebitNote AS M INNER JOIN
                                DebitNote_Detail AS D ON M.FormID = D.FormID 
    ORDER BY FormID




    2014年9月1日 上午 09:28
  • 您好,
    這種方式的話,Master的資料一定是重覆出現的哦! 您說的客戶名稱,可以試著再切一個Master的Group 去放它!

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月1日 上午 10:13
  • 上方的部分  我一定會顯示明細資料  明細中的群組還是下不了手


    還是栽在Master手上...


    2014年9月1日 上午 10:16
  • 您好,
    因為Detail的大小是固定的,所以無法使用Detail去長Detail,
    我的想法是把Detail放到Master裡去顯示,所以Detail的格式可以在SQL中調整(每個細項加入CrLf 及 品項、單價等等),

    CONCAT是SQL 2012才有的Function,如果您不是SQL 2012的話,請使用 + 的方式,

    所以整個的SQL類似如下,

    -- drop table Product
    -- drop table [Order]
    -- drop table OrderDetail
    CREATE TABLE Product
    ( 
    ItemNo VARCHAR(30), 
    Price MONEY)
    GO
    
    CREATE TABLE OrderDetail
    (id INT,
    ItemNo VARCHAR(30), 
    Qty INT )
    GO
    
    CREATE TABLE [Order]
    (
    id INT, 
    CustName NVARCHAR(30)
    )
    GO
    
    INSERT INTO Product( ItemNo, Price)
    VALUES( '0001', 100);
    
    INSERT INTO Product( ItemNo, Price)
    VALUES( '0002', 200);
    
    INSERT INTO Product( ItemNo, Price)
    VALUES( '0003', 300);
    
    
    INSERT INTO [Order](id, CustName)
    VALUES( 1, N'亂馬客' );
    
    INSERT INTO [Order](id, CustName)
    VALUES( 2, N'Katusa' );
    
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 1, '0001', 1);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 1, '0002', 2);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 1, '0003', 4);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 2, '0001', 1);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 2, '0002', 2);
    
    INSERT INTO OrderDetail(id, ItemNo, Qty)
    VALUES( 2, '0003', 5);
    
    --SELECT o.id, o.CustName, p.ItemNo, p.Price , od.Qty, od.Qty * p.Price AS Total
    --, SUM(od.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    --FROM [Order] o INNER JOIN OrderDetail od
    --ON o.id = od.id 
    --INNER JOIN  Product p  
    --ON p.ItemNo = od.ItemNo;
    
    --因為Detail是固定大小,所以要組出Detail的字串
    --http://www.dotblogs.com.tw/rainmaker/archive/2012/02/20/69625.aspx
    WITH cte_Orders
    AS
    (
    SELECT o.id, o.CustName, p.ItemNo, p.Price , od.Qty, od.Qty * p.Price AS Total
    , SUM(od.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    FROM [Order] o INNER JOIN OrderDetail od
    ON o.id = od.id 
    INNER JOIN  Product p  
    ON p.ItemNo = od.ItemNo
    ) 
    SELECT DISTINCT
            id ,
            CustName ,
            STUFF(( SELECT ',' + CONCAT(ItemNo ,  SPACE(2) , Qty, SPACE(2), Price, SPACE(2) , Total)
                    FROM    cte_Orders b
                    WHERE   a.id = b.id
                  FOR
                    XML PATH('')
                  ), 1, 1, '') AS [details]
    		, OrderTotal
    FROM cte_Orders a;
     
    
    -- 因為 3 聯式,所以重覆 3個資料出來 
    
    WITH cte_Orders
    AS
    (
    SELECT o.id, o.CustName, p.ItemNo, p.Price , od.Qty, od.Qty * p.Price AS Total
    , SUM(od.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    FROM [Order] o INNER JOIN OrderDetail od
    ON o.id = od.id 
    INNER JOIN  Product p  
    ON p.ItemNo = od.ItemNo
    )
    , cte_Group
    AS
    (
    SELECT 1 AS GroupNo
    UNION ALL
    SELECT GroupNo + 1
    FROM cte_Group
    WHERE GroupNo < 3
    )
    SELECT o.id, o.CustName, o.OrderTotal, g.GroupNo
    , REPLACE(o.details, ',', CHAR(10) + CHAR(13)) AS details
    FROM (SELECT DISTINCT
            id ,
            CustName ,
            STUFF(( SELECT ','  + CONCAT(ItemNo ,  SPACE(2) , Qty, SPACE(2), Price, SPACE(2) , Total)
                    FROM    cte_Orders b
                    WHERE   a.id = b.id
                  FOR
                    XML PATH('')
                  ), 1, 1, '') AS [details]
    		, OrderTotal
    	FROM cte_Orders a) o
    	CROSS APPLY cte_Group g
     
    
    
    
    
    
    --drop view vwOrders
    CREATE VIEW vwOrders
    AS
    WITH cte_Orders
    AS
    (
    SELECT o.id, o.CustName, p.ItemNo, p.Price , od.Qty, od.Qty * p.Price AS Total
    , SUM(od.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    FROM [Order] o INNER JOIN OrderDetail od
    ON o.id = od.id 
    INNER JOIN  Product p  
    ON p.ItemNo = od.ItemNo
    )
    , cte_Group
    AS
    (
    SELECT 1 AS GroupNo
    UNION ALL
    SELECT GroupNo + 1
    FROM cte_Group
    WHERE GroupNo < 3
    )
    SELECT o.id, o.CustName, o.OrderTotal, g.GroupNo
    , REPLACE(o.details, ',', CHAR(10) + CHAR(13)) AS details
    FROM (SELECT DISTINCT
            id ,
            CustName ,
            STUFF(( SELECT ','  + CONCAT(ItemNo ,  SPACE(2) , Qty, SPACE(2), Price, SPACE(2) , Total)
                    FROM    cte_Orders b
                    WHERE   a.id = b.id
                  FOR
                    XML PATH('')
                  ), 1, 1, '') AS [details]
    		, OrderTotal
    	FROM cte_Orders a) o
    	CROSS APPLY cte_Group g;
    GO
    
    
    
    SELECT * FROM vwOrders;
    

    資料準備好了之後,要依訂單分頁,而要3聯,所以Group會有訂單、每聯,
    資料就放在 聯的 Group之中,如下,


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月2日 上午 02:40
  • 感謝亂大大的指導~~這篇真的會幫助到很多人     不過在三連發票  他有一種狀況就

    是他如果超過五筆款項的話    跳到下一頁  要怎麼去處理呢???   因為我們在做三聯的

    時候,在實務上的話     五筆以上  就會跳下一頁~~





    2014年9月2日 上午 02:55
  • 您好,
    所以超過5筆列印到下一張去嗎?

    如果是這樣子的話,還要再依Detail的數量去拉一個Group出來!

    您可以自行試看看,有問題再提出來討論吧!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月2日 上午 03:04
  • 亂大大  若我改用程式去做的話  用ADO.NET部分丟到DataSet部份去處理的話呢??

    所以只能用上方的作法去做就對了???

    我最早的構想是  在Detail 分別拉三個區塊和label,不過他只能顯示一頁~~   用多筆

    的話就無法去做

    2014年9月2日 上午 03:54
  • 您好,
    您可以在報表設定那樣子的資料,
    而在ado.net 去call sql 取得 一樣的資料,再assign給cr的ReportDocument物件。
    如果您在程式處理的話,就處理成跟我上面說的一樣格式的資料就可以了吧!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月2日 上午 05:58
  • 亂馬大大   小弟對上半段  有理解,但是下半段尚未理解...目前是用SQL  2008在模擬出下半段的狀況
    WITH cte_Orders
    AS
    (
    SELECT o.id, o.CustName, p.ItemNo, p.Price , od.Qty, od.Qty * p.Price AS Total
    , SUM(od.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    FROM [Order] o INNER JOIN OrderDetail od
    ON o.id = od.id 
    INNER JOIN  Product p  
    ON p.ItemNo = od.ItemNo
    )
    , cte_Group
    AS
    (
    SELECT 1 AS GroupNo
    UNION ALL
    SELECT GroupNo + 1
    FROM cte_Group
    WHERE GroupNo < 3
    )
    SELECT o.id, o.CustName, o.OrderTotal, g.GroupNo
    , REPLACE(o.details, ',', CHAR(10) + CHAR(13)) AS details
    FROM (SELECT DISTINCT
            id ,
            CustName ,
            STUFF(( SELECT ','  + CONCAT(ItemNo ,  SPACE(2) , Qty, SPACE(2), Price, SPACE(2) , Total)
                    FROM    cte_Orders b
                    WHERE   a.id = b.id
                  FOR
                    XML PATH('')
                  ), 1, 1, '') AS [details]
    , OrderTotal
    FROM cte_Orders a) o
    CROSS APPLY cte_Group g

    下半段的部分這邊尚未理解,小弟想理解這段深奧的部分,因為我在設想轉換成T-SQL觀念  然後再轉換成ADO.NET

    部分去丟掉報表引擎上,我的作法會先在DataSet 建立新的DataTable 然後再用ADO.NET 部分 填入去DataTable

    丟到報表引擎裡面~~

    因為小弟想把這段'CONCAT' 改成 '+'的部分組成  只是中間區段不知如何用2008環境去下手,大大再給點提示

    日後我再用2012環境測試'CONCAT'部分

    2014年9月2日 上午 06:02
  • 您好,
    下半段要把Detail組合起來,

    所以要把多筆資料組成一筆,

    可參考: http://www.dotblogs.com.tw/rainmaker/archive/2012/02/20/69625.aspx

    而 CONCAT 則是要 組出 品名  數量 價格 .... ,因為其中有字串,有數值,有金額。

    用CONCAT 會比較方便,如果用 + 的方式,就要把 數值,金額等型態的欄位轉成 字串哦!

    ItemNo + SPACE(2) +  CAST(Qty AS VARCHAR) +  SPACE(2) +  CAST(Price AS VARCHAR) +  SPACE(2) + CAST( Total AS VARCHAR)

    當然,或許需要透過自定的function來將金額format成3位一撤,或是轉成大寫金額哦!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月2日 上午 06:35
  • 亂馬大大  再請教你一個問題   因為若我報表群組的部分

    因為Details他會變成這樣  橫向  那我在群組當中,要怎麼

    擺放這個位子呈現直向,這個是我第一次用到這樣的技巧~~

    感謝你^_^   又學到一招,日後我會把我的案例寫在blog上

    分享出來

      

    WITH cte_Orders
    AS
    (
    SELECT o.id, o.CustName, p.ItemNo, p.Price , od.Qty, od.Qty * p.Price AS Total
    , SUM(od.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    FROM [Order] o INNER JOIN OrderDetail od
    ON o.id = od.id 
    INNER JOIN  Product p  
    ON p.ItemNo = od.ItemNo
    )
    , cte_Group
    AS
    (
    SELECT 1 AS GroupNo
    UNION ALL
    SELECT GroupNo + 1
    FROM cte_Group
    WHERE GroupNo < 3
    )
    SELECT o.id, o.CustName, o.OrderTotal, g.GroupNo
    , REPLACE(o.details, ',', CHAR(10) + CHAR(13)) AS details
    FROM (SELECT DISTINCT
            id ,
            CustName ,
            STUFF(( SELECT ','  +ItemNo + SPACE(2) +  CAST(Qty AS VARCHAR) +  SPACE(2) +  CAST(Price AS VARCHAR) +  SPACE(2) + CAST( Total AS VARCHAR)
                    FROM    cte_Orders b
                    WHERE   a.id = b.id
                  FOR
                    XML PATH('')
                  ), 1, 1, '') AS [details]
    , OrderTotal
    FROM cte_Orders a) o
    CROSS APPLY cte_Group g

    order by id,groupno

    我目前先加了其他產品資料

    結果如下:





    2014年9月2日 上午 06:59
  • 您好,
    所以我在您 原本標示答案 那裡面有將 逗號 Replace 成 換行

    , REPLACE(o.details, ',', CHAR(10) + CHAR(13)) AS details

    這樣每個項目就會換行了哦!

    如果對您有幫助,請標示為解答,謝謝!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2014年9月2日 上午 07:07
  • 太感謝了~~   我終於了解了      感謝亂馬大大

    我要怎麼在Report 中把Detail的格式  轉換成金額呢

    因為在SQL當中我遇到,若是我加了金額格式的話,會

    變成所謂的去掉,

    千分位的部分



    2014年9月2日 上午 07:12
  • 您好,
    請參考
    http://iwjslns.blogspot.tw/2009/07/blog-post.html

    SELECTREPLACE(CONVERT(VARCHAR,CONVERT(MONEY,12345678.123),1),'.00','')

    而SQL逗號會跟原本的衝,所以您可以改成用@,如下,

    WITH cte_Orders
    AS
    (
    SELECT o.id, o.CustName, p.ItemNo, p.Price , od.Qty, od.Qty * p.Price AS Total
    , SUM(od.Qty * p.Price) OVER (PARTITION BY o.id) AS OrderTotal
    FROM [Order] o INNER JOIN OrderDetail od
    ON o.id = od.id 
    INNER JOIN  Product p  
    ON p.ItemNo = od.ItemNo
    )
    , cte_Group
    AS
    (
    SELECT 1 AS GroupNo
    UNION ALL
    SELECT GroupNo + 1
    FROM cte_Group
    WHERE GroupNo < 3
    )
    SELECT o.id, o.CustName, o.OrderTotal, g.GroupNo
    , REPLACE(o.details, '@', CHAR(10) + CHAR(13)) AS details
    FROM (SELECT DISTINCT
            id ,
            CustName ,
            STUFF(( SELECT '@'  + ItemNo + SPACE(2) +  REPLACE(CONVERT(VARCHAR,CAST(Qty AS MONEY), 1),'.00','')   
    		+  SPACE(2) +  CAST(Price AS VARCHAR) +  SPACE(2) 
    		+ REPLACE(CONVERT(VARCHAR,CAST(Total AS MONEY), 1),'.00','') 
                    FROM    cte_Orders b
                    WHERE   a.id = b.id
                  FOR
                    XML PATH('')
                  ), 1, 1, '') AS [details]
    		, OrderTotal
    	FROM cte_Orders a) o
    	CROSS APPLY cte_Group g;
    GO



    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月2日 上午 10:23
  • 亂馬大大,小弟因為Detail是品名,所以會長度不固定,因為在Report中,想不出解法   

    目前我用GroupNo 加入 Select CASE 來做第一  二  三聯  三聯的部分是品名所以抓不

    到他長度的部分,謝謝大大的耐心指導~~   因為主要現在有些採用雷射印表機去印這三聯,打下

    去的字會相當清楚,在套版的時候會印得比較清楚~~     感謝大大再次耐心的指導~~  感謝你






    2014年9月2日 上午 11:32
  • 小弟想請教這兩段   第一段為什麼要加23個長度,小弟可以把Detail每個都拆開  然後都換行嗎?  

    這樣的話就可以調整每個Detail邊距了~~   因為這兩段是可以用來換行的部分,所以我想進一步

    請教這部分問題,亂大大  若能把個別項目  拆開  這樣就可以調整每個項目的間距了~~

    REPLACE(o.details, '@', CHAR(10) + CHAR(13)) AS details

    他跟這段有關係嗎???  小弟想完全理解它

     STUFF(( SELECT '@'  + ItemNo + SPACE(2) +  REPLACE(CONVERT(VARCHAR,CAST(Qty AS MONEY), 1),'.00','')   
    		+  SPACE(2) +  CAST(Price AS VARCHAR) +  SPACE(2) 
    		+ REPLACE(CONVERT(VARCHAR,CAST(Total AS MONEY), 1),'.00','') 


    2014年9月3日 上午 01:20
  • Char(10) + Char(13) 是換行!

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月3日 上午 01:28
  • 請大大指導一下  若是遇到不固定的長度,我要怎麼拆解出來~~  來做控制報表的間距   

    FOR
                    XML PATH('')
                  ), 1, 1, '') AS [details]
    

    因為目前這邊是希望能夠  例如 數量和數量合併   金額和金額合併  接者我再用REPLACE換行

    這樣就能夠解決掉三聯間距的問題,想請大大再進一步的指導,感謝大大的熱心指導  此次受益

    良多~~


    2014年9月3日 上午 01:42
  • 您好,
    您可以加入全型空白,再Left取固定的長度,讓長度一致,如下,

    SELECT LEFT('日曆' + replicate(' ',20),20)  + REPLACE(CONVERT(VARCHAR,CAST(  8000.0 AS MONEY),1),'.00','') + '元'
    UNION
    SELECT LEFT('冷氣機型' + replicate(' ',20),20)   + REPLACE(CONVERT(VARCHAR,CAST(  8000.0 AS MONEY),1),'.00','') + '元'


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月3日 上午 10:26
  • 小弟有改了,只是間距還是歪歪的>"<    如圖一報表

    2014年9月3日 上午 11:17
  • 你好,
    請問您目前是透過ADO.NET下取回資料嗎?
    SQL的長度我要想一下,所以目前的想法是,
    先不要在SQL加入換行,而是把換行及每個設定成固定長度的方式改到程式中去設定!
    如在程式中取出Details欄位值,依 逗號,去取出各行的值,再依 @ 去取出 品名、數量、單價等資料,
    然後處理完後再更新回DataTable之中,
    最後再Assign給CR。
    請您研究一下哦!

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年9月4日 上午 01:47
  • 我目前的作法是 先把資料丟到DataSet裡面,然後把整段SQL丟在TableAdapter

    單純的TableAdapter.Fill

    然後再指定來源~~

    這部分測試OK  我再把它改成程式去寫和控制~~利用空白DataSet和

    DataTable 接者再用程式撈資料方式丟到報表引擎做輸出~~




    2014年9月4日 上午 01:53
  • 亂馬大大  小弟想到一個做法了,目前在嘗試中

    SELECT o.id, o.CustName, o.OrderTotal, g.GroupNo
    , REPLACE(o.details, ',', CHAR(10) + CHAR(13)) AS details
    FROM (SELECT DISTINCT
            id ,
            CustName ,
            STUFF(( SELECT ','  + CONCAT(ItemNo ,  SPACE(2) , Qty, SPACE(2), Price, SPACE(2) , Total)
                    FROM    cte_Orders b
                    WHERE   a.id = b.id
                  FOR
                    XML PATH('')
                  ), 1, 1, '') AS [details]
    		, OrderTotal
    	FROM cte_Orders a) o
    	CROSS APPLY cte_Group g

    REPLACE(o.details, ',', CHAR(10) + CHAR(13)) AS details

    我改成顯示Details

    然後

       STUFF(( SELECT '@'  + ItemNo + SPACE(2) +  REPLACE(CONVERT(VARCHAR,CAST(Qty AS MONEY), 1),'.00','')   

    + SPACE(2) + CAST(Price AS VARCHAR) + SPACE(2) + REPLACE(CONVERT(VARCHAR,CAST(Total AS MONEY), 1),'.00','')

    這邊我在把SPACE(2) 改成"," 然後再程式當中用split 切割 分配位子


    2014年9月4日 上午 06:44
  • 亂馬大大,小弟想請教  如何在裡面做跨行動作,因為小弟已經在圖二  準備把DebitNote_Detail 

    帶入到DataSet裡面的名稱  數量  單價  金額 但是有一個問題,我拆解要怎麼跨行???

    分號代表就是;一筆   所以我要用splt ;在 , 接者我在該欄位怎麼跨行呢???


    SDebitNote.GetValue(15)=Detail(組合的字串)    我要怎麼把名稱 然後再顯示的時候跨行呢???


    2014年9月4日 上午 10:04
  •  感謝亂馬大大,小弟已實做出來了~~   衷心特別感謝亂馬大大前輩

    願意花大把時間指導^_^      在此分享日後遇到這個特別報表需求~~

    在此分享解法~~      希望日後有人遇到這樣需求   可以解出來^_^



    2014年9月4日 上午 11:47