پروفایل برنامه ریزی و کنترل پروژه

نادر خرمی راد

قید ALAP پریماورایی در پراجکت

احتمالا می‌دونین که عملکرد قید As Late As Possible تو پریماورا و پراجکت فرق می‌کنه. وقتی فعالیتی رو تو پریماورا ALAP کنین، شناوری آزادش صفر می‌کنه، ولی اگه این کار رو تو پراجکت کنین، شناوری کلش صفر می‌شه.

قید ALAP پراجکت باعث می‌شه که شناوری کل تمام فعالیت‌هایی که مستقیم یا غیر مستقیم وابستگی‌ای به فعالیت ALAP شده دارن هم صفر بشه.

هرکدوم از این دو نوع قید کاربردهای خودش رو داره، و خیلی خوب می‌شد اگه هر دو نرم‌افزار هر دو نوع قید رو ارائه می‌کردن، که متاسفانه نمی‌کنن.

حالا اومدیم و تو پراجکت نیاز به ALAP پریماورایی پیدا کردین. تکلیف چیه؟

می‌شه با یه مقدار عملیات آکروباتیک موضوع رو حل کرد.

این هم برنامه مثال:

image

فعالیتی که می‌خوایم شناوری آزادش صفر باشه، فعالیت a هست. چرا؟

فرض کنین مثلا a یه فعالیت تدارکاتیه. c رنگ دیواره، b خود دیوارکشیه، d هم بقیه کارها. a هم رنگیه که باید برای اونجا بخریم. حالا کی باید بخریمش؟

می‌شه a رو SF با c کرد تا زمان‌بندیش درست بشه. ولی تو این حالت اگه a به تاخیر بیفته، c رو به تاخیر نمی‌ندازه، در نتیجه اهمیتش تو برنامه مشخص نمی‌شه. به این خاطره که ترجیح می‌دیم a رو پیش‌نیاز c کنیم (در واقعیت هم همینطوره). حالا اگه معمولی این کار رو کنیم، a تو شروع پروژه شروع می‌شه، چون خودش پیش‌نیاز نداره. زمان مناسبش چه موقع باشه؟ بهترین گزینه زمانیه که شناوری آزادش رو صفر کنه، یعنی فعالیت قید ALAP پریماورایی داشته باشه. اگه همینطوری بهش قید ALAP بدیم، چنین نتیجه‌ای می‌گیریم:

image

که اصلا جالب نیست، چون c رو برده به آخر پروژه.

بعضی‌ها اینجور مواقع قید Start No Earlier Than می‌ذارن و بهش تاریخی می‌دن که a رو تا اندازه مناسب جلو ببره. ولی این راه هم مشکلش اینه که اگه زمان‌بندی c تغییر کنه، اصلاح نمی‌شه. پس جالب نیست.

من همون قید ALAP پریماورا رو می‌پسندم. راه حلش هم ساده‌س.

یادتونه قبلا درباره تاریخ‌های موثر در شناوری چه توضیحی داده بودم؟

همین ماجرا کلید حل مسئله‌س.

روی تاریخ شروع c کلیک کنید، بعد ctrl+c رو بزنین تا کپی بشه. حالا روی فیلد deadline فعالیت a کلیک کنین و از منوها paste special رو انتخاب کنین. گزینه Paste link رو انتخاب کنین و روی ok کلیک کنین.

image

علامت فرجه رو می‌بینین؟

الان a فرجه‌ای داره که تاریخش همون تاریخ شروع فعالیت c هست. هروقت زمان‌بندی c تغییر کنه، تاریخ این فرجه هم به تناظر اون تغییر می‌کنه و به عبارت دیگه، فرجه a همیشه همون شروع c خواهد بود. می‌دونین که فرجه شناوری فعالیت رو محدود می‌کنه.

حالا اگه a رو ALAP کنیم همچین چیزی می‌بینیم:

image

و این می‌شه همون چیزی که لازم داشتیم.

