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

企业管理

开发平台:

Visual Basic

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