PDA

View Full Version : چاپ در هر دو طرف کاغذ در اکسس



Nazir Ahmad
یک شنبه 16 تیر 1392, 10:47 صبح
سلام دوستان و اساتید گرامی
یه نقطه ضعف بسیار بزرگ در اکسس (حتی 2013)

نمیدونم شماهم تا حالا به این مشکل برخورد کردید که بخواید فرمها یا گزارشاتتون رو به شکل دو طرفه در کاغذ چاپ کنید یانه؟
مثلا میخوایم صفحات فرد در یک طرف و صفحات زوج در طرف دیگه کاغذ چاپ بشه .
این کار در دیگر برنامه مثل ورد یا اکسل و حتی در برنامه های کاربردی دیگه خیلی آسون و مثل آب خوردن انجام میشه مخصوصا در آفیس 2013 که سه سوت کار داره.
اما در اکسس من هرچی گشتم نتونستم پیداش کنم.
اگه دوستان میتونید کمک کنید.
من الان برای رفع مشکل تمام گزارشات رو اول به pdf ذخیره میکنم و بعدا چاپ میکنم که این کار طاقت فرساییه.

یا حق

Abbas Amiri
یک شنبه 16 تیر 1392, 18:41 عصر
سلام دوستان و اساتید گرامی
یه نقطه ضعف بسیار بزرگ در اکسس (حتی 2013)

نمیدونم شماهم تا حالا به این مشکل برخورد کردید که بخواید فرمها یا گزارشاتتون رو به شکل دو طرفه در کاغذ چاپ کنید یانه؟
مثلا میخوایم صفحات فرد در یک طرف و صفحات زوج در طرف دیگه کاغذ چاپ بشه .
این کار در دیگر برنامه مثل ورد یا اکسل و حتی در برنامه های کاربردی دیگه خیلی آسون و مثل آب خوردن انجام میشه مخصوصا در آفیس 2013 که سه سوت کار داره.
اما در اکسس من هرچی گشتم نتونستم پیداش کنم.
اگه دوستان میتونید کمک کنید.
من الان برای رفع مشکل تمام گزارشات رو اول به pdf ذخیره میکنم و بعدا چاپ میکنم که این کار طاقت فرساییه.

یا حق

از روال زیر که در Help اکسس آمده ، استفاده کنید :


Sub SetPrinter(strFormname As String)
DoCmd.OpenForm FormName:=strFormname, view:=acDesign, _
datamode:=acFormEdit, windowmode:=acHidden
With Forms(form1).Printer
.TopMargin = 1440
.BottomMargin = 1440
.LeftMargin = 1440
.RightMargin = 1440

.ColumnSpacing = 360
.RowSpacing = 360

.ColorMode = acPRCMColor
.DataOnly = False
.DefaultSize = False
.ItemSizeHeight = 2880
.ItemSizeWidth = 2880
.ItemLayout = acPRVerticalColumnLayout
.ItemsAcross = 6

.Copies = 1
.Orientation = acPRORLandscape
.Duplex = acPRDPVertical
.PaperBin = acPRBNAuto
.PaperSize = acPRPSLetter
.PrintQuality = acPRPQMedium
End With

DoCmd.Close objecttype:=acForm, objectname:=strFormname, _
Save:=acSaveYes

End Sub

زمانی که روال فوق را با آرگومان نام فرم یا ریپورت صدا میزنید دستور Duplex = acPRDPVertical. صفحات را بصورت پشت و رو وبا محوریت عمودی صفحات (که بطور معمول هم اینگونه بایدباشد) چاپ میکند .
البته این به شرطی است که پرینتر شما این قابلیت را داشته باشد .

قسمتهایی که نیاز ندارید ومی خواهید بصورت دیفالت باشد را حذف کنید

Nazir Ahmad
سه شنبه 18 تیر 1392, 08:47 صبح
ممنون دوست عزیز
اما من میخوام روشی باشه که بتونم در هنگام چاپ صفحات فرد رو انتخاب کنم و چاپ بشه و بعدا اونارو پشت و رو کنم و داخل چاپگر بذارم و دوباره صفحات زوج رو چاپ کنم/ چون برنامه ای که مینوسم شاید کاربرانی استفاده کنند که چاپگرهاشون اون قابلیتی که گفتید رو نداشته باشه.
کاری که تمام برنامه ها کاربردی به سادگی انجام میدن.
یعنی اول صفحات فرد و بعدا صفحات زوج
یا حق

