اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

ضبط التقرير على طابعة بعد تغيير البرنامج الى accde


الردود الموصى بها

اسعد الله اوقاتكم اخواني الكرام
عندما تكون تقارير البرنامج تطبع على اكثر من طابعة مثلا طابعة خاصة بالفواتير وطابعة خاصة ببطاقات العضويه وطابعة A4

طريقتي كالتالي
افتح البرنامج بامتداد ACCDB لكونه يرفض حفظ الاعدادات اذا كان الامتداد ACCDEثم اقوم بضبط اعدادات الفاتوره من خلال اعدادات الصفحه - تبويب الصفحه - اختيار طابعة  معينه
ثم اقوم بضبط تقرير البطاقات ايضا نفس الطريقه
واترك بقية التقارير على الطابعة الافتراضيه A4

ثم اقوم بتغيير امتداد البرنامج الى ACCDE وتنزيله

ولكن هذا غير عملي 100% حيث انه لو قام العميل بتغيير فرضا اسم الطابعه او اراد اضافة تقرير الى نفس الطابعة ليطبع مباشره لابد ان يتواصل معي ثم اقوم بالخطوات التي ذكرتها سابقاً

المطلوب
هل من طريقة او كود يظر مربع اعدادات الصفحه (الصوره بالمرفق ) للتقرير دون الدخول الى تصميم البرنامج ويتم حفظ الاعدادات اذا كان الامتداد ACCDE

 

وشاكر للجميع
 

 

اعدادات الصفحه.rar

تم تعديل بواسطه سلمان الشهراني
رابط هذا التعليق
شارك

التغيير في التصميم  لا يمكن  بعد الحماية

ولكن تستطيع عمل التقارير  حسب الطابعة ، فتقرير البطاقة لايمكن طباعته الا من طابعة البطاقات

والتقارير الاخرى من الطابعة A4 .. وهكذا ...

ويتم تغيير الطابعة من  نموذج التقارير  بحيث يختار الطابعة الافتراضية  قبل  امر الطباعة

  • Like 2
رابط هذا التعليق
شارك

8 ساعات مضت, ابوخليل said:

التغيير في التصميم  لا يمكن  بعد الحماية

ولكن تستطيع عمل التقارير  حسب الطابعة ، فتقرير البطاقة لايمكن طباعته الا من طابعة البطاقات

والتقارير الاخرى من الطابعة A4 .. وهكذا ...

ويتم تغيير الطابعة من  نموذج التقارير  بحيث يختار الطابعة الافتراضية  قبل  امر الطباعة

حياك الله استاذنا الغالي ابو خليل
صحيح انه لايمكن التغيير في التصميم بعد الحمايه ولكن ماكنت اقصده
انه عندما ارغب في جعل تقرير معين يطبع مباشره على طابعة معينه فلابد ان يفتح البرنامج في وضع التصميم ثم معاينة للتقرير قبل الطباعة ثم كلك يمين ثم اعدادات الصفحه ثم اختيار تبويب صفحه ثم اختيار طابعة معينه ولابد ان يكون البرنامج امتداد accdb

عندما يكون امتداد accde يتم فتح البرنامج وعمل كل ماذكر سابقا ولكن عند اغلاق البرنامج وتشغيله تجد ان التقرير يعود الى الطابعة الافتراضيه

المطلوب هل من طريقه جعل التقرير يطبع مباشره على طابعة معينه من خلال مثلا معاينة التقرير ثم كود يظهر مربع اعداد الصفحه وامكانيه تغيير الطابعة ليتم تثبيت التقرير عليها او هل من الممكن حفظ الطابعات في جدول مثلا وتحديد التقرير المطلوب من خلال اسم الطابعه المخزن بالجدول
 

رابط هذا التعليق
شارك

لا اعرف هل انا فهمت جيدا ام لا 
لكن حسب
من الاحسن للعملية طباعة ان تعمل كومبوبوكس ليأخذ اسماء كل الطابعات المقترنة 
و تختار الطابعة المناسبة للطباعة من كومبوبوكس

  • Like 1
رابط هذا التعليق
شارك

11 ساعات مضت, سلمان الشهراني said:

اسعد الله اوقاتكم اخواني الكرام
عندما تكون تقارير البرنامج تطبع على اكثر من طابعة مثلا طابعة خاصة بالفواتير وطابعة خاصة ببطاقات العضويه وطابعة A4