این کار رو با هر ترکیبی از فعالیت‌ها هم می‌شه انجام داد. اگه به جای a مجموعه‌ای از aها داشته باشیم، کافیه که به آخرین a فرجه بدین و اولین a رو ALAP کنین.

نوشته نادر خرمی راد (Nader Khorrami Rad)

تاریخ‌های موثر در شناوری

همیشه می‌گیم شناوری کل مدت زمانیه که اگه فعالیت به اون اندازه به تاخیر بیفته تاریخ پایان پروژه رو به تاخیر نمیندازه. این تعریف خیلی قدیمیه و باید تعریف کامل‌تری به جاش به کار ببریم.

چیزی که تو تعیین شناوری موثره صرفا تاریخ پایان پروژه نیست؛ تاریخ‌های مهم پروژه‌س. شناوری مدت زمانیه که اگه فعالیت به اون اندازه به تاخیر بیفته، هیچکدوم از تاریخ‌های مهم پروژه به تاخیر نمی‌افتن.

 

تاریخ‌های مهم این‌ها هستن:

  1. تاریخ پایان پروژه
  2. تاریخ پایان فعالیت‌هایی که پس‌نیاز ندارن (توضیح 1)
  3. فرجه‌ها
  4. تاریخ قیدهایی که انعطاف‌پذیر نیستن

 

توضیح 1: وقتی تاریخ پایان فعالیت‌هایی که پس‌نیاز ندارن در تعیین شناوری‌ها مبنا قرار می‌گیره که گزینه Calculate Multiple Critical Tasks رو تو Tools| Options| Calculation فعال کرده باشین.

حالا ماجرا رو با هم مرور می‌کنیم. برنامه شکل زیر رو ببینین:

image

تو این برنامه سه گروه فعالیت تعریف کردم. هر گروه دو فعالیت داره که با هم لینک هستن. می‌شد مسئله رو روی فعالیت‌های تکی هم نشون داد، ولی من گروه‌های دوتایی استفاده کردم تا سرایت کردن شناوری‌ها رو به عقب هم نشون بدم. برای هرکدوم از این سه گروه نقشه‌هایی کشیدم.

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

برای فعالیت چهارم فرجه‌ای در پایان روز 9 قرار می‌دم. وضعیت اینطوری می‌شه:

image

فرجه می‌گه که فعالیت باید تا اون موقع تموم شده باشه، پس منطقیه که برنامه شناوری رو طوری تنظیم کنه که فعالیت از اون تاریخ نگذره. به عبارت دیگه به فرجه اهمیتی در حد تاریخ پایان پروژه بده. حالا نگاهی به شناوری فعالیت سوم بندازین، متوجه شدین که چه اتفاقی افتاد؟ کم شدن شناوری فعالیت چهارم به پیشنیازش هم سرایت کرد.

حالا به فعالیت ششم قید Finish No Later Than برای پایان روز نهم می‌دم:

image

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

حالا به شکل بالایی نگاه کنین و تصور کنین که وقتی فرجه رو به پایان روز هشتم بکشیم. شناوری فعالت چهارم چقدر می‌شه؟ اگه اون رو به پایان روز هفتم بکشیم چطور؟ بله، در این حالت شناوری کل فعالیت صفر می‌شه و اون فعالیت همراه با پیش‌نیازش بحرانی می‌شن.

حالا باز هم تصور کنین که فرجه رو عقب‌تر بکشیم، مثلا پایان روز ششم. در این حالت شناوری فعالیت چقدر می‌شه؟

image

این هم همون شناوری منفیه که هر هفته چند نفر با جستجوی اون به سایت من می‌رسن! مفهوم پیچیده‌ای نیست، هست؟

تو این وضعیت فعالیت چهارم اگه طبق برنامه پیش بره هم یکی از تاریخ‌های مهم پروژه یک روز به تاخیر می‌افته، یعنی فعالیت باید یک روز کمتر از برنامه وقت ببره تا تاریخ حفظ بشه. یک روز کمتر، یعنی شناوری منفی یک.

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

