• Hỏi cách lập report
  • Hỏi cách lập report

    ledangvan > 11-08-15, 10:26 AM

    Tôi có một report (In hóa đơn) trong report có các dòng : Tên người mua, Đơn vị mua, địa chỉ .... Các dòng này được đặt cố định để khi in vừa với tờ giấy A4, cỡ chữ 10.

    Vấn đề là : Đối với những đơn vị có tên đơn vị vừa phải thì vừa với dòng in, tuy nhiên nhiều đơn vị có cái tên rất dài khi in bị mất chữ (Ô của dòng thì hạn chế, tôi không muốn cho xuống dòng bởi dòng Đơn vị mua và địa chỉ sát nhau - theo mẫu của tờ hóa đơn)

    Tôi muốn : Nếu tên đơn vị mua dài vừa phải hoặc ngắn thì cỡ chữ vẫn là 10, còn nếu tên đơn vị dài thì sẽ tự động chuyển cỡ chữ sao cho vừa vặn với ô của dòng đó.

    Có thể diễn giải chưa gãy góc, xin các bác, các chú, các anh, các em giúp đỡ. Xin chân thành cảm ơn
  • RE: Hỏi cách lập report

    tranthanhan1962 > 11-08-15, 11:23 AM

    (11-08-15, 10:26 AM)ledangvan Đã viết: Tôi có một report (In hóa đơn) trong report có các dòng : Tên người mua, Đơn vị mua, địa chỉ .... Các dòng này được đặt cố định để khi in vừa với tờ giấy A4, cỡ chữ 10.

    Vấn đề là : Đối với những đơn vị có tên đơn vị vừa phải thì vừa với dòng in, tuy nhiên nhiều đơn vị có cái tên rất dài khi in bị mất chữ (Ô của dòng thì hạn chế, tôi không muốn cho xuống dòng bởi dòng Đơn vị mua và địa chỉ sát nhau - theo mẫu của tờ hóa đơn)

    Tôi muốn : Nếu tên đơn vị mua dài vừa phải hoặc ngắn thì cỡ chữ vẫn là 10, còn nếu tên đơn vị dài thì sẽ tự động chuyển cỡ chữ sao cho vừa vặn với ô của dòng đó.

    Có thể diễn giải chưa gãy góc, xin các bác, các chú, các anh, các em giúp đỡ. Xin chân thành cảm ơn

    Mình đã có bài viết về vấn đề này bạn có thể tham khảo ở đây.
    Đa dạng hóa trong vẽ line ô của báo cáo
  • RE: Hỏi cách lập report

    ongke0711 > 05-10-15, 12:31 PM

    Lúc trước tôi cũng có làm cái vụ này và tìm trên thấy trên mạng cái code này, nay share với bác.
    - Copy code vào sự kiện On Print của Detail Report.
    - Textbox nào cần tự động resize font để fit với textbox thì đặt tên với ký tự "v" ở đầu. Ví dụ: vTenCty. Muốn ký tự nào cũng được, nếu đổi thì sửa chút trong đoạn code.

    Mã PHP:
    Private Sub Detail_Print(Cancel As IntegerPrintCount As Integer)
     
       Dim ctl As ControlstrText As VariantstrName As String
       
       Me
    .ScaleMode 1
       For Each ctl In Me
    .Detail.Controls
           If ctl
    .ControlType acTextBox And ctl.Name Like "v*" Then
           strName 
    ctl.Name
               If Nz
    (ctl.Tag"") = "" Then
                   ctl
    .Tag ctl.FontSize
               End 
    If
               
               ctl
    .FontSize ctl.Tag
               Me
    .FontSize ctl.FontSize
               strText 
    ctl.Value
               Do Until TextWidth
    (strText) < ctl.Width '- (ctl.Width * 0.26)
                   ctl.FontSize = ctl.FontSize - 1
                   Me.FontSize = ctl.FontSize
               Loop
               Do Until TextHeight(strText) < ctl.Height - (ctl.Height * 0.26)
                   ctl.FontSize = ctl.FontSize - 1
                   Me.FontSize = ctl.FontSize
               Loop
           End If
       Next ctl
    End Sub 
  • RE: Hỏi cách lập report

    ledangvan > 05-10-15, 12:51 PM

    (05-10-15, 12:31 PM)ongke0711 Đã viết: Lúc trước tôi cũng có làm cái vụ này và tìm trên thấy trên mạng cái code này, nay share với bác.
    - Copy code vào sự kiện On Print của Detail Report.
    - Textbox nào cần tự động resize font để fit với textbox thì đặt tên với ký tự "v" ở đầu. Ví dụ: vTenCty. Muốn ký tự nào cũng được, nếu đổi thì sửa chút trong đoạn code.

    Mã PHP:
    Private Sub Detail_Print(Cancel As IntegerPrintCount As Integer)
    Dim ctl As ControlstrText As VariantstrName As String
    'This routine uses the TextWidth methods to determine the maximum size
    '
    of font possible to ensure a text string is printed in full in the
    'report's current font without loosing any characters.
       
       Me
    .ScaleMode ' set all measurments to twips
       
       For Each ctl In Me.Detail.Controls
      
           If ctl.ControlType = acTextBox And ctl.Name Like "v*" Then
           
           strName = ctl.Name
           
               If Nz(ctl.Tag, "") = "" Then
                   ctl.Tag = ctl.FontSize
               End If
               
                   
           ' 
    set the control's fontsize to a suitable large size to begin with
               ctl.FontSize = ctl.Tag

           ' 
    make sure the report font size is equal to the control's fontsize.
               Me.FontSize = ctl.FontSize
           
           ' 
    grab the text from the control
               strText 
    ctl.Value 
           
           
    ' evaluate the Loop until the text fits the Width of the box less 24%. Do this
           ' 
    by reducing the font size incrementally and re-testing the Loop's criteria.
               Do Until TextWidth(strText) < ctl.Width '
    - (ctl.Width 0.26)
                   ctl.FontSize ctl.FontSize 1
                   
    ' reset the report's font size so the TextWidth function will
                   
    ' continue to track the reducing font size correctly.
                   Me.FontSize = ctl.FontSize
               Loop
               
           ' 
    now evaluate for the height of the text to make sure it fits vertically
               Do Until TextHeight
    (strText) < ctl.Height - (ctl.Height 0.26)
                   ctl.FontSize ctl.FontSize 1
                   
    ' reset the report's font size so the TextHeight function will
                   
    ' continue to track the reducing font size correctly.
                   Me.FontSize = ctl.FontSize
               Loop
           
           End If
           
       Next ctl
       
    End Sub 

    Copy code vào nó báo đỏ dòng này bạn à :
                  continue to track the reducing font size correctly.

    Nếu bỏ dòng này khi chạy nó báo lỗi dòng này :
           Do Until TextWidth(strText) < ctl.Width '- (ctl.Width * 0.26)

    Xem giúp tôi với, xin cảm ơn
  • RE: Hỏi cách lập report

    ongke0711 > 05-10-15, 01:04 PM

    Bác Copy lại đoạn code ở trên nhé. Chắc lúc paste có lỗi cú pháp gì đó.
  • RE: Hỏi cách lập report

    ledangvan > 05-10-15, 02:40 PM

    (05-10-15, 01:04 PM)ongke0711 Đã viết: Bác Copy lại đoạn code ở trên nhé. Chắc lúc paste có lỗi cú pháp gì đó.

    Chạy vẫn bị báo lỗi dòng này :

               Do Until TextWidth(strText) < ctl.Width - (ctl.Width * 0.26)

    Giá trị strText = Null

    ongke0711 xem giúp với 021
  • RE: Hỏi cách lập report

    ongke0711 > 05-10-15, 03:09 PM

    Cái textbox tên đơn vị của bác (strText) không để Null được nha bác, phải có control source sẵn, chứ khi load và set control source cho nó thì sẽ báo lỗi "invalid..." .
  • RE: Hỏi cách lập report

    tranthanhan1962 > 05-10-15, 03:49 PM

    Mình hiểu rồi bạn muốn thiết kế report in hóa đơn chứ gì. Thông thường repord này có 2 phần. Phần ghi số hóa đơn và tên đơn vị dạng columnar. Và phần ghi hàng hóa dạng tabular. Đây là kinh nghiệm của mình. Khi thiết kế bạn kiểm tra các ô quan trọng tên đơn vị, địa chỉ, tên hàng hóa xem ô nó chứa được bao nhiêu chữ m, Khi thiết đặt các field bạn xác định field size đúng số lượng ký tự nó hiển thị được. Điều này nhằm khống chế việc đặt tên hoặc ghi địa chỉ tùy tiện.
    Riêng ô bằng chữ thì bạn cho 2 dòng là xong.
  • RE: Hỏi cách lập report

    tanbacmy > 05-10-15, 03:51 PM

    thank you