用Printer对象或在数据环境下用报表编辑器

解决方案 »

  1.   

    用Printer对象
    对返回的记录集做循环打印
    虽然比较烦一点,
    但速度比较快Public Sub PrtPap(sStr As String, Optional sX As Integer, Optional sY As Integer, Optional sFontsize As Integer = 11)
        '打印调用:字符串,起点(可选),字体(可选)
        If sFontsize > 0 Then Printer.FontSize = sFontsize
        If sY > 0 Then Printer.CurrentY = sY
        Printer.CurrentX = sX
        Printer.Print sStr
    End SubPrivate Sub PrintPYKZJ(ByVal rstZL As Recordset, Optional ByVal strFilter As String = "")
        Dim CBQMC As String, CJXMC As String
        Dim oriX As Integer, stepX As Integer, stepY As Single, intY As Integer
        Dim CSQL As String
        Dim CRSET As String
        
        Dim iYM As Integer
        
        Dim IX(6) As Integer
       
        
        iYM = 1
        
        oriX = 10
        stepX = 8
        stepY = 2.5
        intY = 4
        
        IX(0) = oriX - 2
        IX(1) = oriX + 45
        IX(2) = oriX + 75
        IX(3) = oriX + 95
        IX(4) = oriX + 120
        IX(5) = oriX + 145
        IX(6) = oriX + 175
        
       rstZL.Filter = strFilter
        
        If rstZL.RecordCount = 0 Then
            MsgBox "没有原始数据!", vbOKOnly, "提示!"
            Exit Sub
        End If
                  
        
        rstZL.MoveFirst
        
        Printer.ScaleMode = 6                   '毫米
        Printer.FontName = "楷体"
        
        Do While Not rstZL.EOF
            If intY > 260 Then
                Printer.NewPage
                intY = 4
            End If
            CBQMC = Trim(rstZL!BQMC)
            CJXMC = IIf(IsNull(Trim(rstZL!JXMC)), "0", Trim(rstZL!JXMC))
            
            Printer.FontBold = True
            
            If DYSCbz = True Then
            PrtPap "*", 5, intY
            End If
            
            PrtPap "病区名称:" & rstZL!BQMC, IX(0), intY
            PrtPap "剂型:" & IIf(IsNull(Trim(rstZL!JXMC)), "    ", Trim(rstZL!JXMC)), IX(2) + 20, intY
            PrtPap Format(Now, "YYYY-MM-DD HH:MM"), IX(4) + 20, intY
            
            intY = Printer.CurrentY + 2 * iYM
            '横线
            Printer.Line (IX(0), intY - iYM + 0.1)-(IX(6), intY - iYM + 0.1)
        
            '竖线 - 第二行的
            Printer.Line (IX(0), intY - iYM)-(IX(0), intY + stepY * 2 - iYM)
            Printer.Line (IX(1), intY - iYM)-(IX(1), intY + stepY * 2 - iYM)
            Printer.Line (IX(2), intY - iYM)-(IX(2), intY + stepY * 2 - iYM)
            Printer.Line (IX(3), intY - iYM)-(IX(3), intY + stepY * 2 - iYM)
            Printer.Line (IX(4), intY - iYM)-(IX(4), intY + stepY * 2 - iYM)
            Printer.Line (IX(5), intY - iYM)-(IX(5), intY + stepY * 2 - iYM)
            Printer.Line (IX(6), intY - iYM)-(IX(6), intY + stepY * 2 - iYM)
          
            
            PrtPap "药品名称", IX(0) + 2, intY
            PrtPap "规格", IX(1) + 2, intY
            PrtPap "单位", IX(2) + 2, intY
            PrtPap "单价", IX(3) + 2, intY
            PrtPap "总数量", IX(4) + 2, intY
            PrtPap "金额", IX(5) + 2, intY
            
            Printer.Line (IX(0), intY + 2 * stepY - iYM)-(IX(6), intY + 2 * stepY - iYM)
            
            Printer.FontBold = False
            
            intY = Printer.CurrentY + iYM
            Do While Trim(rstZL!BQMC) = CBQMC And IIf(IsNull(Trim(rstZL!JXMC)), "0", Trim(rstZL!JXMC)) = CJXMC
                
                Printer.Line (IX(0), intY - iYM)-(IX(0), intY + 2 * stepY - iYM)
                Printer.Line (IX(1), intY - iYM)-(IX(1), intY + 2 * stepY - iYM)
                Printer.Line (IX(2), intY - iYM)-(IX(2), intY + 2 * stepY - iYM)
                Printer.Line (IX(3), intY - iYM)-(IX(3), intY + 2 * stepY - iYM)
                Printer.Line (IX(4), intY - iYM)-(IX(4), intY + 2 * stepY - iYM)
                Printer.Line (IX(5), intY - iYM)-(IX(5), intY + stepY * 2 - iYM)
                Printer.Line (IX(6), intY - iYM)-(IX(6), intY + stepY * 2 - iYM)
          
                PrtPap rstZL!sfxmmc, IX(0) + 2, intY
                PrtPap rstZL!GG, IX(1) + 2, intY
                PrtPap rstZL!DW, IX(2) + 2, intY
                
                CRSET = "12345678901"
                RSet CRSET = Format(rstZL!DJ, "#,##0.0000")
                PrtPap CRSET, IX(3) + 2, intY
                CRSET = "12345678901"
                RSet CRSET = Format(rstZL!sl, "#,##0.00")
                PrtPap CRSET, IX(4) + 2, intY
                CRSET = "1234567890111"
                RSet CRSET = Format(rstZL!sl * rstZL!DJ, "#,##0.00")
                PrtPap CRSET, IX(5) + 2, intY
                
                Printer.Line (IX(0), intY + 2 * stepY - iYM)-(IX(6), intY + 2 * stepY - iYM)
                
                intY = Printer.CurrentY + iYM
                
                rstZL.MoveNext
                
                If rstZL.EOF Then Exit Do
                
                If Trim(rstZL!BQMC) <> CBQMC Or IIf(IsNull(rstZL!JXMC), "0", Trim(rstZL!JXMC)) <> CJXMC Then
                    CBQMC = Trim(rstZL!BQMC)
                    CJXMC = IIf(IsNull(rstZL!JXMC), "0", Trim(rstZL!JXMC))
                    Exit Do
                End If
                            
                If intY > 260 Then
                    Printer.NewPage
                    intY = 4
                End If
            Loop
            intY = Printer.CurrentY + 4 * stepY
        Loop
        
        Printer.EndDocEnd Sub