image

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

وقتی بین قید و روابط تناقض وجود داشته باشه تکلیف چیه؟

پیش‌فرض اینه که قید مبنا قرار بگیره.

حالا می‌تونین برین تو Tools| Options| Schedule و گزینه Tasks will always honor their constraint dates رو غیر فعال کنین. حالا اگه تناقضی بین قید و روابط وجود داشته باشه اولویت به روابط داده می‌شه. این هم می‌شه وضعیت همون برنامه قبلی، بعد از تغییر تنظیم:

image

خوب، حالا من قید و فرجه رو برمی‌دارم، یعنی وضعیت برنامه می‌شه مثل اولین شکلی که دیدین (بد نیست الان برگردین بالا و نگاهی بهش بندازین). حالا می‌رم به Tools| Options| Calculate و گزینه Calculate multiple critical paths رو فعال می‌کنم. نتیجه این می‌شه:

image

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

به هر حال؛ اگه بیشتر از یک فعالیت پس‌نیاز مستقیم یا غیر مستقیم داشته باشن، در حالت معمول به جز یکیشون همه شناوری می‌گیرن. حالا فرض کنین پروژه‌ای داریم از 10 بلوک ساختمانی. تاریخ پایان هرکدوم از بلوک‌ها پس‌نیازی نداره، و در عین حال ترجیح می‌دیم که هر بلوک در زودترین زمان ممکن تموم بشه و شناوری براشون نذاریم. در این صورت می‌تونیم این گزینه رو فعال کنیم، در نتیجه شناوری فعالیت‌های آزاد حذف می‌شه و به پیش‌نیازهاشون هم منتقل می‌شه. به این ترتیب احتمالا مسیرهای بحرانی جدیدی هم ایجاد می‌شه. خوب، این وضعیت رو می‌تونین تو شکل بالا هم ببینین.

خوب، من امیدوارم این مطالب رو به شما منتقل کرده باشم:

  • تنها تاریخ مقدسی که برای محاسبه شناوری‌ها به کار می‌ره تاریخ پایان پروژه نیست.
  • شناوری منفی با ……. به وجود میاد. با چی؟
  • مسیرهای بحرانی متعدد با مقید کردن فعالیت‌های آزاد به وجود میاد.
نوشته نادر خرمی راد (Nader Khorrami Rad)

Task Driver در پراجکت 2010

مدت زیادی طول کشید تا بتونم ابزار Task Driver پراجکت 2010 رو پیدا کنم. برای باز کردن پنل این ابزار، روی Inspect که زبانه task ریبون هست کلیک کنین.
برای کسایی که نمی‌دونن توضیح می‌دم که هر فعالیت می‌تونه محدودیت‌های زمان‌بندی متعددی داشته باشه. انواع روابط و قیدهای خودش و اون‌هایی که از خلاصه فعالیت‌های بالادستش ارث برده یا به اون‌ها می‌ده. از بین تمام این عوامل، فقط یکی هست که از همه سخت‌گیرانه‌تره و اصطلاحا حاکم می‌شه. ابزاری که گفتم این یک عامل رو نشون می‌ده.
نوشته نادر خرمی راد (Nader Khorrami Rad)

جابجایی زمان پروژه در پراجکت 2010

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

Project 2010 Move Project Icon

وقتی روی این دکمه کلیک کنین، یه کادر محاوره باز می‌شه و … بقیه‌ش رو هم احتمالا می‌تونین حدس بزنین.

Project 2010 Move Project DB
نوشته نادر خرمی راد (Nader Khorrami Rad)

شناوری منفی

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

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

(برای کسب اطلاعات بیشتر به فصل 9 کتاب راهنمای جامع Microsoft Project 2007 مراجعه کنید).

نوشته نادر خرمی راد (Nader Khorrami Rad)
اشتراک مطالب سایت

با اشتراک در فرم زیر مطالب جدید برایتان ایمیل می‌شوند:

اشتراک مطالب در تلگرام