• Tự động thiết lập máy in cho Report ?
  • Tự động thiết lập máy in cho Report ?

    Minh Tiên > 13-10-19, 02:16 PM

    Chào cả nhà !
    Tiên có vấn đề ngày nhờ các ACE Pro giúp  !
    Tiên thiết thiết lập tự động hiển thị theo máy in cho các Report bằng cách dò tên từng Tên Report và thiết đặt máy in theo tên Report. Mỗi lần mở Report lên xem => Vào chế độ View Disign, sau đó thiết lập Printer, kiểu trang, Lề, ... => View để xem hoạt in.
    Ở kiểu file accdb thì hoạt động tạm ổn, nhưng khi chuyển sang file accde thì ko hoạt động được vì kiểu file này các repordt ko cho Design.

    Nhờ ACE Pro cảq nhà chỉ giúp cách tự động chọn Printer cho Report để hoạt động tốt trong file accde. Cảm ơn cả nhà !
    Thân./.
  • RE: Tự động thiết lập máy in cho Report ?

    tranthanhan1962 > 13-10-19, 02:58 PM

    Khi chạy với tập tin accde, access đã khóa lại phần thiết kế nhằm không cho người sử dụng ảnh hưởng với thiết kế của tác giả (gồm có form, report và VBA) , đây là việc làm đúng đắn của Microsoft. Tuy nhiên người sử dụng vẫn có thể xử lý bằng cách vào page setup để chỉnh sửa, canh lề... trước khi in. Tuy nhiền, sau khi đóng report lại, nó sẽ trả về thông số thiết kế của tác giả, Bạn có thể tạo menu chuột phải có mục page setup (trong trường hợp tắt menu chuột phải của tập tin accde). Nếu không khi thiết kế phải tính toán thật kỹ, trừ hao lề ít nhất +1 cm, vì những máy in cũ khả năng bị lệch lề rất cao
  • RE: Tự động thiết lập máy in cho Report ?

    Minh Tiên > 13-10-19, 03:49 PM

    (13-10-19, 02:58 PM)tranthanhan1962 Đã viết: ... Tuy nhiên người sử dụng vẫn có thể xử lý bằng cách vào page setup để chỉnh sửa, canh lề... trước khi in. Tuy nhiền, sau khi đóng report lại, nó sẽ trả về thông số thiết kế của tác giả, Bạn có thể tạo menu chuột phải có mục page setup (trong trường hợp tắt menu chuột phải của tập tin accde). Nếu không khi thiết kế phải tính toán thật kỹ, trừ hao lề ít nhất +1 cm, vì những máy in cũ khả năng bị lệch lề rất cao

    Có nghĩa ko có cách nào tự động set Printer, lề in, máy in cho Report trong accde được ? Nếu thiết kế thủ công (Gọi Page Setup) mỗi khi mở Report dạng Defaut rồi chọn Printer, chỉnh trang in, ... thì sẽ rất vất vã vì có nhiều report, mỗi report theo 1 kiểu máy in riêng (Như In vã vạch trên máy Godex, In mã vạch trên máy Canon, In phiếu trên máy PRP , In phiếu trên máy Canon, ...

    Tiên nghỉ, khi khi mở Report với Máy in Default rồi gọi Page Setup để điều chỉnh chọn Máy in, canh lề trang bằng thủ công được thì cũng có cách mở Report dạng hide với Printer Default sau đó dùng code chạy ngầm gọi Page Setup, set lề, ... => hiển thị lại được (Ko biết cách nghỉ này có đúng ko).
    Nhờ các ACE Pro chỉ dẫn thêm. Cảm ơn nhiều !
  • RE: Tự động thiết lập máy in cho Report ?

    mrsiro > 13-10-19, 04:19 PM

    sau lần đầu chọn máy in thì bạn lưu vào table 1 cột là tên report, 1 cột là tên máy in, sau này khi mở report thì quét tên máy in tương ứng là ok.
  • RE: Tự động thiết lập máy in cho Report ?

    tranthanhan1962 > 13-10-19, 05:59 PM

    (13-10-19, 03:49 PM)Minh Tiên Đã viết: Có nghĩa ko có cách nào tự động set Printer, lề in, máy in cho Report trong accde được ? Nếu thiết kế thủ công (Gọi Page Setup) mỗi khi mở Report dạng Defaut rồi chọn Printer, chỉnh trang in, ... thì sẽ rất vất vã vì có nhiều report, mỗi report theo 1 kiểu máy in riêng (Như In vã vạch trên máy Godex, In mã vạch trên máy Canon, In phiếu trên máy PRP , In phiếu trên máy Canon, ...
    Tiên nghỉ, khi khi mở Report với Máy in Default rồi gọi Page Setup để điều chỉnh chọn Máy in, canh lề trang bằng thủ công được thì cũng có cách mở Report dạng hide với Printer Default sau đó dùng code chạy ngầm gọi Page Setup, set lề, ... => hiển thị lại được (Ko biết cách nghỉ này có đúng ko).
    Nhờ các ACE Pro chỉ dẫn thêm. Cảm ơn nhiều !
    Vấn đề là bạn không thể thiết kế lại trong đó có việc canh lề của report còn nếu đã xử lý OK cho từng report với từng máy in thì thêm menu chuột phải <Printer>, report nào in với máy in nào thì cứ chọn máy in đó, mà cái này nếu lười thì cũng không cần là menu chuột phải cho mất công,  chỉ cần Nhấn Ctrl+P chọn máy in của nó nó tự xử lý lại đúng như thiết kế. Ví dụ: bạn có 2 loại report 1 A4 cho máy in lazer (là máy in mặt định của windows luôn), 1 A3 in trên máy in kim (máy lazer không có khổ A3. Bình thường bạn sẽ in report A4 với máy lazer, khi mở report A3 tất nhiên report sẽ bị lọt lề (vì mặt định là máy in laze A4). Bạn chỉ cần bấm Ctrl + P rồi chọn lại printer Name <Tên máy in kim A3> màn hình sẽ giật một cái và hiện lại report với khổ giấy A3, Bạn chỉ cần OK là nó sẽ in với máy in kim A3. Cái này dùng để xử lý mấy phần mềm kế toán có in hóa đơn liên tục bố trí riêng với máy in kim 3 liên có khổ bất kỳ, còn những report báo cáo khác in bằng máy in lazer A4. Còn nếu muốn xử lý khi mở report nó chọn luôn máy in bạn có thể nghiên cứu cái này.
    https://support.microsoft.com/en-us/help...eport-in-m
    Mình thấy nó cũng hay nhưng vì tình hình thực tế nên không làm, giả sử công ty có máy in kim hiệu OKI bạn viết code cho máy in này, đùng một cái máy bị hỏng, công ty mua máy in kim Epson thay thế, vậy là 1/ viết lại code, 2/ gõ Ctrl P chọn máy in (vì đâu còn tên của máy in OKI trong printer của windows) => chọn phương pháp Ctrl + P cho nó sướng  007 , cững có thể bạn đặt lại một cái tên nào đó cho máy in kim, mỗi lần lỗi win thì phải cài win và và đặt lại tên máy in kim sau khi cài (đổi máy in mới cũng vậy) và cái công ty mua phần mềm của bạn cứ réo bạn về vụ này (thật mất công)
  • RE: Tự động thiết lập máy in cho Report ?

    Minh Tiên > 13-10-19, 06:07 PM

    (13-10-19, 04:19 PM)mrsiro Đã viết: sau lần đầu chọn máy in thì bạn lưu vào table 1 cột là tên report, 1 cột là tên máy in, sau này khi mở report thì quét tên máy in tương ứng là ok.
    Hiện mình đã sử dụng 1 table + 1 Form để thiết lập máy in cho các Report.
    Khi mở thiết lập máy in, trang in CT sẽ load toàn bộ máy in kết nối với PC, load toàn bộ tên các Report => Chọn kiểu giấy, lề giấy, máy in cho từng report ... => Table sẽ lưu các giá trị này vào. Khi mở Report nó sẽ đối chiếu thông số => Open View Design hide => Set Printer => Set kiểu trang, lề trang, ... => Preview hoặc Print.
    Tuy nhiên cách này chỉ ổn với accdb (Mình đang chạy tại Laptop mình tạm ổn), chứ accde thì ko chạy đc vì ko cho Design.
    Nếu mở từng report thiết lập => Lưu thì tốn thời gian, Sau đó chuyển sang accde ==> Chuyển sang máy khác thì phải làm lại từ đầu, hơn nữa chỉ gọi Page setup xem, in tạm mà ko lưu đc (Như a tranthanhnhan1962 đã nêu ở trên). Muốn lưu lại phải dùng accdb ... lưu => Chuyển sang accde mới ổn.
    Thân./.
  • RE: Tự động thiết lập máy in cho Report ?

    ongke0711 > 13-10-19, 06:28 PM

    Bạn có thử đổi Application.default printer cho report khi nó Open không? Set defaul printer thì không cần vô Design.
  • RE: Tự động thiết lập máy in cho Report ?

    Minh Tiên > 13-10-19, 08:51 PM

    (13-10-19, 06:28 PM)ongke0711 Đã viết: Bạn có thử đổi Application.default printer cho report khi nó Open không? Set defaul printer thì không cần vô Design.
    Tiên cũng đã thử nhưng nó ko qua máy khác bạn, chỉ hiện theo máy Default cũ, cái máy Default mới ko hiện thị nếu ko vào Design View, chỉ chọn thủ công mới đc.
  • RE: Tự động thiết lập máy in cho Report ?

    Minh Tiên > 13-10-19, 09:21 PM

    Tiên đang dùng code này để Set Printer cho report khi Open trong accdb:
    Mã:
    Function XemInReport(strTenReport As String, strType As String)
    On Error GoTo HandleError
       
        Dim prt As Printer
        Dim rpt As Report
        Dim strTenMayIn As String
        Dim strKieuGiay As String
        Dim strKichthuocGiay As String
        Dim lngLeTrai As Long
        Dim lngLePhai As Long
        Dim lngLeTren As Long
        Dim lngLeDuoi As Long
        strTenMayIn = Nz(DLookup("TenMayIn", strTableName, "TenReport='" & strTenReport & "'"), "")
        strKieuGiay = Nz(DLookup("KieuGiay", strTableName, "TenReport='" & strTenReport & "'"), "")
        strKichthuocGiay = Nz(DLookup("KichthuocGiay ", strTableName, "TenReport='" & strTenReport & "'"), "")
        lngLeTrai = Nz(DLookup("LeTrai", strTableName, "TenReport='" & strTenReport & "'"), 0)
        lngLePhai = Nz(DLookup("LePhai", strTableName, "TenReport='" & strTenReport & "'"), 0)
        lngLeTren = Nz(DLookup("LeTren", strTableName, "TenReport='" & strTenReport & "'"), 0)
        lngLeDuoi = Nz(DLookup("LeDuoi", strTableName, "TenReport='" & strTenReport & "'"), 0)
           
        If strTenMayIn = "" Then
            strText = strTenReport & " na2y chu7a d9u7o75c thie61t la65p Ma1y In: " & strTenMayIn
            MsgBox ftxt(strText, "Vni"), vbCritical + vbOKOnly
            Exit Function
        End If
    '===========
        If TonTai_MayIn(strTenMayIn) = False Then Exit Function
        DoCmd.OpenReport strTenReport, acViewDesign, , , acHidden
        Set rpt = Reports(strTenReport)
        Set rpt.Printer = Application.Printers(strTenMayIn)
        With rpt.Printer
        'Kieu giay:
            .Orientation = strKieuGiay
        'Loai giay:
            .PaperSize = strKichthuocGiay
            .PaperBin = acPRBNAuto
        'Kich thuoc le trang:
            .LeftMargin = lngLeTrai
            .RightMargin = lngLePhai
            .TopMargin = lngLeTren
            .BottomMargin = lngLeDuoi
        End With
           
        DoCmd.Save acReport, strTenReport
        If strType = "Xem" Then
            DoCmd.OpenReport strTenReport, acViewPreview, , , acWindowNormal
        ElseIf strType = "In" Then
            DoCmd.OpenReport strTenReport, acViewNormal, , , acWindowNormal
            DoCmd.Close acReport, strTenReport
        End If
       
    Exit Function
    HandleError:
        MsgError Err.Number, Err.Description, strName, "XemInReport"
        Exit Function
    End Function


    Nhờ cả nhà nghiên cứu giúp cho nó run trong accde !
    Thanks !
  • RE: Tự động thiết lập máy in cho Report ?

    ongke0711 > 13-10-19, 09:34 PM

    Cái hàm TonTaiMayIN code như thế nào bạn?
    Thay vì Set printer cho report thì Set Default Printer cho nguyên ứng dụng Access luôn thử.