w_publ_pageretr.srw 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. $PBExportHeader$w_publ_pageretr.srw
  2. $PBExportComments$翻页窗口
  3. forward
  4. global type w_publ_pageretr from w_publ_base
  5. end type
  6. type sle_usual_query from u_sleedit within w_publ_pageretr
  7. end type
  8. type cb_retrieveall from uo_imflatbutton within w_publ_pageretr
  9. end type
  10. type em_pagerowno from editmask within w_publ_pageretr
  11. end type
  12. type dw_pageretr from u_dw_rbtnfilter within w_publ_pageretr
  13. end type
  14. type st_1 from statictext within w_publ_pageretr
  15. end type
  16. type cb_nextpage from uo_imflatbutton within w_publ_pageretr
  17. end type
  18. end forward
  19. global type w_publ_pageretr from w_publ_base
  20. integer width = 3675
  21. integer height = 2892
  22. string title = "分页"
  23. event ue_usual_query_filt ( )
  24. event ue_usual_query_retr ( )
  25. event user_key ( )
  26. event retrieve_pageretr ( )
  27. event ue_page1 ( )
  28. event ue_page2 ( )
  29. event ue_page3 ( )
  30. event ue_page4 ( )
  31. sle_usual_query sle_usual_query
  32. cb_retrieveall cb_retrieveall
  33. em_pagerowno em_pagerowno
  34. dw_pageretr dw_pageretr
  35. st_1 st_1
  36. cb_nextpage cb_nextpage
  37. end type
  38. global w_publ_pageretr w_publ_pageretr
  39. type variables
  40. datastore ds_curquery //缓存查询条件
  41. String ori_oldselect //保存原始SELECT
  42. String ls_newselect //保存加入查询条件后的SELECT
  43. String pkcolumndbtname //PK列数据库中列名
  44. Long onepage_rowlmno = 100 //页行最大行数
  45. Boolean retrieve_all = FALSE //是否全部RETRIEVE(不分页)
  46. Int mode = 0
  47. boolean ChkStorage = False //是否检查仓库权限
  48. //工作模式:0-编辑 1-带字符串参数预选择的选择/编辑
  49. Long arg_pkid //目标定位id //备用
  50. String arg_string_code //默认常用查询内容
  51. String OLD_TITLE = ''
  52. s_edit_index_tran s_tran //传递参数使用
  53. Int retrmode = 0 // 0 retrieve all;1 first page ;2 prior page;3 next page;4 last page
  54. Boolean if_sharedata = FALSE //是否接受share
  55. datastore ds_share //用于存放share的数据
  56. Boolean if_power_sendout = TRUE
  57. Boolean if_power_print = TRUE
  58. end variables
  59. forward prototypes
  60. public function integer wf_editindex_lockf ()
  61. public function integer wf_retrieveuc (datawindow arg_dw, string arg_newselect, integer arg_retrmode)
  62. public function string wf_get_pkcolumndbtname (datawindow arg_dw)
  63. end prototypes
  64. event ue_usual_query_filt();//string obj_expr=''
  65. //if trim(sle_usual_query.text)<>'' then
  66. // if pos(trim(sle_usual_query.text),'%')=0 then
  67. // obj_expr=obj_expr+'( inwarecode like "%'+trim(sle_usual_query.text)+'%" )'
  68. // else
  69. // obj_expr=obj_expr+'( inwarecode like "'+trim(sle_usual_query.text)+'" )'
  70. // end if
  71. //end if
  72. //
  73. //dw_pageretr.setfilter(obj_expr)
  74. //
  75. //dw_pageretr.SetRedraw(False)
  76. //dw_pageretr.Filter()
  77. //IF dw_pageretr.RowCount() >= 1 THEN
  78. // dw_pageretr.SelectRow(0,False)
  79. // dw_pageretr.SetRow(1)
  80. // dw_pageretr.SelectRow(1,True)
  81. //END IF
  82. //dw_pageretr.TriggerEvent(RowFocusChanged!)
  83. //dw_pageretr.SetRedraw(True)
  84. end event
  85. event ue_usual_query_retr();//string ls_querystrpart=''
  86. //ls_newselect=lower(ori_oldselect)
  87. //if trim(sle_usual_query.text)<>'' then
  88. // if pos(trim(sle_usual_query.text),'%')=0 then
  89. // ls_querystrpart= ls_querystrpart + "(u_inware.inwarecode like '%"+trim(sle_usual_query.text)+"%')"
  90. // else
  91. // ls_querystrpart=ls_querystrpart + "(u_inware.inwarecode like '"+trim(sle_usual_query.text)+"')"
  92. // end if
  93. //
  94. // if pos(ls_newselect," where ") <> 0 then
  95. // ls_newselect=ls_newselect+" and ("+ls_querystrpart+')'
  96. // else
  97. // ls_newselect=ls_newselect+" where ("+ls_querystrpart+')'
  98. // end if
  99. //end if
  100. //wf_retrieveuc(dw_pageretr,ls_newselect,1)
  101. //this.triggerevent('retrieve_pageretr')
  102. //
  103. end event
  104. event user_key();IF KeyDown(KeyPageUp!) THEN
  105. IF NOT dw_edit_mode THEN THIS.TriggerEvent('ue_page3')
  106. ELSEIF KeyDown(KeyPageDown!) THEN
  107. IF NOT dw_edit_mode THEN THIS.TriggerEvent('ue_page2')
  108. END IF
  109. end event
  110. event retrieve_pageretr();Boolean cb_retrieveall_enabled,cb_nextpage_enabled
  111. Boolean cb_func_enabled,cb_retrieve_enabled
  112. cb_retrieveall_enabled = cb_retrieveall.Enabled
  113. cb_nextpage_enabled = cb_nextpage.Enabled
  114. cb_func_enabled = cb_func.Enabled
  115. cb_retrieveall.Enabled = FALSE
  116. cb_nextpage.Enabled = FALSE
  117. cb_func.Enabled = FALSE
  118. SetPointer(HourGlass!)
  119. dw_pageretr.Retrieve()
  120. IF dw_pageretr.RowCount() > 0 AND dw_pageretr.GetRow() = 0 THEN dw_pageretr.SetRow(1)
  121. SetPointer(Arrow!)
  122. cb_nextpage.Enabled = cb_nextpage_enabled
  123. cb_retrieveall.Enabled = cb_retrieveall_enabled
  124. cb_func.Enabled = cb_func_enabled
  125. end event
  126. event ue_page1();wf_retrieveuc(dw_pageretr,ls_newselect,1)
  127. THIS.TriggerEvent('RETRIEVE_pageretr')
  128. end event
  129. event ue_page2();wf_retrieveuc(dw_pageretr,ls_newselect,2)
  130. THIS.TriggerEvent('RETRIEVE_pageretr')
  131. end event
  132. event ue_page3();wf_retrieveuc(dw_pageretr,ls_newselect,3)
  133. THIS.TriggerEvent('RETRIEVE_pageretr')
  134. end event
  135. event ue_page4();wf_retrieveuc(dw_pageretr,ls_newselect,4)
  136. THIS.TriggerEvent('RETRIEVE_pageretr')
  137. end event
  138. public function integer wf_editindex_lockf ();//wf_editindex_lockf
  139. IF retrieve_all OR dw_edit_mode THEN
  140. cb_nextpage.Enabled = FALSE
  141. cb_retrieveall.Enabled = FALSE
  142. em_pagerowno.Enabled = FALSE
  143. ELSE
  144. cb_nextpage.Enabled = TRUE
  145. cb_retrieveall.Enabled = TRUE
  146. em_pagerowno.Enabled = TRUE
  147. END IF
  148. IF dw_edit_mode THEN
  149. sle_usual_query.Enabled = FALSE
  150. cb_func.Enabled = FALSE
  151. ELSE
  152. sle_usual_query.Enabled = TRUE
  153. cb_func.Enabled = TRUE
  154. END IF
  155. RETURN 1
  156. end function
  157. public function integer wf_retrieveuc (datawindow arg_dw, string arg_newselect, integer arg_retrmode);//====================================================================
  158. // Function: wf_retrieveuc()
  159. //--------------------------------------------------------------------
  160. // Description: 分页拼retr语句
  161. //--------------------------------------------------------------------
  162. // Arguments:
  163. // integer arg_retrmode: 0 retrieve all;1 first page ;2 prior page;3 next page;4 last page
  164. //--------------------------------------------------------------------
  165. // Returns: integer
  166. //--------------------------------------------------------------------
  167. // Author: yyx Date: 2003.10.17
  168. //--------------------------------------------------------------------
  169. // Modify History:
  170. //
  171. //====================================================================
  172. //取得当前的最大\最小ID
  173. //按上下翻页命令,拼接最新SELECT语句
  174. retrmode=arg_retrmode
  175. IF arg_retrmode=0 or retrieve_all THEN
  176. arg_dw.Modify("datawindow.table.select = ~"" + arg_newselect+ "~"")
  177. GOTO EXT
  178. END IF
  179. string cur_page_newselect,ls_pkcolname,LS_PAGE_ter=''
  180. cur_page_newselect=lower(trim(arg_newselect))
  181. LONG MAX_ID=0,MIN_ID=0,LS_I,ls_id
  182. ls_pkcolname=arg_dw.Describe("#1.name") //取得ID列名称
  183. if arg_retrmode<>1 then
  184. MAX_ID=0
  185. Min_ID=0
  186. FOR LS_I=1 TO arg_dw.ROWCOUNT()
  187. ls_id=arg_dw.GetItemNumber(ls_i, ls_pkcolname)
  188. if LS_I=1 then
  189. MAX_ID=ls_id
  190. Min_ID=ls_id
  191. end if
  192. if not isnull(ls_id) then
  193. if MAX_ID<ls_id then MAX_ID=ls_id
  194. if Min_ID>ls_id then Min_ID=ls_id
  195. end if
  196. NEXT
  197. FOR LS_I=1 TO arg_dw.FilteredCount()
  198. ls_id=arg_dw.GetItemNumber(ls_i, ls_pkcolname,filter!,true)
  199. if LS_I=1 and MAX_ID=0 and Min_ID=0 then
  200. MAX_ID=ls_id
  201. Min_ID=ls_id
  202. end if
  203. if not isnull(ls_id) then
  204. if MAX_ID<ls_id then MAX_ID=ls_id
  205. if Min_ID>ls_id then Min_ID=ls_id
  206. end if
  207. NEXT
  208. end if
  209. cur_page_newselect=trim(cur_page_newselect)
  210. IF not (retrieve_all or retrmode=0) then
  211. cur_page_newselect='select top '+string(onepage_rowlmno)+' '+mid( cur_page_newselect , 8)
  212. end if
  213. CHOOSE CASE arg_retrmode
  214. CASE 1 //第一页
  215. LS_PAGE_ter=''
  216. CASE 2 //上一页
  217. LS_PAGE_ter=pkcolumndbtname+'>'+STRING(MAX_ID)
  218. CASE 3 //下一页
  219. LS_PAGE_ter=pkcolumndbtname+'<'+STRING(Min_ID)
  220. CASE 4 //末页
  221. LS_PAGE_ter=''
  222. END CHOOSE
  223. IF TRIM(LS_PAGE_ter)<>'' THEN
  224. if Pos(cur_page_newselect," where ") <> 0 then
  225. cur_page_newselect=cur_page_newselect+" AND ("+LS_PAGE_ter+')'
  226. else
  227. cur_page_newselect=cur_page_newselect+" WHERE ("+LS_PAGE_ter+')'
  228. end if
  229. END IF
  230. IF arg_retrmode=2 or arg_retrmode=4 THEN
  231. cur_page_newselect=cur_page_newselect+' ORDER BY '+pkcolumndbtname
  232. ELSE
  233. cur_page_newselect=cur_page_newselect+' ORDER BY '+pkcolumndbtname+' DESC'
  234. END IF
  235. arg_dw.Modify("datawindow.table.select = ~"" + cur_page_newselect+ "~"")
  236. EXT:
  237. RETURN 1
  238. end function
  239. public function string wf_get_pkcolumndbtname (datawindow arg_dw);//====================================================================
  240. // Function: wf_get_pkcolumndbtname()
  241. //--------------------------------------------------------------------
  242. // Description: 取第一列为关键字
  243. //--------------------------------------------------------------------
  244. // Arguments:
  245. // value datawindow arg_dw
  246. //--------------------------------------------------------------------
  247. // Returns: string
  248. //--------------------------------------------------------------------
  249. // Author: yyx Date: 2003.10.22
  250. //--------------------------------------------------------------------
  251. // Modify History:
  252. //
  253. //====================================================================
  254. string ls_pkcolumndbtname,ls_str,tmp_oldselect
  255. long l_pos
  256. ls_pkcolumndbtname=arg_dw.Describe("#1.dbname")
  257. if pos(ls_pkcolumndbtname,'.')<=0 then
  258. tmp_oldselect=trim(arg_dw.Describe("DataWindow.Table.Select"))
  259. ls_str=mid(tmp_oldselect,8)
  260. if pos(ls_str,'.')>pos(ls_str,',') then
  261. goto ext
  262. else
  263. ls_pkcolumndbtname=left(ls_str,pos(ls_str,',') - 1)
  264. end if
  265. end if
  266. ext:
  267. return ls_pkcolumndbtname
  268. end function
  269. on w_publ_pageretr.create
  270. int iCurrent
  271. call super::create
  272. this.sle_usual_query=create sle_usual_query
  273. this.cb_retrieveall=create cb_retrieveall
  274. this.em_pagerowno=create em_pagerowno
  275. this.dw_pageretr=create dw_pageretr
  276. this.st_1=create st_1
  277. this.cb_nextpage=create cb_nextpage
  278. iCurrent=UpperBound(this.Control)
  279. this.Control[iCurrent+1]=this.sle_usual_query
  280. this.Control[iCurrent+2]=this.cb_retrieveall
  281. this.Control[iCurrent+3]=this.em_pagerowno
  282. this.Control[iCurrent+4]=this.dw_pageretr
  283. this.Control[iCurrent+5]=this.st_1
  284. this.Control[iCurrent+6]=this.cb_nextpage
  285. end on
  286. on w_publ_pageretr.destroy
  287. call super::destroy
  288. destroy(this.sle_usual_query)
  289. destroy(this.cb_retrieveall)
  290. destroy(this.em_pagerowno)
  291. destroy(this.dw_pageretr)
  292. destroy(this.st_1)
  293. destroy(this.cb_nextpage)
  294. end on
  295. event open;call super::open;OLD_TITLE = This.Title
  296. s_tran = Message.PowerObjectParm
  297. IF Not IsNull(s_tran) THEN
  298. retrieve_all = local_retrieve_all //s_tran.if_retrieve_all
  299. mode = s_tran.work_mode
  300. arg_pkid = s_tran.arg_pkid
  301. arg_string_code = s_tran.arg_string_code
  302. if_sharedata = s_tran.if_sharedata //是否应用sharedata,当retrieve_all=true是生效
  303. ds_share = s_tran.ds_share
  304. if_power_sendout = s_tran.if_sendout
  305. if_power_print = s_tran.if_print
  306. END IF
  307. dw_pageretr.RBUTTON_FILTER_USE = True //右键查询功能开关
  308. dw_pageretr.titleclick_sort_use = True //单击标题排序功能开关
  309. dw_pageretr.SetTransObject (sqlca)
  310. pkcolumndbtname = wf_get_pkcolumndbtname(dw_pageretr) //取第一列为关键字
  311. ori_oldselect = dw_pageretr.Describe("DataWindow.Table.Select")
  312. IF ChkStorage THEN
  313. ori_oldselect = f_modify_selectstr(ori_oldselect) //只显示所管的仓库单据
  314. END IF
  315. ls_newselect = ori_oldselect
  316. ds_curquery = Create DATASTORE
  317. ds_curquery.DataObject = 'd_extr_find'
  318. ds_curquery.SetTransObject (sqlca)
  319. wf_editindex_lockf()
  320. sle_usual_query.Text = Trim(arg_string_code)
  321. IF Not retrieve_all THEN
  322. This.TriggerEvent("ue_usual_query_RETR") //修改ls_newselect,retrieve
  323. ELSE
  324. IF if_sharedata THEN
  325. ds_share.ShareData(dw_pageretr)
  326. ELSE
  327. wf_retrieveuc(dw_pageretr,ls_newselect,1)
  328. This.TriggerEvent('RETRIEVE_pageretr')
  329. END IF
  330. END IF
  331. IF retrieve_all THEN
  332. This.TriggerEvent("ue_usual_query_filt")
  333. END IF
  334. end event
  335. event ue_retr;call super::ue_retr;s_extrtriequery_tran s_dbdw
  336. s_dbdw.query_dw=dw_pageretr
  337. s_dbdw.ptn_ds=ds_curquery
  338. s_dbdw.query_oldselect=ori_oldselect
  339. string ls_select=''
  340. openwithparm(w_extr_query,s_dbdw)
  341. ls_select = message.stringparm
  342. if trim(ls_select)="" or isnull(ls_select) then
  343. return
  344. else
  345. ls_newselect=ls_select
  346. end if
  347. dw_pageretr.setredraw(false)
  348. wf_retrieveuc(dw_pageretr,ls_newselect,1)
  349. this.triggerevent('retrieve_pageretr')
  350. dw_pageretr.setredraw(true)
  351. end event
  352. type cb_func from w_publ_base`cb_func within w_publ_pageretr
  353. integer x = 731
  354. integer y = 4
  355. integer height = 84
  356. integer taborder = 30
  357. end type
  358. type cb_exit from w_publ_base`cb_exit within w_publ_pageretr
  359. integer x = 3255
  360. integer y = 2144
  361. integer height = 92
  362. integer taborder = 20
  363. end type
  364. type sle_usual_query from u_sleedit within w_publ_pageretr
  365. integer x = 219
  366. integer y = 4
  367. integer height = 92
  368. end type
  369. event inputchanged;call super::inputchanged;IF retrieve_all THEN
  370. PARENT.TRIGGEREVENT("ue_usual_query_filt")
  371. END IF
  372. end event
  373. event keyup;call super::keyup;IF NOT dw_edit_mode THEN
  374. If Key = KeyDownArrow! Then //
  375. dw_pageretr.ScrollNextRow()
  376. End If
  377. If Key = KeyUPArrow! Then //
  378. dw_pageretr.ScrollPriorRow()
  379. End If
  380. END IF
  381. end event
  382. event modified;call super::modified;IF retrieve_all or retrmode=0 THEN
  383. // PARENT.TRIGGEREVENT("ue_usual_query_filt")
  384. ELSE
  385. PARENT.TRIGGEREVENT("ue_usual_query_RETR")
  386. END IF
  387. end event
  388. type cb_retrieveall from uo_imflatbutton within w_publ_pageretr
  389. integer x = 1202
  390. integer width = 165
  391. integer height = 84
  392. integer taborder = 70
  393. string text = "首页"
  394. end type
  395. event clicked;call super::clicked;PARENT.TriggerEvent('ue_page1')
  396. end event
  397. type em_pagerowno from editmask within w_publ_pageretr
  398. integer x = 901
  399. integer width = 293
  400. integer height = 84
  401. integer taborder = 60
  402. integer textsize = -9
  403. integer weight = 400
  404. fontcharset fontcharset = gb2312charset!
  405. fontpitch fontpitch = variable!
  406. string facename = "宋体"
  407. long textcolor = 33554432
  408. string text = "1000"
  409. borderstyle borderstyle = stylelowered!
  410. string mask = "#####0"
  411. boolean spin = true
  412. end type
  413. event constructor;this.text=f_ProfileString (sys_empid,dw_pageretr.DATAOBJECT, "pagerowno",'100')
  414. onepage_rowlmno=long(this.text)
  415. end event
  416. event modified;IF LONG(THIS.TEXT)>0 THEN
  417. else
  418. THIS.TEXT='1'
  419. end if
  420. onepage_rowlmno=LONG(THIS.TEXT)
  421. f_SetProfileString (sys_empid,dw_pageretr.DATAOBJECT, "pagerowno", THIS.TEXT)
  422. end event
  423. type dw_pageretr from u_dw_rbtnfilter within w_publ_pageretr
  424. integer y = 104
  425. integer width = 1184
  426. integer height = 1984
  427. integer taborder = 40
  428. boolean titlebar = true
  429. boolean maxbox = true
  430. boolean hscrollbar = true
  431. boolean vscrollbar = true
  432. boolean resizable = true
  433. boolean border = false
  434. boolean hsplitscroll = true
  435. borderstyle borderstyle = styleraised!
  436. end type
  437. event clicked;call super::clicked;IF Not( dw_edit_mode OR row <= 0 ) THEN THIS.SetRow(row)
  438. end event
  439. event rowfocuschanged;call super::rowfocuschanged;IF dw_edit_mode THEN RETURN
  440. IF currentrow > 0 THEN
  441. THIS.SelectRow(0,FALSE)
  442. THIS.SelectRow(currentrow,TRUE)
  443. END IF
  444. end event
  445. event dwnkey;call super::dwnkey;parent.postevent('user_key')
  446. end event
  447. event rowfocuschanging;call super::rowfocuschanging;IF dw_edit_mode THEN RETURN 1
  448. end event
  449. type st_1 from statictext within w_publ_pageretr
  450. integer x = 27
  451. integer y = 24
  452. integer width = 219
  453. integer height = 48
  454. integer textsize = -9
  455. integer weight = 400
  456. fontcharset fontcharset = gb2312charset!
  457. fontpitch fontpitch = variable!
  458. string facename = "宋体"
  459. long textcolor = 33554432
  460. long backcolor = 134217739
  461. string text = "编码含:"
  462. boolean focusrectangle = false
  463. end type
  464. type cb_nextpage from uo_imflatbutton within w_publ_pageretr
  465. integer x = 1367
  466. integer width = 110
  467. integer height = 84
  468. integer taborder = 80
  469. boolean bringtotop = true
  470. string text = "▼"
  471. end type
  472. event clicked;call super::clicked;m_Dfc_Control_PopupMenu dmPopupMenu
  473. string menustr
  474. menustr="Text=下页~tEvent=ue_page3"
  475. menustr = menustr + "|" + "Text=上页~tEvent=ue_page2"
  476. menustr = menustr + "|" + "Text=末页~tEvent=ue_page4"
  477. if len(trim(menustr))<>0 then
  478. dmPopupMenu = Create m_Dfc_Control_PopupMenu
  479. dmPopupMenu.mf_BuildMenu(This, menustr)
  480. dmPopupMenu.mf_PopMenu()
  481. Destroy dmPopupMenu
  482. end if
  483. end event