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

報表輸出文字檔技巧之二

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



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 1 樓

發表發表於: 星期三 四月 09, 2003 1:09 pm    文章主題: 報表輸出文字檔技巧之二 引言回覆

報表如果要輸出文字檔兼具美觀可參考以下

CLOSE ALL
RELEASE ALL
KMENUACF = .T.
FILE1 = "QTSJ.DBF"
FILE2 = "RSDA.DBF"
FFFF = "RSDA.DBF"
_SJ10 = CLRQ(RQCL0(KDATE()))
_SJ20 = KDATE()
_HS1 = 0
_HS2 = 2400
_GH = SPACE(6)
_BM = SPACE(4)
_HS = 0
_WN = " "
DO WHILE .T.
DO FORM "ktjsr1" TO OKK WITH "設置打卡時間範圍條件可以統計各種明細"
IF (_SJ10<=_SJ20 .AND. _SJ20-_SJ10<32) .OR. OKK=2
EXIT
ENDIF
MESSAGEBOX("日期輸錯,統計天數應小于32", 48, "")
ENDDO
= AYMX1()
CLOSE ALL
RELEASE ALL
CLEAR TYPEAHEAD
RETURN
ENDPROC
PROCEDURE AYMX1
_SJ1 = RQCL(_SJ10)
_SJ2 = RQCL(_SJ20)
CXTJ = "(A.RQ BETWEEN _SJ1 AND _SJ2) AND (A.HS1*100+A.MS1 BETWEEN _HS1 AND _HS2)"
_WN = ALLTRIM(_WN)
IF LEN(ALLTRIM(_GH))>0
CXTJ = CXTJ+" AND "+"(A.GH=_GH)"
ENDIF
IF LEN(ALLTRIM(_BM))>0
CXTJ = CXTJ+" AND "+"(B.bm=_BM)"
ENDIF
IF LEN(_WN)>0
CXTJ = CXTJ+" AND "+"(allt(a.wn)=_wn)"
ENDIF
DO CASE
CASE OKK=1
TMP01 = SYS(3)
= DELAY()
TMP02 = SYS(3)
SELECT 0
USE SHARED (FILE1) ALIAS A
IF .NOT. USED()
RETURN
ENDIF
SELECT 0
USE SHARED (FILE2) ALIAS B ORDER GH
IF .NOT. USED()
CLOSE ALL
RETURN
ENDIF
ON KEY LABEL ESC *
SELE B.GH AS GH,B.NAME AS NAME,B.ORDER AS ORDER,A.RQ AS RQ,HS1*100+MS1+1 AS DK,0000 AS rq1,0000 AS rq2,0000 AS rq3,0000 AS rq4,0000 AS rq5,0000 AS rq6,0000 AS rq7,0000 AS rq8 ,0000 AS rq9,0000 AS rq10,0000 AS rq11,0000 AS rq12,0000 AS rq13,0000 AS rq14,0000 AS rq15,0000 AS rq16,0000 AS RQ17 ,0000 AS rq18,0000 AS rq19,0000 AS rq20,0000 AS rq21,0000 AS rq22,0000 AS rq23,0000 AS rq24,0000 AS rq25,0000 AS RQ26 ,0000 AS rq27,0000 AS rq28,0000 AS rq29,0000 AS rq30,0000 AS rq31,0000 AS rq32 ,00 AS WN FROM A,B WHERE A.GH=B.GH AND &CXTJ INTO DBF (TMP01) ORDER BY B.GH,A.RQ
IF RECCOUNT()=0
CLOSE ALL
ERASE (TMP01+".DBF")
ERRORMSG = "沒有此時間段內的資料......!"
POP KEY
CLEAR TYPEAHEAD
DO RET
RETURN
ENDIF
WAIT WINDOW NOWAIT '正在進行資料處理,請等候......'
LJNUM = 1
LJGH = " "
LJRQ = 0
CLOSE ALL
USE EXCLUSIVE (TMP01)
REPLACE WN WITH COUNWN() ALL
ZZR = _SJ20-_SJ10+1
STRING = "GH:H='編號',NAME:H='名稱',WNS:H='次數'"
STRING1 = "GH,NAME,WNS"
STRING2 = " 編號 名稱 次 "
DIMENSION RQSZ(32)
FOR KI = 1 TO ZZR
RQVS = "RQ"+ALLTRIM(STR(KI, 2))
REPLACE (RQVS) WITH DK ALL FOR RQ=RQCL(_SJ10)
STRING = STRING+","+RQVS+":H='"+RIGHT(RQCL(_SJ10), 2)+"日'"
STRING1 = STRING1+","+RQVS
STRING2 = STRING2+RIGHT(RQCL(_SJ10), 2)+"日 "
RQSZ(KI) = RIGHT(RQCL(_SJ10), 2)+"日"
_SJ10 = _SJ10+1
ENDFOR
FOR KI = KI TO 31
RQSZ(KI) = RIGHT(RQCL(_SJ10), 2)+"日"
_SJ10 = _SJ10+1
ENDFOR
KRECN = RECCOUNT()
APPEND FROM (FILE2)
IF RECCOUNT()>KRECN
GOTO KRECN+1
ENDIF
REPLACE NAME WITH " ", WN WITH 99 REST
SELECT GH, NAME, ORDER, WN, " " AS WNS, DKVAL(MAX(rq1)) AS rq1, DKVAL(MAX(rq2)) AS rq2, DKVAL(MAX(rq3)) AS rq3, DKVAL(MAX(rq4)) AS rq4, DKVAL(MAX(rq5)) AS rq5, DKVAL(MAX(rq6)) AS rq6, DKVAL(MAX(rq7)) AS rq7, DKVAL(MAX(rq8)) AS rq8, DKVAL(MAX(rq9)) AS rq9, DKVAL(MAX(rq10)) AS rq10, DKVAL(MAX(rq11)) AS rq11, DKVAL(MAX(rq12)) AS rq12, DKVAL(MAX(rq13)) AS rq13, DKVAL(MAX(rq14)) AS rq14, DKVAL(MAX(rq15)) AS rq15, DKVAL(MAX(rq16)) AS rq16, DKVAL(MAX(RQ17)) AS RQ17, DKVAL(MAX(rq18)) AS rq18, DKVAL(MAX(rq19)) AS rq19, DKVAL(MAX(rq20)) AS rq20, DKVAL(MAX(rq21)) AS rq21, DKVAL(MAX(rq22)) AS rq22, DKVAL(MAX(rq23)) AS rq23, DKVAL(MAX(rq24)) AS rq24, DKVAL(MAX(rq25)) AS rq25, DKVAL(MAX(RQ26)) AS RQ26, DKVAL(MAX(rq27)) AS rq27, DKVAL(MAX(rq28)) AS rq28, DKVAL(MAX(rq29)) AS rq29, DKVAL(MAX(rq30)) AS rq30, DKVAL(MAX(rq31)) AS rq31, DKVAL(MAX(rq32)) AS rq32 FROM (TMP01) GROUP BY GH, WN ORDER BY ORDER INTO TABLE (TMP02)
REPLACE WNS WITH STR(WN, 2) ALL FOR WN<>99
DO KXDZDZK WITH "GH"
DELETE ALL FOR LEN(ALLTRIM(GH))>0 .AND. WN=99
CLOSE ALL
WAIT CLEAR
SELECT 0
USE EXCLUSIVE (TMP02)
VIDO = SYS(2015)
P_COLOR = "GR/W,W+/GR,W/W,W+/GR,W/GR,W+/GR,GR/W,W/GR,N/W,W+/W"
DEFINE WINDOW (VIDO) FROM 2, 5 TO SROWS()-2, SCOLS()-3 TITLE '資料查詢' SYSTEM COLOR (P_COLOR)
ACTIVATE WINDOW (VIDO)
= KEYPRG()
ON KEY LABEL F9 DO yprt WITH STRING1,STRING2,"KQDKSJ.DBF"
ON KEY LABEL f1 DO PROM0
ON KEY LABEL esc
BROWSE FIELDS &STRING NOEDIT WINDOW (VIDO) COLOR SCHEME 20 NODEL NOAP NORE NOMENU
RELEASE WINDOW (VIDO)
= KEYPRG()
CLOSE ALL
ERASE (TMP01+".dbf")
ERASE (TMP01+".cdx")
ERASE (TMP02+".dbf")
ERASE (TMP02+".cdx")
CASE OKK=2
CLEAR READ
CLOSE ALL
RELEASE ALL
ENDCASE
RETURN
ENDPROC
FUNCTION DKVAL
PARAMETER DKSUM
IF DKSUM=0
RETURN " "
ENDIF
DKSUM = DKSUM-1
RETURN PADL(ALLTRIM(STR(INT(DKSUM/100), 2)), 2, "0")+PADL(ALLTRIM(STR(MOD(DKSUM, 100), 2)), 2, "0")
ENDFUNC
FUNCTION COUNWN
IF GH<>LJGH .OR. RQ<>LJRQ
LJNUM = 1
LJGH = GH
LJRQ = RQ
ELSE
LJNUM = LJNUM+1
ENDIF
RETURN LJNUM
ENDFUNC
PROCEDURE yprt
PARAMETER STR0, STR1, PDBFM
PUSH KEY CLEAR
IF RECCOUNT()=0
RETURN
ENDIF
= KEYPRG()
IF .NOT. PRINTSTATUS()
ERRORMSG = "您的打印機未准備好,請檢查....!"
POP KEY
CLEAR TYPEAHEAD
DO RET
RETURN
ENDIF
WAIT WINDOW NOWAIT '正在打印資料,(ESC 退出)......'
STORE RECNO() TO REC
SET CONSOLE OFF
SET DEVICE TO PRINTER
SET PRINTER TO KQDKSJ.TXT
SET PRINTER ON
GOTO TOP
? " 月 度 明 細 "
?
? SPACE(12)+'起始日期:'+_SJ1+SPACE(12)+'終止日期:'+_SJ2
?
? STR1
DO WHILE .NOT. EOF()
IF LASTKEY()=27
EXIT
ENDIF
?&STR0
SKIP
ENDDO
WAIT CLEAR
SET PRINTER OFF
SET PRINTER TO
SET DEVICE TO SCREEN
IF ZZR<=16
REP0 = "WREP_1.FRX"
ENDIF
IF ZZR>16 .AND. ZZR<=26
REP0 = "WREP_2.FRX"
ENDIF
IF ZZR>26
REP0 = "WREP_3.FRX"
ENDIF
GOTO REC
DO PRT WITH PDBFM
SET CONSOLE ON
POP KEY
CLEAR TYPEAHEAD
RETURN
ENDPROC
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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