 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
foxy

註冊時間: 2007-08-16 文章: 258 來自: 泰國
第 1 樓
|
發表於: 星期日 六月 20, 2010 6:34 pm 文章主題: 分享報表列印的一個小方法 |
|
|
我一直都用REPORT FORM myReport.frx TO PRINTER PREVIEW PROMPT這行代碼來印出報表. 直到有一天有個客戶要求在印發票的時候,可以讓他們自行選擇所要列印的發票格式.
我發現我的常用方法不靈,因為要加入多個COMMANDBUTTON.
第1個要用代碼 REPORT FORM SalesInvoice1.frx TO PRINTER PREVIEW PROMPT
第2個要用代碼 REPORT FORM SalesInvoice2.frx TO PRINTER PREVIEW PROMPT
第3個要用代碼 REPORT FORM SalesInvoice3.frx TO PRINTER PREVIEW PROMPT
以此類推
如果有50個發票格式, 就要加入50個COMMANDBUTTON, 太多了.
不得不尋找新的辦法. 現在讓我不怕丟醜,分享我的小辦法, 總算班門弄斧.
1. 加入一個table, 命名為ReportFile,有如下field:
ReportType C(50),ReportName C(50)
在裡面加入資料如下:
'SalesInvoice','SalesInvoice1'
'SalesInvoice','SalesInvoice2'
'SalesInvoice','SalesInvoice3'
這三行資料的ReportType都是'SalesInvoice',說明SalesInvoice1,SalesInvoice2和SalesInvoice3這三個報表都屬於同一報表類別
2. 新增一個Procedure,命名為toReport
PROCEDURE toReport
LPARAMETERS lcReportType
SELECT COUNT(*) AS cnt;
FROM ReportFile;
WHERE ReportType=lcReportType;
INTO CURSOR myTmp NOFILTER
&&查詢報表種類符合條件的報表格式的數量
m.lnReportCount=myTmp.cnt
USE IN myTmp
IF m.lnReportCount<=1
&&沒有紀錄或只有1個報表格式,就直接使用 lcReportType 來生成報表
REPORT FORM (m.lcReportType) TO PRINTER PREVIEW PROMPT
ELSE &&有多個報表格式,就讓用戶從裡面選擇一個
DO FORM getReportName WITH m.lcReportType TO lcReportName
&& 在getReportName.scx上面使用一個Grid, 在裡面顯示在table ReportFile裡面所有ReportType為 m.lcReportType的紀錄,以便讓用戶選擇一個格式,然後關掉getReportName.scx並傳回lcReportName就是用戶選取的報表格式名稱
REPORT FORM (m.lcReportName) TO PRINTER PREVIEW PROMPT
ENDIF
3. 如此一來, 只需要一個COMMANDBUTTON就可以生成任何數量的報表格式, 在Click Event裡面使用如下代碼
toReport('SalesInvoice') _________________ 進銷存+生產製造+會計+員工薪資+CRM+POS零售+餐廳手機app+電商手機app+電商網站,物流系統. 正/簡體中文,英,日,泰,緬甸文. MS SQL Server + 前台 VFP + PHP 網站 + Flutter 手機 App, 都共享 MS SQL Server的資料. www.foxacc.com LINE: mike-lm |
|
回頂端 |
|
 |
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 2 樓
|
發表於: 星期一 六月 21, 2010 7:59 am 文章主題: |
|
|
恕我愚昧,
如Foxy兄所列要求:讓他們自行選擇所要列印的發票格式
意指該發票有不同的列印格式,
如果要求是3種格式,
本來就是要設計出三個 report form,
這一點應該是無庸自疑的!
您的目的只是把3個command button,
改成在browser裡點選,
是這樣嗎?
那麼如果客戶的要求是同一發票要有3種列印格式,
再加上一個申報用的發票明細表,
是不是要做出2個command button,
一個顯示 [SalesInvoice] (點這個出現browser),
一個顯示 [Detail SalesInvoice] (點這個直接列印)?
[SalesInvoice] 的button必需兩個動作才完成,
[Detail SalesInvoice] 只需一個動作就完成,
基於客戶執行上的方便性,
是不是直接將 [SalesInvoice1'] button 複製成3個,
再把 name 裡的 1 分別改成 2,3
設計上會有比較慢嗎? |
|
回頂端 |
|
 |
foxy

註冊時間: 2007-08-16 文章: 258 來自: 泰國
第 3 樓
|
發表於: 星期一 六月 21, 2010 9:21 am 文章主題: |
|
|
Jerry兄,
您的兩個button(1為預覽2為直接列印)是很好的設計.
在我的例子中,並不是一張銷售單據一定要印出3種格式, 而是用戶自行選擇要印其中的哪一種,可能只印一種格式,也可能印2種或3種都印. 簡單來說就是有稅和無稅的情況. 因為有稅,就要印出正規的稅務發票格式,因為無稅,就不敢印出正規的稅務發票格式, 而是印出送貨單的格式,這種格式就沒有用戶公司名字和地址以免被查到
本例中所講的3種列印格式只是舉例, 實際上, 用戶還可以根據這3種列印格式中的任何一種自行加入新的列印格式再作格式修改,就會有第4個第5個格式,等等, 是否我們還要加入更多的button, 不太靈活. 使用我這個小方法,就不需要加入更多button.
另外,一種單據不管有幾種列印格式, 它們都共享同一個cursor,而這個cursor是由select-SQL把跟當前單據有關的所有dbf融合在一起來生成的,也就沒有必要使用不同button來作不同的select-SQL _________________ 進銷存+生產製造+會計+員工薪資+CRM+POS零售+餐廳手機app+電商手機app+電商網站,物流系統. 正/簡體中文,英,日,泰,緬甸文. MS SQL Server + 前台 VFP + PHP 網站 + Flutter 手機 App, 都共享 MS SQL Server的資料. www.foxacc.com LINE: mike-lm |
|
回頂端 |
|
 |
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 4 樓
|
發表於: 星期一 六月 21, 2010 10:16 am 文章主題: |
|
|
## 用戶還可以根據這3種列印格式種的任何一種自行加入新的列印格式再作格式修改,就會有第4個第5個格式
3種列印格式,
小弟解譯為: 長得不一樣的報表
因此客戶如果要求新增列印格式,
設計端還是要去新增報表的...
您上面所要表達的,
是不是只是將commandbutton改成browser的方式?
小弟舉的2個button並不是預覽和列印,
button1 是您所謂的同一個CURSOR伸延出的無限格式,
button2 是另一個不同CURSOR的報表 |
|
回頂端 |
|
 |
syntech
註冊時間: 2003-05-16 文章: 4249 來自: Taipei,Taiwan
第 5 樓
|
發表於: 星期一 六月 21, 2010 11:01 am 文章主題: |
|
|
我是覺得不要為這個細節深究,
因為這都是CASE BY CASE的,
用 COMBOBOX或是LISTBOX 臨時ADD ITEM 也可以,
主要樓主的想法在於把報表名稱變數化,
這樣就可以減少維護的成本.
其實這個方式我們也用好久了. ^_^
不過並不提供使用者自己新增其他格式的報表,
只能以專案付費方式提供新報表,
當然,這也是 CASE BY CASE 的做法,
並不存在甚麼比較好比較差的問題 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 6 樓
|
發表於: 星期一 六月 21, 2010 11:23 am 文章主題: |
|
|
syntech 寫到: |
只能以專案付費方式提供新報表,
|
看來看去,就這句才是重點,其餘皆是枝微末節。 |
|
回頂端 |
|
 |
foxy

註冊時間: 2007-08-16 文章: 258 來自: 泰國
第 7 樓
|
發表於: 星期一 六月 21, 2010 1:24 pm 文章主題: |
|
|
jerryclt 寫到: | ## 用戶還可以根據這3種列印格式種的任何一種自行加入新的列印格式再作格式修改,就會有第4個第5個格式
3種列印格式,
小弟解譯為: 長得不一樣的報表
因此客戶如果要求新增列印格式,
設計端還是要去新增報表的...
您上面所要表達的,
是不是只是將commandbutton改成browser的方式?
小弟舉的2個button並不是預覽和列印,
button1 是您所謂的同一個CURSOR伸延出的無限格式,
button2 是另一個不同CURSOR的報表 |
##3種列印格式,
##小弟解譯為: 長得不一樣的報表
是. 但是裡面的資料欄位差不多
##因此客戶如果要求新增列印格式,
##設計端還是要去新增報表的...
因為資料欄位差不多, 我就不必為了一個差不多的報表花時間了, 而是軟體裡面加入功能,讓客戶自己加入報表格式並能修改. 這要求在compile exe 的時候要把那些報表設為 not include, 否則客戶不能自己更改報表格式 _________________ 進銷存+生產製造+會計+員工薪資+CRM+POS零售+餐廳手機app+電商手機app+電商網站,物流系統. 正/簡體中文,英,日,泰,緬甸文. MS SQL Server + 前台 VFP + PHP 網站 + Flutter 手機 App, 都共享 MS SQL Server的資料. www.foxacc.com LINE: mike-lm |
|
回頂端 |
|
 |
foxy

註冊時間: 2007-08-16 文章: 258 來自: 泰國
第 8 樓
|
發表於: 星期一 六月 21, 2010 1:26 pm 文章主題: |
|
|
ckp6250 寫到: | syntech 寫到: |
只能以專案付費方式提供新報表,
|
看來看去,就這句才是重點,其餘皆是枝微末節。 |
您講的太對了, 有錢賺才是重點  _________________ 進銷存+生產製造+會計+員工薪資+CRM+POS零售+餐廳手機app+電商手機app+電商網站,物流系統. 正/簡體中文,英,日,泰,緬甸文. MS SQL Server + 前台 VFP + PHP 網站 + Flutter 手機 App, 都共享 MS SQL Server的資料. www.foxacc.com LINE: mike-lm |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|