$PBExportHeader$w_rpt_def.srw forward global type w_rpt_def from w_rpt_publ_base end type type dw_report from u_rpt_dw_rbtnfilter within w_rpt_def end type type cb_add from uo_rpt_imflatbutton within w_rpt_def end type type cb_edit from uo_rpt_imflatbutton within w_rpt_def end type type cb_delet from uo_rpt_imflatbutton within w_rpt_def end type type cb_retrieve from uo_rpt_imflatbutton within w_rpt_def end type type cb_report from uo_rpt_imflatbutton within w_rpt_def end type type cb_imexport from uo_rpt_imflatbutton within w_rpt_def end type type cb_saveas from uo_rpt_imflatbutton within w_rpt_def end type type cb_view from uo_rpt_imflatbutton within w_rpt_def end type type ln_bar2 from line within w_rpt_def end type type ln_bar from line within w_rpt_def end type type r_bar from rectangle within w_rpt_def end type end forward global type w_rpt_def from w_rpt_publ_base integer width = 3639 integer height = 2372 string title = "自定义报表" boolean maxbox = true windowstate windowstate = maximized! event ue_f7 ( ) event ue_f8 ( ) event dwnkey pbm_dwnkey event ue_viewprint ( ) dw_report dw_report cb_add cb_add cb_edit cb_edit cb_delet cb_delet cb_retrieve cb_retrieve cb_report cb_report cb_imexport cb_imexport cb_saveas cb_saveas cb_view cb_view ln_bar2 ln_bar2 ln_bar ln_bar r_bar r_bar end type global w_rpt_def w_rpt_def type variables //long ll_billid uo_reportdef uo_report Boolean ls_update_flag = TRUE str_rpt s_rpt_parm s_rpt_bill s_bill[] Long dw_bill_h,dw_report_h,dw_report_w long modifyrow_no end variables forward prototypes public function integer wf_face_change () public function integer wf_saveas (ref string arg_msg) end prototypes event ue_f7();Long report_row report_row = dw_report.GetRow() IF report_row <= 0 THEN RETURN s_rpt_parm.rid = dw_report.Object.rpid[report_row] //报表编号 s_rpt_parm.rcname = dw_report.Object.rpname[report_row] //报表名称 s_rpt_parm.billName = '自定义报表' s_rpt_parm.retr_pram_falg = -1 s_rpt_parm.retr_flag = false ////////////自定义报表区别 //s_rpt_add.userdw//前台报表设计时共享的用户数据dw IF dw_report.Object.flag[report_row] = 0 THEN s_rpt_parm.auto = "auto" s_rpt_parm.save_flag = false ELSE s_rpt_parm.auto = "" s_rpt_parm.save_flag = true END IF s_rpt_parm.transation = sqlca//数据库连接 OpenWithParm(w_rpt_main,s_rpt_parm) end event event ue_f8();Long ll_rpt_row,ll_bill_row s_rpt_imex s_rpt_imexreport ll_rpt_row = dw_report.GetRow() IF ll_rpt_row <= 0 THEN s_rpt_imexreport.rpid = 0 s_rpt_imexreport.Billid = 0 ELSE s_rpt_imexreport.rpid = dw_report.Object.rpid[ll_rpt_row] s_rpt_imexreport.RpName = dw_report.Object.RpName[ll_rpt_row] s_rpt_imexreport.Flag = dw_report.Object.Flag[ll_rpt_row] s_rpt_imexreport.Ifuse = dw_report.Object.Ifuse[ll_rpt_row] s_rpt_imexreport.Billid = 0 s_rpt_imexreport.auditprint = dw_report.Object.auditprint[ll_rpt_row] s_rpt_imexreport.descrp = dw_report.Object.descrp[ll_rpt_row] END IF OpenWithParm(w_rpt_imexport,s_rpt_imexreport) dw_report.retrieve() end event event ue_viewprint();long report_row,bill_row report_row = dw_report.getrow() if report_row <= 0 then return if dw_report.object.flag[report_row] = 0 then return s_rpt_print_msg s_print s_print.rpid = dw_report.object.rpid[report_row] s_print.retr_flag = false ////////////自定义报表区别 s_print.tag_text = '自定义报表' s_print.rpname = dw_report.object.rpname[report_row] openwithparm(w_rpt_preview,s_print) end event public function integer wf_face_change ();long i IF dw_edit_mode THEN cb_retrieve.Enabled = FALSE cb_delet.Enabled = FALSE cb_imexport.Enabled = FALSE cb_saveas.Enabled = FALSE cb_report.Enabled = FALSE cb_view.Enabled = FALSE cb_edit.Text = "放弃&E" cb_add.Text = "保存&S" cb_edit.normalpicname = 'Undo.bmp' cb_add.normalpicname = 'Save.bmp' FOR i = 1 TO 3 dw_report.SetTabOrder ( i , i * 10 ) NEXT ELSE cb_retrieve.Enabled = TRUE cb_delet.Enabled = TRUE cb_imexport.Enabled = TRUE cb_report.Enabled = TRUE cb_saveas.Enabled = TRUE cb_report.Enabled = TRUE cb_view.Enabled = TRUE cb_edit.Text = "修改&E" cb_add.Text = "新建&S" cb_edit.normalpicname = 'OPEN.bmp' cb_add.normalpicname = 'new.bmp' FOR i = 1 TO 3 dw_report.SetTabOrder ( i , 0 ) NEXT END IF cb_edit.of_init_draw() cb_add.of_init_draw() cb_edit.of_paint() cb_add.of_paint() cb_edit.TriggerEvent('ue_textchange') cb_add.TriggerEvent('ue_textchange') RETURN 1 end function public function integer wf_saveas (ref string arg_msg);Long ll_ifuse,ll_flag,ll_rpid,ll_billid Long ll_row,rslt = 1 String ls_rpname,ls_descrp ll_row = dw_report.GetRow() IF ll_row <= 0 THEN arg_msg = '请先选择单据格式' rslt = 0 GOTO ext END IF s_inputbox_rpt S_SREU S_SREU.Title = '请输入单据格式/报表名称' S_SREU.OLD_TEXT = '' OpenWithParm(w_inputbox_rpt,S_SREU) ls_rpname = Message.StringParm IF ls_rpname = '' THEN arg_msg = '取消另存单据格式' rslt = 0 GOTO ext END IF ll_ifuse = dw_report.Object.ifuse[ll_row] ll_flag = dw_report.Object.flag[ll_row] ll_rpid = dw_report.Object.rpid[ll_row] ll_billid = dw_report.Object.billid[ll_row] ls_descrp = dw_report.Object.descrp[ll_row] Blob lblob SELECTBLOB Rpsyntax INTO :lblob FROM u_report_list Where rpid = :ll_rpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据格式数据失败' rslt = 0 GOTO ext END IF IF IsNull(lblob) THEN arg_msg = '单据格式没有数据,不能复制' rslt = 0 GOTO ext END IF Long ll_newid ll_newid = f_sys_scidentity_rpt(0,"u_report_list","rpid",arg_msg,FALSE,sqlca) IF ll_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_Report_list ( RpID, ifuse, RpName, flag, billid , descrp) VALUES ( :ll_newid, :ll_ifuse, :ls_RpName, :ll_flag, :ll_billid, :ls_descrp); IF sqlca.SQLCode <> 0 THEN arg_msg = '复制单据格式基本信息失败' rslt = 0 GOTO ext END IF UPDATEBLOB u_report_list Set Rpsyntax = :lblob Where rpid = :ll_newid; IF sqlca.SQLCode <> 0 THEN arg_msg = '复制单据格式数据失败' rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function on w_rpt_def.create int iCurrent call super::create this.dw_report=create dw_report this.cb_add=create cb_add this.cb_edit=create cb_edit this.cb_delet=create cb_delet this.cb_retrieve=create cb_retrieve this.cb_report=create cb_report this.cb_imexport=create cb_imexport this.cb_saveas=create cb_saveas this.cb_view=create cb_view this.ln_bar2=create ln_bar2 this.ln_bar=create ln_bar this.r_bar=create r_bar iCurrent=UpperBound(this.Control) this.Control[iCurrent+1]=this.dw_report this.Control[iCurrent+2]=this.cb_add this.Control[iCurrent+3]=this.cb_edit this.Control[iCurrent+4]=this.cb_delet this.Control[iCurrent+5]=this.cb_retrieve this.Control[iCurrent+6]=this.cb_report this.Control[iCurrent+7]=this.cb_imexport this.Control[iCurrent+8]=this.cb_saveas this.Control[iCurrent+9]=this.cb_view this.Control[iCurrent+10]=this.ln_bar2 this.Control[iCurrent+11]=this.ln_bar this.Control[iCurrent+12]=this.r_bar end on on w_rpt_def.destroy call super::destroy destroy(this.dw_report) destroy(this.cb_add) destroy(this.cb_edit) destroy(this.cb_delet) destroy(this.cb_retrieve) destroy(this.cb_report) destroy(this.cb_imexport) destroy(this.cb_saveas) destroy(this.cb_view) destroy(this.ln_bar2) destroy(this.ln_bar) destroy(this.r_bar) end on event open;call super::open;uo_report = CREATE uo_reportdef uo_report.commit_transaction = sqlca dw_report.SetTransObject(sqlca) dw_report.retrieve() end event event close;call super::close;DESTROY uo_report end event event resize;call super::resize;long w_width,w_height w_width = 3630 w_height = 2290 + 150 ln_bar.endx = this.width ln_bar2.endx = this.width r_bar.width = this.width if newwidth < w_width then this.width = w_width if newheight < w_height then this.height = w_height dw_report.width=this.width - (w_width - dw_report_w) dw_report.height=this.height - (w_height - dw_report_h) end event event closequery;call super::closequery;IF dw_edit_mode THEN Int ls_row = 0 dw_report.AcceptText() ls_row = dw_report.GetNextModified(0, Primary!)+& dw_report.GetNextModified(0, Filter!)+dw_report.DeletedCount() IF ls_row > 0 THEN IF MessageBox('是否保存','单据数据已经改变,是否先保存?',Question!,YesNo!,1 ) = 1 THEN RETURN 1 END IF END IF END IF end event type cb_exit from w_rpt_publ_base`cb_exit within w_rpt_def integer x = 1445 integer width = 151 integer height = 164 integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type type dw_report from u_rpt_dw_rbtnfilter within w_rpt_def integer y = 180 integer width = 3579 integer height = 2080 integer taborder = 20 boolean bringtotop = true string dataobject = "dw_mod_rpt_list" boolean hscrollbar = true boolean vscrollbar = true boolean rbutton_filter_use = true boolean titleclick_sort_use = true boolean setlayout_use = false end type event rowfocuschanged;call super::rowfocuschanged;IF modifyrow_no >0 AND dw_edit_mode THEN THIS.SETROW(modifyrow_no) THIS.ScrollToRow(modifyrow_no) else this.selectrow(0,false) this.selectrow(currentrow,true) END IF end event event rowfocuschanging;call super::rowfocuschanging;if dw_edit_mode then return 1 end event event doubleclicked;call super::doubleclicked;if dw_edit_mode then return parent.triggerevent('ue_f7') end event event constructor;call super::constructor;dw_report_h = this.height dw_report_w = this.width end event event ue_setlayout;//if setcolumn_visible_USE=false then return //IF this.DATAOBJECT='' THEN RETURN // //datastore ls_ds //ls_ds=create datastore //ls_ds.dataobject='dw_rbtnfilter_setlayout' //string ls_mdfstr,ls_mdftext_str,ls_titlex_str,ls_titley_str,ls_x_str,ls_y_str //存放modify string //string des_1,des_2,szColumn,ls_cwidth,ls_alignment //long nColumnIndex,nColumnCount,lRow,ls_i //s_dw_rbtnfilter_setlayout_rt ls_s_rt // //nColumnCount = Integer( this.Object.DataWindow.Column.Count) // //For nColumnIndex = 1 To nColumnCount // des_1= this.Describe( "#" + String(nColumnIndex) + ".Name") // des_2= this.describe(des_1+ "_t.Text") // // szColumn = f_strip( des_2) // If szColumn <> "!" Then // lRow = ls_ds.InsertRow( 0) // ls_ds.SetItem( lRow, "ctitle", szColumn) // ls_ds.SetItem( lRow, "cname", des_1) // ls_ds.SetItem( lRow, "cshow_flag", long(this.describe(des_1+ ".Visible"))) // ls_ds.SetItem( lRow, "cnewtitle", this.describe(des_1+ "_t.text")) // ls_ds.SetItem( lRow, "cwidth", long(this.describe(des_1+ ".width"))) // ls_ds.SetItem( lRow, "alignment", long(this.describe(des_1+ ".alignment"))) // ls_ds.SetItem( lRow, "nColumnIndex", nColumnIndex) // ls_ds.SetItem( lRow, "titlex", long(this.describe(des_1+ "_t.x"))) // ls_ds.SetItem( lRow, "titley", long(this.describe(des_1+ "_t.y"))) // ls_ds.SetItem( lRow, "x", long(this.describe(des_1+ ".x"))) // ls_ds.SetItem( lRow, "y", long(this.describe(des_1+ ".y"))) // End If //Next // ////---打开设置窗口 //openwithparm(w_dw_rbtnfilter_setlayout,ls_ds) // //ls_s_rt=message.powerobjectparm ////---处理设置 //if ls_s_rt.flag=1 then //要保存修改 // ls_ds.setfullstate( ls_s_rt.b_changes ) // for ls_i=1 to ls_ds.rowcount() // ls_mdfstr=ls_mdfstr+ls_ds.object.cname[ls_i]+'.visible='+string(ls_ds.object.cshow_flag[ls_i])+'~t' // ls_mdfstr=ls_mdfstr+ls_ds.object.cname[ls_i]+'_t.visible='+string(ls_ds.object.cshow_flag[ls_i])+'~t' // // ls_mdftext_str=ls_mdftext_str+ls_ds.object.cname[ls_i]+"_t.text='"+ls_ds.object.cnewtitle[ls_i]+"'~t" // ls_titlex_str=ls_titlex_str+ls_ds.object.cname[ls_i]+"_t.x="+string(ls_ds.object.titlex[ls_i])+'~t' // ls_titley_str=ls_titley_str+ls_ds.object.cname[ls_i]+"_t.y="+string(ls_ds.object.titley[ls_i])+'~t' // ls_x_str=ls_x_str+ls_ds.object.cname[ls_i]+".x="+string(ls_ds.object.x[ls_i])+'~t' // ls_y_str=ls_y_str+ls_ds.object.cname[ls_i]+".y="+string(ls_ds.object.y[ls_i])+'~t' // ls_cwidth=ls_cwidth+ls_ds.object.cname[ls_i]+".width="+string(ls_ds.object.cwidth[ls_i])+'~t' // ls_alignment=ls_alignment+ls_ds.object.cname[ls_i]+".alignment="+string(ls_ds.object.alignment[ls_i])+'~t' // next // // ins_mdfstr_column_visible=ls_mdfstr // ins_mdfstr_column_text=ls_mdftext_str // ins_mdfstr_column_x=ls_titlex_str+ls_x_str // ins_mdfstr_column_y=ls_titley_str+ls_y_str // ins_mdfstr_column_width=ls_cwidth // ins_mdfstr_column_alignment=ls_alignment // // this.modify( ins_mdfstr_column_visible) // this.modify(ins_mdfstr_column_text) // this.modify(ins_mdfstr_column_width) // this.modify(ins_mdfstr_column_x) // this.modify(ins_mdfstr_column_y) // this.modify(ins_mdfstr_column_alignment) //elseif ls_s_rt.flag=2 then //reset // uf_reset_layout() // uf_save_profile_layout() //end if // //destroy ls_ds // // // end event event dwnkey;call super::dwnkey;PARENT.TriggerEvent(Key!) end event type cb_add from uo_rpt_imflatbutton within w_rpt_def string tag = "新建/保存[Alt+S]" integer x = 5 integer width = 192 integer height = 164 integer taborder = 30 boolean bringtotop = true string text = "新建&S" string normalpicname = "NEW.bmp" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked; String arg_msg = '' Boolean if_new = FALSE IF dw_edit_mode THEN dw_report.AcceptText() IF dw_report.GetNextModified(0, Primary!) = 0 THEN MessageBox('系统提示','没有任何修改,不可以保存!') RETURN END IF dw_report.Object.rpname[dw_report.GetRow()] = Trim(dw_report.Object.rpname[dw_report.GetRow()]) dw_report.AcceptText( ) IF dw_report.Object.rpname[dw_report.GetRow()] = '' THEN MessageBox('系统提示','请输入单据格式名称!') dw_report.SetFocus() dw_report.SetColumn("rpname") RETURN END IF ////////////////////////////////////////////////// IF dw_report.Object.rpid[dw_report.GetRow()] = 0 THEN uo_report.newbegin(0) if_new = TRUE END IF ///////////////////////////// dw_report.AcceptText() uo_report.s_rpt. rpid = dw_report.Object.rpid[dw_report.GetRow()] uo_report.s_rpt. rpname = dw_report.Object.rpname[dw_report.GetRow()] uo_report.s_rpt. billid = 0 uo_report.s_rpt. ifuse = dw_report.Object.ifuse[dw_report.GetRow()] uo_report.s_rpt. auditprint = dw_report.Object.auditprint[dw_report.GetRow()] uo_report.s_rpt. descrp = dw_report.Object.descrp[dw_report.GetRow()] END IF //CALL SUPER::Clicked IF dw_edit_mode THEN String ls_errmsg IF uo_report.Save( TRUE, ls_errmsg) = 0 THEN MessageBox ("系统提示",ls_errmsg+",保存操作失败!",exclamation!,ok!) ls_update_flag = FALSE RETURN ELSE dw_report.Object.rpid[dw_report.GetRow()] = uo_report.rpid ls_update_flag = TRUE END IF ELSE Long li_row, li_cur_row li_cur_row = dw_report.GetRow() li_row = dw_report.InsertRow (li_cur_row) dw_report.ScrollToRow (li_row) dw_report.SelectRow(0,FALSE) dw_report.SelectRow(li_row,TRUE) modifyrow_no = li_row END IF dw_edit_mode = NOT dw_edit_mode wf_face_change() IF dw_edit_mode THEN dw_report.SetFocus( ) dw_report.SetColumn('rpname') END IF end event type cb_edit from uo_rpt_imflatbutton within w_rpt_def string tag = "修改/放弃[Alt+E]" integer x = 197 integer width = 192 integer height = 164 integer taborder = 30 boolean bringtotop = true string text = "修改&E" string normalpicname = "OPEN.bmp" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;IF dw_report.GetRow() <= 0 THEN RETURN IF dw_edit_mode THEN IF dw_report.GetItemStatus(dw_report.GetRow(), 0, primary!) = newmodified! OR dw_report.GetItemStatus(dw_report.GetRow(), 0, primary!) = new! THEN dw_report.DeleteRow(dw_report.GetRow()) ELSE dw_report.ReselectRow(dw_report.GetRow()) END IF END IF modifyrow_no = dw_report.GetRow() dw_edit_mode = NOT dw_edit_mode wf_face_change() IF dw_edit_mode THEN dw_report.SetFocus( ) dw_report.SetColumn('rpname') END IF end event type cb_delet from uo_rpt_imflatbutton within w_rpt_def integer x = 389 integer width = 151 integer height = 164 integer taborder = 30 boolean bringtotop = true string text = "删除" string normalpicname = "delete.bmp" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;string arg_msg = "" if messagebox ("if","是否确定要删除当前记录?(选择确定后记录将不可恢复)",question!,yesno! ) = 2 then return end if long ls_id,rslt = 1 long ls_long = 0,report_row string ls_mtrlcode report_row = dw_report.getrow() if report_row <= 0 then messagebox('','没有操作目标记录!') return end if ls_id = dw_report.object.rpid[report_row] dw_report.setredraw (false) if uo_report.del(ls_id,true,arg_msg) = 0 then messagebox ("no","删除记录操作失败!"+arg_msg,exclamation!,ok!) return end if dw_report.setredraw (true) dw_report.retrieve() end event type cb_retrieve from uo_rpt_imflatbutton within w_rpt_def event ue_f7 ( ) integer x = 690 integer width = 151 integer height = 164 integer taborder = 30 boolean bringtotop = true string text = "重查" string normalpicname = "refresh.bmp" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;dw_report.retrieve() end event type cb_report from uo_rpt_imflatbutton within w_rpt_def integer x = 841 integer width = 151 integer height = 164 integer taborder = 30 boolean bringtotop = true string text = "编辑" string normalpicname = "SETTING.BMP" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;parent.triggerevent('ue_f7') end event type cb_imexport from uo_rpt_imflatbutton within w_rpt_def integer x = 1184 integer width = 261 integer height = 164 integer taborder = 30 boolean bringtotop = true string text = "导入/导出" string normalpicname = "imexport.BMP" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;parent.triggerevent('ue_f8') parent.triggerevent('retrieve_reportdw') end event type cb_saveas from uo_rpt_imflatbutton within w_rpt_def event ue_f7 ( ) integer x = 539 integer width = 151 integer height = 164 integer taborder = 40 boolean bringtotop = true string text = "另存" string normalpicname = "copy.BMP" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;string errmsg = '' if wf_saveas(errmsg) = 0 then messagebox('提示',errmsg) else dw_report.retrieve() end if end event type cb_view from uo_rpt_imflatbutton within w_rpt_def string tag = "预览[Alt+P]" integer x = 992 integer width = 192 integer height = 164 integer taborder = 40 boolean bringtotop = true string text = "预览&P" string normalpicname = "PREVIEW.BMP" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;parent.triggerevent('ue_viewprint') end event type ln_bar2 from line within w_rpt_def long linecolor = 16777215 integer linethickness = 4 integer beginy = 172 integer endx = 3406 integer endy = 172 end type type ln_bar from line within w_rpt_def long linecolor = 268435456 integer linethickness = 4 integer beginy = 168 integer endx = 3406 integer endy = 168 end type type r_bar from rectangle within w_rpt_def long linecolor = 16777215 long fillcolor = 1073741824 integer x = 3067 integer y = 8 integer width = 73 integer height = 172 end type event constructor;this.fillcolor = 14215660 this.linecolor = 14215660 this.x = -1 this.y = -1 this.height = ln_bar2.beginy - 5 end event