上传用户:zhpu1995
上传日期:2013-09-06
资源大小:61151k
文件大小:67k
源码类别:

企业管理

开发平台:

Visual Basic

  1. Attribute VB_Name = "XtjbModule"
  2. '系统基本模块(主要用来放置公用函数及模块)
  3.                 
  4. '系统信息
  5. Public XtMenuList As String    '系统菜单功能编码
  6. '系统日期
  7. Public Xtkjqjgs As Integer     '用户设定会计期间个数
  8. Public Xtyear As Integer       '用户进入系统选择年度
  9. Public Xtmm As Integer         '用户进入系统选择会计期间
  10. Public Xtrq As Date            '系统日期
  11. Public Xtrlbz As String        '系统日历标志
  12. '系统往返参数值
  13. Public Xtcdcs As String        '系统传递参数值(专门用来传递帮助信息)
  14. Public Xtcdcsfz As String      '系统传递参数值(辅助信息)
  15. Public Xtfhcs As String        '系统返回参数值(专门用来传递帮助信息)
  16. Public Xtfhcsfz As String      '系统返回参数值(辅助信息)
  17. '系统通用编码参照代码
  18. Public Xtbmczdm As String      '系统通用编码参照代码
  19. '(系统等待调用窗体)
  20. Public XtCxgnsm As String      '调用程序功能说明
  21. Public Xtczy As String         '系统使用操作员
  22. Public Xtczybm As String       '系统操作员编码
  23. Public Xtztbm As String        '系统帐套编码
  24. Public Xtdwm As String         '系统打开帐套单位
  25. '帐套基本参数
  26. Public Xtjezws As Integer      '金额总位数
  27. Public Xtslzws As Integer      '数量总位数
  28. Public Xtdjzws As Integer      '单价总位数
  29. Public Xtjexsws As Integer     '金额小数位数
  30. Public Xtslxsws As Integer     '数量小数位数
  31. Public Xtdjxsws As Integer     '单价小数位数
  32. Public XtSCurrCode As String   '本位币编码
  33. Public XtSCurrName As String   '本位币名称
  34. '其它全局变量
  35. Public Unload_TF As Boolean    '窗体是否卸载
  36. Public P_RecordCount As Integer '记录条数
  37. Public YesNo_str As String
  38. Public SsqlHelp As String
  39. Public P_Code As String: Public P_Name As String  '编码、名称
  40. Public AddExit_TF As Boolean '添加或编辑状态
  41. Public P_Ssql As String  'Sql 语句
  42. '引用API函数
  43. Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
  44. Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
  45. '======================以下为打印文本内容格式输出控制过程函数======================='
  46. Public Function Fun_FormatOutPut(InputText As String, OutPutLen As Integer) As String               '文本内容按一定标准格式输出(主要用于打印使用)
  47.   
  48.     '参数说明:InputText 需要格式化的文本内容 OutPutLen 输出文本占用长度(包括加空格)
  49.     Fun_FormatOutPut = Trim(InputText) + Space(OutPutLen - Strcdcs(Trim(InputText), OutPutLen))
  50.   
  51. End Function
  52. Public Function Strcdcs(Lrcsstr As String, Lrzdcd As Integer) As Integer                            '测量并限制字符串长度(汉字与字符区分)
  53.    
  54.     '参数说明:Lrcsstr 需要测量和限制输出的字符串 Lrzdcd 限制输出长度
  55.   
  56.     lrtextlong = Len(Trim(Lrcsstr))
  57.     lrcscd = 0
  58.     For jsqte = 1 To lrtextlong
  59.         lrcszf = Mid(Lrcsstr, jsqte, 1)
  60.         lrzzcd = lrcscd
  61.         If Asc(lrcszf) >= 0 And Asc(lrcszf) <= 255 Then
  62.             lrcscd = lrcscd + 1
  63.         Else
  64.             lrcscd = lrcscd + 2
  65.         End If
  66.         If lrcscd > Lrzdcd Then
  67.             lrstrjqcd = jsqte - 1
  68.             Lrcsstr = Mid(Lrcsstr, 1, lrstrjqcd)
  69.             Strcdcs = lrzzcd
  70.             Exit Function
  71.         Else
  72.             Strcdcs = lrcscd
  73.         End If
  74.     Next jsqte
  75. End Function
  76. '======================以下为文本录入内容格式输入控制过程函数======================='
  77. Public Sub Lrfzszxz(Sjwb As TextBox, lrzfasc As Integer)              '文本框录入整数值(负)限制
  78.    
  79.     '输入参数:sjwb 录入限制文本框 lrzfasc 用户录入字符Ascii码值
  80.     If Not ((lrzfasc >= Asc("0") And lrzfasc <= Asc("9")) Or lrzfasc = vbKeyBack Or (Chr(lrzfasc) = "-" And Sjwb.SelStart = 0)) Then
  81.         lrzfasc = 0
  82.     End If
  83. End Sub
  84. Public Sub Lrzszxz(lrzfasc As Integer)                                '文本框录入整数值(正)限制
  85.     '输入参数:lrzfasc 用户录入字符Ascii码值
  86.     If Not ((lrzfasc >= Asc("0") And lrzfasc <= Asc("9")) Or lrzfasc = vbKeyBack) Then
  87.         lrzfasc = 0
  88.     End If
  89. End Sub
  90. Public Sub Lrszzfxz(lrzfasc As Integer)                               '文本框录入数字及字符限制
  91.     
  92.     '输入参数:lrzfasc 用户录入字符Ascii码值
  93.     If Not ((lrzfasc >= Asc("0") And lrzfasc <= Asc("9")) Or (lrzfasc >= Asc("a") And lrzfasc <= Asc("z")) Or (lrzfasc >= Asc("A") And lrzfasc <= Asc("Z")) Or lrzfasc = vbKeyBack) Then
  94.         lrzfasc = 0
  95.     End If
  96. End Sub
  97. Public Sub Lrfhzxz(lrzfasc As Integer)                                '文本框录入非汉字限制
  98.     
  99.     '输入参数:lrzfasc 用户录入字符Ascii码值
  100.     If Not ((lrzfasc >= 0 And lrzfasc <= 255) Or lrzfasc = vbKeyBack) Then
  101.         lrzfasc = 0
  102.     End If
  103. End Sub
  104. Public Sub Lrrqxz(lrzfasc As Integer)                                 '文本框录入日期限制
  105.     
  106.     '输入参数:lrzfasc 用户录入字符Ascii码值
  107.     If Not ((lrzfasc >= Asc("0") And lrzfasc <= Asc("9")) Or Chr(lrzfasc) = "-" Or lrzfasc = vbKeyBack) Then
  108.         lrzfasc = 0
  109.     End If
  110.     
  111. End Sub
  112. Public Sub Lrxszxz(Sjwb As TextBox, lrzfasc As Integer)               '文本框录入带有小数位及正负号数值字段
  113.   
  114.     If Not ((Chr(lrzfasc) >= "0" And Chr(lrzfasc) <= "9") Or (Chr(lrzfasc) = "." And InStr(1, Sjwb.Text, ".") = 0) Or lrzfasc = vbKeyBack Or (Chr(lrzfasc) = "-" And Sjwb.SelStart = 0)) Then
  115.         lrzfasc = 0
  116.     End If
  117. End Sub
  118. Public Sub Lrxzszxz(Sjwb As TextBox, lrzfasc As Integer)              '文本框录入带有小数位正>=0数值字段
  119.     
  120.     If Not ((Chr(lrzfasc) >= "0" And Chr(lrzfasc) <= "9") Or (Chr(lrzfasc) = "." And InStr(1, Sjwb.Text, ".") = 0) Or lrzfasc = vbKeyBack) Then
  121.         lrzfasc = 0
  122.     End If
  123. End Sub
  124. Public Sub Sjgskz(Sjwb As TextBox, zsws As Integer, xsws As Integer)  '保证数值录入字段录入格式
  125.     '输入参数:sjwb 录入限制文本框 zsws 数值录入限制整数位数 xsws 数值录入限制小数位数
  126.    
  127.    Dim bccrd%
  128.    Dim Ws, Zswstr As String
  129.    Dim B_fu As Boolean
  130.    zsws = zsws + xsws + 1                 '总数位数
  131.    bccrd = Sjwb.SelStart
  132.    B_fu = False
  133.    If Left(Sjwb, 1) = "-" Then
  134.       B_fu = True
  135.       Zswstr = Mid(Sjwb, 2, zsws)
  136.    Else
  137.       Zswstr = Mid(Sjwb, 1, zsws)
  138.    End If
  139.    
  140.    Ws = InStr(1, Zswstr, ".")                   '整数位数+1
  141.    If Ws > 0 Then
  142.       Zswstr = Mid(Zswstr, 1, Ws + xsws)
  143.       Ws = Len(Zswstr) - Ws                   '小数位数
  144.       If Left(Zswstr, 1) = "." Then
  145.          bccrd = bccrd + 1
  146.          Zswstr = "0" & Zswstr
  147.          End If
  148.       If Ws < xsws Then
  149.          Zswstr = Format(Zswstr, "#0." + String(Ws, "0"))
  150.       Else
  151.          Zswstr = Format(Zswstr, "#0." + String(xsws, "0"))
  152.       End If
  153.    Else
  154.       Zswstr = Format(Zswstr)
  155.    End If
  156.    
  157.    If B_fu Then Zswstr = "-" & Zswstr
  158.    Sjwb = Zswstr
  159.    Sjwb.SelStart = bccrd
  160. End Sub
  161. Public Sub TextChangeLimit(Ydtextte As TextBox, Zdsjlxte As Integer)      '文本框字段录入控制(事后、防止用户采用粘贴录入)
  162.     '函数参数:录入限制文本框,字段数据类型
  163.     
  164.     Dim Str_JudgeStr As String      '判断字符
  165.     Dim jsqte As Integer            '临时使用计数器
  166.     Dim Str_Result As String        '结果字符串
  167.     Dim KeyAsciite As Integer
  168.     
  169.     Str_Result = ""
  170.     
  171.     For jsqte = 1 To Len(Trim(Ydtextte.Text))
  172.         Str_JudgeStr = Mid(Trim(Ydtextte.Text), jsqte, 1)
  173.         KeyAsciite = Asc(Str_JudgeStr)
  174.     
  175.         If Str_JudgeStr = "'" Then
  176.            Str_JudgeStr = ""
  177.         End If
  178.         
  179.         Select Case Zdsjlxte
  180.             Case 1                                           '1-录入(Ascii0-255)
  181.                 Call Lrfhzxz(KeyAsciite)
  182.                 If KeyAsciite = 0 Then
  183.                    Str_JudgeStr = ""
  184.                 End If
  185.             Case 2
  186.                 Call Lrszzfxz(KeyAsciite)                    '2-录入(0-9,a-z,A-Z)
  187.                 If KeyAsciite = 0 Then
  188.                    Str_JudgeStr = ""
  189.                 End If
  190.             Case 4, 6, 10, 11, 12
  191.                 If Str_JudgeStr = "-" Then                   '录入数值(正)
  192.                    Str_JudgeStr = ""
  193.                 End If
  194.         End Select
  195.         Str_Result = Str_Result + Str_JudgeStr
  196.      Next jsqte
  197.      
  198.      If Str_Result <> Trim(Ydtextte.Text) Then
  199.         Ydtextte.Text = Str_Result
  200.         Ydtextte.SelStart = Len(Ydtextte.Text)
  201.      End If
  202. End Sub
  203. Public Sub InputFieldLimit(Ydtextte As TextBox, Zdsjlxte As Integer, KeyAsciite As Integer)     '录入字段事中控制程序
  204.     '函数参数:录入限制文本框,字段数据类型,录入字符
  205.     Select Case Zdsjlxte
  206.         Case 1                                  '1-录入(Ascii0-255)
  207.             Call Lrfhzxz(KeyAsciite)
  208.         Case 2
  209.             Call Lrszzfxz(KeyAsciite)             '2-录入(0-9,a-z,A-Z)
  210.         Case 3
  211.             Call Lrfzszxz(Ydtextte, KeyAsciite)   '3-录入整数值(正负)
  212.         Case 4
  213.             Call Lrzszxz(KeyAsciite)              '4-录入整数值(正)
  214.         Case 5, 8, 9
  215.             Call Lrxszxz(Ydtextte, KeyAsciite)    '5-录入小数值(正负) 8-金额型(正负) 9-数量型(正负)
  216.         Case 6, 10, 11, 12
  217.             Call Lrxzszxz(Ydtextte, KeyAsciite)   '6-录入小数值(正) 10-单价型 11-金额型(正) 12-数量型(正)
  218.         Case 7
  219.             Call Lrrqxz(KeyAsciite)               '7-录入日期
  220.     End Select
  221. End Sub
  222. '==============================================================================='
  223. Public Function Xtxxts(xttsxx As String, xttslb As Integer, Tbtslb As Integer)          '系统信息提示
  224.     
  225.     msgtitle = "百利/ERP5.0-人事管理"
  226.     Select Case xttslb
  227.         Case 0    '确定
  228.             Xtxxts = MsgBox(xttsxx, Tbtslb * 16, msgtitle)
  229.         Case 1    'YES/NO
  230.            Xtxxts = MsgBox(xttsxx, vbYesNo + Tbtslb * 16, msgtitle)
  231.         Case 2    '确定/取消
  232.            Xtxxts = MsgBox(xttsxx, vbOKCancel + Tbtslb * 16, msgtitle)
  233.         Case Else
  234.            Xtxxts = "9"
  235.     End Select
  236. End Function
  237. Public Function Kjjdzy(Zyjdzs As Integer) As Boolean                                    '控件焦点转移(针对回车键)
  238.     
  239.     Kjjdzy = False
  240.     
  241.     On Error GoTo Cwcl
  242.     
  243.     If Screen.ActiveControl.TabIndex <= Zyjdzs - 1 Then
  244.         Kjjdzy = True
  245.         SendKeys "{tab}"
  246.     End If
  247.     Exit Function
  248. Cwcl:
  249.     Resume Next         '有些对象不支持TabIndex属性
  250. End Function
  251. Public Sub Pbwxzf(Zfc As Integer)                                                       '录入时屏蔽"'"
  252.     
  253.     If Chr(Zfc) = "'" Then
  254.         Zfc = 0
  255.     End If
  256. End Sub
  257. '======================以下为对网格操作基本函数========================'
  258. Public Sub BzWgcsh(Xsgrid As vsFlexGrid, Wgdmte As String, GridInf() As Variant, GridBoolean() As Boolean, GridInt() As Integer, GridStr() As String)          '标准网格初始化模块
  259.   
  260.     '过程参数为:Xsgrid 生成网格对象名称,Wgdmte 网格参数编码,GridInf()返回网格设置信息(返回整体信息)
  261.     'GridBoolean() 网格列属性(返回布尔型信息),GridInt() 网格列属性(返回整型信息),GridStr() 网格列属性(返回字符型信息)
  262.       
  263.     Dim wglbt() As String                      '网格显示列标题
  264.     Dim Wgxsls As Long                         '网格显示(主操作)列数
  265.     Dim gdls As Long                           '网格固定列数
  266.     Dim Gdhs As Long                           '网格固定行数(标题行数)
  267.     Dim Gdhgd As Double                        '网格固定行高度
  268.     Dim wglkd() As Double                      '每列默认字符个数
  269.     Dim wglzz() As Integer                     '网格列组织形式
  270.     Dim zdxsgs() As String                     '数值字段显示格式
  271.     Dim Sfhide() As Boolean                    '网格列是否隐藏
  272.     Dim Sfhxz As Boolean                       '网格列是否行选中
  273.     Dim Qslz As Long                           '网格隐藏(非操作显示)列数
  274.     Dim Sjhgd As Double                        '网格数据行高度
  275.     Dim Wglsfkydpx As Integer                  '网格列是否可移动及排序
  276.     Dim wgxsrec As New ADODB.Recordset         '网格显示动态集
  277.     
  278.     ReDim GridInf(1 To 7)                      '整个网格设置信息
  279.     Set wgxsrec = Cw_DataEnvi.DataConnect.Execute("SELECT * FROM xt_grid WHERE Grid_Code ='" + Wgdmte + "' ORDER BY ColId")
  280.     With wgxsrec
  281.         If .EOF And .BOF Then
  282.             Exit Sub
  283.         Else
  284.             .MoveFirst
  285.         End If
  286.    
  287.         '如果网格为单据则设置网格大小、位置
  288.         If .Fields("GridType") = 1 Then
  289.             Xsgrid.Height = .Fields("GridHeight") '网格高度
  290.             Xsgrid.Width = .Fields("Gridwidth")   '网格宽度
  291.             Xsgrid.Top = .Fields("GridTop")       '网格上边距
  292.             Xsgrid.Left = .Fields("GridLeft")     '网格左边距
  293.         End If
  294.    
  295.         Qslz = .Fields("BeginCol")                '网格隐藏(非操作显示)列数
  296.         Sjhgd = .Fields("DataRowHeight")          '网格数据行高度
  297.    
  298.         GridInf(1) = Qslz                         '起始列值
  299.         GridInf(2) = Sjhgd                        '数据行高度
  300.         GridInf(3) = .Fields("KeepDataRows")      '屏幕保持数据行数
  301.         GridInf(4) = .Fields("AssistantRows")     '辅助项网格行数(例如:合计行)
  302.         If .Fields("SaveHelpWidth_Flag") Then     '是否保留帮助宽度(字段提供帮助时,是否为按钮保留空间)
  303.             GridInf(5) = True
  304.         Else
  305.             GridInf(5) = False
  306.         End If
  307.         If .Fields("DeleteRowAsk_Flag") Then      '删除有效记录行是否提示
  308.             GridInf(6) = True
  309.         Else
  310.             GridInf(6) = False
  311.         End If
  312.         If .Fields("ShowSumGrid_Flag") Then       '是否显示合计网格
  313.             GridInf(7) = True
  314.         Else
  315.             GridInf(7) = False
  316.         End If
  317.       
  318.         Wgxsls = .RecordCount - 1                 '网格显示(主操作)列数(原.Fields("wgxsls"))
  319.         gdls = .Fields("FixCols")                 '网格固定列数
  320.         Gdhs = .Fields("FixRows")                 '网格固定行数(标题行数)
  321.         Gdhgd = .Fields("FixRowHeight")           '网格固定行高度
  322.         Wglsfkydpx = .Fields("explorerbar")       '网格列是否可移动及排序
  323.    
  324.         If .Fields("SelectRow_Flag") Then         '是否行选中
  325.             Sfhxz = True
  326.         End If
  327.    
  328.         ReDim wglbt(Gdhs - 1, Wgxsls + Qslz - 1)  '网格显示列标题
  329.         ReDim wglkd(Qslz + Wgxsls - 1)            '每列默认字符个数
  330.         ReDim zdxsgs(Qslz + Wgxsls - 1)           '数值字段标志
  331.         ReDim wglzz(Qslz + Wgxsls - 1)            '网格列组织形式
  332.         ReDim Sfhide(Qslz + Wgxsls - 1)           '网格列是否显示
  333.         ReDim GridBoolean(Qslz + Wgxsls - 1, 1 To 6)   '网格列属性(布尔型)
  334.         ReDim GridStr(Qslz + Wgxsls - 1, 1 To 20)      '网格列信息(字符型)
  335.         ReDim GridInt(Qslz + Wgxsls - 1, 1 To 7)       '网格列信息(整型)
  336.    
  337.         .MoveNext
  338.         jsqte = 0
  339.         
  340.         Do While Not .EOF
  341.             wglkd(Qslz + jsqte) = .Fields("ColWidth")                  '网格列宽度限制
  342.             If Not IsNull(.Fields("ColTitle1")) Then
  343.                 wglbt(0, Qslz + jsqte) = Trim(.Fields("ColTitle1"))      '网格列标题1
  344.             End If
  345.             If Not IsNull(.Fields("ColTitle2")) And Gdhs >= 2 Then     '网格列标题2
  346.                 wglbt(1, Qslz + jsqte) = Trim(.Fields("ColTitle2"))
  347.             End If
  348.             If Not IsNull(.Fields("ColTitle3")) And Gdhs >= 3 Then     '网格列标题3
  349.                 wglbt(2, Qslz + jsqte) = Trim(.Fields("ColTitle3"))
  350.             End If
  351.             If .Fields("ColFormat") Then                               '字段显示格式(千分符)
  352.                 If .Fields("Text_Int_Length") <> 0 Then
  353.                     zdxsgs(Qslz + jsqte) = "#,##0." + String(.Fields("Text_deci_Length"), "0")
  354.                 Else
  355.                     zdxsgs(Qslz + jsqte) = "#,##0.00"
  356.                 End If
  357.                 Select Case .Fields("Text_Data_Type")
  358.                     Case 8, 11  '金额
  359.                         zdxsgs(Qslz + jsqte) = "#,##0." + String(Xtjexsws, "0")
  360.                     Case 9, 12  '数量
  361.                         zdxsgs(Qslz + jsqte) = "#,##0." + String(Xtslxsws, "0")
  362.                     Case 10     '单价
  363.                         zdxsgs(Qslz + jsqte) = "#,##0." + String(Xtdjxsws, "0")
  364.                 End Select
  365.             Else
  366.                 If .Fields("Text_Int_Length") <> 0 Then
  367.                     zdxsgs(Qslz + jsqte) = "##0." + String(.Fields("Text_deci_Length"), "0")
  368.                 End If
  369.             End If
  370.             wglzz(Qslz + jsqte) = .Fields("ColAlignment")              '网格列组织形式
  371.             
  372.             If .Fields("ColHidden") Then                               '网格列是否隐藏
  373.                 Sfhide(Qslz + jsqte) = True
  374.             End If
  375.             If .Fields("Edit_Flag") Then                               '网格列是否可编辑
  376.                 GridBoolean(Qslz + jsqte, 1) = True
  377.             End If
  378.             If .Fields("Help_Flag") Then                               '网格列是否提供帮助
  379.                 GridBoolean(Qslz + jsqte, 2) = True
  380.             End If
  381.             If .Fields("Combo_Flag") Then                              '网格列是否列表框录入
  382.                 GridBoolean(Qslz + jsqte, 3) = True
  383.             End If
  384.             If .Fields("ColSum_Flag") Then                             '网格列是否合计
  385.                 GridBoolean(Qslz + jsqte, 4) = True
  386.             End If
  387.             If .Fields("Zero_Empty_Flag") Then                         '网格内容为零是否清空
  388.                 GridBoolean(Qslz + jsqte, 5) = True
  389.             End If
  390.             If .Fields("BooleanFlag") Then                             '网格列是否为布尔型
  391.                 GridBoolean(Qslz + jsqte, 6) = True
  392.             End If
  393.             If Not IsNull(.Fields("Text_Data_Type")) Then              '字段数据类型
  394.                 GridInt(Qslz + jsqte, 1) = .Fields("Text_Data_Type")
  395.             End If
  396.             If Not IsNull(.Fields("Text_Length")) Then                 '字段录入长度
  397.                 GridInt(Qslz + jsqte, 2) = .Fields("Text_Length")
  398.             End If
  399.             If Not IsNull(.Fields("Text_Int_Length")) Then             '字段整数位长度
  400.                 GridInt(Qslz + jsqte, 3) = .Fields("Text_Int_Length")
  401.             End If
  402.             If Not IsNull(.Fields("Text_Deci_Length")) Then            '字段小数位长度
  403.                 GridInt(Qslz + jsqte, 4) = .Fields("Text_Deci_Length")
  404.             End If
  405.             If Not IsNull(.Fields("NotAllowEmpty_Type")) Then          '字段不允许为空或为零
  406.                 GridInt(Qslz + jsqte, 5) = .Fields("NotAllowEmpty_Type")
  407.             End If
  408.             If Not IsNull(.Fields("Help_Type")) Then                   '帮助类型
  409.                 GridInt(Qslz + jsqte, 6) = .Fields("Help_Type")
  410.             End If
  411.             If Not IsNull(.Fields("HelpReturnValue")) Then             '帮助返回值(0-显示返回编码 1-显示返回名称)
  412.                 GridInt(Qslz + jsqte, 7) = .Fields("HelpReturnValue")
  413.             End If
  414.             GridStr(Qslz + jsqte, 1) = Trim(.Fields("ColIndex") & "")    '网格列索引值
  415.             GridStr(Qslz + jsqte, 2) = Trim(.Fields("EmptyMessage") & "") '字段为空提示信息
  416.             GridStr(Qslz + jsqte, 3) = Trim(.Fields("Help_Code") & "")    '通用帮助编码
  417.             GridStr(Qslz + jsqte, 4) = Trim(.Fields("FieldsName") & "")   '连接字段(通用帮助)
  418.             GridStr(Qslz + jsqte, 5) = Trim(.Fields("Combo_Code") & "")   '列表框编码
  419.     
  420.             .MoveNext
  421.             jsqte = jsqte + 1
  422.         Loop
  423.     End With
  424.    
  425.     '网格列组织形式
  426.    
  427.     With Xsgrid
  428.         .BackColorFixed = &H8000000F                                     '固定行背景色
  429.         
  430.         .Rows = Gdhs
  431.         .FixedRows = Gdhs                                                '固定行数
  432.         
  433.         .Cols = Qslz + Wgxsls
  434.         .FixedCols = gdls                                                '固定列数
  435.         .AllowUserResizing = flexResizeBoth
  436.         .MergeCells = flexMergeFixedOnly                                 '合并单元形式
  437.         If Sfhxz Then
  438.             .SelectionMode = flexSelectionByRow
  439.         Else
  440.             .FocusRect = flexFocusHeavy
  441.             .ForeColorSel = &H80000008
  442.             .BackColorSel = &H80000005
  443.         End If
  444.         .ExplorerBar = Wglsfkydpx                                        '网格列是否可移动及排序
  445.         .ScrollTips = True
  446.         .WordWrap = True
  447.      
  448.         '填 充 网 格 标 题
  449.         For Rowjsq = 0 To .FixedRows - 1
  450.             .MergeRow(Rowjsq) = True
  451.             .RowHeight(Rowjsq) = Gdhgd
  452.             For Coljsq = Qslzte To .Cols - 1
  453.                 .TextMatrix(Rowjsq, Coljsq) = wglbt(Rowjsq, Coljsq)
  454.                 Next Coljsq
  455.         Next Rowjsq
  456.      
  457.        '数 据 网 格 高 度
  458.        For Rowjsq = .FixedRows To .Rows - 1
  459.            .RowHeight(Rowjsq) = Sjhgd
  460.        Next Rowjsq
  461.        '定 义 录 入 字 段 属 性
  462.        For Coljsq = 0 To .Cols - 1
  463.            If Coljsq < Qslz Or Sfhide(Coljsq) Then
  464.                .ColHidden(Coljsq) = True
  465.            Else
  466.                .ColHidden(Coljsq) = False
  467.            End If
  468.            .MergeCol(Coljsq) = True
  469.            .ColWidth(Coljsq) = wglkd(Coljsq)
  470.            .ColAlignment(Coljsq) = wglzz(Coljsq)
  471.            If Len(zdxsgs(Coljsq)) <> 0 Then
  472.                .ColFormat(Coljsq) = zdxsgs(Coljsq)
  473.            End If
  474.            If GridBoolean(Coljsq, 6) Then
  475.                .ColDataType(Coljsq) = flexDTBoolean
  476.            End If
  477.            .FixedAlignment(Coljsq) = 4
  478.        Next Coljsq
  479.    End With
  480. End Sub
  481. Public Sub Bcwggs(Bcgsgrid As vsFlexGrid, Wggsdm As String, GridStr() As String)            '保存网格格式(包括网格列宽,网格列顺序)
  482.   
  483.     '过程参数:Bcgsgrid 保存格式网格对象,Wggsdm 网格格式代码(网格参数),GridStr() 从中取网格列索引信息
  484.   
  485.     Dim RecTemp As New ADODB.Recordset               '临时使用动态集
  486.     Dim Qslzte As Integer                            '起始列值
  487.     Dim Tsxx As String                               '系统信息提示
  488.   
  489.     Cw_DataEnvi.DataConnect.BeginTrans
  490.     On Error GoTo Swcwcl
  491.     If RecTemp.State = 1 Then RecTemp.Close
  492.     RecTemp.Open "select * from xt_grid where Grid_Code='" + Trim(Wggsdm) + "' order by ColId", Cw_DataEnvi.DataConnect, adOpenDynamic, adLockOptimistic
  493.     With RecTemp
  494.         If Not .EOF Then
  495.             Qslzte = .Fields("BeginCol")
  496.             .MoveNext
  497.         End If
  498.     
  499.         Do While Not .EOF
  500.             For jsqte = Qslzte To Bcgsgrid.Cols - 1
  501.                 If Trim(.Fields("ColIndex")) = Trim(GridStr(jsqte, 1)) Then
  502.                     Exit For
  503.                 End If
  504.             Next jsqte
  505.             If jsqte <= Bcgsgrid.Cols - 1 Then
  506.                 .Fields("ColId") = jsqte - Qslzte + 1
  507.                 .Fields("ColWidth") = Bcgsgrid.ColWidth(jsqte)
  508.                 .Update
  509.             End If
  510.             .MoveNext
  511.         Loop
  512.     End With
  513.   
  514.     Cw_DataEnvi.DataConnect.CommitTrans
  515.   
  516.     Tsxx = "表格格式保存完毕!"
  517.     Call Xtxxts(Tsxx, 0, 4)
  518.     Exit Sub
  519. Swcwcl:
  520.     Cw_DataEnvi.DataConnect.RollbackTrans
  521.     Tsxx = "存盘过程中出现未知错误,程序自动恢复保存前状态!"
  522.     Call Xtxxts(Tsxx, 0, 1)
  523.     Exit Sub
  524. End Sub
  525. Public Sub Hfmrgs(Bcgsgrid As vsFlexGrid, Wggsdm As String, GridStr() As String)            '恢复网格默认列宽
  526.     
  527.     '过程参数:保存格式网格对象,网格格式代码(网格参数),GridStr() 从中取网格列索引信息
  528.     Dim RecTemp As New ADODB.Recordset   '临时使用动态集
  529.     Dim Qslzte As Integer                '起始列值
  530.     Dim Tsxx As String                   '系统提示信息
  531.   
  532.     Cw_DataEnvi.DataConnect.BeginTrans
  533.     If RecTemp.State = 1 Then RecTemp.Close
  534.     RecTemp.Open "select * from xt_grid where Grid_Code='" + Trim(Wggsdm) + "' order by ColId", Cw_DataEnvi.DataConnect, adOpenDynamic, adLockOptimistic
  535.     
  536.     On Error GoTo Swcwcl
  537.   
  538.     With RecTemp
  539.         If Not .EOF Then
  540.             Qslzte = .Fields("BeginCol")
  541.             .MoveNext
  542.         End If
  543.         Do While Not .EOF
  544.             For jsqte = Qslzte To Bcgsgrid.Cols - 1
  545.                 If Trim(.Fields("ColIndex")) = Trim(GridStr(jsqte, 1)) Then
  546.                     Exit For
  547.                 End If
  548.             Next jsqte
  549.             If jsqte <= Bcgsgrid.Cols - 1 Then
  550.                 Bcgsgrid.ColWidth(jsqte) = .Fields("DefaultColWidth")
  551.                 .Fields("ColWidth") = .Fields("DefaultColWidth") + 0
  552.                 .Update
  553.             End If
  554.             .MoveNext
  555.         Loop
  556.     End With
  557.     Cw_DataEnvi.DataConnect.CommitTrans
  558.     Exit Sub
  559. Swcwcl:
  560.     Cw_DataEnvi.DataConnect.RollbackTrans
  561.     Tsxx = "恢复过程中出现未知错误,程序自动恢复保存前状态!"
  562.     Call Xtxxts(Tsxx, 0, 1)
  563.     Exit Sub
  564. End Sub
  565. Public Sub Szxsxm(SzgsGrid As vsFlexGrid, Wggsdm As String)        '设置网格显示项目
  566.    
  567.     '过程参数:调整显示项目网格对象,网格格式代码(网格参数)
  568.     Xtcdcs = Wggsdm
  569.     XT_BgxsxmszFrm.Show 1                '调整网格显示项目
  570.     Call Cxxswg(SzgsGrid, Wggsdm)        '重新定义网格显示
  571. End Sub
  572. Public Sub Cxxswg(Bcgsgrid As vsFlexGrid, Wggsdm As String)        '根据用户定义显示项目重新显示网格
  573.   
  574.     '过程参数:调整显示项目网格对象,网格格式代码(网格参数)
  575.   
  576.     Dim RecTemp As New ADODB.Recordset   '查询数据表动态集
  577.     Dim Qslzte As Integer
  578.     Dim Tsxx As String
  579.     Set RecTemp = Cw_DataEnvi.DataConnect.Execute("select * from xt_grid where Grid_Code='" + Trim(Wggsdm) + "' order by ColId")
  580.     With RecTemp
  581.         If Not .EOF Then
  582.             Qslzte = .Fields("BeginCol")
  583.             .MoveNext
  584.         End If
  585.         Do While Not .EOF
  586.             For jsqte = Qslzte To Bcgsgrid.Cols - 1
  587.                 If Bcgsgrid.FixedRows = 1 Then
  588.                     If Trim(.Fields("ColTitle1")) = Trim(Bcgsgrid.TextMatrix(0, jsqte)) Then
  589.                         Exit For
  590.                     End If
  591.                 Else
  592.                     If Trim(.Fields("ColTitle1")) = Trim(Bcgsgrid.TextMatrix(0, jsqte)) And Trim(.Fields("ColTitle2")) = Trim(Bcgsgrid.TextMatrix(1, jsqte)) Then
  593.                         Exit For
  594.                     End If
  595.                 End If
  596.             Next jsqte
  597.             If jsqte <= Bcgsgrid.Cols - 1 Then
  598.                 If .Fields("ColHidden") Then
  599.                     Bcgsgrid.ColHidden(jsqte) = True
  600.                 Else
  601.                     Bcgsgrid.ColHidden(jsqte) = False
  602.                 End If
  603.             End If
  604.             .MoveNext
  605.         Loop
  606.     End With
  607. End Sub
  608. Public Function Sydz(Zdbmte As String, GridStr() As String, Szzls As Integer) As Integer   '网格索引对照表(用来对照网格物理与逻辑顺序关系)
  609.     
  610.     '函数参数:索引编码,网格列属性(字符型),网格列最大数组下标值
  611.     Sydz = 0
  612.     For jsqte = 0 To Szzls
  613.         If Trim(GridStr(jsqte, 1)) = Zdbmte Then
  614.             Sydz = jsqte
  615.             Exit Function
  616.         End If
  617.     Next jsqte
  618. End Function
  619. Public Function FnBln_RefreshArray(int_StartCol As Long, int_FinishCol As Long, GridStr() As String, GridInf()) As Boolean     '网格列交换后数组做相应变换函数
  620.   
  621.     '功能: 实现网格的列移动
  622.     '说明:本函数是在模式工程的基础上创建的,请确认你的窗体中的网格是通过
  623.     '     BzWgcsh(CxbbGrid, GridCode, GridInf(), GridBoolean(), GridInt(), GridStr()) 函数来定义的
  624.     '参数:int_StartCol——网格开始移动列
  625.     '参数:int_FinishCol——网格移动结束列
  626.     '参数:GridStr()——网格的信息数组
  627.     '思路:对于要移动的网格来说,所有的信息都保存在几个系统数组中,其中GridStr()数组保存着逻辑定位和
  628.     '      物理定位之间的转换关系,使我们可以通过逻辑值找到物理值,由于我们通常通过逻辑值来定位网格的
  629.     '      物理列(sydz(zdbmte as String,GridStr() as String,szzls as Integer)函数),所以我们只需要
  630.     '      改变GridStr()数组中物理列和逻辑列之间的对应关系,从而达到改变列的目的。
  631.     '扩展:虽然本程序只是针对数据显示网格而作,但是此程序给大家提供了一个思路,通过交换GridBoolean()、
  632.     '      GridInt()、网格列标题wglbt()等数组,就可以实现输入的列移动
  633.   
  634.     On Error GoTo Err_Ctrl
  635.  
  636.     Dim int_temp As Integer
  637.     Dim Str_Temp() As String '用来保存移动开始列的GridStr()信息
  638.     Dim i, j As Long
  639.   
  640.     '如果结束列小于用户定义网格开始列,则结束列=用户定义网格开始列
  641.     '因为开始列以前的列都是隐藏列,由于要把当前开始移动列移动到隐藏列上
  642.     '所以控件自动把隐藏列变为显示列,这样在刷新数据时,会把隐藏列上的数据
  643.     '显示出来,并且,由于开始列以前的隐藏列在XT_Grid中,不对应逻辑值,所以在保存
  644.     '网格格式时会出错
  645.     If int_StartCol > int_FinishCol Then
  646.         If int_FinishCol < GridInf(1) Then int_FinishCol = GridInf(1)
  647.     Else
  648.         If Col < GridInf(1) Then Col = GridInf(1)
  649.     End If
  650.   
  651.     '保存移动开始列的GridStr()信息
  652.     ReDim Str_Temp(0, UBound(GridStr, 2))
  653.     For j = 1 To UBound(GridStr, 2)
  654.         Str_Temp(0, j) = GridStr(int_StartCol, j)
  655.     Next
  656.     
  657.     '[[在此加入你的代码,保存当前开始移动列的其他信息]]
  658.     '依次移动各列的信息
  659.     If int_StartCol < int_FinishCol Then
  660.         For i = int_StartCol To int_FinishCol - 1
  661.             For j = 1 To UBound(GridStr, 2)
  662.                 GridStr(i, j) = GridStr(i + 1, j)
  663.             Next j
  664.         Next i
  665.     Else
  666.         For i = int_StartCol To int_FinishCol + 1 Step -1
  667.             For j = 1 To UBound(GridStr, 2)
  668.                 GridStr(i, j) = GridStr(i - 1, j)
  669.             Next j
  670.         Next i
  671.     End If
  672.     
  673.     '[[在此加入你的代码,依照上面的代码格式,移动列的其他信息]]
  674.     '恢复开始移动列的信息到结束列上
  675.     For j = 1 To UBound(GridStr, 2)
  676.         GridStr(int_FinishCol, j) = Str_Temp(0, j)
  677.     Next j
  678.   
  679.     '[[在此加入你的代码,恢复开始移动列的其他信息到结束列上]]
  680.     FnBln_RefreshArray = True
  681.     Exit Function
  682. Err_Ctrl:
  683.     FnBln_RefreshArray = False
  684. End Function
  685. '========================以上为网格操作基本函数==============================='
  686. Public Sub Drwbkxx(Wbklrbmte As String, Textvar() As Variant, Textboolean() As Boolean, Textint() As Integer, Textstr() As String)   '读入文本框录入信息
  687.    
  688.     '过程参数:输入参数 Wbklrbmte 文本框录入信息组索引号
  689.     '         输出参数 Textvar() Textboolean() Textint() Textstr 文本框信息
  690.    
  691.     Dim Wbklrbrec As ADODB.Recordset      '文本框录入表动态集
  692.     Dim Zdszxb As Integer                 '最大数组下标
  693.     Dim text_indexte As Integer           '文本框索引值
  694.    
  695.     ReDim Textvar(1 To 1)
  696.     Set Wbklrbrec = Cw_DataEnvi.DataConnect.Execute("SELECT * FROM Xt_text_input WHERE Text_Group_Code ='" + Wbklrbmte + "' ORDER BY Text_index")
  697.     With Wbklrbrec
  698.         If Not (.BOF And .EOF) Then
  699.             .MoveLast
  700.             Zdszxb = .Fields("text_index")
  701.             Textvar(1) = Zdszxb
  702.             ReDim Textboolean(0 To Zdszxb, 1 To 5)
  703.             ReDim Textint(0 To Zdszxb, 1 To 14)
  704.             ReDim Textstr(0 To Zdszxb, 1 To 7)
  705.             .MoveFirst
  706.         Else
  707.             Exit Sub
  708.         End If
  709.         Do While Not .EOF
  710.             text_indexte = .Fields("text_index")
  711.             
  712.             If .Fields("help_flag") Then                                 '是否提供帮助
  713.                 Textboolean(text_indexte, 1) = True
  714.             End If
  715.             If .Fields("Help_ManuFlag") Then                             '手工设置帮助按钮
  716.                 Textboolean(text_indexte, 3) = True
  717.             End If
  718.             If .Fields("Visible") Then                                   '文本框是否显示
  719.                 Textboolean(text_indexte, 4) = True
  720.             End If
  721.             If .Fields("Enabled") Then                                   '文本框是否可编辑
  722.                 Textboolean(text_indexte, 5) = True
  723.             End If
  724.       
  725.             If Not IsNull(.Fields("text_data_type")) Then                '字段数据类型
  726.                 Textint(text_indexte, 1) = .Fields("text_data_type")
  727.             End If
  728.             If Not IsNull(.Fields("help_type")) Then                     '帮助类型
  729.                 Textint(text_indexte, 2) = .Fields("help_type")
  730.             End If
  731.             If Not IsNull(.Fields("show_code_name")) Then                '帮助返回值显示类型
  732.                 Textint(text_indexte, 3) = .Fields("show_code_name")
  733.             End If
  734.             If Not IsNull(.Fields("judge_type")) Then                    '有效性判断类型
  735.                 Textint(text_indexte, 4) = .Fields("judge_type")
  736.             End If
  737.             If Not IsNull(.Fields("text_length")) Then                   '字段录入长度
  738.                 Textint(text_indexte, 5) = .Fields("text_length")
  739.             End If
  740.             If Not IsNull(.Fields("text_int_length")) Then               '数值字段整数位长度
  741.                 Textint(text_indexte, 6) = .Fields("text_int_length")
  742.             End If
  743.             If Not IsNull(.Fields("text_deci_length")) Then              '数值字段小数位长度
  744.                 Textint(text_indexte, 7) = .Fields("text_deci_length")
  745.             End If
  746.             If Not IsNull(.Fields("NotAllowEmpty_Type")) Then            '字段不允许为空或为零
  747.                 Textint(text_indexte, 8) = .Fields("NotAllowEmpty_Type")
  748.             End If
  749.             If Not IsNull(.Fields("Judge_Time")) Then                    '文本框有效性判断时刻
  750.                 Textint(text_indexte, 9) = .Fields("Judge_Time")
  751.             End If
  752.             If Not IsNull(.Fields("TextHeight")) Then                    '文本框高度
  753.                 Textint(text_indexte, 10) = .Fields("TextHeight")
  754.             End If
  755.             If Not IsNull(.Fields("TextWidth")) Then                     '文本框宽度
  756.                 Textint(text_indexte, 11) = .Fields("TextWidth")
  757.             End If
  758.             If Not IsNull(.Fields("TextTop")) Then                       '文本框距离顶端高度
  759.                 Textint(text_indexte, 12) = .Fields("TextTop")
  760.             End If
  761.             If Not IsNull(.Fields("TextLeft")) Then                      '文本框左端距离
  762.                 Textint(text_indexte, 13) = .Fields("TextLeft")
  763.             End If
  764.             If Not IsNull(.Fields("TabIndex")) Then                      '文本框焦点顺序
  765.                 Textint(text_indexte, 14) = .Fields("TabIndex")
  766.             End If
  767.          
  768.             Textstr(text_indexte, 1) = Trim(.Fields("text_index") & "")       '文本框对应索引值
  769.             Textstr(text_indexte, 2) = Trim(.Fields("text_field_code") & "")  '文本框对应编码字段
  770.             Textstr(text_indexte, 3) = Trim(.Fields("text_field_name") & "")  '文本框对应名称字段
  771.             Textstr(text_indexte, 4) = Trim(.Fields("help_code") & "")        '通用帮助编码
  772.             Textstr(text_indexte, 5) = Trim(.Fields("judge_base") & "")       '字段有效性判断依据
  773.             Textstr(text_indexte, 6) = Trim(.Fields("error_message") & "")    '字段录入错误提示信息
  774.             Textstr(text_indexte, 7) = Trim(.Fields("text_name") & "")        '文本框名称
  775.                
  776.             .MoveNext
  777.         Loop
  778.     End With
  779. End Sub
  780. Public Function Mmjm(Srmm As String) As String                                              '密码加密对照模块
  781.    
  782.     Dim Zfcte As Integer
  783.     Mmjm = ""
  784.     For jsqte = 1 To Len(Srmm)
  785.         Zfcte = Asc(Mid(Srmm, jsqte, 1)) + Asc(Mid(Srmm, Len(Srmm) - jsqte + 1, 1)) + Len(Srmm) + jsqte
  786.         Mmjm = Mmjm + Trim(Str(Zfcte))
  787.     Next jsqte
  788. End Function
  789. Public Sub F1bz()                                                                           '发送F1键
  790.     SendKeys "{F1}"
  791. End Sub
  792. Public Sub Textyx(Textte As TextBox)                                                        '文本框有效
  793.     
  794.     Textte.Enabled = True
  795.     Textte.BackColor = &H80000005
  796. End Sub
  797. Public Sub Textwx(Textte As TextBox)                                                        '文本框无效
  798.    
  799.     Textte.Enabled = False
  800.     Textte.BackColor = &HC0C0C0
  801. End Sub
  802. Public Sub Drbmhelp(bzlx As Integer, Helpbm As String, Scdwnr As String)                    '调入编码参照窗体
  803.     
  804.     '函数参数:帮助类型(0-通用型 1-日期型 2-特殊型),帮助编码,首次定位内容
  805.     Dim XT_TybmczFrmte As New XT_TybmczFrm
  806.     
  807.     On Error GoTo ErrHandle
  808.     Xtcdcs = Scdwnr
  809.     Xtfhcs = ""
  810.     Xtfhcsfz = ""
  811.     Select Case bzlx
  812.         Case 0
  813.             Xtbmczdm = Trim(Helpbm)
  814.             XT_TybmczFrmte.sParamater = sParam
  815.             sParam = ""
  816.             XT_TybmczFrmte.Show 1
  817.             Xtbmczdm = ""
  818.         Case 1
  819.             XT_calendar.Show 1
  820.         Case 2
  821.             Select Case Helpbm
  822.             
  823.             End Select
  824.     End Select
  825.     
  826. ErrHandle:
  827. End Sub
  828. Public Sub Drbmbj(Helpbm As String)                                                         '调入编码参照编辑窗体
  829.     
  830.     Select Case Helpbm
  831.         'Case "gy_dept"             '部门编辑
  832.         'JC_BmszFrm.Show 1
  833.    End Select
  834. End Sub
  835. '===================以下为固定项列表框处理函数========================'
  836. Public Function FillCombo(Combote As ComboBox, Lbkbmte As String, Dwnr As String, AddType As Integer) As String   '填充列表框并定位
  837.     '函数参数:列表框,列表框分组编码,定位内容,填充类型(0-无空记录  1-有空记录(1个空格) )
  838.     Dim Lbknrrec As ADODB.Recordset
  839.   
  840.     '填充列表框内容
  841.     Set Lbknrrec = Cw_DataEnvi.DataConnect.Execute("select * from xt_combolist where combo_code='" + Trim(Lbkbmte) + "' order by item_index")
  842.     Combote.Clear
  843.     If AddType = 1 Then
  844.         Combote.AddItem " "
  845.     End If
  846.     With Lbknrrec
  847.         Do While Not .EOF
  848.             Combote.AddItem Trim(.Fields("item_content"))
  849.             .MoveNext
  850.         Loop
  851.     End With
  852.     
  853.     '定位列表框内容
  854.     With Combote
  855.         For jsqte = .ListCount - 1 To 0 Step -1
  856.             If Dwnr = Trim(.List(jsqte)) Then
  857.                 Exit For
  858.             End If
  859.         Next jsqte
  860.         If jsqte <> -1 Then
  861.             Combote.Text = .List(jsqte)
  862.         Else
  863.             If .ListCount <> 0 Then
  864.                 .Text = .List(0)
  865.             End If
  866.         End If
  867.     End With
  868. End Function
  869. Public Function Fun_GetIndex(ComboCodeTe As String, FindText As String) As String                         '查找列表框内容对应索引号
  870.     '函数参数:列表框分组编码,定位内容
  871.     Dim Lbknrrec As ADODB.Recordset
  872.   
  873.     Fun_GetIndex = ""
  874.   
  875.     '填充列表框内容
  876.     Set Lbknrrec = Cw_DataEnvi.DataConnect.Execute("select Item_Index from xt_combolist where combo_code='" & Trim(ComboCodeTe) & "' And Item_Content='" & Trim(FindText) & "'")
  877.   
  878.     With Lbknrrec
  879.         If Not .EOF Then
  880.             Fun_GetIndex = Trim(.Fields("Item_Index"))
  881.         End If
  882.     End With
  883. End Function
  884. Public Function Fun_GetContent(ComboCodeTe As String, FindIndex As String) As String                      '查找列表框索引号对应内容
  885.     '函数参数:列表框分组编码,定位内容
  886.     Dim Lbknrrec As ADODB.Recordset
  887.   
  888.     Fun_GetContent = ""
  889.   
  890.     '填充列表框内容
  891.     Set Lbknrrec = Cw_DataEnvi.DataConnect.Execute("select Item_Content from xt_combolist where combo_code='" & Trim(ComboCodeTe) & "' And Item_Index='" & Trim(FindIndex) & "'")
  892.   
  893.     With Lbknrrec
  894.         If Not .EOF Then
  895.             Fun_GetContent = Trim(.Fields("Item_Content"))
  896.         End If
  897.     End With
  898. End Function
  899. '==========================以上为列表框处理基本函数=========================='
  900. Public Function XtWaitMess(Str_IndexSub)                               '系统功能调用等待提示
  901.     
  902.     '函数参数:系统功能模块索引号
  903.     Xtcdcs = Str_IndexSub
  904.     XT_FrmWaitMess.Show 1
  905. End Function
  906. Public Function Sub_FillPeriod(Combote As ComboBox, Year As Integer, Period As Integer)            '列表框填充会计期间
  907.     '过程参数;填充列表框,会计年度,默认会计期间
  908.     Dim jsqte As Integer
  909.     With Combote
  910.         .Clear
  911.         For jsqte = 1 To 12
  912.             .AddItem Mid(Trim(Str(10000 + Xtyear)), 2, 4) + "." + Mid(Trim(Str(100 + jsqte)), 2, 2)
  913.         Next jsqte
  914.      
  915.         .Text = Mid(Trim(Str(10000 + Xtyear)), 2, 4) + "." + Mid(Trim(Str(100 + Period)), 2, 2)
  916.     End With
  917. End Function
  918. '//* 功能: 金额小写转换为大写  调用参数:jesj...人民币小写金额
  919. '//* 返回变量: name..人民币大写金额
  920. Public Function Fun_Jezh(Jesj As Double) As String
  921.     
  922.     Dim Name1$, Name2$, Mje1$, Name$
  923.     Dim len_mje1%, k%, Ws%, j%, ws1%, m%
  924.     Dim Bz As Boolean
  925.     Name1 = "壹贰叁肆伍陆柒捌玖"
  926.     Name2 = "分角元拾佰仟万拾佰仟亿拾佰仟"
  927.     Mje1 = Trim(Format(Jesj, "###.00"))
  928.     len_mje1 = Len(Mje1)
  929.     If len_mje1 > 16 Or Jesj < 0.01 Or IsNull(Jesj) Then
  930.         Fun_Jezh = ""
  931.         Exit Function
  932.     End If
  933.     '//取无小数的字符串
  934.     Mje1 = Left(Mje1, len_mje1 - 3) + Right(Mje1, 2)
  935.     len_mje1 = len_mje1 - 1
  936.     k = len_mje1 * 2 - 1
  937.     Ws = Int(Mid(Mje1, 1, 1)) * 2 - 1
  938.     If len_mje1 = 3 And Ws < 0 Then     '//如果金额<1 name=''
  939.         Name = ""
  940.     Else
  941.         If Ws > 0 Then
  942.             Name = MidB(Name1, Ws, 2) + MidB(Name2, k, 2) '//如果金额>=1,转换金额
  943.         End If
  944.     End If
  945.     j = 2
  946.     k = k - 2
  947.     Bz = True
  948. xh1:
  949.     Do While j <= len_mje1 And Bz
  950.         ws1 = Int(Mid(Mje1, j, 1)) * 2 - 1
  951.         If ws1 > 0 Then
  952.             Name = Name + MidB(Name1, ws1, 2) + MidB(Name2, k, 2)
  953.             j = j + 1
  954.             k = k - 2
  955.             GoTo xh1
  956.         End If
  957.         m = 0
  958. xh2:
  959.         Do While ws1 < 0
  960.             If len_mje1 >= 11 Then
  961.                 If k < 21 Then
  962.                     m = m + 1
  963.                 End If
  964.             End If
  965.             If k = 5 Or (k = 13 And m <= 3) Or k = 21 Then
  966.                 Name = Name + MidB(Name2, k, 2)
  967.             End If
  968.             If k = 1 Then
  969.                 Name = Name + "整"
  970.                 Bz = False
  971.                 Exit Do
  972.             End If
  973.             j = j + 1
  974.             k = k - 2
  975.             ws1 = Int(Mid(Mje1, j, 1)) * 2 - 1
  976.             If ws1 < 0 Then
  977.                 GoTo xh2
  978.             Else
  979.                 If len_mje1 = 3 Then
  980.                     Name = Name + "零"
  981.                 Else
  982.                     Name = Name + "零"
  983.                 End If
  984.             End If
  985.         Loop
  986.     Loop
  987.     '去掉元和角之间零(1230.32)
  988.     wz1 = InStr(1, Name, "元")
  989.     wz2 = InStr(1, Name, "角")
  990.     If wz1 <> 0 And wz2 <> 0 Then
  991.         wz3 = InStr(wz1, Name, "零")
  992.         If wz3 <> 0 Then
  993.             Name = Mid(Name, 1, wz3 - 1) + Mid(Name, wz3 + 1, Len(Name))
  994.         End If
  995.     End If
  996.     Fun_Jezh = Name
  997. End Function
  998. Public Function FillImageCombo(Combote As ImageCombo, ComboCode As String, AddType As Integer) '填充列表框(ImageCombo)并定位
  999.     '函数参数:列表框(ImageCombo),ComboCode列表框分组编码
  1000.     'AddType 项目填充类型(0-填充索引+内容,无空记录 1-仅填充内容,无空记录 2-填充索引+内容,有空记录 3-仅填充内容,有空记录)
  1001.     Dim Rec_Combo As ADODB.Recordset              '填充属性
  1002.     Dim Rec_FillText As ADODB.Recordset           '填充内容
  1003.     Dim ci As ComboItem
  1004.     Dim jsqte As Integer                          '临时计数器
  1005.   
  1006.     Combote.ComboItems.Clear
  1007.     jsqte = 1
  1008.   
  1009.     '填充列表框内容
  1010.     Set Rec_Combo = Cw_DataEnvi.DataConnect.Execute("Select * From Xt_ImageCombo Where combo_code='" + Trim(ComboCode) + "'")
  1011.     With Rec_Combo
  1012.         Combote.Locked = True
  1013.         If AddType = 2 Or AddType = 3 Then
  1014.             Set ci = Combote.ComboItems.Add(, "@")
  1015.             jsqte = jsqte + 1
  1016.         End If
  1017.         
  1018.         Set Rec_FillText = Cw_DataEnvi.DataConnect.Execute(Trim(.Fields("Sql_String")))
  1019.         
  1020.         Do While Not Rec_FillText.EOF
  1021.             Select Case AddType
  1022.                 Case 0, 2                              '填充索引+内容
  1023.                     Set ci = Combote.ComboItems.Add(, "@" + Trim(Rec_FillText.Fields(Trim(.Fields("ItemKey")))), Trim(Rec_FillText.Fields(Trim(.Fields("ItemKey")))) + " " + Trim(Rec_FillText.Fields(Trim(.Fields("ItemText")))))
  1024.                 Case 1, 3                              '仅填充记录内容
  1025.                     Set ci = Combote.ComboItems.Add(, "@" + Trim(Rec_FillText.Fields(Trim(.Fields("ItemKey")))), Trim(Rec_FillText.Fields(Trim(.Fields("ItemText")))))
  1026.             End Select
  1027.             jsqte = jsqte + 1
  1028.             Rec_FillText.MoveNext
  1029.         Loop
  1030.         If Combote.ComboItems.count <> 0 Then
  1031.             Combote.ComboItems.Item(1).Selected = True
  1032.         End If
  1033.     End With
  1034. End Function
  1035. Public Function GetComboKey(Combote As ImageCombo, KeyOrName As Integer) As String      '取得用户选中列表框项目Key值或内容
  1036.   
  1037.     '函数参数:列表框(ImageCombo),KeyOrName 0--取项目Key值 1--取选项内容值
  1038.     Dim jsqte As Integer        '临时计数器
  1039.   
  1040.     If KeyOrName = 0 Then
  1041.         '去掉首位@
  1042.         For jsqte = 1 To Combote.ComboItems.count
  1043.             If Combote.ComboItems(jsqte).Text = Combote.Text Then
  1044.                 Exit For
  1045.             End If
  1046.         Next jsqte
  1047.         
  1048.         If Combote.ComboItems.count > 0 Then
  1049.             GetComboKey = Trim(Mid(Combote.ComboItems(jsqte).Key, 2, Len(Combote.ComboItems(jsqte).Key)))
  1050.         End If
  1051.     Else
  1052.         GetComboKey = Trim(Combote.Text)
  1053.     End If
  1054.  
  1055. End Function
  1056. Public Sub Sub_CodeScheme(ItemCodeTe As String, Int_CodeLev As Integer, Int_CodeScheme() As Integer)     '生成相应各级编码长度到数组中(编码方案)
  1057.     '函数参数:ItemCodeTe 编码方案代码,Int_CodeLev 返回编码最大级数,Int_CodeScheme() 返回各级编码长度
  1058.     'ForExample:会计科目编码:322222  结果:Int_CodeLev=6 Int_CodeScheme()=3 5 7 9 11 13
  1059.     
  1060.     Dim Rec_CodeScheme As New ADODB.Recordset   '编码方案动态集
  1061.     Set Rec_CodeScheme = Cw_DataEnvi.DataConnect.Execute("Select CodeScheme From Gy_CodeScheme Where ItemCode='" & Trim(ItemCodeTe) & "'")
  1062.     With Rec_CodeScheme
  1063.         If Not .EOF Then
  1064.             Int_CodeLev = Len(Trim(.Fields("CodeScheme")))
  1065.             ReDim Int_CodeScheme(Int_CodeLev)
  1066.             lenjsq = 0
  1067.             For jsqte = 1 To Int_CodeLev
  1068.                 lenjsq = lenjsq + Mid(Trim(.Fields("CodeScheme")), jsqte, 1)
  1069.                 Int_CodeScheme(jsqte) = lenjsq
  1070.             Next jsqte
  1071.         End If
  1072.         .Close
  1073.     End With
  1074. End Sub
  1075. Public Sub Sub_SetOperStatus(Str_OperStatus As String)                                                   '显示系统操作状态
  1076.     
  1077.     If Trim(Str_OperStatus) <> "" Then
  1078.         XT_Main.StatusBar1.Panels("OperStatus") = Str_OperStatus
  1079.     Else
  1080.         XT_Main.StatusBar1.Panels("OperStatus") = "就绪"
  1081.     End If
  1082. End Sub
  1083. Public Sub Sub_ReadBillInfo(BillCode As String, Frm_Bill As Form, Var_Bill() As Variant)                 '读入单据整体设计信息(录入)
  1084.     
  1085.     '参数说明:BillCode 单据编码(索引号) ,Frm_Bill 单据窗体 , VarBill 用来返回单据设计信息
  1086.     Dim RecTemp As New ADODB.Recordset                             '临时使用动态集
  1087.     ReDim Var_Bill(1 To 5)                                         '返回单据设计信息
  1088.     Set RecTemp = Cw_DataEnvi.DataConnect.Execute("Select * From xt_BillDesign Where BillCode='" & Trim(BillCode) & "'")
  1089.     With RecTemp
  1090.         If Not .EOF Then
  1091.             Frm_Bill.Height = .Fields("FormHeight")                   '设置窗体高度
  1092.             Frm_Bill.Width = .Fields("FormWidth")                     '设置窗体宽度
  1093.             Var_Bill(1) = Trim(.Fields("BillName"))                   '单据描述
  1094.             Frm_Bill.Caption = Var_Bill(1)                            '单据描述赋予窗体Caption
  1095.             Var_Bill(2) = Trim(.Fields("BillTitle"))                  '单据标题
  1096.             Var_Bill(3) = Trim(.Fields("Text_Group_Code"))            '单据所使用文本框组索引号
  1097.             Var_Bill(4) = Trim(.Fields("Grid_Code"))                  '单据所使用网格组索引号
  1098.             Var_Bill(5) = Trim(.Fields("Print_Code"))                 '单据所使用打印参数索引号
  1099.         End If
  1100.     End With
  1101. End Sub
  1102. Public Sub Sub_DPReadBillInfo(BillCode As String, Frm_Bill As Form, Var_Bill() As Variant)               '读入单据整体设计信息(打印)
  1103.     
  1104.     '参数说明:BillCode  单据编码(索引号)  Frm_Bill 单据窗体  VarBill 用来返回单据设计信息
  1105.     Dim RecTemp As New ADODB.Recordset
  1106.     ReDim Var_Bill(1 To 3)
  1107.   
  1108.     Set RecTemp = Cw_DataEnvi.DataConnect.Execute("Select * From xt_BillDesign Where BillCode='" & Trim(BillCode) & "'")
  1109.   
  1110.     With RecTemp
  1111.         If Not .EOF Then
  1112.             Frm_Bill.Pict.Height = .Fields("FormHeight") - 375                  '设置窗体高度
  1113.             Frm_Bill.Pict.Width = .Fields("FormWidth")                          '设置窗体宽度
  1114.             Frm_Bill.Lab_Title = Trim(.Fields("BillName"))                      '单据标题
  1115.             Var_Bill(1) = Trim(.Fields("BillName"))                             '单据描述
  1116.             Frm_Bill.Caption = Var_Bill(1)                                      '单据描述赋予窗体Caption
  1117.             Var_Bill(2) = Trim(.Fields("Text_Group_Code"))                      '单据所使用文本框组索引号
  1118.             Var_Bill(3) = Trim(.Fields("Grid_Code"))                            '单据所使用网格组索引号
  1119.         End If
  1120.     End With
  1121. End Sub
  1122. Public Sub DPBcwggs(Bcgsgrid As vsFlexGrid, Wggsdm As String)             '保存网格格式(包括网格列宽,网格列顺序)
  1123.     
  1124.     '过程参数:保存格式网格对象,网格格式代码(网格参数)
  1125.     Dim Tsxx As String
  1126.     Dim RecTemp As New ADODB.Recordset
  1127.     Dim Qslzte As Integer
  1128.     Cw_DataEnvi.DataConnect.BeginTrans
  1129.     On Error GoTo Swcwcl
  1130.     If RecTemp.State = 1 Then RecTemp.Close
  1131.     RecTemp.Open "select * from xt_grid where Grid_Code='" + Trim(Wggsdm) + "' order by ColId", Cw_DataEnvi.DataConnect, adOpenDynamic, adLockOptimistic
  1132.     With RecTemp
  1133.         If Not .EOF Then
  1134.             Qslzte = .Fields("BeginCol")
  1135.             .MoveNext
  1136.         End If
  1137.         Do While Not .EOF
  1138.             For jsqte = Qslzte To Bcgsgrid.Cols - 1
  1139.                 If Bcgsgrid.FixedRows = 1 Then
  1140.                     If Trim(.Fields("ColTitle1")) = Trim(Bcgsgrid.TextMatrix(0, jsqte)) Then
  1141.                         Exit For
  1142.                     End If
  1143.                 Else
  1144.                     If Trim(.Fields("ColTitle1")) = Trim(Bcgsgrid.TextMatrix(0, jsqte)) And Trim(.Fields("ColTitle2")) = Trim(Bcgsgrid.TextMatrix(1, jsqte)) Then
  1145.                         Exit For
  1146.                     End If
  1147.                 End If
  1148.             Next jsqte
  1149.             If jsqte <= Bcgsgrid.Cols - 1 Then
  1150.                 .Fields("ColId") = jsqte - Qslzte + 1
  1151.                 .Fields("ColWidth") = Bcgsgrid.ColWidth(jsqte)
  1152.                 .Update
  1153.             Else
  1154.                 GoTo Swcwcl
  1155.             End If
  1156.             .MoveNext
  1157.         Loop
  1158.     End With
  1159.     Cw_DataEnvi.DataConnect.CommitTrans
  1160.     Tsxx = "表格格式保存完毕!"
  1161.     Call Xtxxts(Tsxx, 0, 4)
  1162.     Exit Sub
  1163. Swcwcl:
  1164.     Cw_DataEnvi.DataConnect.RollbackTrans
  1165.     Tsxx = "存盘过程中出现未知错误,程序自动恢复保存前状态!"
  1166.     Call Xtxxts(Tsxx, 0, 1)
  1167.     Exit Sub
  1168. End Sub
  1169. '===================以下为系统权限控制与上机日志控制函数======================'
  1170. Public Function Security_Log(gnsy As String, UserCode As String, Optional LogTF As Integer = 3, Optional State As Boolean = True, Optional msg As Boolean = True) As Boolean   '权限判断和日志
  1171.     'Gnsy 功能索引 UserCode 用户编码
  1172.     'LogTF (1、判断权限,写日志)、(2、只写日志)、(3、只判断权限)
  1173.     'State 状态 (True 进入 false 完成)
  1174.     '返回Security_Log=true表示有权限,Security_Log=false表示没有有权限
  1175.     'Msg   没有权限时是否提示(True 提示    False不提示)
  1176.     Dim Tsxx As String              '系统信息提示
  1177.     
  1178.    On Error Resume Next
  1179.     
  1180.     Dim aDo_userGroup As New Recordset
  1181.     Dim aDo_gnbm As New Recordset: Dim sSql As String
  1182.     
  1183.     Set aDo_gnbm = Cw_DataEnvi.DataConnect.Execute("select * from Xt_xtgnb where gnsy='" & Trim(gnsy) & "'")
  1184.      
  1185.     If LogTF = 1 Or LogTF = 3 Then
  1186.         Set aDo_userGroup = Cw_DataEnvi.DataConnect.Execute("select * from Gy_Czygl where czybm='" & Trim(UserCode) & "'")
  1187.             
  1188.         If Mid(aDo_userGroup!AuthorityID, aDo_gnbm!Id, 1) = "1" Then
  1189.             Security_Log = True
  1190.         Else
  1191.             Security_Log = False
  1192.         End If
  1193.         aDo_userGroup.Close
  1194.         Set aDo_userGroup = Nothing
  1195.         
  1196.         If Security_Log = False Then
  1197.             Set aDo_userGroup = Cw_DataEnvi.DataConnect.Execute("select * from System_UserGroupInfo a ,System_UserGroup b where a.groupid=b.groupid and a.userid='" & Trim(UserCode) & "'")
  1198.             Do While Not aDo_userGroup.EOF
  1199.                 If Mid(aDo_userGroup!AuthorityID, aDo_gnbm!Id, 1) = "1" Then
  1200.                     Security_Log = True
  1201.                     Exit Do
  1202.                 Else
  1203.                     Security_Log = False
  1204.                 End If
  1205.                 aDo_userGroup.MoveNext
  1206.             Loop
  1207.             aDo_userGroup.Close
  1208.             Set aDo_userGroup = Nothing
  1209.         End If
  1210.         If Security_Log = False Then
  1211.            If msg = True Then
  1212.                 Tsxx = "没有权限,请与管理员联系!   "
  1213.                 Call Xtxxts(Tsxx, 0, 4)
  1214.            End If
  1215.         End If
  1216.     End If
  1217.     '------------------------------------
  1218.     If (LogTF = 1 And Security_Log = True) Or LogTF = 2 Then
  1219.         If State = True Then
  1220.             sSql = "insert into System_Log(GeginDate,userid,WorkstationName,WorkList,SystemName,NetUserName,State)" _
  1221.                 & " values(getdate(),'" & UserCode & "','" & MachineName & "','" & Trim("" & aDo_gnbm!gnms) & "','" & "人事管理" & "','" & NTDomainUserName & "','进入')"
  1222.         Else
  1223.             sSql = "insert into System_Log(GeginDate,userid,WorkstationName,WorkList,SystemName,NetUserName,State)" _
  1224.                 & " values(getdate(),'" & UserCode & "','" & MachineName & "','" & Trim("" & aDo_gnbm!gnms) & "','" & "人事管理" & "','" & NTDomainUserName & "','完成')"
  1225.         End If
  1226.         Cw_DataEnvi.DataConnect.Execute sSql
  1227.     End If
  1228.     aDo_gnbm.Close
  1229.     Set aDo_gnbm = Nothing
  1230.     
  1231. End Function
  1232. Public Function MachineName() As String                                         '取得当前工作站名
  1233.     
  1234.     Dim sBuffer As String * 255
  1235.     If GetComputerName(sBuffer, 255&) <> 0 Then
  1236.         MachineName = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
  1237.     Else
  1238.         MachineName = "(未知)"
  1239.     End If
  1240. End Function
  1241. Public Function NTDomainUserName() As String                                    '取得当前网络用户名
  1242.     
  1243.     Dim strBuffer As String * 255
  1244.     Dim lngBufferLength As Long
  1245.     Dim lngRet As Long
  1246.     Dim strTemp As String
  1247.     lngBufferLength = 255
  1248.     lngRet = GetUserName(strBuffer, lngBufferLength)
  1249.     strTemp = UCase(Trim$(strBuffer))
  1250.     NTDomainUserName = Left$(strTemp, lngBufferLength - 1)
  1251. End Function
  1252. Public Function GetPY(a1 As String) As String                                   '返回拼音码字符串
  1253.     
  1254.     '输入参数:a1 输入字符串
  1255.     Dim jsqte As Long
  1256.     Dim t1 As String
  1257.     GetPY = ""
  1258.     If Len(Trim(a1)) = 0 Then
  1259.         Exit Function
  1260.     End If
  1261.     For jsqte = 1 To Len(Trim(a1))
  1262.         t1 = Mid(a1, jsqte, 1)
  1263.         If Asc(t1) < 0 Then
  1264.             If Asc(t1) < Asc("啊") Then
  1265.                 GetPY = GetPY + t1
  1266.                 GoTo L1
  1267.             End If
  1268.             If Asc(t1) >= Asc("啊") And Asc(t1) < Asc("芭") Then
  1269.                 GetPY = GetPY + "A"
  1270.                 GoTo L1
  1271.             End If
  1272.             If Asc(t1) >= Asc("芭") And Asc(t1) < Asc("擦") Then
  1273.                 GetPY = GetPY + "B"
  1274.                 GoTo L1
  1275.             End If
  1276.             If Asc(t1) >= Asc("擦") And Asc(t1) < Asc("搭") Then
  1277.                 GetPY = GetPY + "C"
  1278.                 GoTo L1
  1279.             End If
  1280.             If Asc(t1) >= Asc("搭") And Asc(t1) < Asc("蛾") Then
  1281.                 GetPY = GetPY + "D"
  1282.                 GoTo L1
  1283.             End If
  1284.             If Asc(t1) >= Asc("蛾") And Asc(t1) < Asc("发") Then
  1285.                 GetPY = GetPY + "E"
  1286.                 GoTo L1
  1287.             End If
  1288.             If Asc(t1) >= Asc("发") And Asc(t1) < Asc("噶") Then
  1289.                 GetPY = GetPY + "F"
  1290.                 GoTo L1
  1291.             End If
  1292.             If Asc(t1) >= Asc("噶") And Asc(t1) < Asc("哈") Then
  1293.                 GetPY = GetPY + "G"
  1294.                 GoTo L1
  1295.             End If
  1296.             If Asc(t1) >= Asc("哈") And Asc(t1) < Asc("击") Then
  1297.                 GetPY = GetPY + "H"
  1298.                 GoTo L1
  1299.             End If
  1300.             If Asc(t1) >= Asc("击") And Asc(t1) < Asc("喀") Then
  1301.                 GetPY = GetPY + "J"
  1302.                 GoTo L1
  1303.             End If
  1304.             If Asc(t1) >= Asc("喀") And Asc(t1) < Asc("垃") Then
  1305.                 GetPY = GetPY + "K"
  1306.                 GoTo L1
  1307.             End If
  1308.             If Asc(t1) >= Asc("垃") And Asc(t1) < Asc("妈") Then
  1309.                 GetPY = GetPY + "L"
  1310.                 GoTo L1
  1311.             End If
  1312.             If Asc(t1) >= Asc("妈") And Asc(t1) < Asc("拿") Then
  1313.                 GetPY = GetPY + "M"
  1314.                 GoTo L1
  1315.             End If
  1316.             If Asc(t1) >= Asc("拿") And Asc(t1) < Asc("哦") Then
  1317.                 GetPY = GetPY + "N"
  1318.                 GoTo L1
  1319.             End If
  1320.             If Asc(t1) >= Asc("哦") And Asc(t1) < Asc("啪") Then
  1321.                 GetPY = GetPY + "O"
  1322.                 GoTo L1
  1323.             End If
  1324.             If Asc(t1) >= Asc("啪") And Asc(t1) < Asc("期") Then
  1325.                 GetPY = GetPY + "P"
  1326.                 GoTo L1
  1327.             End If
  1328.             If Asc(t1) >= Asc("期") And Asc(t1) < Asc("然") Then
  1329.                 GetPY = GetPY + "Q"
  1330.                 GoTo L1
  1331.             End If
  1332.             If Asc(t1) >= Asc("然") And Asc(t1) < Asc("撒") Then
  1333.                 GetPY = GetPY + "R"
  1334.                 GoTo L1
  1335.             End If
  1336.             If Asc(t1) >= Asc("撒") And Asc(t1) < Asc("塌") Then
  1337.                 GetPY = GetPY + "S"
  1338.                 GoTo L1
  1339.             End If
  1340.             If Asc(t1) >= Asc("塌") And Asc(t1) < Asc("挖") Then
  1341.                 GetPY = GetPY + "T"
  1342.                 GoTo L1
  1343.             End If
  1344.             If Asc(t1) >= Asc("挖") And Asc(t1) < Asc("昔") Then
  1345.                 GetPY = GetPY + "W"
  1346.                 GoTo L1
  1347.             End If
  1348.             If Asc(t1) >= Asc("昔") And Asc(t1) < Asc("压") Then
  1349.                 GetPY = GetPY + "X"
  1350.                 GoTo L1
  1351.             End If
  1352.             If Asc(t1) >= Asc("压") And Asc(t1) < Asc("匝") Then
  1353.                 GetPY = GetPY + "Y"
  1354.                 GoTo L1
  1355.             End If
  1356.             If Asc(t1) >= Asc("匝") Then
  1357.                 GetPY = GetPY + "Z"
  1358.                 GoTo L1
  1359.             End If
  1360.         Else
  1361.             If UCase(t1) <= "Z" And UCase(t1) >= "A" Then
  1362.                 GetPY = GetPY + UCase(t1)
  1363.             Else
  1364.                 GetPY = t1
  1365.             End If
  1366.         End If
  1367. L1:
  1368.     Next jsqte
  1369. End Function
  1370. '<<<<<<<<<<<<<<<<<<<<<
  1371. '====================单据编号格式化==============
  1372. Public Function BillCodeFormat(BillCode As String, Code As String) As String
  1373.     BillCode = Trim(BillCode): Code = Trim(Code)
  1374.     Dim Profix  As String       '前缀
  1375.     Dim Glida As Integer        '流水方式
  1376.     Dim CodeLen As Integer      '代码长度
  1377.     Dim aDo_re As New Recordset
  1378.     Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_BillNumber where BillCode='" & Trim(BillCode) & "'")
  1379.     If aDo_re.RecordCount > 0 Then
  1380.         Profix = aDo_re!Profix
  1381.         Glida = aDo_re!Glida
  1382.         CodeLen = aDo_re!CodeLen
  1383.     Else
  1384.         BillCodeFormat = "": Exit Function
  1385.     End If
  1386.     aDo_re.Close
  1387.     If Len(Code) >= Len(Profix) + CodeLen Then BillCodeFormat = Code: Exit Function
  1388.     If Glida = 0 Then
  1389.        If Len(Code) >= Len(Profix) Then
  1390.           If Profix <> Mid(Code, 1, Len(Profix)) Then
  1391.              BillCodeFormat = Profix & String(CodeLen - Len(Code), "0") & Code
  1392.           Else
  1393.              If Len(Code) = Len(Profix) Then BillCodeFormat = Code: Exit Function
  1394.              BillCodeFormat = Profix & String(CodeLen - Len(Code), "0") & Mid(Code, Len(Profix) + 1, Len(Code))
  1395.           End If
  1396.        Else
  1397.           BillCodeFormat = Profix & String(CodeLen - Len(Code), "0") & Code: Exit Function
  1398.        End If
  1399.     Else
  1400.        If Len(Code) >= Len(Profix) Then
  1401.           If Profix <> Mid(Code, 1, Len(Profix)) Then
  1402.                BillCodeFormat = Profix & Code
  1403.              Else
  1404.                BillCodeFormat = Code
  1405.           End If
  1406.        End If
  1407.     End If
  1408. End Function
  1409. '====================单据ID处理==================
  1410. Public Function CreatBillID(BillCode As String) As Integer
  1411.     '参数说明: BillCode 单据编码
  1412.     Dim BillType As String
  1413.     Dim aDo_re As New Recordset
  1414.     Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_BillNumber where BillCode='" & Trim(BillCode) & "'")
  1415.     If aDo_re.RecordCount > 0 Then
  1416.         CreatBillID = aDo_re!IDNow
  1417.         BillType = aDo_re!BillType
  1418.     End If
  1419.     aDo_re.Close
  1420.     Cw_DataEnvi.DataConnect.Execute "update  Gy_BillNumber set IDNow=IDNow+1 where BillType='" & Trim(BillType) & "'"
  1421. End Function
  1422. '====================单据编码处理==================
  1423. Public Function CreatBillCode(BillCode As String, Optional Add As Boolean = False, Optional KjYear As Integer, Optional Period As Integer, Optional WhCode As String) As String
  1424.     '参数说明: BillCode 单据编码,KjYear 会计年度,Period 会计期间,WhCode 仓库编码,Add 编号是累加(True 加,False,否)
  1425.     Dim BillCodeMode As Integer '编码方式
  1426.     Dim Profix  As String       '前缀
  1427.     Dim Glida As Integer        '流水方式
  1428.     Dim CodeLen As Integer      '代码长度
  1429.     Dim aDo_re As New Recordset
  1430.     Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_BillNumber where BillCode='" & Trim(BillCode) & "'")
  1431.     With aDo_re
  1432.         If .RecordCount > 0 Then
  1433.             BillCodeMode = !BillCodeMode
  1434.             Profix = !Profix
  1435.             Glida = !Glida
  1436.             CodeLen = !CodeLen
  1437.             .Close
  1438.         Else
  1439.             Exit Function
  1440.         End If
  1441.     End With
  1442.     
  1443.     Select Case BillCodeMode
  1444.            Case 0 '单据方式
  1445.               '=============
  1446.               Select Case Glida
  1447.                      Case 0
  1448.                           Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_Maxnum where BillCode='" & Trim(BillCode) & "'")
  1449.                           If aDo_re.RecordCount < 1 Then '当编号记录没有时
  1450.                               Cw_DataEnvi.DataConnect.Execute "insert into Gy_Maxnum(BillCode,NowNumber) VALUES ('" & Trim(BillCode) & "',1)"
  1451.                               CreatBillCode = Trim(Profix) & String(CodeLen - 1, "0") & 1
  1452.                           Else
  1453.                               CreatBillCode = Trim(Profix) & String(CodeLen - Len(aDo_re!NowNumBer), "0") & aDo_re!NowNumBer
  1454.                           End If
  1455.                           If Add = True Then
  1456.                               Cw_DataEnvi.DataConnect.Execute "update Gy_Maxnum set NowNumBer=NowNumBer+1  where BillCode='" & Trim(BillCode) & "'"
  1457.                           End If
  1458.                           Exit Function
  1459.                      Case 1
  1460.                           Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_Maxnum where BillCode='" & Trim(BillCode) & "' and KjYear= " & KjYear)
  1461.                           If aDo_re.RecordCount < 1 Then '当前年记录没有时
  1462.                               Cw_DataEnvi.DataConnect.Execute "insert into Gy_Maxnum(BillCode,Kjyear,NowNumber) VALUES ('" & Trim(BillCode) & "'," & KjYear & ",1)"
  1463.                               CreatBillCode = Trim(Profix) & KjYear & String(CodeLen - 1 - Len(Trim(Str(KjYear))), "0") & "1"
  1464.                           Else
  1465.                               CreatBillCode = Trim(Profix) & KjYear & String(CodeLen - Len(aDo_re!NowNumBer) - Len(Trim(Str(KjYear))), "0") & aDo_re!NowNumBer
  1466.                           End If
  1467.                           If Add = True Then
  1468.                               Cw_DataEnvi.DataConnect.Execute "update Gy_Maxnum set NowNumBer=NowNumBer+1 where BillCode='" & Trim(BillCode) & "' and KjYear= " & KjYear
  1469.                           End If
  1470.                           Exit Function
  1471.                      Case 2
  1472.                           Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_Maxnum where BillCode='" & Trim(BillCode) & "' and KjYear= " & KjYear & " and Period=" & Period)
  1473.                           If aDo_re.RecordCount < 1 Then '当前年当前期间记录没有时
  1474.                               Cw_DataEnvi.DataConnect.Execute "insert into Gy_Maxnum(BillCode,Kjyear,Period,NowNumber) VALUES ('" & Trim(BillCode) & "'," & KjYear & "," & Period & ",1)"
  1475.                               CreatBillCode = Trim(Profix) & KjYear & String(2 - Len(Trim(Str(Period))), "0") & Period & String(CodeLen - 1 - Len(Trim(Str(KjYear))) - 2, "0") & "1"
  1476.                           Else
  1477.                               CreatBillCode = Trim(Profix) & KjYear & String(2 - Len(Trim(Str(Period))), "0") & Period & String(CodeLen - Len(aDo_re!NowNumBer) - Len(Trim(Str(KjYear))) - 2, "0") & aDo_re!NowNumBer
  1478.                           End If
  1479.                           If Add = True Then
  1480.                               Cw_DataEnvi.DataConnect.Execute "update Gy_Maxnum set NowNumBer=NowNumBer+1 where BillCode='" & Trim(BillCode) & "' and KjYear= " & KjYear & " and Period=" & Period
  1481.                           End If
  1482.                           Exit Function
  1483.               End Select
  1484.               '==============
  1485.           Case 1 '单据+仓库方式
  1486.           
  1487.               '=============
  1488.               Select Case Glida
  1489.                      Case 0
  1490.                           Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_Maxnum where BillCode='" & Trim(BillCode) & "' and WhCode='" & Trim(WhCode) & "'")
  1491.                           If aDo_re.RecordCount < 1 Then '当编号记录没有时
  1492.                               Cw_DataEnvi.DataConnect.Execute "insert into Gy_Maxnum(BillCode,WhCode ,NowNumber) VALUES ('" & Trim(BillCode) & "','" & Trim(WhCode) & "',1)"
  1493.                               CreatBillCode = Trim(Profix) & Trim(WhCode) & String(CodeLen - 1 - Len(Trim(WhCode)), "0") & 1
  1494.                           Else
  1495.                               CreatBillCode = Trim(Profix) & Trim(WhCode) & String(CodeLen - Len(aDo_re!NowNumBer) - Len(Trim(WhCode)), "0") & aDo_re!NowNumBer
  1496.                           End If
  1497.                           If Add = True Then
  1498.                               Cw_DataEnvi.DataConnect.Execute "update Gy_Maxnum set NowNumBer=NowNumBer+1 where BillCode='" & Trim(BillCode) & "' and WhCode='" & Trim(WhCode) & "'"
  1499.                           End If
  1500.                           Exit Function
  1501.                      Case 1
  1502.                           Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_Maxnum where BillCode='" & Trim(BillCode) & "' and KjYear= " & KjYear & " and WhCode='" & Trim(WhCode) & "'")
  1503.                           If aDo_re.RecordCount < 1 Then '当前年记录没有时
  1504.                               Cw_DataEnvi.DataConnect.Execute "insert into Gy_Maxnum(BillCode,Kjyear,WhCode,NowNumber) VALUES ('" & Trim(BillCode) & "'," & KjYear & ",'" & Trim(WhCode) & "',1)"
  1505.                               CreatBillCode = Trim(Profix) & Trim(WhCode) & KjYear & String(CodeLen - 1 - Len(Trim(Str(KjYear))) - Len(Trim(WhCode)), "0") & "1"
  1506.                           Else
  1507.                               CreatBillCode = Trim(Profix) & Trim(WhCode) & KjYear & String(CodeLen - Len(aDo_re!NowNumBer) - Len(Trim(Str(KjYear))) - Len(Trim(WhCode)), "0") & aDo_re!NowNumBer
  1508.                           End If
  1509.                           If Add = True Then
  1510.                               Cw_DataEnvi.DataConnect.Execute "update Gy_Maxnum set NowNumBer=NowNumBer+1 where BillCode='" & Trim(BillCode) & "' and KjYear= " & KjYear & " and WhCode='" & Trim(WhCode) & "'"
  1511.                           End If
  1512.                           Exit Function
  1513.                      Case 2
  1514.                           Set aDo_re = Cw_DataEnvi.DataConnect.Execute("select * from Gy_Maxnum where BillCode='" & Trim(BillCode) & "' and KjYear= " & KjYear & " and Period=" & Period & " and WhCode='" & Trim(WhCode) & "'")
  1515.                           If aDo_re.RecordCount < 1 Then '当前年当前期间记录没有时
  1516.                               Cw_DataEnvi.DataConnect.Execute "insert into Gy_Maxnum(BillCode,Kjyear,Period,WhCode,NowNumber) VALUES ('" & Trim(BillCode) & "'," & KjYear & "," & Period & ",'" & Trim(WhCode) & "',1)"
  1517.                               CreatBillCode = Trim(Profix) & Trim(WhCode) & KjYear & String(2 - Len(Trim(Str(Period))), "0") & Period & String(CodeLen - 1 - Len(Trim(Str(KjYear))) - 2 - Len(Trim(WhCode)), "0") & "1"
  1518.                           Else
  1519.                               CreatBillCode = Trim(Profix) & Trim(WhCode) & KjYear & String(2 - Len(Trim(Str(Period))), "0") & Period & String(CodeLen - Len(aDo_re!NowNumBer) - Len(Trim(Str(KjYear))) - 2 - Len(Trim(WhCode)), "0") & aDo_re!NowNumBer
  1520.                           End If
  1521.                           If Add = True Then
  1522.                               Cw_DataEnvi.DataConnect.Execute "update Gy_Maxnum set NowNumBer=NowNumBer+1 where BillCode='" & Trim(BillCode) & "' and KjYear= " & KjYear & " and Period=" & Period & " and WhCode='" & Trim(WhCode) & "'"
  1523.                           End If
  1524.                           Exit Function
  1525.               End Select
  1526.               '==============
  1527.           
  1528.     End Select
  1529. End Function