راهنمای برنامه‌نویسان

نرم‌افزار «انتقال اطلاعات تدبیر» راهکاری برای انتقال اطلاعات از فایل‌های اکسل و فایل‌های متنی به جداول دیتابیس تدبیر فراهم می‌کند.

روش کار این نرم‌افزار به این صورت است که محتوای فایل را به یک جدول موقت یا جدول میانی منتقل می‌کند تا بتوانید محتوای آن را با دستورات SQL بررسی و اعتبارسنجی کنید و در صورت عدم وجود مشکل آنها را به جداول اصلی تدبیر منتقل کنید.

از آنجا که این نرم‌افزار امکان دسترسی مستقیم به جداول و اجرای دستورات SQL را فراهم می‌آورد با توجه به ملاحظات امنیتی نمی‌بایست کاربر عادی تدبیر به بخش طراحی آن دسترسی داشته باشد. از این جهت امکانات طراحی آن علاوه بر دسترسی‌های کاربر تدبیر با یک رمز محافظت می‌شود (در مورد دسترسی‌های مورد نیاز کاربر این بخش را مرور کنید).

توجه: برای استفاده از محیط نرم‌افزار از نسخه‌های به‌روز مرورگرهای کروم یا فایرفاکس و از صفحه نمایش دسکتاپ استفاده کنید (بعضی از بخش‌های قسمت طراحی با صفحات دستگاه موبایل سازگار نیستند).

برای دسترسی به محیط نرم‌افزار در حالت دمو می‌توانید از اطلاعات در دسترس در وبگاه پیش‌نمایش نرم‌افزارهای تدبیر استفاده کنید.

برای طراحی یک پروژهٔ انتقال اطلاعات ابتدا فایل دریافتی از مشتری (عموماً فایل اکسل) را بررسی کنید و مطابق با اطلاعاتی از آن که لازم است وارد تدبیر شود در SQL Server Management Studio یک جدول میانی بسازید. جدول میانی یا جدول موقت یک جدول در دیتابیس شرکت تدبیر است که نام آن به لحاظ ملاحظاتی که در نرم‌افزار تدبیر وجود دارد می‌بایست حتماً با UD شروع شود.

به عنوان مثال فرض کنید که فایل اکسل ورودی چنین ساختاری دارد:

در این حالت لازم است در اس.کیو.ال سرور جدول میانی با حداقل دو فیلد برای نام مشتری و تلفن طراحی کنیم. وارد محیط اس‌کیو‌ال سرور شده، دیتابیس شرکت مدنظر را پیدا کنید و در آن این جدول را ایجاد کنید.

توصیه می‌شود در طراحی جدول‌های میانی فیلدی با نام SessionId از نوع int هم در نظر گرفته شود. وجود چنین فیلدی برای فراهم کردن امکان ورود اطلاعات همزمان توسط چند کاربر ضروری است.

پس از ایجاد جدول (با توجه به آن که نام آن با UD شروع می‌شود) می‌توانیم آن را در محیط نرم‌افزار انتقال اطلاعات ببینیم و انتخاب کنیم.

برای این منظور با کاربر دارای دسترسی‌های کافی وارد نرم‌افزار شده، از منوی کناری فرمان «فعالسازی امکانات ویرایشی» را اجرا کرده، رمز ویرایش را وارد می‌کنیم (این رمز را از واحد نرم‌افزار دریافت کنید).

پس از ورود رمز درست، دکمهٔ + در پایین گوشهٔ سمت چپ ظاهر می‌شود و می‌توانیم با آن یک پروژهٔ جدید انتقال اطلاعات ایجاد کنیم.

اطمینان حاصل کنید که شرکت جاری همان شرکتی است که جدول میانی را در آن ایجاد کرده‌اید.

جدول میانی طراحی شده را انتخاب کنید، نامی برای پروژهٔ جدیدتان وارد کنید و روی «ذخیره» کلیک کنید.

پس از ذخیره و بازگشت به صفحهٔ اصلی، نام پروژهٔ جدید را از کمبوباکس «پروژه» انتخاب کنید و روی دکمهٔ ویرایش آن کلیک کنید.

برای انتساب فیلدهای جدول به ستون‌های اکسل با «انتخاب فایل نمونه» فایل اکسل را باز کنید.

