  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		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 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |