進銷存管理系統2

if sqlca.sqlcode <> 0 then
        messagebox("提示信息","獲得銷售單明細編號失敗!")
        return
        end if
        //得到最大銷售單明細編號
        select max(convert(decimal(8,0),編號)) into :ll_xhbh from 銷售單明細;
        if sqlca.sqlcode <> 0 then
        messagebox("提示信息","獲得銷售單明細編號失敗!")
        return
        end if
        //得到最大銷售明細編號
        if ll_lsbh > ll_xhbh or isnull(ll_xhbh) then
           ll_xhbh = ll_lsbh
        end if
        //循環賦值最大銷售單編號
        for i =1 to dw_1.rowcount()
            ls_lsbh =dw_1.getitemstring(i,"編號")
        //銷售編號 +1
        if isnull(ls_lsbh) or ls_lsbh =" " then
           ls_xhbh +=1
           if ls_xhbh = 0 or isnull(ll_xhbh) then
              ls_xhbh ="1"
           else
              ls_xhbh =string(ll_xhbh)
           end if
           dw_1.setitem(i,"編號",ls_xhbh)
        end if
        dw_1.setitem(i,"銷售單號",ls_bh)
        ld_she =dw_1.getitemdecimal(i,"稅額")
        ld_sjhj =dw_1.getitemdecimal(i,"稅價合計")
        ld_bhsj =dw_1.getitemdecimal(i,"不含稅價")
        next
         dw_bt.setitem(1,"稅額",dw_1.getitemdecimal(1,"she"))
         dw_bt.setitem(1,"稅價合計",dw_1.getitemdecimal(1,"sjhj"))
         dw_bt.setitem(1,"不含稅價",dw_1.getitemdecimal(1,"bhsj"))
       //更新
        if dw_bt.update() =1 and dw_1.update() =1 then
           commit ;  //提交數據                                   
           messagebox("提示信息","銷售單保存成功!")
        else
           rollback;  //回滾
           messagebox("提示信息","銷售單保存失敗,請重試!")
           return
        end if
     (20)在數據窗cb_confirm的CLICKED事件加入如下代碼,並調用存儲過程.
        //調用存儲過程
        declare sp_helptext procedure for sf_銷售單;
        //執行存儲過程
        execute sp_helptext;
        close(parent)
        因爲改變了庫存和應付款以後,不允許對銷售單進行進一步的編輯,所以關閉窗口
     (21)在數據窗cb_exit的CLICKED事件加入如下代碼
        integer msg
        msg=messagebox("提示信息","你確定現在要退出嗎?",question!,yesno!,2)
        if msg =2 then return
        close(this)
     (22)在數據窗cb_print的CLICKED事件加入如下代碼,調用打印窗口打印銷售單,並詢問用戶是否確認銷售單
         string ls_dwfullstate,ls_bh
        
         if dw_1.rowcount() < 1 then
            msg=messagebox("提示信息","沒有可以打印的銷售單數據!")
            return
         end if
         //得到銷售單號
         ls_bh =dw_1.getitemstring(1,"銷售單號")
         //檢索數據
         dw_print.retrieve(ls_bh)
         dw_print.getfullstate(ls_dwfullstate)
         //打開打印窗口
         openwithparm(w_print,ls_dwfullstate)
         if messagebox("提示信息","是否記賬確認進貨單!",question!,yesno!,1) =1 then
            cb_confirm.triggerevent(clicked!)
         end if
   
    (23)創建一個數據窗對象"d_xsd_print",其風格爲free form,data source爲sql select 選擇"銷售單明細"的所有字段
        和銷售單的“編號”,客戶編號和銷售日期字段“商品清單”的品名,單位字段和“客戶清單”的名稱字段。
   
//----------------------------------------------------------------------------------------------------------------------------------------   
   2.1.6.3 創建打印窗口
   窗口各個控件的屬性如下表
   控件類型                    對象名稱             屬性                    取值
   window                      w_print              window type             response!
   datawindow                  dw_1               
   statictext                  st_1                 text                    縮放比例
   statictext                  st_2                 text                    打印份數            
   singlelineedit              sle_1                text
   editmask                em_zoom              text                    100
   vscrollbar                vsb_zoom                
   editmask                                                             1
   vscrollbar                vsb_pages                
   checkbox                    cbx_preview          text                    打印預覽
   commandbutton               cb_2                 test                    設置
   commandbutton               cb_1                 test                    打印
   commandbutton               cb_close             test                    關閉
   注意:打印主要用到函數"setfullstate","getfullstate"
        (1)在窗口w_print的open事件中加入如下代碼
           string ls_dwfullstate
           ls_dwfullstate =message.stringparm
           dw_1.setfullstate(ls_dwfullstate)
