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

企业管理

开发平台:

Visual Basic

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