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

企业管理

开发平台:

Visual Basic

  1.     
  2.     If Val(.TextMatrix(Lng_GridRow, 22)) <> 0 Then
  3.        Str_Memo = Str_Memo + "项目数量:" + Trim(.TextMatrix(Lng_GridRow, 22)) + Trim(.TextMatrix(Lng_GridRow, 23)) + Space(2)
  4.     End If
  5.     
  6.     If Len(Trim(.TextMatrix(Lng_GridRow, 24))) <> 0 Then
  7.        Str_Memo = Str_Memo + "经办人:" + Trim(.TextMatrix(Lng_GridRow, 24))
  8.     End If
  9.     
  10.     Lab_Memo(0).Caption = Str_Memo
  11.     Lab_Memo(0).Refresh
  12.     
  13.   End With
  14. End Sub
  15. Private Sub Sub_AddBill()                                                '新增一张单据
  16.    Dim RecTemp As New ADODB.Recordset     '临时使用动态集
  17.    Dim Jsqte As Long            '临时计数器
  18.    
  19.    '设置操作状态为新增
  20.    Lab_OperStatus.Caption = "2"
  21.    
  22.    '设置工具条状态
  23.    Call Sub_OperStatus("2")
  24.    
  25.    '计算新增单据单据号
  26.    Call Sub_JsVouchNo
  27.    
  28.    '显示制单人,清空记帐人,审核人
  29.    Lab_Book.Caption = ""
  30.    Lab_Checker.Caption = ""
  31.    Lab_Bill.Caption = Xtczy
  32.    
  33.    '重置网格
  34.    
  35.    With WglrGrid
  36.      .Rows = Pmbcsjhs + .FixedRows + Fzxwghs + 1
  37.      For Jsqte = .FixedRows To .Rows - 1
  38.          .RowHeight(Jsqte) = Sjhgd
  39.      Next Jsqte
  40.      
  41.      WglrGrid.Clear 1
  42.      
  43.      changelock = True
  44.        .Select .FixedRows, Qslz
  45.      changelock = False
  46.      
  47.    End With
  48.    
  49.    '计算合计数据(清零)
  50.     For Jsqte = Qslz To WglrGrid.Cols - 1
  51.         Call Sjhj(Jsqte)
  52.     Next Jsqte
  53.     
  54.    '凭证类别得到焦点
  55.    
  56.    LrText(0).SetFocus
  57.    
  58.    '有错凭证标识隐藏
  59.     
  60.    Lab_Error.Visible = False
  61.        
  62. End Sub
  63. Private Sub Sub_EditBill()                                                '修改一张单据
  64.    Dim RecTemp As New ADODB.Recordset     '临时使用动态集
  65.    
  66.    '判断当前凭证是否允许修改
  67.    If Not Fun_AllowEdit Then
  68.       Exit Sub
  69.    End If
  70.    
  71.    '设置操作状态为修改
  72.    Lab_OperStatus.Caption = "3"
  73.    
  74.    '设置工具条状态
  75.    Call Sub_OperStatus("30")
  76.    
  77.    '显示制单人
  78.     Lab_Bill.Caption = Xtczy
  79.    
  80. End Sub
  81. Private Sub Sub_DeleteBill()                                               '删除当前单据
  82.    Dim YAnswer As Integer
  83.    Dim Int_Year As Integer      '用户选择会计年度
  84.    Dim Int_Period As Integer    '用户选择会计期间
  85.   
  86.    '判断当前凭证是否允许删除
  87.    If Not Fun_AllowEdit Then
  88.       Exit Sub
  89.    End If
  90.    
  91.    Tsxx = "请确认是否删除当前凭证?"
  92.    Yhanswer = Xtxxts(Tsxx, 2, 2)
  93.    If Yhanswer = 1 Then
  94.       '1.删除凭证所有内容
  95.        Int_Year = Val(Mid(Combo_Kjqj.Text, 1, 4))
  96.        Int_Period = Val(Mid(Combo_Kjqj.Text, 6, 2))
  97.        Cw_DataEnvi.DataConnect.Execute ("Delete Cwzz_AccVouch Where Rectype=0 And Year=" & Int_Year & " and Period=" & Int_Period & " And VouchClassCode='" & Trim(LrText(0).Text) & "' And VouchNo=" & Val(LrText(3).Text))
  98.        Tsxx = "该凭证已被删除!"
  99.        Call Xtxxts(Tsxx, 0, 4)
  100.    Else
  101.       Exit Sub
  102.    End If
  103.      
  104.    Select Case Trim(Lab_Pzclzt.Caption)
  105.       Case "1"    '填制凭证
  106.         
  107.         Call Sub_AddBill
  108.         
  109.         '设置操作状态为浏览
  110.         Lab_OperStatus = "1"
  111.         Call Sub_OperStatus("10")
  112.    
  113.       Case "2"    '查询凭证
  114.    
  115.    End Select
  116. End Sub
  117. Private Sub Sub_AbandonBill()                                              '放弃对当前单据的操作
  118.  '先关闭录入载体
  119.   changelock = True
  120.   Valilock = True
  121.     Call Ycwbk
  122.   changelock = False
  123.   Valilock = False
  124.    Select Case Trim(Lab_OperStatus.Caption)
  125.       
  126.       Case "2"         '新增状态
  127.         
  128.         Call Sub_AddBill
  129.         
  130.         '设置操作状态为浏览
  131.         Lab_OperStatus = "1"
  132.         Call Sub_OperStatus("10")
  133.         
  134.       Case "3"         '修改状态
  135.       
  136.         '重新显示当前单据
  137.       
  138.         Call Sub_ShowBill
  139.         
  140.         '设置操作状态为浏览
  141.         Lab_OperStatus = "1"
  142.         Call Sub_OperStatus("11")
  143.    End Select
  144. End Sub
  145. Private Sub Sub_QueryBill()                                              '查询凭证
  146.    PZ_FrmPzcx.Show 1
  147.    If Xtfhcs = "1" Then
  148.       Call Sub_ShowBill
  149.       
  150.       '设置操作状态为浏览
  151.       Lab_OperStatus.Caption = "1"
  152.                 
  153.       '设置工具条状态
  154.       Call Sub_OperStatus("11")
  155.    End If
  156. End Sub
  157. Private Sub Combo_Kjqj_Click()                                           '会计期间发生变化则自动计算单据编号
  158.   Call Sub_JsVouchNo
  159. End Sub
  160. Private Sub Sub_JsVouchNo()                                              '自动计算新增单据编号
  161.   Dim RecTemp As New ADODB.Recordset     '临时使用动态集
  162.   
  163.   '单据为新增时才有效
  164.   If Lab_OperStatus <> "2" Then
  165.      Exit Sub
  166.   End If
  167.   
  168.   SQLSTR = "Select MAX(VouchNo) AS MVouchNo FROM  Cwzz_AccVouch Where Rectype=0 And Year=" & Mid(Combo_Kjqj.Text, 1, 4) & " AND Period=" & Mid(Combo_Kjqj.Text, 6, 2) & _
  169.            " AND VouchClassCode='" & Trim(LrText(0).Text) & "'"
  170.   Set RecTemp = Cw_DataEnvi.DataConnect.Execute(SQLSTR)
  171.   TextChangeLock = True
  172.      If Not IsNull(RecTemp.Fields("MVouchNo")) Then
  173.         LrText(3).Text = Mid(Trim(Str(10000 + RecTemp.Fields("MVouchNo") + 1)), 2, 4)
  174.      Else
  175.         LrText(3).Text = "0001"
  176.      End If
  177.   TextChangeLock = False
  178. End Sub
  179. Private Function Sub_SaveBill() As Boolean                   '保 存 单 据
  180.   Dim RecTemp As New ADODB.Recordset     '临时使用动态集
  181.   Dim Recfind As New ADODB.Recordset     '有效性判断动态集
  182.   Dim Rowjsq As Long           '网格行计数器
  183.   Dim Coljsq As Long           '网格列计数器
  184.   Dim Jsqte As Integer         '临时计数器
  185.   Dim Int_RowCount As Integer  '有效数据行计数器
  186.   Dim Bln_AssVali As Boolean   '辅助核算错误标识
  187.   Dim Lrywlz As Long           '录入有误列值
  188.   Dim Dbl_Jfhj As Double       '借方合计
  189.   Dim Dbl_Dfhj As Double       '贷方合计
  190.   Dim Int_Year As Integer      '用户选择会计年度
  191.   Dim Int_Period As Integer    '用户选择会计期间
  192.   Dim Int_VouchNo As Integer   '单据号
  193.   
  194.   For Jsqte = 0 To Max_Text_Index
  195.         If Textint(Jsqte, 8) = 1 Then     '字段不能为空
  196.            If Len(Trim(LrText(Jsqte).Text)) = 0 Then
  197.               Tsxx = Textstr(Jsqte, 7) & "不能为空!"
  198.                Call Xtxxts(Tsxx, 0, 1)
  199.                LrText(Jsqte).SetFocus
  200.                Sub_SaveBill = False
  201.                Exit Function
  202.            End If
  203.         Else
  204.           If Textint(Jsqte, 8) = 2 Then   '字段不能为零
  205.            If Val(Trim(LrText(Jsqte).Text)) = 0 Then
  206.                Tsxx = Textstr(Jsqte, 7) & "不能为零!"
  207.                Call Xtxxts(Tsxx, 0, 1)
  208.                LrText(Jsqte).SetFocus
  209.                Sub_SaveBill = False
  210.                Exit Function
  211.            End If
  212.           End If
  213.         End If
  214.     Next Jsqte
  215.     
  216.    '对需要进行事后判断的文本框录入内容进行有效性判断 (固定不变)
  217.   For Jsqte = 0 To Max_Text_Index
  218.     If Textint(Index, 9) = 0 Or Textint(Index, 9) = 2 Then
  219.       If Not TextYxxpd(Jsqte) Then
  220.          Exit Function
  221.       End If
  222.     End If
  223.   Next Jsqte
  224.   
  225.   '[判断用户所选会计期间是否有效(非结帐月份),且制单日期必须和所选会计期间一致
  226.   SQLSTR = "Select * FROM  XT_Kjrlb Where KjYear=" & Mid(Combo_Kjqj.Text, 1, 4) & " AND MM=" & Mid(Combo_Kjqj.Text, 6, 2)
  227.         
  228.   Set RecTemp = Cw_DataEnvi.DataConnect.Execute(SQLSTR)
  229.   
  230.   With RecTemp
  231.     If Not .EOF Then
  232.        If .Fields("Cwzzjzbz") Then
  233.           Tsxx = "所选会计期间已经结帐,不能再填制凭证!"
  234.           Call Xtxxts(Tsxx, 0, 1)
  235.           Combo_Kjqj.SetFocus
  236.           Exit Function
  237.        End If
  238.        
  239.        If Not (LrText(1).Text >= .Fields("Qsrq") And LrText(1).Text <= .Fields("Zzrq")) Then
  240.           Tsxx = "制单日期应在所选会计期间范围内!"
  241.           Call Xtxxts(Tsxx, 0, 1)
  242.           LrText(1).SetFocus
  243.           Exit Function
  244.        End If
  245.     End If
  246.   End With
  247.   
  248.   '下面将对所有有效数据行进行有效性判断
  249.   
  250.   Int_RowCount = 0
  251.   
  252.   Dbl_Jfhj = 0
  253.   
  254.   Dbl_Dfhj = 0
  255.   
  256.   With WglrGrid
  257.      
  258.      For Rowjsq = .FixedRows To .Rows
  259.      
  260.          '带*号者为有效数据行
  261.          
  262.          If .TextMatrix(Rowjsq, 0) <> "*" Then
  263.             Exit For
  264.          Else
  265.             Int_RowCount = Int_RowCount + 1
  266.          End If
  267.          
  268.          '1.首先进行为空或为零判断(固定不变)
  269.            For Coljsq = Qslz To .Cols - 1
  270.                If (GridInt(Coljsq, 5) = 1 And Len(Trim(.TextMatrix(Rowjsq, Coljsq))) = 0) Or (GridInt(Coljsq, 5) = 2 And Val(Trim(.TextMatrix(Rowjsq, Coljsq))) = 0) Then
  271.                   Tsxx = GridStr(Coljsq, 2)
  272.                   Lrywlz = Coljsq
  273.                   GoTo Lrcwcl
  274.                   Exit For
  275.                End If
  276.            Next Coljsq
  277.            
  278.          '2.[自定义判断(补丁)
  279.             If Val(Trim(.TextMatrix(Rowjsq, Sydz("004", GridStr(), Szzls)))) = 0 And Val(Trim(.TextMatrix(Rowjsq, Sydz("005", GridStr(), Szzls)))) = 0 Then
  280.                Tsxx = "借方和贷方金额不能同时为零!"
  281.                Lrywlz = Sydz("004", GridStr(), Szzls)
  282.                GoTo Lrcwcl
  283.             End If
  284.             
  285.             If Val(Trim(.TextMatrix(Rowjsq, Sydz("004", GridStr(), Szzls)))) <> 0 And Val(Trim(.TextMatrix(Rowjsq, Sydz("005", GridStr(), Szzls)))) <> 0 Then
  286.                Tsxx = "借方和贷方金额不能同时不为零!"
  287.                Lrywlz = Sydz("004", GridStr(), Szzls)
  288.                GoTo Lrcwcl
  289.             End If
  290.             
  291.             '判断辅助核算项目是否填写并是否有效
  292.                         
  293.             SQLSTR = "Select * FROM Cwzz_AccCode Where Ccode='" & Trim(.TextMatrix(Rowjsq, Sydz("002", GridStr(), Szzls))) & "'"
  294.       
  295.             Set RecTemp = Cw_DataEnvi.DataConnect.Execute(SQLSTR)
  296.                With RecTemp
  297.                  If .EOF Then
  298.                      Tsxx = "此科目不存在!"
  299.                      GoTo Lrcwcl
  300.                  End If
  301.                  If Not .Fields("EndFlag") Then
  302.                     Tsxx = "此科目非末级科目!"
  303.                     GoTo Lrcwcl
  304.                  End If
  305.                  If .Fields("StopUse") Then
  306.                     Tsxx = "此科目已停用"
  307.                     GoTo Lrcwcl
  308.                  End If
  309.                  
  310.                 '对于银行科目,如结算方式不为空则结算方式必须有效
  311.                 
  312.                  If Trim(RecTemp.Fields("Cproperty")) = "银行" And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 1))) <> 0 Then
  313.                       Set Recfind = Cw_DataEnvi.DataConnect.Execute("Select SSCode FROM Cwzz_Settlement Where SSCode='" & Trim(WglrGrid.TextMatrix(Rowjsq, 1)) & "'")
  314.                       If Recfind.EOF Then
  315.                          Tsxx = "此结算方式不存在!"
  316.                          Lrywlz = Sydz("002", GridStr(), Szzls)
  317.                          Bln_AssVali = True
  318.                          GoTo Lrcwcl
  319.                       End If
  320.                  End If
  321.                  
  322.                 '如有数量核算且用户选择数量不能为零则数量项不能为零
  323.                  
  324.                  If RecTemp.Fields("QuantityFlag") And Chk_Quantity.Value = 1 And Val(WglrGrid.TextMatrix(Rowjsq, 5)) = 0 Then
  325.                     Tsxx = "此科目需要数量核算,数量项不能为零"
  326.                     Lrywlz = Sydz("002", GridStr(), Szzls)
  327.                     Bln_AssVali = True
  328.                     GoTo Lrcwcl
  329.                  End If
  330.                  
  331.                  
  332.                 '部门核算则部门不能为空且有效
  333.                 If RecTemp.Fields("DeptFlag") And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 12))) = 0 Then
  334.                    Tsxx = "此科目需要部门核算,部门项不能为空"
  335.                    Lrywlz = Sydz("002", GridStr(), Szzls)
  336.                    Bln_AssVali = True
  337.                    GoTo Lrcwcl
  338.                 Else
  339.                    If RecTemp.Fields("DeptFlag") And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 12))) <> 0 Then
  340.                       Set Recfind = Cw_DataEnvi.DataConnect.Execute("Select DeptCode FROM Gy_Department Where DeptCode='" & Trim(WglrGrid.TextMatrix(Rowjsq, 12)) & "'")
  341.                       If Recfind.EOF Then
  342.                          Tsxx = "此部门不存在!"
  343.                          Lrywlz = Sydz("002", GridStr(), Szzls)
  344.                          Bln_AssVali = True
  345.                          GoTo Lrcwcl
  346.                       End If
  347.                     End If
  348.                 End If
  349.                 
  350.                 '往来单位核算则往来单位不能为空
  351.                 If RecTemp.Fields("CusFlag") And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 14))) = 0 Then
  352.                    Tsxx = "此科目需要往来单位核算,往来单位项不能为空"
  353.                    Lrywlz = Sydz("002", GridStr(), Szzls)
  354.                    Bln_AssVali = True
  355.                    GoTo Lrcwcl
  356.                 Else
  357.                    If RecTemp.Fields("CusFlag") And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 14))) <> 0 Then
  358.                       Set Recfind = Cw_DataEnvi.DataConnect.Execute("Select CusCode FROM Gy_Customer Where CusCode='" & Trim(WglrGrid.TextMatrix(Rowjsq, 14)) & "'")
  359.                       If Recfind.EOF Then
  360.                          Tsxx = "此往来单位不存在!"
  361.                          Lrywlz = Sydz("002", GridStr(), Szzls)
  362.                          Bln_AssVali = True
  363.                          GoTo Lrcwcl
  364.                        End If
  365.                     End If
  366.                 End If
  367.                 
  368.                 '个人往来核算则个人项不能为空
  369.                 If RecTemp.Fields("PersonFlag") And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 16))) = 0 Then
  370.                    Tsxx = "此科目需要个人往来核算,个人项不能为空"
  371.                    Lrywlz = Sydz("002", GridStr(), Szzls)
  372.                    Bln_AssVali = True
  373.                    GoTo Lrcwcl
  374.                 Else
  375.                    If RecTemp.Fields("PersonFlag") And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 16))) <> 0 Then
  376.                       Set Recfind = Cw_DataEnvi.DataConnect.Execute("Select PersonCode FROM Gy_Person Where PersonCode='" & Trim(WglrGrid.TextMatrix(Rowjsq, 16)) & "'")
  377.                       If Recfind.EOF Then
  378.                          Tsxx = "此个人不存在!"
  379.                          Lrywlz = Sydz("002", GridStr(), Szzls)
  380.                          Bln_AssVali = True
  381.                          GoTo Lrcwcl
  382.                       End If
  383.                     End If
  384.                 End If
  385.                 
  386.                 '项目核算则项目不能为空
  387.                 If RecTemp.Fields("ItemFlag") And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 20))) = 0 Then
  388.                    Tsxx = "此科目需要项目核算,核算项目不能为空"
  389.                    Lrywlz = Sydz("002", GridStr(), Szzls)
  390.                    Bln_AssVali = True
  391.                    GoTo Lrcwcl
  392.                 Else
  393.                    If RecTemp.Fields("ItemFlag") And Len(Trim(WglrGrid.TextMatrix(Rowjsq, 20))) <> 0 Then
  394.                       Set Recfind = Cw_DataEnvi.DataConnect.Execute("Select ItemCode,QuantityFlag FROM Cwzz_Item Where ItemClassCode='" & Trim(WglrGrid.TextMatrix(Rowjsq, 18)) & "' And ItemCode='" & Trim(WglrGrid.TextMatrix(Rowjsq, 20)) & "'")
  395.                       If Recfind.EOF Then
  396.                          Tsxx = "此核算项目不存在!"
  397.                          Lrywlz = Sydz("002", GridStr(), Szzls)
  398.                          Bln_AssVali = True
  399.                          GoTo Lrcwcl
  400.                       Else
  401.                          If Recfind.Fields("QuantityFlag") And Val(WglrGrid.TextMatrix(Rowjsq, 22)) = 0 Then
  402.                             Tsxx = "此项目需数量核算,则项目数量不能为零!"
  403.                             Lrywlz = Sydz("002", GridStr(), Szzls)
  404.                             Bln_AssVali = True
  405.                             GoTo Lrcwcl
  406.                           End If
  407.                       End If
  408.                     End If
  409.                 End If
  410.              End With
  411.              
  412.           '计算借贷方合计数据
  413.            
  414.            Dbl_Jfhj = Dbl_Jfhj + Val(WglrGrid.TextMatrix(Rowjsq, Sydz("004", GridStr(), Szzls)))
  415.              
  416.            Dbl_Dfhj = Dbl_Dfhj + Val(WglrGrid.TextMatrix(Rowjsq, Sydz("005", GridStr(), Szzls)))
  417.              
  418.      Next Rowjsq
  419.      
  420.      '会计分录行数不能为零
  421.      
  422.      If Int_RowCount = 0 Then
  423.         Tsxx = "凭证会计分录行数为零,不能存盘!"
  424.         Call Xtxxts(Tsxx, 0, 1)
  425.         Exit Function
  426.      End If
  427.      
  428.      '凭证借贷双方合计必须平衡
  429.      
  430.      If Dbl_Jfhj <> Dbl_Dfhj Then
  431.         Tsxx = "凭证借贷不平衡!"
  432.         Call Xtxxts(Tsxx, 0, 1)
  433.         Exit Function
  434.      End If
  435.      
  436.    End With  '网格
  437.    
  438.    '如果以上有效性检查均顺利通过,则执行存盘动作
  439.    
  440.     Int_Year = Val(Mid(Combo_Kjqj.Text, 1, 4))
  441.     
  442.     Int_Period = Val(Mid(Combo_Kjqj.Text, 6, 2))
  443.     
  444.     On Error GoTo Swcwcl
  445.     
  446.     Cw_DataEnvi.DataConnect.BeginTrans
  447.     
  448.     If Trim(Lab_OperStatus) = "2" Then
  449.     
  450.         '新增凭证
  451.         
  452.         '1.判断凭证号是否重复,如重复则取最大值+1为当前凭证号,否则已当前凭证号存盘
  453.         
  454.          SQLSTR = "Select Top 1 I_id From Cwzz_AccVouch Where Rectype=0 And Year=" & Int_Year & " and Period=" & Int_Period & " And VouchClassCode='" & Trim(LrText(0).Text) & "' And VouchNo=" & Val(LrText(3).Text)
  455.          Set Rec_AccVouch = Cw_DataEnvi.DataConnect.Execute(SQLSTR)
  456.          
  457.          If Not Rec_AccVouch.EOF Then
  458.             Call Sub_JsVouchNo
  459.          End If
  460.          
  461.     Else
  462.        
  463.         '修改凭证
  464.        
  465.         '1.删除原凭证所有内容
  466.         
  467.         Cw_DataEnvi.DataConnect.Execute ("Delete Cwzz_AccVouch Where Rectype=0 And Year=" & Int_Year & " and Period=" & Int_Period & " And VouchClassCode='" & Trim(LrText(0).Text) & "' And VouchNo=" & Val(LrText(3).Text))
  468.          
  469.     End If
  470.          
  471.          
  472.          Int_VouchNo = Val(LrText(3).Text)  '凭证号
  473.          
  474.          If Rec_AccVouch.State = 1 Then Rec_AccVouch.Close
  475.          
  476.          Rec_AccVouch.Open "Select * From Cwzz_AccVouch Where 1=2", Cw_DataEnvi.DataConnect, adOpenDynamic, adLockOptimistic
  477.          
  478.          For Rowjsq = WglrGrid.FixedRows To WglrGrid.Rows
  479.      
  480.              If WglrGrid.TextMatrix(Rowjsq, 0) <> "*" Then
  481.                 Exit For
  482.              End If
  483.              
  484.              With Rec_AccVouch
  485.                .AddNew
  486.                .Fields("RecType") = 0                                                                       '记录类型
  487.                .Fields("Year") = Int_Year                                                                   '会计年度
  488.                .Fields("Period") = Int_Period                                                               '会计期间
  489.                .Fields("Ddate") = CDate(LrText(1).Text)                                                     '制单日期
  490.                .Fields("VouchClassCode") = Trim(LrText(0).Text)                                             '凭证类别
  491.                .Fields("VouchNo") = Int_VouchNo                                                             '凭证号
  492.                .Fields("Doc") = Val(LrText(2).Text)                                                         '附单据数
  493.                .Fields("Bill") = Trim(Lab_Bill.Caption)                                                     '制单人
  494.                .Fields("Digest") = Trim(WglrGrid.TextMatrix(Rowjsq, Sydz("001", GridStr(), Szzls)))         '摘要
  495.                .Fields("Ccode") = Trim(WglrGrid.TextMatrix(Rowjsq, Sydz("002", GridStr(), Szzls)))          '会计科目
  496.                .Fields("Jfje") = Val(WglrGrid.TextMatrix(Rowjsq, Sydz("004", GridStr(), Szzls)))            '借方金额
  497.                .Fields("Dfje") = Val(WglrGrid.TextMatrix(Rowjsq, Sydz("005", GridStr(), Szzls)))            '贷方金额
  498.                If Val(WglrGrid.TextMatrix(Rowjsq, Sydz("004", GridStr(), Szzls))) <> 0 Then
  499.                   .Fields("Jfsl") = Val(WglrGrid.TextMatrix(Rowjsq, 5))                                     '借方数量
  500.                   Else
  501.                   .Fields("Dfsl") = Val(WglrGrid.TextMatrix(Rowjsq, 5))                                     '贷方数量
  502.                End If
  503.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 8))) <> 0 Then
  504.                   .Fields("ForeignCurrCode") = Trim(WglrGrid.TextMatrix(Rowjsq, 8))                         '外币编码
  505.                   .Fields("AccRate") = Val(WglrGrid.TextMatrix(Rowjsq, 11))                                 '记帐汇率
  506.                   If Val(WglrGrid.TextMatrix(Rowjsq, Sydz("004", GridStr(), Szzls))) <> 0 Then
  507.                      .Fields("Wbjfje") = Val(WglrGrid.TextMatrix(Rowjsq, 10))                               '外币借方金额
  508.                   Else
  509.                      .Fields("Wbdfje") = Val(WglrGrid.TextMatrix(Rowjsq, 10))                               '外币贷方金额
  510.                   End If
  511.                End If
  512.                .Fields("CheckFlag") = 0                                                                     '审核标志置"0"
  513.                .Fields("BookFlag") = 0                                                                      '记帐标志置"0"
  514.                
  515.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 4))) <> 0 Then
  516.                   .Fields("BillDate") = CDate(Trim(WglrGrid.TextMatrix(Rowjsq, 4)))                         '发生日期(银行)
  517.                End If
  518.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 1))) <> 0 Then
  519.                   .Fields("SScode") = Trim(WglrGrid.TextMatrix(Rowjsq, 1))                                  '结算方式(银行)
  520.                End If
  521.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 3))) <> 0 Then
  522.                   .Fields("BillNo") = Trim(WglrGrid.TextMatrix(Rowjsq, 3))                                  '票号(银行)
  523.                End If
  524.                
  525.                .Fields("BCheckFlag") = 0                                                                    '银行核对标志置0
  526.                
  527.                .Fields("BDelete") = 0                                                                       '银行帐核销标志置0
  528.                
  529.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 16))) <> 0 Then
  530.                   .Fields("PersonCode") = Trim(WglrGrid.TextMatrix(Rowjsq, 16))                             '职员编码
  531.                End If
  532.                
  533.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 12))) <> 0 Then
  534.                   .Fields("DeptCode") = Trim(WglrGrid.TextMatrix(Rowjsq, 12))                               '部门编码
  535.                End If
  536.                
  537.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 14))) <> 0 Then
  538.                   .Fields("CusCode") = Trim(WglrGrid.TextMatrix(Rowjsq, 14))                                '往来单位编码
  539.                End If
  540.                
  541.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 18))) <> 0 Then
  542.                   .Fields("ItemClassCode") = Trim(WglrGrid.TextMatrix(Rowjsq, 18))                          '项目大类编码
  543.                End If
  544.                
  545.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 20))) <> 0 Then
  546.                   .Fields("ItemCode") = Trim(WglrGrid.TextMatrix(Rowjsq, 20))                               '项目编码
  547.                   If Val(WglrGrid.TextMatrix(Rowjsq, Sydz("004", GridStr(), Szzls))) <> 0 Then
  548.                      .Fields("ItemJfsl") = Val(WglrGrid.TextMatrix(Rowjsq, 22))                             '项目借方数量
  549.                   Else
  550.                      .Fields("ItemDfsl") = Val(WglrGrid.TextMatrix(Rowjsq, 22))                             '项目贷方数量
  551.                   End If
  552.                End If
  553.                
  554.                If Len(Trim(WglrGrid.TextMatrix(Rowjsq, 24))) <> 0 Then
  555.                   .Fields("TranPerson") = Trim(WglrGrid.TextMatrix(Rowjsq, 24))                             '经办人
  556.                End If
  557.            .Update
  558.             
  559.         End With
  560.     
  561.       Next Rowjsq
  562.     
  563.  
  564.   Cw_DataEnvi.DataConnect.CommitTrans
  565.   Sub_SaveBill = True
  566.   Tsxx = "凭证存盘完毕! 凭证号:" & Trim(LrText(0).Text) & "--" & Trim(LrText(3).Text)
  567.   Call Xtxxts(Tsxx, 0, 4)
  568.   
  569.   '标识单据发生改动
  570.   Bln_BillChange = True
  571.   
  572.   '设置操作状态为浏览
  573.    Lab_OperStatus = "1"
  574.    
  575.    Call Sub_OperStatus("11")
  576.   
  577.   Exit Function
  578.   
  579. Swcwcl:
  580.      Cw_DataEnvi.DataConnect.RollbackTrans
  581.      Tsxx = "存盘过程中出现未知错误,程序自动恢复保存前状态!"
  582.      Call Xtxxts(Tsxx, 0, 1)
  583.      Exit Function
  584. Lrcwcl:        '录入错误处理
  585.   With WglrGrid
  586.       Call Xtxxts("(第 " + Trim(Str(Int_RowCount)) + " 条会计分录)-" + Tsxx, 0, 1)
  587.       changelock = True
  588.       .Select Rowjsq, Lrywlz
  589.        WglrGrid.SetFocus
  590.       changelock = False
  591.       Exit Function
  592.   End With
  593. End Function
  594. Private Sub Chk_DeleteMess_Click()                   '删行是否提示(点击)
  595.    If Chk_DeleteMess.Value = 1 Then
  596.       Shsfts = True
  597.    Else
  598.       Shsfts = False
  599.    End If
  600. End Sub
  601. Private Sub Sub_Option()                             '调用填制凭证选项
  602.    With PZ_FrmOption
  603.    
  604.    '删行是否提示
  605.     .Chk_DeleteMess.Value = Me.Chk_DeleteMess.Value
  606.         
  607.      '科目数量核算数量项是否可以为零
  608.     .Chk_Quantity.Value = Me.Chk_Quantity.Value
  609.     
  610.     '打印凭证是否输出科目编码
  611.     .Chk_CodeOutput.Value = Me.Chk_CodeOutput.Value
  612.     
  613.     '审核凭证时是否自动跳到下张
  614.     .Chk_CheckNext.Value = Me.Chk_CheckNext.Value
  615.     
  616.     .Show 1
  617.     
  618.    End With
  619. End Sub
  620. '审核,弃审,标错,全审,全弃
  621. Private Sub Sub_CheckBill()             '审 核
  622.    Dim Int_Year As Integer      '用户选择会计年度
  623.    Dim Int_Period As Integer    '用户选择会计期间
  624.    
  625.    '已审核凭证不需要再次审核
  626.    If Trim(Lab_Checker.Caption) <> "" Then
  627.         Tsxx = "已审核凭证不需要再次审核!"
  628.         Call Xtxxts(Tsxx, 0, 4)
  629.         Exit Sub
  630.    End If
  631.    
  632.    '标错凭证不能审核通过
  633.    If Lab_Error.Visible Then
  634.         Tsxx = "标错凭证不能审核通过!"
  635.         Call Xtxxts(Tsxx, 0, 4)
  636.         Exit Sub
  637.    End If
  638.    
  639.    Int_Year = Val(Mid(Combo_Kjqj.Text, 1, 4))
  640.    Int_Period = Val(Mid(Combo_Kjqj.Text, 6, 2))
  641.    
  642.    '写入系统操作员
  643.    Lab_Checker.Caption = Xtczy
  644.    
  645.    '将凭证写入审核标识
  646.   Cw_DataEnvi.DataConnect.Execute ("Update Cwzz_AccVouch Set CheckFlag=1,Checker='" & Xtczy & "' Where Rectype=0 And Year=" & Int_Year & " and Period=" & Int_Period & " And VouchClassCode='" & Trim(LrText(0).Text) & "' And VouchNo=" & Val(LrText(3).Text))
  647.   
  648.   '自动调入下一张凭证
  649.   If Chk_CheckNext.Value = 1 Then
  650.      Call Sub_next
  651.   End If
  652.   
  653.   '标识单据发生变化
  654.   Bln_BillChange = True
  655. End Sub
  656. Private Sub Sub_AbandonCheck()          '弃 审
  657.    Dim Int_Year As Integer      '用户选择会计年度
  658.    Dim Int_Period As Integer    '用户选择会计期间
  659.    
  660.    If Trim(Lab_Book.Caption) <> "" Then
  661.         Tsxx = "已记帐凭证不能弃审!"
  662.         Call Xtxxts(Tsxx, 0, 4)
  663.         Exit Sub
  664.    End If
  665.    
  666.    If Trim(Lab_Checker.Caption) = "" Then
  667.         Tsxx = "未审核凭证不需要弃审!"
  668.         Call Xtxxts(Tsxx, 0, 4)
  669.         Exit Sub
  670.    End If
  671.    
  672.    Int_Year = Val(Mid(Combo_Kjqj.Text, 1, 4))
  673.    Int_Period = Val(Mid(Combo_Kjqj.Text, 6, 2))
  674.    
  675.    '写入系统操作员
  676.    Lab_Checker.Caption = ""
  677.    
  678.    '将凭证去掉审核标识
  679.   Cw_DataEnvi.DataConnect.Execute ("Update Cwzz_AccVouch Set CheckFlag=0,Checker='' Where Rectype=0 And Year=" & Int_Year & " and Period=" & Int_Period & " And VouchClassCode='" & Trim(LrText(0).Text) & "' And VouchNo=" & Val(LrText(3).Text))
  680.   
  681.   '自动调入下一张凭证
  682.   If Chk_CheckNext.Value = 1 Then
  683.      Call Sub_next
  684.   End If
  685.   
  686.   '标识单据发生变化
  687.   Bln_BillChange = True
  688.   
  689. End Sub
  690. Private Sub Sub_ErrorBill()             '标 错(如果凭证有错则去掉错误标识,如无错则写入错误标识)
  691.    Dim Int_Year As Integer      '用户选择会计年度
  692.    Dim Int_Period As Integer    '用户选择会计期间
  693.    
  694.    Int_Year = Val(Mid(Combo_Kjqj.Text, 1, 4))
  695.    Int_Period = Val(Mid(Combo_Kjqj.Text, 6, 2))
  696.    
  697.    If Lab_Error.Visible Then
  698.       
  699.         '去掉凭证有错标识
  700.         Lab_Error.Visible = False
  701.         
  702.         '将凭证去掉错误标识
  703.         Cw_DataEnvi.DataConnect.Execute ("Update Cwzz_AccVouch Set ErrorFlag=0 Where Rectype=0 And Year=" & Int_Year & " and Period=" & Int_Period & " And VouchClassCode='" & Trim(LrText(0).Text) & "' And VouchNo=" & Val(LrText(3).Text))
  704.    Else
  705.    
  706.      If Trim(Lab_Checker.Caption) <> "" Then
  707.         Tsxx = "已审核凭证不能标错!"
  708.         Call Xtxxts(Tsxx, 0, 4)
  709.         Exit Sub
  710.      End If
  711.      
  712.      '显示凭证有错标识
  713.      Lab_Error.Visible = True
  714.      
  715.      '将凭证写入错误标识
  716.      Cw_DataEnvi.DataConnect.Execute ("Update Cwzz_AccVouch Set ErrorFlag=1 Where Rectype=0 And Year=" & Int_Year & " and Period=" & Int_Period & " And VouchClassCode='" & Trim(LrText(0).Text) & "' And VouchNo=" & Val(LrText(3).Text))
  717.      
  718.    End If
  719.    
  720.    '标识单据发生变化
  721.   Bln_BillChange = True
  722.    
  723. End Sub
  724. Private Sub Sub_CheckAllBill()                       '全部审核
  725.    Dim Yhanswer As Integer
  726.    
  727.    Tsxx = "请确认是否将所有查询凭证中" + Chr(10) + Chr(10) + "未复核凭证全部复核(标错凭证除外)?"
  728.    Yhanswer = Xtxxts(Tsxx, 2, 2)
  729.    If Yhanswer = 2 Then
  730.       Exit Sub
  731.    End If
  732.    
  733.    If Not Lab_Error.Visible Then
  734.       '写入系统操作员
  735.       Lab_Checker.Caption = Xtczy
  736.    End If
  737.    
  738.   With PZ_FrmPzcxjg
  739.    
  740.    For Jsqte = .CxbbGrid.FixedRows To .CxbbGrid.Rows - 1
  741.   
  742.        If .CxbbGrid.Cell(flexcpBackColor, Jsqte) = .Lab_Color(0).BackColor Then
  743.         
  744.           '将凭证写入审核标识
  745.           Cw_DataEnvi.DataConnect.Execute ("Update Cwzz_AccVouch Set CheckFlag=1,Checker='" & Xtczy & "' Where Rectype=0 And ErrorFlag=0 And CheckFlag=0 and Year=" & Val(.CxbbGrid.TextMatrix(Jsqte, 0)) & " and Period=" & Val(.CxbbGrid.TextMatrix(Jsqte, 1)) & " And VouchClassCode='" & Trim(.CxbbGrid.TextMatrix(Jsqte, 2)) & "' And VouchNo=" & Val(.CxbbGrid.TextMatrix(Jsqte, 3)))
  746.           
  747.        End If
  748.    Next Jsqte
  749.    
  750.   End With
  751.   
  752.   Tsxx = "全部审核完毕!"
  753.   Call Xtxxts(Tsxx, 0, 4)
  754.   
  755.   '标识单据发生变化
  756.   Bln_BillChange = True
  757. End Sub
  758. Private Sub Sub_AbandonAllCheck()                       '全部弃审
  759.    Dim Yhanswer As Integer
  760.    
  761.    Tsxx = "请确认是否将所有查询凭证中" + Chr(10) + Chr(10) + "已复核凭证全部弃审(记帐凭证除外)?"
  762.    Yhanswer = Xtxxts(Tsxx, 2, 2)
  763.    If Yhanswer = 2 Then
  764.       Exit Sub
  765.    End If
  766.   
  767.   Lab_Checker.Caption = ""
  768.    
  769.   With PZ_FrmPzcxjg
  770.    
  771.    For Jsqte = .CxbbGrid.FixedRows To .CxbbGrid.Rows - 1
  772.   
  773.        If .CxbbGrid.Cell(flexcpBackColor, Jsqte) = .Lab_Color(0).BackColor Then
  774.         
  775.           '将凭证写入审核标识
  776.           Cw_DataEnvi.DataConnect.Execute ("Update Cwzz_AccVouch Set CheckFlag=0,Checker='' Where Rectype=0 And BookFlag=0 And CheckFlag=1 and Year=" & Val(.CxbbGrid.TextMatrix(Jsqte, 0)) & " and Period=" & Val(.CxbbGrid.TextMatrix(Jsqte, 1)) & " And VouchClassCode='" & Trim(.CxbbGrid.TextMatrix(Jsqte, 2)) & "' And VouchNo=" & Val(.CxbbGrid.TextMatrix(Jsqte, 3)))
  777.           
  778.        End If
  779.    Next Jsqte
  780.    
  781.   End With
  782.   
  783.   Tsxx = "全部弃审完毕!"
  784.   Call Xtxxts(Tsxx, 0, 4)
  785.   
  786.   '标识单据发生变化
  787.   Bln_BillChange = True
  788. End Sub
  789. '选择首张,上张,下张,末张
  790.     
  791.     Private Sub Sub_First()             '首 张
  792.        With PZ_FrmPzcxjg
  793.          .CxbbGrid.Select .CxbbGrid.FixedRows, 0
  794.          If Combo_Kjqj.Text = Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 0))) + "." + Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 1))) And LrText(0).Text = Trim(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 2)) And Val(LrText(3).Text) = Val(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 3)) Then
  795.             Exit Sub
  796.          End If
  797.             
  798.          Call Sub_ShowFindBill
  799.        
  800.        End With
  801.     End Sub
  802.     Private Sub Sub_Prev()             '上 张
  803.        With PZ_FrmPzcxjg
  804.          Do While .CxbbGrid.Row > .CxbbGrid.FixedRows And Combo_Kjqj.Text = Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 0))) + "." + Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 1))) And LrText(0).Text = Trim(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 2)) And Val(LrText(3).Text) = Val(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 3))
  805.             .CxbbGrid.Row = .CxbbGrid.Row - 1
  806.          Loop
  807.          If Combo_Kjqj.Text = Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 0))) + "." + Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 1))) And LrText(0).Text = Trim(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 2)) And Val(LrText(3).Text) = Val(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 3)) Then
  808.             Exit Sub
  809.          End If
  810.             
  811.          Call Sub_ShowFindBill
  812.        
  813.        End With
  814.     End Sub
  815.     Private Sub Sub_next()             '下 张
  816.        With PZ_FrmPzcxjg
  817.          Do While .CxbbGrid.Row < .CxbbGrid.Rows - 1 And Combo_Kjqj.Text = Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 0))) + "." + Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 1))) And LrText(0).Text = Trim(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 2)) And Val(LrText(3).Text) = Val(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 3))
  818.             .CxbbGrid.Row = .CxbbGrid.Row + 1
  819.          Loop
  820.          If Combo_Kjqj.Text = Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 0))) + "." + Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 1))) And LrText(0).Text = Trim(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 2)) And Val(LrText(3).Text) = Val(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 3)) Then
  821.             Exit Sub
  822.          End If
  823.             
  824.          Call Sub_ShowFindBill
  825.        
  826.        End With
  827.     End Sub
  828.     Private Sub Sub_Last()              '末 张
  829.        With PZ_FrmPzcxjg
  830.          .CxbbGrid.Select .CxbbGrid.Rows - 1, 0
  831.          If Combo_Kjqj.Text = Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 0))) + "." + Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 1))) And LrText(0).Text = Trim(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 2)) And Val(LrText(3).Text) = Val(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 3)) Then
  832.             Exit Sub
  833.          End If
  834.           
  835.          Call Sub_ShowFindBill
  836.        End With
  837.     End Sub
  838.     Private Sub Sub_ShowFindBill()      '显示用户在单据列表中查询定位单据
  839.         With PZ_FrmPzcxjg
  840.             '填充查询凭证标识
  841.              Combo_Kjqj.Text = Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 0))) + "." + Trim((.CxbbGrid.TextMatrix(.CxbbGrid.Row, 1)))
  842.              LrText(0).Text = Trim(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 2))
  843.              LrText(3).Text = Mid(Trim(Str(10000 + Val(.CxbbGrid.TextMatrix(.CxbbGrid.Row, 3)))), 2, 4)
  844.                
  845.              Call Sub_ShowBill
  846.         End With
  847.     End Sub
  848.     
  849. Private Function Fun_AllowEdit() As Boolean                      '判断当前凭证是否允许编辑或删除
  850.   Dim RecTemp As New ADODB.Recordset     '临时使用动态集
  851.   Dim Int_Year As Integer      '用户选择会计年度
  852.   Dim Int_Period As Integer    '用户选择会计期间
  853.   
  854.   Int_Year = Val(Mid(Combo_Kjqj.Text, 1, 4))
  855.   Int_Period = Val(Mid(Combo_Kjqj.Text, 6, 2))
  856.   SQLSTR = "Select Top 1 CheckFlag,BookFlag,Checker,Book From Cwzz_AccVouch Where Rectype=0 And Year=" & Int_Year & " and Period=" & Int_Period & " And VouchClassCode='" & Trim(LrText(0).Text) & "' And VouchNo=" & Val(LrText(3).Text)
  857.   Set RecTemp = Cw_DataEnvi.DataConnect.Execute(SQLSTR)
  858.   With RecTemp
  859.      If Not .EOF Then
  860.         If .Fields("CheckFlag") Or .Fields("BookFlag") Then
  861.            Tsxx = "该凭证已审核或记帐,不允许修改或删除!"
  862.            Call Xtxxts(Tsxx, 0, 4)
  863.            Lab_Checker = Trim(.Fields("Checker") & "")
  864.            Lab_Book = Trim(.Fields("Book") & "")
  865.            Exit Function
  866.         End If
  867.       End If
  868.   End With
  869.   Fun_AllowEdit = True
  870. End Function
  871. Public Sub Sub_Scpzbb(Cxsjwg As vsFlexGrid)                            '生成预览凭证报表
  872.  '过程参数:输出数据网格
  873.  
  874.  Dim Yxhzjsq%, Yxlzjsq%       '有效列值计数器,有效行值计数器
  875.  Dim Rowjsq As Long           '临时行计数器
  876.  Dim Sjhjsq As Long           '数据行计数器
  877.  Dim Int_Pzmyhs As Integer    '凭证每页数据行数
  878.  Dim Dbl_Jfhj As Double       '借方合计
  879.  Dim Dbl_Dfhj As Double       '贷方合计
  880.  
  881.  '生成有效数据表
  882.  With DY_Tybbyldy.DyylGrid
  883.   .FontName = Cxsjwg.FontName
  884.   .FontSize = Cxsjwg.FontSize
  885.   .FixedRows = Cxsjwg.FixedRows
  886.   .MergeCells = flexMergeFixedOnly
  887.   For Jsqte = 0 To .FixedRows - 1
  888.       .MergeRow(Jsqte) = True
  889.   Next Jsqte
  890.   .WordWrap = True
  891.   
  892.   '重置数据列
  893.   Yxlzjsq = 4
  894.   .Cols = Yxlzjsq
  895.   
  896.   .ColAlignment(2) = Cxsjwg.ColAlignment(Sydz("004", GridStr(), Szzls))
  897.   .ColAlignment(3) = Cxsjwg.ColAlignment(Sydz("005", GridStr(), Szzls))
  898.   .ColWidth(0) = Cxsjwg.ColWidth(Sydz("001", GridStr(), Szzls))
  899.   .ColWidth(1) = Cxsjwg.ColWidth(Sydz("002", GridStr(), Szzls)) + Cxsjwg.ColWidth(Sydz("003", GridStr(), Szzls))
  900.   .ColWidth(2) = Cxsjwg.ColWidth(Sydz("004", GridStr(), Szzls))
  901.   .ColWidth(3) = Cxsjwg.ColWidth(Sydz("005", GridStr(), Szzls))
  902.   .ColFormat(2) = Cxsjwg.ColFormat(Sydz("004", GridStr(), Szzls))
  903.   .ColFormat(3) = Cxsjwg.ColFormat(Sydz("005", GridStr(), Szzls))
  904.   
  905.   For Yxlzjsq = 0 To 3
  906.       .MergeCol(Yxlzjsq) = True
  907.   Next Yxlzjsq
  908.   
  909.   '重置数据行
  910.   
  911.   Yxhzjsq = 0
  912.   For Rowjsq = 0 To Cxsjwg.Rows - 1
  913.       If (Not Cxsjwg.RowHidden(Rowjsq)) And (Not GridRowEmpty(Cxsjwg, Rowjsq)) Then
  914.          Yxhzjsq = Yxhzjsq + 1
  915.       End If
  916.   Next Rowjsq
  917.   .Rows = Yxhzjsq
  918.   
  919.   
  920.   .TextMatrix(0, 0) = Cxsjwg.TextMatrix(0, Sydz("001", GridStr(), Szzls))
  921.   .TextMatrix(0, 1) = "科  目  名  称"
  922.   .TextMatrix(0, 2) = Cxsjwg.TextMatrix(0, Sydz("004", GridStr(), Szzls))
  923.   .TextMatrix(0, 3) = Cxsjwg.TextMatrix(0, Sydz("005", GridStr(), Szzls))
  924.   .RowHeight(0) = Cxsjwg.RowHeight(0)
  925.   
  926.   
  927.   Yxhzjsq = Cxsjwg.FixedRows
  928.   For Rowjsq = Cxsjwg.FixedRows To Cxsjwg.Rows - 1
  929.     If (Not Cxsjwg.RowHidden(Rowjsq)) And (Not GridRowEmpty(Cxsjwg, Rowjsq)) Then
  930.        
  931.        '摘要
  932.        .TextMatrix(Yxhzjsq, 0) = Cxsjwg.TextMatrix(Rowjsq, Sydz("001", GridStr(), Szzls))
  933.        
  934.        '输出科目名称
  935.        If Chk_CodeOutput.Value = 1 Then
  936.           .TextMatrix(Yxhzjsq, 1) = Cxsjwg.TextMatrix(Rowjsq, Sydz("002", GridStr(), Szzls)) + " " + Cxsjwg.TextMatrix(Rowjsq, Sydz("003", GridStr(), Szzls))
  937.        Else
  938.           .TextMatrix(Yxhzjsq, 1) = Cxsjwg.TextMatrix(Rowjsq, Sydz("003", GridStr(), Szzls))
  939.        End If
  940.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 2)) <> "" Then    '结算方式
  941.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 2))
  942.        End If
  943.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 3)) <> "" Then    '票号
  944.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 3))
  945.        End If
  946.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 4)) <> "" Then    '发生日期
  947.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 4))
  948.        End If
  949.        If Val(Cxsjwg.TextMatrix(Rowjsq, 5)) <> 0 Then      '数量
  950.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 5)) + Trim(Cxsjwg.TextMatrix(Rowjsq, 7))
  951.        End If
  952.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 9)) <> "" Then    '外币名称
  953.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 10)) + Trim(Cxsjwg.TextMatrix(Rowjsq, 9))
  954.        End If
  955.        If Val(Cxsjwg.TextMatrix(Rowjsq, 11)) <> 0 Then      '记帐汇率
  956.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + "汇率:" + Trim(Cxsjwg.TextMatrix(Rowjsq, 11))
  957.        End If
  958.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 13)) <> "" Then    '部门
  959.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 13))
  960.        End If
  961.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 15)) <> "" Then    '往来单位
  962.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 15))
  963.        End If
  964.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 17)) <> "" Then    '职员
  965.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 17))
  966.        End If
  967.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 19)) <> "" Then    '项目大类
  968.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 19))
  969.        End If
  970.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 21)) <> "" Then    '项目名称
  971.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 21))
  972.        End If
  973.        If Val(Cxsjwg.TextMatrix(Rowjsq, 22)) <> 0 Then      '项目数量单位
  974.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + Trim(Cxsjwg.TextMatrix(Rowjsq, 22)) + Trim(Cxsjwg.TextMatrix(Rowjsq, 23))
  975.        End If
  976.        If Trim(Cxsjwg.TextMatrix(Rowjsq, 24)) <> "" Then    '经办人
  977.           .TextMatrix(Yxhzjsq, 1) = .TextMatrix(Yxhzjsq, 1) + Space(2) + "经办人:" + Trim(Cxsjwg.TextMatrix(Rowjsq, 24))
  978.        End If
  979.        
  980.        '借方金额
  981.        .TextMatrix(Yxhzjsq, 2) = Cxsjwg.TextMatrix(Rowjsq, Sydz("004", GridStr(), Szzls))
  982.        
  983.        '贷方金额
  984.        .TextMatrix(Yxhzjsq, 3) = Cxsjwg.TextMatrix(Rowjsq, Sydz("005", GridStr(), Szzls))
  985.        
  986.        .RowHeight(Yxhzjsq) = Cxsjwg.RowHeight(Rowjsq)
  987.        Yxhzjsq = Yxhzjsq + 1
  988.     End If
  989.   Next Rowjsq
  990.   
  991.   '补空行和添加分页合计
  992.   Int_Pzmyhs = 6
  993.   
  994.   If .Rows - .FixedRows = 0 Then
  995.      Exit Sub
  996.   Else
  997.      If (.Rows - .FixedRows) Mod Int_Pzmyhs <> 0 Then
  998.         For Jsqte = 1 To Int_Pzmyhs - ((.Rows - .FixedRows) Mod Int_Pzmyhs)
  999.             .AddItem ""
  1000.             .RowHeight(.Rows - 1) = Sjhgd
  1001.         Next Jsqte
  1002.      End If
  1003.   End If
  1004.   
  1005.   Dbl_Jfhj = 0
  1006.   Dbl_Dfhj = 0
  1007.   Sjhjsq = 1
  1008.   Rowjsq = .FixedRows
  1009.   Do While Rowjsq <= .Rows - 1
  1010.   
  1011.       Dbl_Jfhj = Dbl_Jfhj + Val(.TextMatrix(Rowjsq, 2))
  1012.       Dbl_Dfhj = Dbl_Dfhj + Val(.TextMatrix(Rowjsq, 3))
  1013.       
  1014.       If Sjhjsq Mod Int_Pzmyhs = 0 Then
  1015.          Rowjsq = Rowjsq + 1
  1016.          .AddItem "", Rowjsq
  1017.          .RowHeight(Rowjsq) = Sjhgd
  1018.          .TextMatrix(Rowjsq, 0) = "合 计"
  1019.          .TextMatrix(Rowjsq, 2) = Format(Dbl_Jfhj, "##." + String(Xtjexsws, "0"))
  1020.          .TextMatrix(Rowjsq, 3) = Format(Dbl_Dfhj, "##." + String(Xtjexsws, "0"))
  1021.          
  1022.          '最后合计输出金额大写
  1023.          If Rowjsq = .Rows - 1 Then
  1024.             .TextMatrix(Rowjsq, 1) = Fun_Jezh(Dbl_Jfhj)
  1025.          End If
  1026.       End If
  1027.       
  1028.       Sjhjsq = Sjhjsq + 1
  1029.       Rowjsq = Rowjsq + 1
  1030.       
  1031.   Loop
  1032.  End With
  1033.  
  1034. End Sub
  1035. '===================以 下 程 序 为 通 用 部 分 ,一 般 不 需 更 改======================='
  1036. Private Sub Sub_AdjustGrid()
  1037.   '调 整 网 格
  1038.   With WglrGrid
  1039.     '加 1 保持一行录入行
  1040.      If .Rows < Pmbcsjhs + .FixedRows + Fzxwghs + 1 Then
  1041.         .Rows = Pmbcsjhs + .FixedRows + Fzxwghs + 1
  1042.            For Jsqte = .FixedRows To .Rows - 1
  1043.              .RowHeight(Jsqte) = Sjhgd
  1044.            Next Jsqte
  1045.      Else
  1046.         '判断是否有辅助行和录入行,如没有则加行
  1047.         Do While .TextMatrix(.Rows - 1 - Fzxwghs, 0) = "*"
  1048.           .AddItem ""
  1049.           .RowHeight(.Rows - 1) = Sjhgd
  1050.         Loop
  1051.      End If
  1052.   End With
  1053. End Sub
  1054. Private Sub Lrzdbz()                                                      '录入字段帮助
  1055.    If Not Ydcommand.Visible Then
  1056.       Exit Sub
  1057.    End If
  1058.   Valilock = True
  1059.   With WglrGrid
  1060.        
  1061.        '[>>会计科目编码帮助单独处理
  1062.        If .Col = Sydz("002", GridStr(), Szzls) Then
  1063.           Xtcdcs = Trim(Ydtext.Text)
  1064.           PZ_FrmKjkmcz.Show 1
  1065.           If Len(Xtfhcs) <> 0 Then
  1066.              Ydtext.Text = Xtfhcs
  1067.           End If
  1068.        Else
  1069.         
  1070.             '处理通用部分
  1071.             changelock = True        '调入另外窗体必须加锁
  1072.                Call Drbmhelp(GridInt(.Col, 6), GridStr(.Col, 3), Trim(Ydtext.Text))
  1073.             changelock = False
  1074.             If Len(Xtfhcs) <> 0 Then
  1075.                If GridInt(.Col, 7) = 0 Then
  1076.                   Ydtext.Text = Xtfhcs
  1077.                Else
  1078.                   Ydtext.Text = Xtfhcsfz
  1079.                End If
  1080.             End If
  1081.         End If
  1082.         '[>>处理完毕
  1083.         
  1084.   Valilock = False
  1085.   If Ydtext.Visible Then
  1086.     Ydtext.SetFocus
  1087.   End If
  1088.  End With
  1089. End Sub
  1090. Private Sub Cshhjwg()                                                     '初始化合计网格(*对合计网格来说,录入网格为容器)
  1091.    Dim Lrwglkd As Double
  1092.    Dim Hjwgpyl As Integer
  1093.  With HjGrid
  1094.    If Not Sfxshjwg Then
  1095.       .Visible = False
  1096.       Exit Sub
  1097.      Else
  1098.       .Visible = True
  1099.    End If
  1100.      .Enabled = False
  1101.      .Appearance = flexFlat
  1102.      .BorderStyle = flexBorderNone
  1103.      .ScrollBars = flexScrollBarNone
  1104.      .BackColor = &H80000018
  1105.      .Width = WglrGrid.Width
  1106.      .FixedRows = 0
  1107.      .Rows = 1
  1108.      .Cols = WglrGrid.Cols
  1109.      .LeftCol = WglrGrid.LeftCol
  1110.      .TextMatrix(0, Qslz) = "合  计"
  1111.      For Jsqte = 0 To WglrGrid.Cols - 1
  1112.         .ColHidden(Jsqte) = WglrGrid.ColHidden(Jsqte)
  1113.         .ColWidth(Jsqte) = WglrGrid.ColWidth(Jsqte)
  1114.         .ColAlignment(Jsqte) = WglrGrid.ColAlignment(Jsqte)
  1115.         .ColFormat(Jsqte) = WglrGrid.ColFormat(Jsqte)
  1116.      Next Jsqte
  1117.      .ColAlignment(Qslz) = flexAlignCenterTop
  1118.      For Jsqte = .FixedRows To .Rows - 1
  1119.          .RowHeight(Jsqte) = .Height / .Rows
  1120.      Next Jsqte
  1121.      .Move 0, WglrGrid.Height - .Height, WglrGrid.Width, .Height
  1122.    End With
  1123. End Sub
  1124. Private Sub Form_Resize()                                                '窗体大小发生变化时,重新显示文本框
  1125.    Call Cxxswbk
  1126. End Sub
  1127. Private Function Fun_Drfrmyxxpd() As Boolean                             '调入其它窗体或功能产生的有效性判断(包括数据回写)
  1128.   Fun_Drfrmyxxpd = True
  1129.   With WglrGrid
  1130.    
  1131.    '如果当前网格处于编辑状态,则先进行数据回写再进行有效性判断
  1132.   
  1133.    If Ydtext.Visible Or YdCombo.Visible Then
  1134.         Call Lrsjhx
  1135.         If Not sjzdyxxpd(Dqlrwgh, Dqlrwgl) Then
  1136.            Fun_Drfrmyxxpd = False
  1137.            Exit Function
  1138.         End If
  1139.    End If
  1140.    
  1141.    '进行行有效性判断
  1142.    If Not Sjhzyxxpd(.Row) Then
  1143.       Fun_Drfrmyxxpd = False
  1144.       Exit Function
  1145.    End If
  1146.    
  1147.   End With
  1148. End Function
  1149. Private Sub WglrGrid_AfterUserResize(ByVal Row As Long, ByVal Col As Long)       '调整列宽
  1150.    If HjGrid.Visible Then
  1151.       With HjGrid
  1152.          .ColWidth(Col) = WglrGrid.ColWidth(Col)
  1153.       End With
  1154.    End If
  1155. End Sub
  1156. Private Sub WglrGrid_EnterCell()                                    '显示当前数据行相关信息
  1157.    With WglrGrid
  1158.     If .Row >= .FixedRows Then
  1159.        Lab_Row = Trim(Str(.Row - .FixedRows + 1))
  1160.        '显示备注信息
  1161.        Call Sub_ShowMemo(WglrGrid.Row)
  1162.     End If
  1163.    End With
  1164. End Sub
  1165. Private Sub WglrGrid_GotFocus()                                     '网格得到焦点
  1166.   '网格得到焦点,如果当前选择行为非数据行
  1167.   '则调整当前焦点至有效数据行
  1168.     With WglrGrid
  1169.       If .Row < .FixedRows And .Rows > .FixedRows Then
  1170.          changelock = True
  1171.           .Select .FixedRows, .Col
  1172.          changelock = False
  1173.       End If
  1174.       If .Col < Qslz Then
  1175.          changelock = True
  1176.           .Select .Row, Qslz
  1177.          changelock = False
  1178.       End If
  1179.     End With
  1180. End Sub
  1181. Private Sub WglrGrid_LostFocus()                                    '录入网格失去焦点
  1182.   '用以屏蔽调用其它窗体时发生网格失去焦点事件
  1183.   If changelock Then
  1184.      Exit Sub
  1185.   End If
  1186.   '引发网格RowcolChange事件
  1187.   With WglrGrid
  1188.     If Not (Ydtext.Visible Or YdCombo.Visible) Then
  1189.        .Select 0, 0
  1190.     End If
  1191.   End With
  1192. End Sub
  1193. Private Sub WglrGrid_Scroll()                                       '限制用户在录入过程中滚动鼠标
  1194.  If Gdtlock Then
  1195.     Exit Sub
  1196.  End If
  1197.  
  1198.  With WglrGrid
  1199.   If Ydtext.Visible Or YdCombo.Visible Then
  1200.      Gdtlock = True
  1201.      .TopRow = Dqtoprow
  1202.      .LeftCol = Dqleftcol
  1203.      Gdtlock = False
  1204.      Exit Sub
  1205.   End If
  1206.   HjGrid.LeftCol = .LeftCol
  1207.  End With
  1208. End Sub
  1209. Private Sub WglrGrid_LeaveCell()                                    '离开单元格
  1210.   If changelock Then
  1211.      Exit Sub
  1212.   End If
  1213.   '记录刚刚离开网格单元的行列值
  1214.   Dqlkwgh = WglrGrid.Row
  1215.   Dqlkwgl = WglrGrid.Col
  1216.   '判断是否需要录入数据回写
  1217.   If Not (Ydtext.Visible Or YdCombo.Visible) Then
  1218.      Exit Sub
  1219.   End If
  1220.   Call Lrsjhx
  1221. End Sub
  1222. Private Sub WglrGrid_RowColChange()                                '网格录入行列发生变化时,进行有效性判断
  1223.    Valilock = True       '屏蔽文本框失去焦点进行有效性判断
  1224.    With WglrGrid
  1225.      If changelock Then
  1226.         Exit Sub
  1227.      End If
  1228.      If Not sjzdyxxpd(Dqlrwgh, Dqlrwgl) Then
  1229.         Exit Sub
  1230.      End If
  1231.      If .Row <> Dqlkwgh Then
  1232.         If Not Sjhzyxxpd(Dqlkwgh) Then
  1233.            Exit Sub
  1234.         End If
  1235.      End If
  1236.    End With
  1237.    Call fhyxh
  1238.    Call Xldql
  1239.    
  1240. End Sub
  1241. Private Sub WglrGrid_DblClick()          '鼠标双击网格显示文本框
  1242.   With WglrGrid
  1243.     Call xswbk
  1244.   End With
  1245. End Sub
  1246. Private Sub Ycwbk()                      '隐藏文本框,帮助按钮,列表组合框
  1247.  Valilock = True
  1248.    Ydtext.Visible = False
  1249.    YdCombo.Visible = False
  1250.    Ydcommand.Visible = False
  1251. End Sub
  1252. Private Sub YdCombo_KeyDown(KeyCode As Integer, Shift As Integer)        '列表框移动
  1253.   With WglrGrid
  1254.     Select Case KeyCode
  1255.       Case vbKeyEscape                'ESC 键放弃录入
  1256.            Valilock = True
  1257.             .SetFocus
  1258.             Call Ycwbk
  1259.            Valilock = False
  1260.       Case vbKeyReturn                '回 车 键 =13
  1261.            KeyCode = 0
  1262.            .SetFocus
  1263.            Call Lrsjhx
  1264.            Rowjsq = .Row
  1265.            Coljsq = .Col + 1
  1266.            If Coljsq > .Cols - 1 Then
  1267.               If Rowjsq < .Rows - 1 Then
  1268.                  Rowjsq = Rowjsq + 1
  1269.               End If
  1270.               Coljsq = Qslz
  1271.            End If
  1272.            Do While Rowjsq <= .Rows - 1
  1273.               If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  1274.                  Coljsq = Coljsq + 1
  1275.                  If Coljsq > .Cols - 1 Then
  1276.                     Rowjsq = Rowjsq + 1
  1277.                     Coljsq = Qslz
  1278.                  End If
  1279.               Else
  1280.                  Exit Do
  1281.               End If
  1282.             Loop
  1283.             .Select Rowjsq, Coljsq
  1284.        Case vbKeyLeft                  '左 箭 头 =37
  1285.            If .Col - 1 = Qslz Then
  1286.               If .ColHidden(Qslz) Or (Not GridBoolean(Qslz, 1)) Then
  1287.                  GoTo jzzx
  1288.               End If
  1289.            End If
  1290.            If .Col > Qslz Then
  1291.               KeyCode = 0
  1292.               .SetFocus
  1293.               Call Lrsjhx
  1294.               Coljsq = .Col - 1
  1295.               Do While Coljsq > Qslz
  1296.                  If Coljsq - 1 = Qslz Then
  1297.                     If .ColHidden(Qslz) Or (Not GridBoolean(Qslz, 1)) Then
  1298.                        GoTo jzzx
  1299.                     End If
  1300.                  End If
  1301.                  If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  1302.                     Coljsq = Coljsq - 1
  1303.                  Else
  1304.                       Exit Do
  1305.                  End If
  1306.                Loop
  1307.                .Select .Row, Coljsq
  1308.            End If
  1309.       Case vbKeyRight                 '右 箭 头 =39
  1310.             KeyCode = 0
  1311.             .SetFocus
  1312.             Call Lrsjhx
  1313.              Rowjsq = .Row
  1314.              Coljsq = .Col + 1
  1315.              If Coljsq > .Cols - 1 Then
  1316.                 If Rowjsq < .Rows - 1 Then
  1317.                    Rowjsq = Rowjsq + 1
  1318.                 End If
  1319.                 Coljsq = Qslz
  1320.              End If
  1321.              Do While Rowjsq <= .Rows - 1
  1322.                 If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  1323.                    Coljsq = Coljsq + 1
  1324.                    If Coljsq > .Cols - 1 Then
  1325.                       Rowjsq = Rowjsq + 1
  1326.                       Coljsq = Qslz
  1327.                    End If
  1328.                 Else
  1329.                    Exit Do
  1330.                 End If
  1331.               Loop
  1332.               .Select Rowjsq, Coljsq
  1333.       Case Else
  1334.    End Select
  1335.    
  1336. jzzx:
  1337.    
  1338.  End With
  1339. End Sub
  1340. Private Sub YdCombo_LostFocus()
  1341.   With WglrGrid                                    '因为选中网格会先发生Rowcolchange事件置Valiock
  1342.     If Not Valilock Then                           '为TRUE
  1343.        Call Lrsjhx
  1344.        If Not Sjhzyxxpd(Dqlrwgh) Then
  1345.           Exit Sub
  1346.        End If
  1347.     End If
  1348.   End With
  1349. End Sub
  1350. Private Sub Ydcommand_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  1351.    Call Lrzdbz
  1352. End Sub
  1353. Private Sub ydtext_KeyDown(KeyCode As Integer, Shift As Integer)
  1354.    Dim Rowjsq As Long, Coljsq As Long
  1355.   With WglrGrid
  1356.     Select Case KeyCode
  1357.       Case vbKeyF2
  1358.            Call Lrzdbz
  1359.       Case vbKeyEscape                'ESC 键放弃录入
  1360.            Valilock = True
  1361.             Call Ycwbk
  1362.            .SetFocus
  1363.       Case vbKeyReturn                '回 车 键 =13
  1364.            KeyCode = 0
  1365.            .SetFocus
  1366.            Call Lrsjhx
  1367.            Rowjsq = .Row
  1368.            Coljsq = .Col + 1
  1369.            If Coljsq > .Cols - 1 Then
  1370.               If Rowjsq < .Rows - 1 Then
  1371.                  Rowjsq = Rowjsq + 1
  1372.               End If
  1373.               Coljsq = Qslz
  1374.            End If
  1375.            Do While Rowjsq <= .Rows - 1
  1376.               If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  1377.                  Coljsq = Coljsq + 1
  1378.                  If Coljsq > .Cols - 1 Then
  1379.                     Rowjsq = Rowjsq + 1
  1380.                     Coljsq = Qslz
  1381.                  End If
  1382.               Else
  1383.                  Exit Do
  1384.               End If
  1385.             Loop
  1386.             .Select Rowjsq, Coljsq
  1387.       Case vbKeyUp                    '上 箭 头 =38
  1388.            KeyCode = 0
  1389.            .SetFocus
  1390.            Call Lrsjhx
  1391.            If .Row > .FixedRows Then
  1392.               .Row = .Row - 1
  1393.            End If
  1394.       Case vbKeyDown                  '下 箭 头 =40
  1395.            KeyCode = 0
  1396.            .SetFocus
  1397.            Call Lrsjhx
  1398.            If .Row < .Rows - 1 Then
  1399.               .Row = .Row + 1
  1400.            End If
  1401.        Case vbKeyLeft                  '左 箭 头 =37
  1402.            If .Col - 1 = Qslz Then
  1403.               If .ColHidden(Qslz) Or (Not GridBoolean(Qslz, 1)) Then
  1404.                  GoTo jzzx
  1405.               End If
  1406.            End If
  1407.            If Ydtext.SelStart = 0 And .Col > Qslz Then
  1408.               KeyCode = 0
  1409.               .SetFocus
  1410.               Call Lrsjhx
  1411.               Coljsq = .Col - 1
  1412.               Do While Coljsq > Qslz
  1413.                  If Coljsq - 1 = Qslz Then
  1414.                     If .ColHidden(Qslz) Or (Not GridBoolean(Qslz, 1)) Then
  1415.                        GoTo jzzx
  1416.                     End If
  1417.                  End If
  1418.                  If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  1419.                     Coljsq = Coljsq - 1
  1420.                  Else
  1421.                       Exit Do
  1422.                  End If
  1423.                Loop
  1424.                .Select .Row, Coljsq
  1425.            End If
  1426. jzzx:
  1427.            
  1428.            
  1429.       Case vbKeyRight                 '右 箭 头 =39
  1430.             wblong = Len(Ydtext.Text)
  1431.             If (Ydtext.SelStart = wblong Or Ydtext.SelLength = wblong) Then
  1432.                KeyCode = 0
  1433.                .SetFocus
  1434.                Call Lrsjhx
  1435.                 Rowjsq = .Row
  1436.                 Coljsq = .Col + 1
  1437.                 If Coljsq > .Cols - 1 Then
  1438.                    If Rowjsq < .Rows - 1 Then
  1439.                       Rowjsq = Rowjsq + 1
  1440.                    End If
  1441.                    Coljsq = Qslz
  1442.                 End If
  1443.                 Do While Rowjsq <= .Rows - 1
  1444.                    If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  1445.                       Coljsq = Coljsq + 1
  1446.                       If Coljsq > .Cols - 1 Then
  1447.                          Rowjsq = Rowjsq + 1
  1448.                          Coljsq = Qslz
  1449.                       End If
  1450.                    Else
  1451.                       Exit Do
  1452.                    End If
  1453.                  Loop
  1454.                  .Select Rowjsq, Coljsq
  1455.                End If
  1456.       Case Else
  1457.    End Select
  1458.  End With
  1459. End Sub
  1460. Private Sub ydtext_KeyPress(KeyAscii As Integer)         '录入字符事中控制
  1461.   Call InputFieldLimit(Ydtext, GridInt(WglrGrid.Col, 1), KeyAscii)
  1462.   If KeyAscii <> 0 Then
  1463.      Call Xyxhbz(Dqlrwgh)
  1464.   End If
  1465. End Sub
  1466. Private Sub ydtext_Change()                              '录入事中变化处理
  1467.   '防止程序改变但不进行处理
  1468.   If Wbkbhlock Then
  1469.      Exit Sub
  1470.   End If
  1471.   With WglrGrid
  1472.     '限制字段录入长度
  1473.      Wbkbhlock = True
  1474.        Select Case GridInt(.Col, 1)
  1475.           Case 8
  1476.             Call Sjgskz(Ydtext, Xtjezws - Xtjexsws - 1, Xtjexsws)
  1477.           Case 9
  1478.             Call Sjgskz(Ydtext, Xtslzws - Xtslxsws - 1, Xtslxsws)
  1479.           Case 10
  1480.             Call Sjgskz(Ydtext, Xtdjzws - Xtdjxsws - 1, Xtdjxsws)
  1481.           Case Else
  1482.              If GridInt(.Col, 3) <> 0 Or GridInt(.Col, 4) <> 0 Then
  1483.                 Call Sjgskz(Ydtext, GridInt(.Col, 3), GridInt(.Col, 4))
  1484.              End If
  1485.        End Select
  1486.       Wbkbhlock = False
  1487.   End With
  1488. End Sub
  1489. Private Sub ydtext_LostFocus()            '如果由于选中网格之外的控件而发生有效性判断(选中网格会先发生Rowcolchange事件置Valiock为TRUE)
  1490.   With WglrGrid
  1491.     If Not Valilock Then
  1492.        Call Lrsjhx
  1493.        If Not sjzdyxxpd(Dqlrwgh, Dqlrwgl) Then
  1494.           Exit Sub
  1495.        End If
  1496.        If Not Sjhzyxxpd(Dqlrwgh) Then
  1497.           Exit Sub
  1498.        End If
  1499.     End If
  1500.   End With
  1501. End Sub
  1502. Private Sub xswbk()                       '在当前选中单元显示文本框,列表框,帮助按钮(通用)
  1503.   Dim Wbkpy As Integer, Wbkpy1 As Integer '文本框偏移量
  1504.   
  1505.   '如果单据操作状态为浏览状态则不能显示录入载体
  1506.    If Trim(Lab_OperStatus.Caption) = "1" Then
  1507.       Exit Sub
  1508.    End If
  1509.      
  1510.   '显示文本框前返回有效行列(解决滚动条问题)
  1511.   Call Xldqh
  1512.   Call Xldql
  1513.   
  1514.   '隐藏文本框,帮助按钮,列表组合框
  1515.   Call Ycwbk
  1516.   
  1517.   With WglrGrid
  1518.     Dqlrwgh = .Row
  1519.     Dqlrwgl = .Col
  1520.     If Not GridBoolean(.Col, 1) Or .Row < .FixedRows Then
  1521.        Exit Sub
  1522.     End If
  1523.      
  1524.     Wbkpy = 30
  1525.     Wbkpy1 = 15
  1526.     
  1527.     If GridBoolean(.Col, 3) Then
  1528.        YdCombo.Left = .CellLeft + .Left + Wbkpy
  1529.        YdCombo.Top = .CellTop + .Top + Wbkpy
  1530.        YdCombo.Width = .CellWidth - Wbkpy1
  1531.        Call Wbkcl
  1532.        YdCombo.Visible = True
  1533.        YdCombo.SetFocus
  1534.        Ydcommand.Visible = False
  1535.        Ydtext.Visible = False
  1536.     Else
  1537.       If GridBoolean(.Col, 2) Then
  1538.         Ydcommand.Left = .Left + .CellLeft + .CellWidth - Ydcommand.Width + Wbkpy
  1539.         Ydcommand.Top = .Top + .CellTop + .CellHeight - Ydcommand.Height + Wbkpy
  1540.         Ydcommand.Visible = True
  1541.       Else
  1542.         Ydcommand.Visible = False
  1543.       End If
  1544.      
  1545.       Ydtext.Left = .CellLeft + .Left + Wbkpy
  1546.       Ydtext.Top = .CellTop + .Top + Wbkpy
  1547.       If Ydcommand.Visible Then
  1548.         If Sfblbzkd Then
  1549.          Ydtext.Width = .CellWidth - Ydcommand.Width
  1550.         Else
  1551.          Ydtext.Width = .CellWidth - Wbkpy1
  1552.         End If
  1553.       Else
  1554.          Ydtext.Width = .CellWidth - Wbkpy1
  1555.       End If
  1556.       Ydtext.Height = .CellHeight - Wbkpy1
  1557.       
  1558.       If GridInt(.Col, 2) <> 0 Then
  1559.          Ydtext.MaxLength = GridInt(.Col, 2)
  1560.       Else
  1561.          Ydtext.MaxLength = 3000
  1562.       End If
  1563.       
  1564.       Call Wbkcl
  1565.       
  1566.       Ydtext.Visible = True
  1567.       Ydtext.SetFocus
  1568.     End If
  1569.     Dqtoprow = .TopRow
  1570.     Dqleftcol = .LeftCol
  1571.     
  1572.     '重置锁值
  1573.     Valilock = False
  1574.     Wbkbhlock = False
  1575.  End With
  1576. End Sub
  1577. Private Sub Cxxswbk()                                                  'Formresize中重新显示文本框,列表框,帮助按钮(通用)
  1578.                    
  1579.   Dim Wbkpy As Integer, Wbkpy1 As Integer
  1580.   Wbkpy = 30
  1581.   Wbkpy1 = 15
  1582.   With WglrGrid
  1583.      If YdCombo.Visible Then
  1584.        YdCombo.Left = .CellLeft + .Left + Wbkpy
  1585.        YdCombo.Top = .CellTop + .Top + Wbkpy
  1586.        YdCombo.Width = .CellWidth - Wbkpy1
  1587.      End If
  1588.      If Ydcommand.Visible Then
  1589.        Ydcommand.Left = .Left + .CellLeft + .CellWidth - Ydcommand.Width + Wbkpy
  1590.        Ydcommand.Top = .Top + .CellTop + .CellHeight - Ydcommand.Height + Wbkpy
  1591.      End If
  1592.      If Ydtext.Visible Then
  1593.        If Ydcommand.Visible Then
  1594.          If Sfblbzkd Then
  1595.          Ydtext.Width = .CellWidth - Ydcommand.Width
  1596.         Else
  1597.          Ydtext.Width = .CellWidth - Wbkpy1
  1598.         End If
  1599.        Else
  1600.          Ydtext.Width = .CellWidth - Wbkpy1
  1601.        End If
  1602.       
  1603.        Ydtext.Left = .CellLeft + .Left + Wbkpy
  1604.        Ydtext.Top = .CellTop + .Top + Wbkpy
  1605.        Ydtext.Height = .CellHeight - Wbkpy1
  1606.      End If
  1607.    End With
  1608. End Sub
  1609. Private Sub Lrsjhx()                                                   '文本框录入数据回写
  1610.   With WglrGrid
  1611.    If YdCombo.Visible Then
  1612.     .Text = Trim(YdCombo.Text)
  1613.    End If
  1614.    If Ydtext.Visible Then
  1615.     .Text = Trim(Ydtext.Text)
  1616.    End If
  1617.    
  1618.    '(如果字段录入内容发生变化,则打开有效性判断锁)
  1619.    If Zdlrqnr <> Trim(.Text) Then
  1620.       Yxxpdlock = False
  1621.       Hyxxpdlock = False
  1622.    End If
  1623.    
  1624.    '如果字段录入内容不为空则写数据行有效性标志
  1625.    
  1626.    If Len(Trim(.Text)) <> 0 Then
  1627.       Call Xyxhbz(.Row)
  1628.    End If
  1629.    
  1630.    '隐藏文本框,帮助按钮,列表组合框
  1631.    Call Ycwbk
  1632.    
  1633.   End With
  1634. End Sub
  1635. Private Sub WglrGrid_KeyDown(KeyCode As Integer, Shift As Integer)    '网格录入增行,删行快捷键
  1636.   
  1637.   '如果单据操作状态为浏览状态则不能显示录入载体
  1638.   If Trim(Lab_OperStatus.Caption) = "1" Then
  1639.       Exit Sub
  1640.   End If
  1641.   Select Case KeyCode
  1642.      Case vbKeyDelete               '删行
  1643.        Call Scdqfl
  1644.      Case vbKeyInsert               '增行
  1645.        Call zjlrfl
  1646.   End Select
  1647. End Sub
  1648. Private Sub WglrGrid_KeyPress(KeyAscii As Integer)                     '网格接受键盘录入
  1649.   Dim Str_ChangeTe As String    '临时交换内容
  1650.   Dim Coljsq As Long            '临时列计数器
  1651.   Dim Int_SaveKey As Integer    '保存KeyAscii值
  1652.   '如果单据操作状态为浏览状态则不能显示录入载体
  1653.   If Trim(Lab_OperStatus.Caption) = "1" Then
  1654.       Exit Sub
  1655.   End If
  1656.   Int_SaveKey = KeyAscii
  1657.   With WglrGrid
  1658.     '屏 蔽 回 车 键
  1659.    If KeyAscii = vbKeyReturn Then
  1660.        KeyAscii = 0
  1661.        Rowjsq = .Row
  1662.         Coljsq = .Col + 1
  1663.         If Coljsq > .Cols - 1 Then
  1664.            If Rowjsq < .Rows - 1 Then
  1665.               Rowjsq = Rowjsq + 1
  1666.            End If
  1667.            Coljsq = Qslz
  1668.         End If
  1669.         Do While Rowjsq <= .Rows - 1
  1670.            If .ColHidden(Coljsq) Or (Not GridBoolean(Coljsq, 1)) Then
  1671.               Coljsq = Coljsq + 1
  1672.               If Coljsq > .Cols - 1 Then
  1673.                  Rowjsq = Rowjsq + 1
  1674.                  Coljsq = Qslz
  1675.               End If
  1676.            Else
  1677.               Exit Do
  1678.            End If
  1679.          Loop
  1680.          .Select Rowjsq, Coljsq
  1681.       Exit Sub
  1682.     End If
  1683.     '接受用户录入
  1684.   Select Case KeyAscii
  1685.      Case 0 To 32
  1686.           '[>>开始 当用户输入空格时,如果在摘要列则自动填入上条记录录入的摘要内容
  1687.           ' 如果在金额列则交换借贷内容,此段程序不要求有效性判断,否则应另行处理
  1688.             Select Case GridStr(.Col, 1)
  1689.                Case "001"   '摘要
  1690.                 If Len(Trim(WglrGrid.TextMatrix(.Row, .Col))) = 0 And Len(Trim(Str_Digest)) <> 0 Then
  1691.                    WglrGrid.TextMatrix(.Row, .Col) = Str_Digest
  1692.                    '写有效行数据标志,并打开行有效性判断锁
  1693.                    Call Xyxhbz(.Row)
  1694.                    Hyxxpdlock = False
  1695.                 End If
  1696.                Case "004", "005"  '借方金额,贷方金额
  1697.                 If Val(WglrGrid.TextMatrix(.Row, .Col)) = 0 Then
  1698.                      Str_ChangeTe = WglrGrid.TextMatrix(.Row, Sydz("004", GridStr(), Szzls))
  1699.                      WglrGrid.TextMatrix(.Row, Sydz("004", GridStr(), Szzls)) = WglrGrid.TextMatrix(.Row, Sydz("005", GridStr(), Szzls))
  1700.                      WglrGrid.TextMatrix(.Row, Sydz("005", GridStr(), Szzls)) = Str_ChangeTe
  1701.                       '写有效行数据标志,并打开行有效性判断锁
  1702.                       Call Xyxhbz(.Row)
  1703.                       Hyxxpdlock = False
  1704.                      '计算合计数据
  1705.                      For Coljsq = Qslz To .Cols - 1
  1706.                          Call Sjhj(Coljsq)
  1707.                      Next Coljsq
  1708.                  End If
  1709.             End Select
  1710.           '完毕<<]
  1711.           '显示录入载体
  1712.           Call xswbk
  1713.      Case Else
  1714.            '防止非编辑字段SendKeys()出现死循环
  1715.           If Not GridBoolean(.Col, 1) Or .Row < .FixedRows Then
  1716.              Exit Sub
  1717.           End If
  1718.           If GridBoolean(.Col, 3) Then
  1719.              '列表框录入
  1720.              Call xswbk
  1721.           Else
  1722.              '[>>开始 如果用户在借贷金额位置按"="且当前行金额为零则自动计算借贷合计差额填入录入文本框
  1723.              If Chr(KeyAscii) = "=" And (Val(.TextMatrix(.Row, Sydz("004", GridStr(), Szzls))) = 0 And Val(.TextMatrix(.Row, Sydz("005", GridStr(), Szzls))) = 0) Then
  1724.                 Select Case GridStr(.Col, 1)
  1725.                   Case "004"   '借方金额
  1726.                     Ydtext.Text = ""
  1727.                     Call Xyxhbz(.Row)
  1728.                     Call xswbk
  1729.                     Ydtext.Text = Format(Val(HjGrid.TextMatrix(0, Sydz("005", GridStr(), Szzls))) - Val(HjGrid.TextMatrix(0, .Col)), "##." + String(Xtjexsws, "0"))
  1730.                   Case "005"   '贷方金额
  1731.                     Ydtext.Text = ""
  1732.                     Call Xyxhbz(.Row)
  1733.                     Call xswbk
  1734.                     Ydtext.Text = Format(Val(HjGrid.TextMatrix(0, Sydz("004", GridStr(), Szzls))) - Val(HjGrid.TextMatrix(0, .Col)), "##." + String(Xtjexsws, "0"))
  1735.                 End Select
  1736.                 '完毕<<]
  1737.              Else
  1738.                 Ydtext.Text = ""
  1739.                 Call InputFieldLimit(Ydtext, GridInt(WglrGrid.Col, 1), KeyAscii)
  1740.                 If KeyAscii = 0 Then
  1741.                    Exit Sub
  1742.                 End If
  1743.                 '写有效行数据标志
  1744.                 Call Xyxhbz(.Row)
  1745.                 Call xswbk
  1746.                 Ydtext.Text = ""
  1747.                 Valilock = True
  1748.                   SendKeys Chr(KeyAscii), wait
  1749.                   DoEvents
  1750.                 Valilock = False
  1751.              End If
  1752.           End If
  1753.      End Select
  1754.   End With
  1755. End Sub
  1756. Private Sub zjlrfl()                                                    '增加录入分录
  1757.   With WglrGrid
  1758.     If Not (Ydtext.Visible Or YdCombo.Visible) Then
  1759.        If Not Fun_Drfrmyxxpd Then
  1760.           Exit Sub
  1761.        End If
  1762.     Else
  1763.        Exit Sub
  1764.     End If
  1765.     If .Row < .FixedRows Then
  1766.        Exit Sub
  1767.     End If
  1768.     .AddItem "", .Row
  1769.     .RowHeight(.Row) = Sjhgd
  1770.     If .Row <> .Rows - 1 Then
  1771.        If .TextMatrix(.Row + 1, 0) = "*" Then
  1772.           .TextMatrix(.Row, 0) = "*"
  1773.        Else
  1774.           .RemoveItem .Rows - 1
  1775.        End If
  1776.     End If
  1777.     Call Xldqh
  1778.     Call Xldql
  1779.     Hyxxpdlock = False
  1780.   End With
  1781. End Sub
  1782. Private Sub Scdqfl()                                                    '删除当前分录
  1783.  Dim Answer As Integer, Scqwghz As Long, Scqwglz As Long, Hjlzte As Long, Sflrzt As Boolean
  1784.  With WglrGrid
  1785.     Scqwghz = .Row
  1786.     Scqwglz = .Col
  1787.     If .TextMatrix(.Row, 0) = "*" Then
  1788.     
  1789.         '判断是否为录入状态
  1790.         If Ydtext.Visible Or YdCombo.Visible Then
  1791.           Sflrzt = True
  1792.           Validate = True
  1793.            Call Lrsjhx
  1794.           Validate = False
  1795.         End If
  1796.        
  1797.        Call Xldqh
  1798.        changelock = True
  1799.          .Select .Row, 0
  1800.        changelock = False
  1801.        If Shsfts Then
  1802.           .Cell(flexcpBackColor, .Row, Qslz, .Row, .Cols - 1) = QBColor(12)
  1803.           Tsxx = "请确认是否删除当前记录?"
  1804.           Yhanswer = Xtxxts(Tsxx, 2, 2)
  1805.           If Yhanswer = 2 Then
  1806.              .Cell(flexcpBackColor, .Row, Qslz, .Row, .Cols - 1) = &H80000005
  1807.               changelock = True
  1808.                 .Select Scqwghz, Scqwglz
  1809.               changelock = False
  1810.               
  1811.               '如为录入状态,则恢复录入
  1812.               If Sflrzt Then
  1813.                  Call xswbk
  1814.               End If
  1815.               
  1816.              Exit Sub
  1817.           End If
  1818.        End If
  1819.       .RemoveItem .Row
  1820.        If .Rows < Pmbcsjhs + .FixedRows + Fzxwghs + 1 Then
  1821.           .AddItem ""
  1822.           .RowHeight(.Rows - 1) = Sjhgd
  1823.        End If
  1824.        changelock = True
  1825.          .Select .Row, Scqwglz
  1826.        changelock = False
  1827.        
  1828.        '重新计算合计数据
  1829.        For Hjlzte = Qslz To .Cols - 1
  1830.            Call Sjhj(Hjlzte)
  1831.        Next Hjlzte
  1832.        
  1833.     End If
  1834.  End With
  1835. End Sub
  1836. Private Sub Sjhj(Hjwgl As Long)                                         '网格列数据合计
  1837.  Dim Hjjg As Double
  1838.  If Not (GridBoolean(Hjwgl, 4) And HjGrid.Visible) Then
  1839.     Exit Sub
  1840.  End If
  1841.  With WglrGrid
  1842.    Hjjg = 0
  1843.    For Jsqte = .FixedRows To .Rows - 1
  1844.        If .TextMatrix(Jsqte, 0) = "*" Then
  1845.           Hjjg = Hjjg + Val(.TextMatrix(Jsqte, Hjwgl))
  1846.        End If
  1847.    Next Jsqte
  1848.    If GridBoolean(Hjwgl, 5) And Hjjg = 0 Then
  1849.       HjGrid.TextMatrix(0, Hjwgl) = ""
  1850.    Else
  1851.       HjGrid.TextMatrix(0, Hjwgl) = Hjjg
  1852.    End If
  1853.  End With
  1854. End Sub
  1855. Private Sub Qkwlzd(sjh As Long, Sjl As Long)                            '清空为零字段
  1856.   If Not GridBoolean(Sjl, 5) Then
  1857.      Exit Sub
  1858.   End If
  1859.   With WglrGrid
  1860.     If Val(Trim(.TextMatrix(sjh, Sjl))) = 0 Then
  1861.        .TextMatrix(sjh, Sjl) = ""
  1862.     End If
  1863.   End With
  1864. End Sub
  1865. Private Sub fhyxh()                                                     '返回录入数据有效行,同时让得到焦点网格可见
  1866.   With WglrGrid
  1867.    If .Row >= .FixedRows Then
  1868.       If .TextMatrix(.Row, 0) <> "*" Then
  1869.          For Rowjsq = .FixedRows To .Rows - 1
  1870.              If .TextMatrix(Rowjsq, 0) <> "*" Then
  1871.                 Exit For
  1872.              End If
  1873.          Next Rowjsq
  1874.          If Rowjsq <= .Rows - 1 Then
  1875.             changelock = True
  1876.               .Select Rowjsq, .Col
  1877.             changelock = False
  1878.          Else
  1879.             changelock = True
  1880.               .Select .Rows - 1, .Col
  1881.             changelock = False
  1882.          End If
  1883.       End If
  1884.       Call Xldqh
  1885.    End If
  1886.   End With
  1887. End Sub
  1888. Private Sub Xldqh()                                                      '显露当前行
  1889.   Dim Toprowte As Long
  1890.   With WglrGrid
  1891.     Toprowte = 0
  1892.     Do While .CellTop + .RowHeight(.Row) + Fzxwghs * Sjhgd > .Height And .TopRow <> Toprowte
  1893.        Toprowte = .TopRow
  1894.        .TopRow = .TopRow + 1
  1895.     Loop
  1896.     Toprowte = 0
  1897.     Do While .CellTop < .FixedRows * .RowHeight(0) And .TopRow <> Toprowte
  1898.        Toprowte = .TopRow
  1899.        .TopRow = .TopRow - 1
  1900.     Loop
  1901.   End With
  1902. End Sub
  1903. Private Sub Xldql()                                                     '显露当前列
  1904.  Dim Leftcolte As Long
  1905.  With WglrGrid
  1906.    If .Col >= Qslz Then
  1907.     If .LeftCol > .Col Then
  1908.        .LeftCol = .Col
  1909.     End If
  1910.     Leftcolte = 0
  1911.     Do While .CellLeft + .CellWidth > .Width And .LeftCol <> Leftcolte
  1912.        Leftcolte = .LeftCol
  1913.        .LeftCol = .LeftCol + 1
  1914.     Loop
  1915.   End If
  1916.  End With
  1917. End Sub
  1918. Private Function pdhwk(sjh As Long)                                     '判断网格行是否为空行(所有录入字段均为空*非录入字段除外)
  1919.  With WglrGrid
  1920.    For Coljsq = Qslz To .Cols - 1
  1921.        If Len(Trim(.TextMatrix(sjh, Coljsq))) <> 0 And GridBoolean(Coljsq, 1) Then
  1922.           pdhwk = False
  1923.           Exit Function
  1924.        End If
  1925.    Next Coljsq
  1926.    pdhwk = True
  1927.  End With
  1928. End Function
  1929. Private Sub Xyxhbz(sjh As Long)                                         '写行有效性标志,并判断是否增行
  1930.    With WglrGrid
  1931.     If .TextMatrix(sjh, 0) = "*" Then
  1932.        Exit Sub
  1933.     End If
  1934.     .TextMatrix(sjh, 0) = "*"
  1935.     If sjh >= .Rows - Fzxwghs - 1 Then
  1936.        .AddItem ""
  1937.        .RowHeight(.Rows - 1) = Sjhgd
  1938.     End If
  1939.    End With
  1940. End Sub
  1941. Private Sub GsToolbar_ButtonClick(ByVal Button As MSComctlLib.Button)   '表格格式设置(通用)
  1942.     Select Case Button.Key
  1943.       Case "bcgs"                              '保存表格格式
  1944.         Call Bcwggs(WglrGrid, GridCode)
  1945.       Case "hfmrgs"                            '恢复默认格式
  1946.         Call Hfmrgs(WglrGrid, GridCode)
  1947.     End Select
  1948. End Sub
  1949. Private Sub bbyl(bbylte As Boolean)                                     '打印预览(通用)
  1950.   Dim Bbzbt$, Bbxbt() As String, bbxbtzzxs() As Integer, Bbxbtgs As Integer
  1951.   Dim Bbbwh() As String, Bbbwhzzxs() As Integer, Bbbwhgs As Integer
  1952.   Bbxbtgs = 1                                  '报 表 小 标 题 行 数
  1953.   Bbbwhgs = 1                                  '报 表 表 尾 行 数
  1954.   ReDim Bbxbt(1 To Bbxbtgs)
  1955.   ReDim bbxbtzzxs(1 To Bbxbtgs)
  1956.   If Bbbwhgs <> 0 Then
  1957.      ReDim Bbbwh(1 To Bbbwhgs)
  1958.      ReDim Bbbwhzzxs(1 To Bbbwhgs)
  1959.   End If
  1960.   Bbzbt = ReportTitle
  1961.   
  1962.   Bbxbt(1) = Space(45) + Fun_FormatOutPut("制单日期:" + Trim(LrText(1).Text), 30)
  1963.   Bbxbt(1) = Bbxbt(1) + Fun_FormatOutPut("凭证字号:" + Trim(LrText(0).Text) + "-" + Trim(LrText(3).Text), 26)
  1964.   Bbbwh(1) = Fun_FormatOutPut("会计主管:", 18) + Fun_FormatOutPut("记帐:" + Lab_Book, 18)
  1965.   Bbbwh(1) = Bbbwh(1) + Fun_FormatOutPut("出纳:", 18) + Fun_FormatOutPut("审核:" + Lab_Checker, 18)
  1966.   Bbbwh(1) = Bbbwh(1) + Fun_FormatOutPut("制单:" + Lab_Bill, 18) + Trim(Fun_FormatOutPut("附单据数:" + Trim(LrText(2).Text), 23))
  1967.   
  1968.   bbxbtzzxs(1) = 0                             '报表行组织形式(0-居左 1-居中 2-居右)
  1969.   Bbbwhzzxs(1) = 1
  1970.   Call Sub_Scpzbb(WglrGrid)                    '生成报表数据(自定义程序)
  1971.   Call Scdybb(Dyymctbl, Bbzbt, Bbxbt(), bbxbtzzxs(), Bbxbtgs, Bbbwh(), Bbbwhzzxs(), Bbbwhgs, bbylte)
  1972.   If Not bbylte Then
  1973.      Unload DY_Tybbyldy
  1974.   End If
  1975. End Sub
  1976. '************以下为文本框录入处理程序(固定不变部分)*************'
  1977. Private Sub Wbklrwbcl(Index As Integer)    '文本框录入事后处理程序
  1978.   '以下为依据实际情况自定义部分[
  1979.   
  1980.       '在此填写文本框录入事后处理程序
  1981.    
  1982.   ']以上为依据实际情况自定义部分
  1983. End Sub
  1984. Private Sub LrText_Change(Index As Integer)
  1985.    '屏蔽程序改变控制
  1986.    If TextChangeLock Then
  1987.       Exit Sub
  1988.    End If
  1989.    
  1990.    TextValiJudgeLock(Index) = False    '打开有效性判断锁
  1991.     
  1992.     '限制字段录入长度
  1993.           
  1994.      TextChangeLock = True  '加锁(防止执行Lrtext_Change)
  1995.         Select Case Textint(Index, 1)
  1996.            Case 8           '金额型
  1997.              Call Sjgskz(LrText(Index), Xtjezws - Xtjexsws - 1, Xtjexsws)
  1998.            Case 9           '数量型
  1999.              Call Sjgskz(LrText(Index), Xtslzws - Xtslxsws - 1, Xtslxsws)
  2000.            Case 10          '单价型
  2001.              Call Sjgskz(LrText(Index), Xtdjzws - Xtdjxsws - 1, Xtdjxsws)
  2002.            Case Else        '其他小数类型控制
  2003.               If Textint(Index, 6) <> 0 Or Textint(Index, 7) <> 0 Then
  2004.                  Call Sjgskz(LrText(Index), Textint(Index, 6), Textint(Index, 7))
  2005.               End If
  2006.         End Select
  2007.         
  2008.         '[>>随时计算最新单据号
  2009.         If Index = 0 Then
  2010.            Call Sub_JsVouchNo
  2011.         End If
  2012.         '<<]
  2013.         
  2014.      TextChangeLock = False '解锁
  2015.      
  2016. End Sub
  2017. Private Sub LrText_GotFocus(Index As Integer)                                                 '文本框得到焦点,显示相应信息
  2018.    Call TextShow(Index)
  2019. End Sub
  2020. Private Sub LrText_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)            '字段按F2键提供帮助
  2021.    Select Case KeyCode
  2022.       Case vbKeyF2
  2023.         Call Text_Help(Index)
  2024.    End Select
  2025. End Sub
  2026. Private Sub LrText_KeyPress(Index As Integer, KeyAscii As Integer)                            '文本框录入事中控制
  2027.    Call InputFieldLimit(LrText(Index), Textint(Index, 1), KeyAscii)
  2028. End Sub
  2029. Private Sub LrText_LostFocus(Index As Integer)                                                '文本框失去焦点进行有效性判断及相应处理
  2030.   If Textint(Index, 9) = 0 Or Textint(Index, 9) = 1 Then '事中判断
  2031.      Call TextYxxpd(Index)
  2032.   End If
  2033. End Sub
  2034. Private Sub Ydcommand1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2035.    Call Text_Help(Ydcommand1.Tag)
  2036. End Sub
  2037. Private Sub Text_Help(Index As Integer)                                                       '录入字段帮助
  2038.   If Not Ydcommand1.Visible Then
  2039.      Exit Sub
  2040.   End If
  2041.    TextValiLock = True
  2042.      Call Drbmhelp(Textint(Index, 2), Textstr(Index, 4), Trim(LrText(Index).Text))
  2043.      If Len(Xtfhcs) <> 0 Then
  2044.         If Textint(Index, 3) = 1 Then
  2045.            LrText(Index).Text = Xtfhcsfz
  2046.            LrText(Index).Tag = Xtfhcs
  2047.         Else
  2048.            LrText(Index).Text = Xtfhcs
  2049.            LrText(Index).Tag = Xtfhcsfz
  2050.         End If
  2051.        
  2052.      End If
  2053.    TextValiLock = False
  2054.    LrText(Index).SetFocus
  2055. End Sub
  2056. Private Sub TextShow(Index As Integer)        '文本框得到焦点,显示相应信息
  2057.     If Textboolean(Index, 1) Then
  2058.        Ydcommand1.Visible = True
  2059.        Ydcommand1.Move LrText(Index).Left + LrText(Index).Width, LrText(Index).Top
  2060.        Ydcommand1.Tag = Index
  2061.     Else
  2062.        Ydcommand1.Tag = ""
  2063.        Ydcommand1.Visible = False
  2064.     End If
  2065. End Sub
  2066. Private Sub Wbkcsh()                          '录入文本框初始化
  2067.   
  2068.   '最大录入文本框索引值
  2069.   Max_Text_Index = Textvar(1)
  2070.   
  2071.   ReDim TextValiJudgeLock(Max_Text_Index)
  2072.   For Jsqte = 0 To Max_Text_Index
  2073.      If Len(Trim(Textstr(Jsqte, 1))) <> 0 Then
  2074.         TextChangeLock = True
  2075.          LrText(Jsqte).Text = ""
  2076.          LrText(Jsqte).Tag = ""
  2077.          If Textint(Jsqte, 5) <> 0 Then
  2078.             LrText(Jsqte).MaxLength = Textint(Jsqte, 5)
  2079.          End If
  2080.         TextChangeLock = False
  2081.      End If
  2082.      TextValiJudgeLock(Jsqte) = True
  2083.   Next Jsqte
  2084. End Sub
  2085. Private Function TextYxxpd(Index As Integer) As Boolean           '文本框有效性判断
  2086.   Dim SQLSTR As String
  2087.   Dim Findrec As New ADODB.Recordset
  2088.   
  2089.   '按帮助不进行有效性判断
  2090.   
  2091.   If TextValiLock Then
  2092.      TextValiLock = False
  2093.      TextYxxpd = True
  2094.      Exit Function
  2095.   End If
  2096.   
  2097.   '文本框内容未曾改变不进行有效性判断
  2098.   
  2099.   If TextValiJudgeLock(Index) Then
  2100.      Ydcommand1.Visible = False
  2101.      TextYxxpd = True
  2102.      Exit Function
  2103.   End If
  2104.   If Trim(LrText(Index)) = "" Then
  2105.      LrText(Index).Tag = ""
  2106.      Call Wbklrwbcl(Index)
  2107.      Ydcommand1.Visible = False
  2108.      TextValiJudgeLock(Index) = True
  2109.      TextYxxpd = True
  2110.      
  2111.      '[>>如果凭证类别清空,则字号应清空
  2112.      If Index = 0 Then
  2113.       TextChangeLock = True
  2114.        LrText(3).Text = ""
  2115.       TextChangeLock = False
  2116.      End If
  2117.      '<<]
  2118.      
  2119.      Exit Function
  2120.   End If
  2121.        Select Case Textint(Index, 4)
  2122.          Case 1      '编码型
  2123.             SQLSTR = Trim(Textstr(Index, 5))
  2124.             SQLSTR = Replace(SQLSTR, "@", "'" + Trim(LrText(Index).Text) + "'")
  2125.             Set Findrec = Cw_DataEnvi.DataConnect.Execute(SQLSTR)
  2126.             If Findrec.EOF Then
  2127.                Call Xtxxts(Trim(Textstr(Index, 6)), 0, 1)
  2128.                LrText(Index).SetFocus
  2129.                Exit Function
  2130.             Else
  2131.                Select Case Textint(Index, 3)
  2132.                  Case 0
  2133.                    If Len(Trim(Textstr(Index, 2))) <> 0 Then
  2134.                       LrText(Index).Text = Trim(Findrec.Fields(Trim(Textstr(Index, 2))))
  2135.                    End If
  2136.                     If Len(Trim(Textstr(Index, 3) & "")) <> 0 Then
  2137.                       LrText(Index).Tag = Trim(Findrec.Fields(Trim(Textstr(Index, 3))))
  2138.                    End If
  2139.                  Case 1
  2140.                    If Len(Trim(Textstr(Index, 3) & "")) <> 0 Then
  2141.                       LrText(Index).Text = Trim(Findrec.Fields(Trim(Textstr(Index, 3))))
  2142.                    End If
  2143.                     If Len(Trim(Textstr(Index, 2))) <> 0 Then
  2144.                       LrText(Index).Tag = Trim(Findrec.Fields(Trim(Textstr(Index, 2))))
  2145.                    End If
  2146.                End Select
  2147.             End If
  2148.             
  2149.             '[>>凭证类别如有效,且内容已经发生改变则自动计算类别字号
  2150.              If Index = 0 Then
  2151.               Call Sub_JsVouchNo
  2152.              End If
  2153.              
  2154.             '<<]
  2155.             
  2156.          Case 2      '日期型
  2157.             If IsDate(LrText(Index).Text) Then
  2158.                LrText(Index).Text = Format(LrText(Index).Text, "yyyy-mm-dd")
  2159.              Else
  2160.                Tsxx = "非法公历日期!(格式:" + Format(Date, "yyyy-mm-dd") + ")"
  2161.                Call Xtxxts(Tsxx, 0, 1)
  2162.                LrText(Index).SetFocus
  2163.                Exit Function
  2164.             End If
  2165.          Case 3      '其他类型
  2166.        End Select
  2167.    Ydcommand1.Visible = False
  2168.    TextValiJudgeLock(Index) = True
  2169.    TextYxxpd = True
  2170. End Function