//----------------------------------------------------------------------------------------------------------------------------------------   
   2.1.7 庫存查詢
    (1)創建一個窗口,保存名稱爲"w_kccx"
    (2)設置窗口的屬性爲main!
    (3)窗口各個控件的屬性如下表
  
   窗口各個控件的屬性如下表
   控件類型                    對象名稱             屬性                    取值
   window                      w_kccx               window type             main!
   datawindow                  dw_1                 dataobject              d_kzcx
   datawindow                  dw_2                 dataobject              d_ck
   statictext                  st_hh                text                    貨號
   statictext                  st_pym               text                    拼音編碼
   statictext                  st_ck                text                    倉庫           
   singlelineedit              sle_hh              
   singlelineedit              sle_pym               
   commandbutton               cb_1                 test                    查詢
  
    (4)創建一個數據窗對象"d_kccx",其風格爲free form,data source爲sql select 選擇"庫存庫"的所有字段
       “商品清單”的品名,拼音碼,單位字段
    (5)在數據窗cb_1的CLICKED事件加入如下代碼
       
       string ls_hh,ls_pym,ls_ck
       string ls_select
       //得到輸入的值
       ls_hh=trim(sle_hh.text)
       ls_pym=trim(sle_pym.text)
       ls_ck=is_ck
       //貨號
       if isnull(ls_hh) then
          ls_hh ="%"
       end if
       //拼音碼
       if isnull(ls_pym) then
          ls_pym="%"
       end if  
       //倉庫   
       if ls_ck =" " or isnull(ls_ck) then
          ls_ck ="%"
       end if
       ls_hh ="%" +ls_hh+ "%"
       ls_pym ="%" +ls_pym+ "%"
       ls_ck ="%" +ls_ck+ "%"
       //生成SQL語句
       ls_select =" and 庫存庫.貨號 LIKE '"+ ls_hh + "'"
       ls_select =ls_select + " and 商品清單.拼音編碼 LIKE '"+ ls_pym + "'"
       ls_select =ls_select + " and 庫存庫.倉庫 LIKE '"+ ls_ck + "'"
       //生成數據窗SQL語句
       ls_select =is_sql +ls_select
       //賦值SQL語句
       dw_1.setsqlselect(ls_select)
       dw_1.retrieve()
    (6)窗口各個控件的屬性如下表