همچنان که مشاهده می‌کنید عموم فایل‌های ورودی حداقل یک ردیف برای مشخص کردن سرتیتر ستون‌ها دارند که دادهٔ واقعی محسوب نمی‌شود و نباید آنها را وارد برنامه کنید. نگاشت فیلدها به ستون‌ها نیز به طور پیش‌فرض انجام شده است و در صورت نیاز به تغییر می‌توانید از طریق پیش‌نمایش فایل تغییرات لازمه را اعمال کنید.

چون در طراحی جدول میانی فیلدی با نام SessionId در نظر گرفته‌ایم این فیلد به طور خودکار و به خاطر نامش از نوع «شناسهٔ جلسه» در نظر گرفته شده است. «شناسهٔ جلسه» یک عدد افزایشی خودکار با شروع از ۱ است که به ازای هر اجرای ورود اطلاعات افزایش پیدا می‌کند. به این ترتیب و با در نظر گرفتن این فیلد می‌توانید مطمئن باشید که اگر دو کاربر به طور همزمان یک پروژهٔ ورود اطلاعات را اجرا کنند به لحاظ این که در جدول میانی شناسه‌های متفاوتی دارند اطلاعات آنها با هم مخلوط نمی‌شود (نکته: پلاگین ویندوزی از شناسهٔ جلسه پشتیبانی نمی‌کند، لذا اگر قرار است نهایتاً پروژه توسط پلاگین ویندوزی اجرا شود از راهکار دیگری برای جلوگیری از اختلاط اطلاعات استفاده کنید).

نکته: برای فیلدهای رشته‌ای فارسی می‌توانید ویژگی «تبدیل کدپیج» را فعال کنید و دیگر نیازی به اسکریپت‌های تبدیل نداشته باشید. توجه فرمایید که اگر مشتری قرار است نهایتاً پروژه را با پلاگین ویندوزی اجرا کند این گزینه کارایی ندارد و می‌بایست از توابع قدیمی SQL برای تبدیل کدپیج استفاده کنید.

برای دسترسی به مقدار جاری شناسهٔ جلسه از متغیرهای ورود پیش‌فرض استفاده می‌کنیم که اطلاعات آنها در زبانهٔ «ورودی‌ها» درج شده است. در این زبانه می‌توانید توضیحاتی را نیز که کاربر نهایی باید راجع به فایل ورودی بداند بنویسید.

اسکرپیت‌های زبانهٔ «پیش‌آماده‌سازی» پیش از این که اطلاعات فایل به جدول میانی منتقل شود اجرا می‌شوند. مهم‌ترین اسکریپتی که در این مرحله باید اجرا شود اسکریپت ساخت جدول میانی است. ما در طراحی اولیه جدول میانی را به شکل دستی می‌سازیم اما در اجرا روی سیستم مشتری پروژهٔ ورود اطلاعات باید خودش این جدول را بسازد. به طور پیش‌فرض اسکریپت ساخت جدول میانی توسط خود نرم‌افزار ایجاد شده و در این قسمت درج می‌شود.

پس از انتقال اطلاعات به جدول میانی، معمولاً لازم است پیش از انتقال نهایی اطلاعات به جدول‌های اصلی تدبیر آنها را اعتبارسنجی کنیم و در صورت نیاز کاربر را از خطاهای اطلاعات وارد شده مطلع کنیم.

مثلاً در مورد مشتریان باید اطمینان حاصل کنیم که اطلاعات یک مشتری پیشتر در تدبیر وارد نشده است. برای سادگی فرض را بر آن می‌گیریم که قرار نیست در فایل اکسل ورودی مشتریانی با نام‌هایی که پیشتر در تدبیر تعریف شده است وجود داشته باشد.

برای این کار یک اسکریپت از نوع SELECT می‌نویسیم که لیست ردیف‌هایی را در جدول میانی که نام‌های آنها در جدول مشتریان تدبیر در دورهٔ مالی جاری پیشتر وجود دارد برگرداند.

سپس متن این اسکریپت را یا به کلیپ‌بورد ویندوز کپی می‌کنیم یا آن را در قالب یک فایل ذخیره می‌کنیم. سپس به زبانهٔ اعتبارسنجی می‌رویم و آن را اضافه می‌کنیم.

در اسکریپت نمونه از متغیر pTadbirFPId@ برای دسترسی به دورهٔ مالی جاری و از متغیر pSessionId@ برای دسترسی به شناسهٔ اجرای انتقال اطلاعات جاری استفاده شده است که مقادیر آنها در زمان اجرا با اعداد متناظر آنها جایگزین می‌شود.