طريقتي كالتالي
افتح البرنامج بامتداد ACCDB لكونه يرفض حفظ الاعدادات اذا كان الامتداد ACCDEثم اقوم بضبط اعدادات الفاتوره من خلال اعدادات الصفحه - تبويب الصفحه - اختيار طابعة  معينه
ثم اقوم بضبط تقرير البطاقات ايضا نفس الطريقه
واترك بقية التقارير على الطابعة الافتراضيه A4

ثم اقوم بتغيير امتداد البرنامج الى ACCDE وتنزيله

ولكن هذا غير عملي 100% حيث انه لو قام العميل بتغيير فرضا اسم الطابعه او اراد اضافة تقرير الى نفس الطابعة ليطبع مباشره لابد ان يتواصل معي ثم اقوم بالخطوات التي ذكرتها سابقاً

المطلوب
هل من طريقة او كود يظر مربع اعدادات الصفحه (الصوره بالمرفق ) للتقرير دون الدخول الى تصميم البرنامج ويتم حفظ الاعدادات اذا كان الامتداد ACCDE

 

وشاكر للجميع
 

 

اعدادات الصفحه.rar

شوف المرفق ده ممكن يعجبك ويفيدك

Full Control Of Print Report.rar

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

يمكن إعادة ضبط الطابعة الافتراضية لأكسس برمجيا على النحو التالي

Function UF_REPORT_PROCESS(Optional REPORT_VIEW As AcView)
    Dim CUR_PRINTER As Printer
    
    '-- GET CURRENT DEFAULT PRINTER
    Set CUR_PRINTER = Application.Printer
    
    '-- SET NEW DEFAULT PRINTER
    Application.Printer = Application.Printers(Me.CMB_PRINTER_LIST.Value)
    
    '-- PRINT REPORT
    DoCmd.OpenReport Me.LST_REPORT_LIST, REPORT_VIEW
    
    '-- RETURN TO SYSTEM DEFAULT PRINTER
    Application.Printer = CUR_PRINTER

End Function

 

وهذا مثال مبسط: SET DEFAULT PRINTER.zip

  • Like 4
رابط هذا التعليق
شارك

في 9/29/2017 at 20:20, أيمن عبادي said:

أخي أبا جودي 

المرفق الذي قمت بإرفاقه عبارة عن صور فقط 

فكيف يمكن تطبيق ذلك عمليا ؟

صورة فقط ؟

انا مش فاهم يعنى ايه صورة فقط ؟

رابط هذا التعليق
شارك

  • 6 months later...
50 دقائق مضت, سلمان الشهراني said:

هل من حل لضبط التقرير على طابعه بعد تحويله الى accde
ليتم طباعة مباشره

لماذا لا تقوم بفتح التقرير عن طريق ملف pdf

ومن هناك يمكنك اخيار الطابعة التي تريد

  • Like 1
رابط هذا التعليق
شارك

منذ ساعه, kaser906 said:

لماذا لا تقوم بفتح التقرير عن طريق ملف pdf

ومن هناك يمكنك اخيار الطابعة التي تريد

الله يعطيك العافيه وشاكر لتفاعلك
بس عندي مثلا برنامج نقاطع بيع وعند اصدار الفاتوره لازم تكون الطباعه مباشرة
لان فتح التقرير ثم اختيار الطابعه ياخذ وقت وراح يكون ممل للمستخدم

رابط هذا التعليق
شارك

مرحبا اخ سلمان

لم تعلق على مشاركة الاخ ابو ابراهيم

هنا يمكن لك فائدة

 وان احسنت الفهم فاعتد عليك تخزين اسم الطابعو في جدول ومن خلال المشاركة اعلاه او مشاركة ابو ابراهيم

تحياتي

  • Like 1
رابط هذا التعليق
شارك

في ٢٧‏/٤‏/٢٠١٨ at 02:35, رمهان said:

مرحبا اخ سلمان

لم تعلق على مشاركة الاخ ابو ابراهيم

هنا يمكن لك فائدة

 وان احسنت الفهم فاعتد عليك تخزين اسم الطابعو في جدول ومن خلال المشاركة اعلاه او مشاركة ابو ابراهيم

تحياتي


الله يعطيك الف عافيه
الله يعطيك العافيه واعتذر من الاستاذ ابراهيم لعدم التعليق ولانقطاعي عن الموضوع وعدم انتباهي

بنسبه للمرفق الخاص بالاستاذ ابراهيم
جدا ممتاز ولكن يحفظ كل التقارير الموجوده بالبرنامج على الطابعه التي تم اختيارها
ولو افترضنا اانه يوجد ثلاث فواتير  وارغب ان تطبع كل فاتوره على طابعه معينه فلن تتم حسب مرفق الاخ ابرهيم
 

رابط هذا التعليق
شارك

13 ساعات مضت, سلمان الشهراني said:


بنسبه للمرفق الخاص بالاستاذ ابراهيم
جدا ممتاز ولكن يحفظ كل التقارير الموجوده بالبرنامج على الطابعه التي تم اختيارها
ولو افترضنا اانه يوجد ثلاث فواتير  وارغب ان تطبع كل فاتوره على طابعه معينه فلن تتم حسب مرفق الاخ ابرهيم
 

الله يعافيك اخ سلمان

لا حظ ان فكرة ابو ابراهيم عبارة عن دالة تستخدمها باي مكان وهي تقوم بتخزين الطابعة الافتراضية الحالية قبل تغيير الطابعة ومن ثم اختيار الطابعة ثم اعادة الطابعة الافتراضية

هنا تستطيع استخدامها لكل تقرير على حدة . 

اعتقد حاجتك لم تكتمل مع مثال ابو ابراهيم لانه يتم اختيار الطابعة كل مرة يريد ان يطبع التقرير وانت تريد تعريف الطابعة مرة واحدة عند العميل لكل تقرير مختلف

هنا عليك بتخزين اسم التقرير بجدول ويبقى عمود اسم الطابعة فارغ يتم تعبئته حسب العميل او حسب كل طابعة عند العميل يتم اعداده مرة واحدة عند تحميل البرنامج لاول مرة . يمكن تضيف ذكاء شوية بان البرنامج يشيك ان كل تقرير طابعنه موجوده فلو فقدت طابعة تظهر رسالة لتعبئة تطابعة هذا التقرير

بمعنى فكرة الحل عبارة عن : كود ابو ابراهيم + تخزين بجدول   

نفس افكرة اعلاه استخدمتها بتوزيع طلب العميل على طابعات نوع الطلب . هنا تقرير واحد على اكثر من طابعة وحسب الاصناف

تحياتي

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

13 ساعات مضت, سلمان الشهراني said:

بنسبه للمرفق الخاص بالاستاذ ابراهيم
جدا ممتاز ولكن يحفظ كل التقارير الموجوده بالبرنامج على الطابعه التي تم اختيارها
ولو افترضنا اانه يوجد ثلاث فواتير  وارغب ان تطبع كل فاتوره على طابعه معينه فلن تتم حسب مرفق الاخ ابرهيم
 

أهلا بك سلمان..

كان المقصود من مشاركتي هو التطبيق العملي لفكرة الاستاذ شيفان فقط..

أما بالنسبة لتثبيت وضعية الطابعة الافتراضية لكل تقرير فسوف يكون حسب المفهوم التالي..

- تحديد أنواع الطابعات التي سوف يستخدمها البرنامج (النفثية، الليزرية، النقطية، الباركود،.. ألخ)

- تحديد اسم الطابعة لكل نوع من الانواع السابقة.. 

- تحديد اسم الطابعة لكل تقرير طالما الطابعة متوفرة؛ يجب الاخذ بعين الاعتبار تغير اسماء الطابعات وبالتالي نحن بحاجة إلى معرفة ما إذا كانت الطابعة لا تزال متوفرة عند إقلاع البرنامج أو عند تحميل التقرير على الأقل..

- إيجاد طريقة لتثبيت القيمة الافتراضية وفحصها في كل مرة وفقا للمفاهيم السابقة..

سوف أقوم بترجمت المفاهيم السابقة عمليا في المشاركة التالية بإذن الله..

 

  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

في ٢٨‏/٤‏/٢٠١٨ at 17:23, رمهان said:

هنا عليك بتخزين اسم التقرير بجدول ويبقى عمود اسم الطابعة فارغ يتم تعبئته حسب العميل او حسب كل طابعة عند العميل يتم اعداده مرة واحدة عند تحميل البرنامج لاول مرة . يمكن تضيف ذكاء شوية بان البرنامج يشيك ان كل تقرير طابعنه موجوده فلو فقدت طابعة تظهر رسالة لتعبئة تطابعة هذا التقرير

أهلا أستاذ رمهان..

أرى أن أفكارنا متطابقة تماماً!

5 ساعات مضت, سلمان الشهراني said:

الله يعطيكم الف عافيه
بنسبه لحبيبنا واستاذنا الاخ رمهان جميل جدا وسوف احاول باذن الله

نعم.. فكرة الأستاذ رمهان سهلة التطبيق ولا تحتاج إلى شفرة معقدة.

في ٢٨‏/٤‏/٢٠١٨ at 17:23, رمهان said:

يمكن تضيف ذكاء شوية بان البرنامج يشيك ان كل تقرير طابعنه موجوده فلو فقدت طابعة تظهر رسالة لتعبئة تطابعة هذا التقرير