//----------------------------------------------------------------------------------------------------------------------------------------   
     2.1.8 權限管理
   窗口各個控件的屬性如下表
   控件類型                    對象名稱             屬性                    取值
   window                      w_qx_gl              window type             main!
   datawindow                  dw_1                 dataobject              d_qx_user
   datawindow                  dw_2                 dataobject              d_qx_qx
   datawindow                  dw_2                 visible                 false
   treeview                    tv_1                 checkboxes              true
   注意:1> 在窗口打開的時候,數據窗dw_1檢索出使用該系統的所有用戶,數據窗dw_2即權限數據窗檢索出該系統所擁有的所有權限,
            並將權限都添加到樹上,由於所有的權限以樹的形式顯示出來,所以將數據窗dw_2的visible屬性設置爲false
         2> 然後建立一個數據存儲"ids_qxyh",該數據存儲保存的現有的各個用戶所擁有的權限。,當在數據窗dw_1選擇一個用戶的時候
            系統就根據選中的用戶從過濾數據存儲“ids_qxyh”中選中用戶的權限,並且將樹上給用戶所擁有的權限的"checkbox"屬性設置爲true
         3> 當對用戶的權限進行增加和刪除時,直接用SQL語句對數據進行修改,並實時的檢索"ids_qxyh",這樣當下次單擊改變了權限的用戶時
            數據爲最新修改的數據。
     
       在窗OPEN事件代碼如下(並建立數據存儲"ids_qxyh"):
         
         treeviewitem ltvi_item
         long ll_tv,i,ll_rowcount
         string ls_privilege
         //連接數據庫
         dw_1.settranobject(sqlca)
         dw_2.settranobject(sqlca)
         //檢索數據
         dw_1.retrieve()
         dw_2.retrieve()      
         //建立數據存儲,並檢索數據
         ids_qxyh=create datastore
         ids_qxyh.dataobject ="d_qx_yh"
         ids_qxyh.settranobject(sqlca)
         ids_qxyh.retrieve()
         //生成菜單變量
         im_privilege = create m_main
         //賦值權限樹根
         ltvi_item.label = "所有權限"
         ltvi_item.data = "all"
         ltvi_item.pictureindex = 1
         ltvi_item.selectedpictureindex = 1
         ll_tv = tv_1.insertitemlast(0,ltvi_item)
         ll_rowcount=dw_2.rowcount()
         if ll_rowcount < 1 then return
         /循環,給樹賦值所有的權限名稱
         for i =1 to ll_rowcount
             ls_privilege = dw_2.getitemstring(i,"權限名稱")
             ltvi_item.label = ls_privilege
             ltvi_item.data = ls_privilege
             ltvi_item.pictureindex = 2
             ltvi_item.selectedpictureindex = 2
             tv_1.insertitemlast(ll_tv,ltvi_item)
         next
         //tv_1.expanditem(2)
         tv_1.expandall(1)
        
      建立窗口函數“wf_setcheck”,返回值爲integer,參數"al_handle"爲樹的句柄,"as_user"爲選中的用戶,
      代碼如下:
          long li_handle,ll_row_found
          treeviewitem ltvi_item
          string ls_menu,ls_user
         
          ls_user = as_user
          li_handle=al_handle
          //得到參數
          if li_handle = 1 then
             //得到子項目
             li_handle = tv_1.finditem(childtreeitem!,1)
          else
             //否則,得到同級的下一個項目
             li_handle = tv_1.finditem(nexttreeitem!,li_handle)
          end if
          do while li_handle <> -1
             tv_1.getitem(li_handle,ltvi_item)
             //得到菜單項
          ls_menu=ltvi_item.data
          ll_row_found =ids_qxyh.find("權限名稱 ='" +ls_menu +"' and 用戶編號='" +ls_user +"'",1,ids_qxyh.rowcount())
          if ll_row_found>0 then
             ltvi_item.statepictureindex = 2
          else
             ltvi_item.statepictureindex = 1
          tv_1.setitem(li_handle ,ltvi_item)
             //遞規調用
             wf_setcheck(li_handle,ls_user)
             //find next at this level
             li_handle = tv_1.finditem(nexttreeitem!,li_handle)
          loop
          retrun 1
       在數據窗dw_1 的clicked事件中加入以下代碼,選中的用戶調用窗口函數“wf_setcheck”來設置樹的checkbox屬性爲true or false
   
          treeviewitem ltvi_item
          long li_handle,ll_row_found
          string ls_user,ls_menu,ls_bm
  
          if row < 1 then return
          //選擇單擊的行
          this.selectrow(0,false)
          this.selectrow(row,true)
          //得到用戶編號和部門
          ls_user=this.getitemstring(row,"用戶編號")
          ls_bm=this.getitemstring(row,"部門")
          is_user= ls_user
          is_bm = ls_bm
          //調用函數顯示權限
          wf_setcheck(1,ls_user)
          ltvi_item.statepictureindex = 2
        
        在樹tv_1的CLICKED事件中加入以下代碼:
           treeviewitem ltvi_item
           string ls_data
 
           //得到數據
           this.getitem(handle,ltvi_item)
           ls_data = ltvi_item.data
           if handle > 1 then
           if ltvi_item.statepictureindex = 1 then
              //插入權限表
              insert into 權限清單
                          (用戶編號,
                           部門,
                           權限名稱 )
              values (:is_user,
                      :is_bm,
                      :ls_data);
              if sqlca.sqlcode <> 0 then
                 messagebox("提示信息","增加權限失敗!")
                 return
              else
                 commit;
                 ids_qxyh.retrieve()
              end if
              else
              //刪除權限
              delete from 權限清單
                   where 用戶編號 =:is_user and 部門 =:is_bm and 權限名稱=:ls_data;
              if sqlca.sqlcode <> 0 then
                 messagebox("提示信息","刪除權限失敗!")
                 rollback;//回滾數據;
                 return
              else
                 commit; //提交數據
                 ids_qxyh.retrieve()
              end if
             end if
            end if
//----------------------------------------------------------------------------------------------------------------------------------------   
      2.1.8 系統編譯併發布

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章