اذهب الي المحتوي
أوفيسنا

خطأ عن تكرار تنفيذ كود تصدير PDF


ahmad_3011

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

السلام عليكم ورحمة الله وبركاته

اقوم بتكرار لووب على هذا الكود لكى يعمل Export PDF ولكن يعطى خطأ OutputTo PDF; The OutputTo action was canceled واحيانا اخرى قاعدة البيانات تعمل restart

 

DoCmd.OpenReport reportName, acViewPreview, , reportCriteria, acHidden
DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, Application.CurrentProject.Path & "\Mail\Report - " & Lst1.Column(1) & " - " & Lst2.Column(4) & ".pdf"
DoCmd.Close acReport, reportName, acSaveNo
 
ما احتمال الخطأ
رابط هذا التعليق
شارك

وعليكم السلام 🙂

 

اول خطوة تعملها هو تصفية برنامجك من الشوائب ، عن طريق

 

.

واذا لازالت المشكلة مستمرة ، فنريد يا المرفق ، ويا الكود كاملا للتقرير (الكود اعلاه يصدر ملف pdf مرة واحدة ، بينما انت تقول انك تصدره عدة مرات) .

 

جعفر

 

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

18 ساعات مضت, ahmad_3011 said:
DoCmd.OpenReport reportName, acViewPreview, , reportCriteria, acHidden
DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, Application.CurrentProject.Path & "\Mail\Report - " & Lst1.Column(1) & " - " & Lst2.Column(4) & ".pdf"
DoCmd.Close acReport, reportName, acSaveNo
 

سأحاول التفكير بصوت مرتفع 🙂
1 -  محاولة أولى:

أزل acHidden و أزل السطر الثالث لتستمتع برؤية تقرير الأكسس وبعد تصديره اقفله يدويا.

2 - محاولة ثانية:
دع عنك خيارات المحاولة الأولى ثم
احشر الأمر DoEvents  بعد سطر فتح التقرير وقبل سطر تصديره أي سيكون ترتيبه الثاني بين الأربعة أسطر.

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

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

شكرا على المجهود ولكن للاسف كلا الطريقتين لم تفلح يبدو ان المشكلة ان الرامات يحدث فيها ضغط شديد نتيجة لتصدير اكتر من 1000 تقرير وكل تقرير يحتوى على اكثر من تقارير فرعية ووحوالى 3 لوجو وبعد حوالى 150 تقرير تقريبا يزيد او ينقص يتم عمل ريستارت للاكسس، مع العلم ان الكود بشكل عام ليس به مشكلة لان نفس الكود يقوم بتصدير اكتر من 2000 تقرير فى حالة عدم وجود تقارير فرعية بالتقرير المصدر. السؤال هنا هل يوجد كود مثلا لعمل restart للرام

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

في ٨‏/٣‏/٢٠٢١ at 15:29, jjafferr said:

واذا لازالت المشكلة مستمرة ، فنريد يا المرفق ، ويا الكود كاملا للتقرير (الكود اعلاه يصدر ملف pdf مرة واحدة ، بينما انت تقول انك تصدره عدة مرات)

 

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

On Error Resume Next

Dim x As Integer

x = MsgBox("Are you sure you want to send all reports ?", vbYesNo, "Sending Report")

If x = 7 Then

MsgBox "Sending mail process has been cancelled", vbInformation, "Cancel Sending"

Else

Dim XG As Long

XG = LstG.ListIndex

For XG = 0 To LstG.ListCount - 1

LstG.SetFocus

LstG.ListIndex = XG

LstG.Selected(XG) = True

Dim XC As Long

XC = LstC.ListIndex

For XC = 0 To LstC.ListCount - 1

LstC.SetFocus

LstC.ListIndex = XC

LstC.Selected(XC) = True

Dim XS As Long

XS = LstS.ListIndex

For XS = 0 To LstS.ListCount - 1