RESMAILY
سه شنبه 18 تیر 1392, 18:29 عصر
به نام خدا
با سلام. با اجازه اقاي اميري. اين موضوعي كه مي فرماييد نقطه ضعف و قوت آكسس نيست كه. خودتان بايد يك الگوريتمي چيزي براي اين كار تهيه بفرماييد. اينكه مي گويم خودتان به دليل آن است كه شما با مشخصات برنامه و خواسته تان اشنايي داريد.
اين كار شدني است. همانطور كه در پرينت معمولي هم شما مي توانيد از روي صفحه مشخصات، دستور لازم را براي انتخاب صفحات بدهيد. مثلا يك حلقه بنويسيد براي صفحات فرد . يك حلقه ديگر براي صفحات زوج. بدهيد دست كاربر خودش انتخاب كند.

Nazir Ahmad
دوشنبه 24 تیر 1392, 14:15 عصر
به نام خدا
با سلام. با اجازه اقاي اميري. اين موضوعي كه مي فرماييد نقطه ضعف و قوت آكسس نيست كه. خودتان بايد يك الگوريتمي چيزي براي اين كار تهيه بفرماييد. اينكه مي گويم خودتان به دليل آن است كه شما با مشخصات برنامه و خواسته تان اشنايي داريد.
اين كار شدني است. همانطور كه در پرينت معمولي هم شما مي توانيد از روي صفحه مشخصات، دستور لازم را براي انتخاب صفحات بدهيد. مثلا يك حلقه بنويسيد براي صفحات فرد . يك حلقه ديگر براي صفحات زوج. بدهيد دست كاربر خودش انتخاب كند.

سلام دوست عزیز و ممنون
اگر ممکن است یه نمونه بذارید.
ممنون میشم.
--- امان از دست این مبتدی‌گری ما ---
یا حق

RESMAILY
دوشنبه 24 تیر 1392, 19:19 عصر
به نام خدا
با سلام. اي بابا نظيرجان سوالت كه حرفه اي بود! به هرحال اگر روزه حالي گذاشت چشم. اما شما توجه بفرما كه در آكسس دستور printOut داريم. شما دو تا تكمه در نظر بگير(يا هرجور كه خواستي) كه اول شماره صفحه را بخوانند و اگر فرد يا زوج بود(بلدي كه چه جوري؟) آنوقت به دلخواه بفرست روي پرينتر. دستوررا ببين:
DoCmd.OpenReport "Test", acViewPreview
.-.-.-.-.-.-
DoCmd.PrintOut acPages, p1, p1
البته دستور دوم داخل حلقه قرار مي گيرد. اين دوتا p1 هم يعني چاپ يك صفحه كه شما آدرس بدهيد. نكته اين است كه حتما گزارش را روي acViewPreview تنظيم كن. البته سوال شما چند پاسخ حرفه اي و پيچيده و دقيق تر هم دارد كه آن را ديده ام. كجا؟ فعلا حال ندارم بخدا! شايد اساتيد كمكي بكنند. ولي در همين حد مبتدي كه من و (بقول خودت تو) هستيم اين راه حل جواب مي دهد. برو به اميد خدا.

Abbas Amiri
سه شنبه 25 تیر 1392, 02:03 صبح
ضمن تشکر از دوست فاضل جناب اسماعیلی

کدهای زیر بیشتر ازجنبه آموزشی و سرگرمی مفید است ، چون امکانات سخت افزاری بهترین وسیله است .



Private Sub cmdDuplexPrint_Click()
Dim rpt As Report, rptName As String
rptName = "YourReportName"
DoCmd.OpenReport rptName, acViewPreview

Set rpt = Reports(rptName)
DoEvents
PrintOddPages rpt
MsgBox "برگه ها را برگردانید و در محل Tray چاپگر قرار دهید"
PrintEvenPages rpt
Set rpt = Nothing
End Sub

Sub PrintOddPages(rpt As Report)
Dim i As Integer
Dim iPages As Integer
DoCmd.SelectObject acReport, rpt.Name
iPages = IIf(rpt.Pages Mod 2 = 1, rpt.Pages, rpt.Pages - 1)
For i = iPages To 1 Step -2
DoCmd.PrintOut acPages, i, i
Next i

End Sub

Sub PrintEvenPages(rpt As Report)
Dim i As Integer
Dim iPages As Integer
DoCmd.SelectObject acReport, rpt.Name
iPages = rpt.Pages
For i = 2 To iPages Step 2
DoCmd.PrintOut acPages, i, i
Next i
End Sub


کدهای فوق امتحان نشده ولی احتمالا خطایی ندارد .