در تعریف اسکریپت اعتبارسنجی می‌توان آن را «قابل صرف نظر» کرد. این حالت که احتمالاً کاربرد زیادی ندارد برای وضعیتی است که کاربر باید یک سری موارد احتمالاً نیازمند بررسی را بازبینی کند و اگر از نظرش مشکلی نداشت انتقال اطلاعات حتی با وجود این ردیف‌های اعتبارسنجی انجام شود.

اسکریپت اعتبارسنجی زمانی که خطایی وجود ندارد نمی‌بایست ردیفی را برگرداند.

مرحلهٔ نهایی انتقال اطلاعات جایی است که اعتبارسنجی انجام شده و اطلاعات از جدول میانی به جداول تدبیر منتقل می‌شود.

اسکریپت‌های نهایی از نوع اسکریپت‌های اجرایی (INSERT/UPDATE/SELECT) هستند. به عنوان نمونه برای انتقال مشتری اسکریپت زیر مشتری‌ها را در تدبیر ایجاد می‌کند (اخطار مهم: ایجاد مشتری بدون ایجاد حساب متناظر که در تدبیر مورد نیاز است کامل نیست و مشتریانی که اسکریپت اولیهٔ زیر ایجاد می‌کند در فاکتور قابل استفاده نیستند).

در نهایت توصیه می‌شود که در اسکریپت‌های نهایی رکوردهای جدول میانی مربوط به جلسهٔ جاری را حذف کنید.

پس از تست و نهایی‌سازی پروژهٔ انتقال اطلاعات لازم است آن را به سیستم مشتری منتقل کنیم (برای آشنایی با روش تست راهنمای کاربران را ببینید). برای این کار از «ذخیره به صورت فایل» استفاده می‌کنیم.

نکتهٔ مهم: اگر پیش از کلیک بر روی «ذخیره به صورت فایل» یک فایل نمونه را باز کرده باشید، فایل باز شده در خروجی نهایی گنجانده می‌شود و بعداً قابل دریافت است.

نکته: اگر پروژهٔ انتقال اطلاعات قرار است روی سیستم مشتری توسط پلاگین ویندوزی انتقال داده‌های تدبیر اجرا شود از گزینهٔ کناری یعنی «ذخیره برای بارگذاری در پلاگین ویندوزی» استفاده کنید. پلاگین ویندوزی از همهٔ قابلیت‌های نرم‌افزار تحت وب پشتیبانی نمی‌کند و بهتر است حتی در این حالت و به منظور بایگانی خروجی اصلی را دریافت و نگهداری کنید.

برای بازیابی فایل ذخیره شده روی سیستم مشتری، از صفحهٔ اصلی گزینهٔ «بارگذاری از فایل» را انتخاب کنید.

در صورتی که فایل ذخیره شده حاوی فایل نمونه هم باشد پس از بارگذاری پروژه مسیری برای ذخیرهٔ فایل نمونه نیز سؤال می‌شود.

نکته: در صورتی که پیشتر پروژه‌ای را برای پلاگین ویندوزی طراحی کرده‌اید، پوشهٔ حاوی فایل xml را به همراه زیرپوشه‌های آن zip کنید و از طریق دکمهٔ «ورود از فایل zip یا xml پلاگین ویندوزی» کنار دکمهٔ «بارگذاری از فایل» آن را به نرم‌افزار تحت وب منتقل کنید. هر چند این امکان با فایل xml تنها نیز کار می‌کند اما به لحاظ مشکلاتی که در ذخیرهٔ متن اسکریپت‌ها در داخل فایل xml دیده می‌شود بهتر است کل پوشه را به صورت zip منتقل کنید.

نکته: از این موارد در پلاگین ویندوزی پشتیبانی نمی‌شود:

  • متغیر ورودی pSessionId@ و نگاشت فیلد به «شناسهٔ جلسه»
  • نگاشت فیلد به «شماره ردیف اکسل»
  • ویژگی «تبدیل کدپیج» در نگاشت فیلدها به ستون‌ها

نکته: پلاگین ویندوزی از فایل‌های اکسل قدیمی (آفیس ۹۷) پشتیبانی می‌کند اما انتقال اطلاعات تحت وب از آنها پشتیبانی نمی‌کند. در صورتی که فایل‌های ورودی از این جنس هستند (پسوند xls و نه xlsx) یا می‌بایست از پلاگین ویندوزی استفاده کند و یا بایستی فایل‌ها را پیش از ورود با خود اکسل تبدیل کند.

برای آشنایی با نحوهٔ اجرای پروژه راهنمای کاربران را ببینید. نکتهٔ اضافه‌ای که در این زمینه باید بدانید آن است که در زبانه‌های «اسکریپت‌ها» و «ردیف‌های میانی» پنجرهٔ «لاگ» گزینه‌هایی برای فیلتر خطا‌ها و همینطور مرتب‌سازی اسکریپت‌ها بر اساس زمان اجرا به صورت نزولی وجود دارد. در حالت پیش‌فرض این اطلاعات به صورن فیلتر نشده و به ترتیب اجرای اسکریپت‌ها نمایش داده می‌شود که می‌توانید با کلیک بر روی دکمهٔ متناظر در قسمت بالا سمت چپ آنها را تغییر دهید.

نکته: در منوی کناری نام کاربر جاری، نگارش برنامه و همینطور نگارش وب‌سرویس نمایش داده می‌شود و با کلیک روی نگارش وب‌سرویس سایت آن باز می‌شود. در راه‌اندازی نهایی روی کلاینت مشتری در صورتی که با باز کردن سایت مشکل دارید احتمالاً مشکل از فایروال ویندوز است. یا می‌بایست پورت‌های کلاینت و وب‌سرویس باز شود و یا هر کدام روی آی پی جداگانه روی پورت ۸۰ که به طور پیش‌فرض باز است در دسترس قرار بگیرد.

نکاتی در مورد کار با فیلدهای حاوی اطلاعات تاریخ: برای فیلدهای از نوع تاریخ می‌توانید از راهکار قدیمی تعریف فیلد متناظر از نوع رشته و تبدیل آن به تاریخ توسط توابع SQL استفاده کنید. اما می‌توانید به جای این راهکار فیلد متناظر در جدول میانی را از نوع تاریخ تعریف کنید.

وقتی فیلدی از نوع تاریخ تعریف شود امکانات مربوط به نوع تاریخ در برنامهٔ انتقال اطلاعات برای آن فعال می‌شود.

برای بررسی حالت‌های مختلف کار با تاریخ می‌توانید فایل اکسل نمونهٔ زیر را دریافت کنید.

در این فایل چهار نمونه برای ستون‌های تاریخ اکسل وجود دارد.

برای ستون‌های مختلف این فایل نمونه از تنظیمات تصاویر زیر استفاده کنید (نکتهٔ بسیار مهم: بزرگ و کوچک بودن حروف قالب تاریخ اهمیت دارد).

تاریخ تصویر بالا می‌تواند شمسی هم باشد.

برای ستونی که در اکسل قالب آن تاریخ است تنها کافی است گزینهٔ میلادی را فعال کنید و قالب تاریخ اهمیتی ندارد.

نکتهٔ نصبی: IIS به طور پیش‌فرض سایت سرویس را پس از ۲۰ دقیقه عدم مراجعه از حافظه خارج می‌کند. این می‌تواند برای کاربرانی که فایل‌های اکسل حجیم دارند و ورود اطلاعات آنها بیش از ۲۰ دقیقه طول می‌کشد مشکل ایجاد کند. برای حل این مشکل روی سایت سرویس مطابق تصاویر زیر زمان انتظار تا خروج از حافظه را افزایش دهید.

ابتدا باید Application Pool مربوط به وب‌سرویس را پیدا کنید. سایت وب‌سرویس را انتخاب کنید و از نوار سمت راست روی Basic Settings … کلیک کنید.
نام Application pool معمولاً با نام سایت یکسان است
از دست چپ روی Application Pools کلیک کنید.
روی اپلیکیشن پولی که مربوط به سایت سرویس است Advanced Settings را بزنید.
این مقدار را از ۲۰ به عددی بزرگ (بر حسب دقیقه است) افزایش بدهید.

نکته برای مشتریان دارای چند دیتابیس __Sys__: توجه فرمایید که اطلاعات پروژه‌های انتقال از اطلاعات در پایگاه داده‌های __Sys__ ذخیره می‌شود (پیشوند جدول‌های مربوط به این سیستم دو آندرلاین TWI است. اگر کاربری دارای چند دیتابیس __Sys__ است در رشتهٔ اتصال سرویس می‌بایست به جای __Sys__ نام دیتابیس جایگزین را بگذارید.