LstS.SetFocus

LstS.ListIndex = XS

LstS.Selected(XS) = True

Dim reportName As String

Dim reportCriteria As String

If LstG.Value = 4 Then

reportName = "E1"

reportCriteria = "SID=" & LstS.Value

ElseIf LstG.Value = 5 Then

reportName = "E2"

reportCriteria = "SID=" & LstS.Value

Else

reportName = "E3"

reportCriteria = "SID=" & LstS.Value

End If

DoCmd.OpenReport reportName, acViewPreview, , reportCriteria, acHidden

DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, Application.CurrentProject.Path & "\Mail\Report - " & LstC.Column(1) & " - " & LstS.Column(4) & " " & LstS.Column(5) & ".pdf"

DoCmd.Close acReport, reportName, acSaveNo

reportName = "E-Comments A-ZFull"

reportCriteria = "SID=" & LstS.Value

DoCmd.OpenReport reportName, acViewPreview, , reportCriteria, acHidden

DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, Application.CurrentProject.Path & "\Mail\Comment - " & LstC.Column(1) & " - " & LstS.Column(4) & " " & LstS.Column(5) & ".pdf"

DoCmd.Close acReport, reportName, acSaveNo

Next XS

Next XC

Next XG

MsgBox "All reports exported", vbOKOnly, "Exported Successfully"

End If

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

في ٨‏/٣‏/٢٠٢١ at 19:02, ahmad_3011 said:

السلام عليكم ورحمة الله وبركاته

اقوم بتكرار لووب على هذا الكود لكى يعمل Export PDF ولكن يعطى خطأ OutputTo PDF; The OutputTo action was canceled واحيانا اخرى قاعدة البيانات تعمل restart

 

DoCmd.OpenReport reportName, acViewPreview, , reportCriteria, acHidden
DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, Application.CurrentProject.Path & "\Mail\Report - " & Lst1.Column(1) & " - " & Lst2.Column(4) & ".pdf"
DoCmd.Close acReport, reportName, acSaveNo
 
ما احتمال الخطأ

أخي الكريم

جرب استبدل كامل الكود بالسطر التالي

DoCmd.OutputTo acOutputReport, reportName, "PDFFormat(*.pdf)", CurrentProject.Path & "\Mail\Report - " & Lst1.Column(1) & " - " & Lst2.Column(4) & ".pdf", False, "", , acExportQualityPrint

 

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

شكرا اخى د. كاف ولكن ما زال يعطى نفس النتيجة، اعتقد الكود ليس به خطأ لانه يعمل بكفاءة اذا كان التقرير الذى يتم تصديره لا يحتوى على تقارير فرعية subreports ولكن واقع الحال ان التقرير يحتوى على اكثر من 5 تقارير فرعية واعتقد هذا هو السبب الرئيسى للمشكلة واحاول ان اضع ضمن الكود سطر يقوم بافراغ الرامات او شئ من هذا القبيل مع العلم ان me.refresh and me.requery  لا يعطى نتيجة ايضا

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

اخي احمد 🙂

 

الكود لا يوجد به مشكلة ، فبدأت بالبحث في الانترنت 🙂

الظاهر ان هذه المشكلة موجودة في الاكسس 2016 ، وليس لها علاقة بكمية المواد في التقرير ، وانما بالوقت:

- في بعض نسخ 2016 ، من الوقت الذي تفتح فيه البرنامج ، الى تصدير آخر تقرير الى pdf ، اذا وصل الوقت الى 8 دقائق ، يقفل عندك البرنامج !!

- وفي نسخة الاكسس في الاوفيس 365 ، الوقت هو 80 دقيقة !!

 

والحل ، يا تنصب اوفيس اقل من 2016 ، او

تنصب التحديث من هنا:  Description of the security update for Office 2016: June 13, 2017 (microsoft.com)

 

جعفر

 

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

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

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

عفوا ، كان المفروض اقول المشكلة في 2016 فأعلى 🙂

وهذا رابط الموضوع: Access 2016 accde "DoCmd.OutputTo acOutputReport, , - Microsoft Community

فهل انزلت التحديث الذي اعطيتك رابطه؟ اذا ما بينفعك ، ما بيضرك ، فجربه 🙂

 

في تصوري ، الموضوع محصور في:

1. البرنامج/الكود ، وما شفنا شيء خاص في الكود اللي ممكن يكون السبب ،

2. الكمبيوتر ، نعم تقدر تستخدم وندوز 64بت واكثر من 4 جيجا رام ، بحيث يصبح للاكسس اكبر قدر من الرام (الاكسس لا يستفيد من الاوفيس 64بت) ،

3. خلل في الاكسس ، وهذا ما تمت الاشارة اليه !!

 

58 دقائق مضت, ahmad_3011 said:

ايقاف مؤقت للتصدير ولنقل 10 ثوانى وبعددها يتم استئناف التصدير لكى نتغلب على مشكلة الوقت

الوقت مثل ما اخبرتك (اقرأ الرابط مال 8 صفحات اللي ارفقته لك ، فستجده مطابق لمشكلتك ، وحتى توقيف الوقت تم استخدامه) :

14 ساعات مضت, jjafferr said:

من الوقت الذي تفتح فيه البرنامج ، الى تصدير آخر تقرير الى pdf

اما اذا تريد تقسيم الطباعة ، فممكن تقسيمه الى:

بدل
For XG = 0 To LstG.ListCount - 1
For XC = 0 To LstC.ListCount - 1
For XS = 0 To LstS.ListCount - 1


استعمل
For XG = Start_XG To LstG.ListCount - 1
For XC = Start_XC To LstC.ListCount - 1
For XS = Start_XS To LstS.ListCount - 1

 

جرب فقط في اول دوران: XG لأنها الاطول ،

احفظ قيمة Start_XG في الجدول ، واعمل في نهاية الكود انه يعمل دورتين/ثلاث (هذا يعتمد على تجربتك) ، ثم يغلق البرنامج ، ثم لما تشغله من جديد كذلك يعمل دورتين/ثلاث ، ثم يغلق البرنامج ، وكل مرة Start_XG يكون فيه الرقم التالي (او اللي بعده) ،

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

 

هل هذا الحل مثالي ، طبعا لا ، وارجع واقول ، جرب رابط التحديث قبل كل شيء 🙂

 

جعفر

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

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

تحياتى لحضرتك

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

53 دقائق مضت, ahmad_3011 said:

لانه هيحتاج افتحه بشكل يدوى

ممكن تعمله بشكل تلقائي :

  1. اعمل نسخة من البرنامج ، واجعل هذه النسخة لهذه التقارير فقط ، ولنسميه Export_pdf.accdb ،
  2. اعمل ماكرو بإسم Export_pdf ، وفيه يكون امر للتقرير انه يشغل تقرير تصدير ملفات pdf ،
  3. في التقرير اعمل امر لكي يقفل البرنامج (طبعا بعد ان يحفظ قيمة Start_X في الجدول) ،
  4. الآن اعمل برنامج آخر خارجي لا علاقة له ببرنامجك اعلاه ، واعمل نموذج بفتح لما يغمل البرنامج ،
  5. اعمل حدث عند تحميل النموذج ، وخلي فيه هذا الكود:
    dim i as integer
    for i = 1 to 10
    
    shell_n_wait "C:\Program Files\Microsoft Office\OFFICE12\MSACCESS.EXE" "C:\xx\Export_pdf_files.accdb" /x Export_pdf , vbhidden
    
    next i
    
    docmd.quit

     

  6. الدالة shell_n_wait موجودة في البرنامج الموجود في اول مشاركة لي ، اما الرقم 10 فهي قيمة (LstG.ListCount - 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