سيتضمن الجدول عمودين على الأقل عمود يعرف الطابعة والعمود  الآخر يحمل اسم الطابعة؛ يستخدم معرف الطابعة كمؤشر لاسم الطابعة عند التعيين..

 

:: الفكرة الأساسية هي أننا بحاجة إلى متغير يمكن أعادة تغير قيمته برمجيا..

كان بالإمكان استخدام ثوابت عامة تحمل أسماء الطابعات ومن ثم تعيين هذا الثابت كطابعة إفتراضية عند طبعاعة التقرير، ونقوم يتغير قيمة هذا الثابت في كل مرة يتغير فيها اسم الطابعة!.. نعم يكون هذا مقبولا إذا كان المستخدم هو المبرمج. :closed:  .: هذا الإجراء غير قابل للتطبيق.

:: يوفر أكسس ما يسمى بالخصائص المعرفة من قبل المبرمج؛ هذه الخصائص يمكن تعريفها والتحكم بها وإعادة اسناد قيمها برمجيا.. وتظل ثابتة في قاعدة البيانات إلى أن يقوم المبرمج بتغير قيمها أو حذفها نهائياً.

سوف أقوم باستخدام هذه الطريقة مقابل جدول البيانات لأني أتوقع من الأستاذ رمهان أن يقوم بتطبيق الفكرة عن طريق جدول البيانات... :wink2:

الشفرة التي تعتني بإضافة وتعديل وحذف الخصائص المعرفة من قبل المستخدم مسردة في التالي..


Sub ADD_PROPERTY(prpName As Variant, prpValue As Variant)
On Error GoTo ERR_HANDLER
  Dim DB As DAO.Database, PRP As DAO.Property
  Set DB = CurrentDb
  Set PRP = DB.CreateProperty(prpName, dbText, prpValue)
  DB.Properties.Append PRP
  
EXIT_SUB:
  Set DB = Nothing
  Set PRP = Nothing
  Exit Sub
ERR_HANDLER:
  If Err.Number = 3367 Then
      'MsgBox Err.Number & vbCrLf & Err.Description
      Resume Next
  Else
      MsgBox Err.Number & vbCrLf & Err.Description
  End If
End Sub

Sub SET_PROPERTY_VALUE(PRP_NAME, PRP_VALUE)
  Dim DB As DAO.Database
  Set DB = CurrentDb
  DB.Properties(PRP_NAME).Value = PRP_VALUE
  DB.Properties.Refresh
  Set DB = Nothing
End Sub

Sub REMOVE_PROPERTY(PRP_NAME)
  Dim DB As DAO.Database
  Set DB = CurrentDb
  PRP_NAME = DB.Properties(PRP_NAME).Name
  DB.Properties.Delete PRP_NAME
  Set DB = Nothing
End Sub

+ لا أحبذ أن تكون صلاحية الإضافة والحذف متوفرة للمستخدم.. أما بالنسبة للمبرمج فيمكنه إنشاء نموذج يقوم بواسطه من إدارة هذه الخصائص، أو عن طريقة نافذة تحرير الشفرة السريعة.

 + الخصائص التي قمت بإنشاءها بسيطة وغير احترافية، وقمت بكتابتها بالعربي.. كل ذلك من أجل توصيل الفكرة فقط... أسماء الخصائص التي أنشأتها هي: طابعة ليزرية، طابعة نفثية، طابعة نقطية، طابعة ترميزية.

+ سوف تكون قيمة كل خصيصة من هذه الخصائص اسما للطابعة التي تلائم هذه الخصيصة..

+ قمت بإنشاء وظيفتين دوارتين: ألأولى تبحث عن الخصائص التي أنشأتها والقيمة التي تحمها؛ ثم تمررها إلى الوظيفة الثانية التي تبحث في الطابعات التي يوفرها النظام؛ فإذا كانت قيمة الخصيصة خالية أو تحمل اسما لطابعة غير متوفرة في النظام فإن الوظيفة الثانية تعيد قيمة خاطئة؛ وبناء على هذه القيمة يطلق البرنامج نافذة تحث المستخدم بتعيين اسما للطابعة الجديدة لكل خصيصة تحمل قيمة خاطئة.. (الوظيفة الثانية تعمل من داخل الوظيفة الألى).

+ إذا قام المستخدم بتعيين  اسما جديد سوف تختفي الخصيصة من القائمة..

للمعلومية لم أقم بإنشاء نموذج لإدارة قيم هذه الخصائص من قبل المستخدم بطريقة منظمة.. أعتذر عن ذلك.

