استفاده از توابع پارامتریک در طراحی گزارشات چاپی تدبیر – بخش اولتذکر: به لحاظ نیاز به آشنایی با SQL، نحوۀ طراحی گزارشات چاپی تدبیر و همینطور آشنایی با مفاهیم تحلیل و طراحی پایگاه دادهها، بحث این نوشته؛ زیرساختی و مخاطب آن -بیشتر- مدیران فنی سیستم مالی تدبیر و نمایندگان و کارکنان بخشهای استقرار و پشتیبانی شرکت پردازش موازی سامان هستند. کاربری عادی نرمافزارهای تدبیر نیازی به یادگیری این مفاهیم ندارد.
یکی از خواستههای همیشگی کاربران نرمافزارهای مبتنی بر پایگاه دادهها، امکان نمایش انواع مختلف فیلدهای اطلاعاتی در گزارشات چاپیِ فرمهای عملیاتی یا گزارشی است. برخی از این فیلدها مرتبط با موضوع گزارش چاپی هستند (مثل انواع اطلاعات مربوط به «فاکتور فروش» در گزارش چاپی فاکتور فروش) و انتظار میرود نرمافزار، امکان نمایش این دسته از اطلاعات را در گزارش چاپی بدون هیچگونه محدودیتی فراهم کند. اما، بعضاً، درخواستها دربردارندۀ امکان نمایش فیلدهای اطلاعاتی به دست آمده از محاسبات پیچیده و یا مربوط به فیلدهای اطلاعاتی نامرتبط یا با ارتباط دور با موضوع اصلی گزارش است (مثلاً امکان نمایش جمع کل چکهای برگشتی دریافتی از مشتری در فاکتور فروش صادر شده برای او).
یکی از نقاط قوت نرمافزار مالی و اداری تدبیر، گزارشساز قدرتمند آن است که با اتکا به مجموعۀ وسیعی از توابع از پیش آماده و ایندکسهای چاپی؛ امکان پاسخگویی بسیاری از درخواستهای کاربران در این زمینه را بدون نیاز به اعمال تغییر در کد اصلی برنامه و انتظار جهت انتشار بستۀ نهایی فراهم میآورد. با این وجود، نظر به وسعت پایگاه دادههای سیستم، همواره پاسخگویی به برخی از درخواستها نیازمند اضافه شدن توابع یا اندیسهای چاپی جدید در کد برنامه بوده و با توجه به زمان مورد نیاز جهت کنترل کیفیت و رفع اشکالات احتمالی تا رسیدن به نقطۀ پایداری، کاربر باید در این موارد خاص انتظار چندماههای را تا دریافت بستۀ جدید نرمافزار تحمل کند.
ارائۀ طرحی برای حل این مشکل و کاهش زمان انتظار کاربران، یکی از اهداف اصلی تعیین شده برای آخرین نسخۀ نرمافزار مالی تدبیر بود که هماکنون در نسخۀ 7.69 در قالب قابلیتهای «امکان استفاده از توابع پارامتریک در گزارشات چاپی» و همینطور «امکان توسعۀ موجودیتهای پارامتریک» انجام شده و در دسترس قرار گرفته است. در این مطلب، با ارائۀ چند مثال کاربردی نحوۀ استفاده از این قابلیتها را برای پاسخگویی به نیازهای کاربران در گزارشات چاپی شرح میدهیم.
برای شروع کار تلاش میکنیم مسئلۀ سادهای را که قبلاً با استفاده از راه حلهای قدیمیتر حل شده با استفاده از توابع پارامتریک حل کنیم. «فاکتور خرید» را در نظر بگیرید، فرض کنیم میخواهیم در این فاکتور «نام مشتری فاکتور» را با استفاده از راهکار جدید نمایش دهیم.
طبق روال طراحی گزارشات چاپی، روی فرم فاکتور خرید با فشردن کلید ترکیبی Alt+Q (پیشنمایش چاپ) از پنجرۀ «مدیریت گزارشات» یکی از گزارشات چاپی آمادۀ فاکتور خرید را انتخاب کرده، با فشردن دکمۀ «تغییر فرم» گزارشساز را باز میکنیم و با فشردن کلید ترکیبی Alt+Z آن را به نام دیگری ذخیره میکنیم و در گزارش جدید روی برچسب اطلاعاتی روبروی «فروشنده» کلیک راست میکنیم. در گزارش چاپی فعلی، نام فروشنده از طریق یک اندیس چاپی نمایش داده میشود و ما میخواهیم به جای این کار از توابع پارامتریک استفاده کنیم. از منوی کلیک راست پنجرۀ ویژگیهای فیلد، عنوان «تابع پارامتریک» را انتخاب میکنید یا با فشردن کلید ترکیبی Alt+P در این پنجره، فرمان متناظر را اجرا کنید. با اجرای فرمان یاد شده، پنجرۀ تعریف تابع پارامتریک باز میشود، از کمبوی «سیستم» عنوان «خرید و فروش»، از کمبوی «نوع» عنوان «موجودیتهای عملیاتی» و از لیست موجودیتها «فاکتور خرید» را انتخاب و باز کنید.

همچنان که در تصویر بالا مشاهده میکنید، در لیست موجودیتها، فیلدهای اطلاعاتی فاکتور خرید به همراه ارتباطات آنها و همینطور موجودیتهای وابسته (ریز اقلام فاکتور خرید و …) نمایش داده شده میشود. فیلد «مشتری» را باز کنید و «نام» را انتخاب کنید. در کادر متنی بالای کمبوی «سیستم» عنوان کامل فیلد انتخابی (نام مشتری فاکتور خرید) نمایش داده میشود.

تا اینجای کار، فیلد خروجی مورد نظرمان را مشخص کردهایم. در ادامه باید مشخص کنیم که دقیقاً تمایل داریم نام مشتریِ کدام فاکتور خرید نمایش داده شود (شرط تابع را مشخص کنیم). شرط تابع برای این مسأله، یک «فیلد کلیدی» مربوط به فاکتور خرید است، فیلد کلیدی فاکتور خرید میتواند «شماره»ی آن باشد که از طریق اندیس چاپی شمارۀ 0 در دسترس قرار دارد (شمارۀ این اندیس با کلیک راست بر روی فیلد اطلاعاتی روبروی برچسب «شماره» و از طریق پنجرۀ «ویژگیها» در دسترس قرار میگیرد). برای تعیین این شرط روی دکمۀ «تعیین شرط اول» در کادر «شرط اول» کلیک میکنیم و در پنجرۀ باز شده مشخصه مورد نظر را «شماره» و مقدار آن را برابر پارامتر با اندیس 0 قرار میدهیم.

با تأیید شرط، عبارت متناظر آن در کادر شرط اول نمایش داده شده و با فشردن دکمۀ «پیشنمایش» در کادر «پیشنمایش خروجی»، سیستم، پارامترهای گزارش چاپی (در اینجا «شمارۀ فاکتور») را سؤال کرده و نام مشتری متناظر را نمایش میدهد. تأیید تابع طراحی شده باعث درج آن در گزارش چاپی میشود و با ذخیرۀ گزارش امکان اجرا و مشاهدۀ نتایج آن روی فاکتورهای خرید را خواهید داشت.

همانطور که با اجرای مثال بالا متوجه شدهاید برای انواع مختلف توابع پارامتریک چاپی؛ دو نوع شرط در دو سطح متفاوت میتوان تعیین کرد (شرطهای هر سطح میتواند به نوبۀ خود ترکیبی از عملگرهای منطقی AND و OR و شامل شرطهای پیچیده باشند). علت وجود دو سطح برای تعیین شرطها آن است که اندیسهای چاپی قابل استفاده در شرطها عملاً در دو سطح (Master/Slave یا رکورد اصلی و رکورد ریزاقلام یا رکورد پدر و فرزند) در دسترس است. اندیسهای چاپی مربوط به رکورد پدر (مثلاً فاکتور خرید) در گزارشساز تدبیر از طریق تابع استاندارد GetParametersAt و اندیسهای چاپی مربوط به رکورد فرزند (مثلاً ریزاقلام فاکتور خرید) از طریق تابع استاندارد ColumnValue در دسترس قرار دارد و اغلب لازم است شرطهای درگیر با رکورد پدر در سطح اول (با شرطهای مقداری مشخص شده با «پارامتر») و شرطهای درگیر با رکوردهای فرزند در سطح دوم (با شرطهای مقداری مشخص شده با «مقدار سطر») تعیین شوند. در مثال بالا چون، صورت مسئلۀ ما (نمایش نام فروشنده) ربطی به ریزاقلام فاکتور خرید نداشت نیازی به گذاشتن شرط در سطح دوم نداشتیم. در مثال بعدی که مثال پیچیدهتری است نیاز داریم از شرط سطح دوم هم استفاده کنیم
نکتۀ دیگری که از مثال بالا میتوان به آن پی برد آن است که ساختار توابع پارامتریک چاپی وابسته به «موجودیتهای گزارشات پارامتریک» است. «گزارشات پارامتریک» که از طریق منوی «امکانات» سیستم مالی در دسترس قرار میگیرد اطلاعات موجودیتهای تدبیر را به زبان کاربر در اختیار میگذارد و میتوان با ترکیب فیلدهای اطلاعاتی و اضافه کردن شرطهای جدید با استفاده از آن گزارشات جدیدی را به سیستم اضافه کرد. در مثال بالا، فیلد مورد نظر ما یک فیلد ساده و آماده و دم دست از موجودیت «فاکتور خرید» بود (نام مشتری). اما اگر فیلد مورد نظر ما به صورت آماده در اطلاعات موجودیتهای گزارشات وجود نداشته باشد و باید از طریق محاسبات دیگر به دست بیاید باید چه کار کنیم؟ مثال بعدی روش حل مسائلی با این درجه از پیچیدگی را هم به ما یاد میدهد.
دوشنبه 30 اردیبهشت 1392
حمیدرضا محمدی کارشناس نرم افزار شرکت پردازش موازی سامان
این مطلب ادامه دارد… (استفاده از توابع پارامتریک در طراحی گزارشات چاپی تدبیر-بخش دوم)