进销存管理系统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 系统编译并发布

你可能感兴趣的:(进销存管理系统2)