الشفرة المتعلقة بالوظيفتين في المسرد التالي

Function ASSIGN_CUSTOM_PRINTER()
  Dim PR As Property
  Dim PT As Variant, I As Integer
  For Each PR In CurrentDb.Properties
    If PR.Name Like "طابعة*" Then
      If IS_PRINTER_AVAILABLE(PR.Value) = False Then
        PT = PT & I & "," & PR.Name & "," & PR.Value & ","
      End If
    End If
    I = I + 1
  Next
  'Debug.Print PT
  ASSIGN_CUSTOM_PRINTER = PT
End Function

Function IS_PRINTER_AVAILABLE(PRNT_NAME) As Boolean
  IS_PRINTER_AVAILABLE = False
  Dim PRNT As Printer
  For Each PRNT In Printers
    If PRNT.DeviceName = PRNT_NAME Then
      IS_PRINTER_AVAILABLE = True
    End If
  Next
End Function

تعيد الوظيفة الأولى: رقم الخصيصة، اسم الخصيصة والقيمة التي تحملها لكل الخصائص ذات القيمة الخاطئة؛ وبناءً عليه أقوم بفحص طول الببانات فإذا كان أكبر من صفر فهذا يعني أن هناك خصائص تحمل بيانات غير مطابقة..

البيانات العائدة من الوظيفة الأولى أستخدمتها كمصدر بيانات لعنصر قائمة التحرير والسرد في النموذج الذي يظهر كمربع حوار يحث المستخدم بتعيين القيم الجديد.. الشفرة موضحة في المسرد التالي..

Sub SHOW_PRINTER_LIST()
  If Len(ASSIGN_CUSTOM_PRINTER) Then
    Call CUSTOM_PRINTER_DIALOG
  End If
End Sub


Sub CUSTOM_PRINTER_DIALOG()
    F.lbPrintersType.RowSource = ""
    F.lbPrintersType.RowSource = ASSIGN_CUSTOM_PRINTER
    F.Visible = True
End Sub

الشفرة التالية هي لفحص القيم عند إقلاع البرنامج وفتح نموذج خدمة الطباعة

Function INITIALIZE()
  DoCmd.OpenForm "FRM_PRINT_CERVICES"
  Call SHOW_PRINTER_LIST
End Function

الشفرة التالية لتعيين الطابعة الافتراضية قبل الطباعة

Sub DEFAULT_PERINTER(PRINTER_NAME)
  Set CURRENT_PRINTER = Application.Printer
  Application.Printer = Application.Printers(CurrentDb.Properties(PRINTER_NAME).Value)
End Sub

 

:: هذا كل ما يتعلق بالفكرة وتطبيقها.. مع المثال..

SET DEFAULT PRINTER.accdb

  • Like 1
رابط هذا التعليق
شارك

بعد اذن اساتذتي  شوف المرفق ده فيه طريقه مبسطه جدا طبعا ساعدني فيها استاذي الفاضل ابو خليل

انشاء الله تظبط معك

test1.rar

تم تعديل بواسطه حسين العربى
  • Like 1
رابط هذا التعليق
شارك

3 ساعات مضت, سلمان الشهراني said:

مشكور يالغالي
ولكن تظهر الرساله  التاليه
ثم لاثقوم بالتنفيذ

2018-05-01_07-07-48.jpg.c185ab05b6a66be38a40ab39f4197a4a.jpg

 

أحتاج إلى نص الرسالة أستاذ سلمان..  

رابط هذا التعليق
شارك

أهلا بك سلمان..

أولا يجب أن يكون ظهور نموذج تعيين الطابعات الافتراضية من خلال إقلاع البرنامج فقط، لأن ظهوره مبني على أحد أمرين: 

_ أنك لم تقم بتعيين الطابعة الافتراضية.

_ أو أن الطابعة المعينة غير متوفرة في النظام حاليا.

:: هناك إشكالية مع قائمة التحرير والسر، ومربع التحرير والسرد إذا كانت وجهتها من اليمين إلى اليسار مع الخصيصة: العمود المنضم Bound Column  إذا كان مصدر الصف يتكون من أكثر من عمود. ولتصحيح الخطأ المحتمل الذي وقع في الشفرة فيجب نعيين العمود الذي يحمل القيمة الافتراضية برمجيا على النحو التالي

Private Sub cmAssign_Click()
  Call SET_PROPERTY_VALUE(CInt(Me.lbPrintersType.Column(0)), Me.cbPrintersName)
  Call LB_UPDATE
End Sub

قمت بإجراء بعض التحسينات في المرفق التالي

SETUP DEFAULT PRINTER.accdb

  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information