پلیٹ فارم "1C: انٹرپرائز" - ہڈ کے نیچے کیا ہے؟

ارے حبر!
اس مضمون میں ہم اس کے بارے میں کہانی شروع کریں گے کہ یہ اندر سے کیسے کام کرتا ہے۔ پلیٹ فارم "1C: انٹرپرائز 8" اور اس کی ترقی میں کون سی ٹیکنالوجی استعمال کی جاتی ہے۔

پلیٹ فارم "1C: انٹرپرائز" - ہڈ کے نیچے کیا ہے؟

ہمارے خیال میں یہ دلچسپ کیوں ہے؟ سب سے پہلے، کیونکہ 1C:Enterprise 8 پلیٹ فارم C++ (کلائنٹ، سرور، وغیرہ)، JavaScript (ویب کلائنٹ) میں ایک بڑا (10 ملین لائنز کوڈ) ایپلی کیشن ہے، اور حال ہی میں اعلی درجے کا Java. بڑے منصوبے کم از کم اپنے پیمانے کی وجہ سے دلچسپ ہو سکتے ہیں، کیونکہ چھوٹے کوڈ بیس میں نظر نہ آنے والے مسائل ایسے منصوبوں میں پوری قوت سے پیدا ہوتے ہیں۔ دوم، "1C:Enterprise" ایک قابل نقل، "باکسڈ" پروڈکٹ ہے، اور Habré پر اس طرح کی پیشرفت کے بارے میں بہت کم مضامین ہیں۔ یہ جاننا بھی ہمیشہ دلچسپ ہوتا ہے کہ دوسری ٹیموں اور کمپنیوں میں زندگی کیسی ہے۔

تو آئیے شروع کرتے ہیں۔ اس مضمون میں ہم پلیٹ فارم میں استعمال ہونے والی کچھ ٹیکنالوجیز کا ایک جائزہ پیش کریں گے اور نفاذ میں گہرائی میں ڈوبے بغیر زمین کی تزئین کا خاکہ پیش کریں گے۔ درحقیقت، بہت سے میکانزم کے لیے، ایک تفصیلی کہانی کے لیے ایک الگ مضمون کی ضرورت ہوگی، اور کچھ کے لیے، ایک پوری کتاب!
شروع کرنے کے لیے، یہ بنیادی چیزوں پر فیصلہ کرنے کے قابل ہے - 1C:Enterprise پلیٹ فارم کیا ہے اور یہ کن اجزاء پر مشتمل ہے۔ اس سوال کا جواب اتنا آسان نہیں ہے، کیونکہ اصطلاح "پلیٹ فارم" (اختصار کے لیے، ہم اسے اس طرح کہیں گے) کاروباری ایپلی کیشنز، رن ٹائم ماحول، اور انتظامیہ کے اوزار تیار کرنے کے ذرائع سے مراد ہے۔ درج ذیل اجزاء کو تقریباً ممتاز کیا جا سکتا ہے۔

  • سرور کلسٹر
  • "پتلا" کلائنٹ جو HTTP اور اس کے اپنے بائنری پروٹوکول کے ذریعے سرور سے جڑنے کے قابل ہے۔
  • ہارڈ ڈرائیو یا نیٹ ورک فولڈر میں موجود ڈیٹا بیس کے ساتھ دو درجے کے فن تعمیر میں کام کرنے کے لیے کلائنٹ
  • ویب کلائنٹ
  • ایپلیکیشن سرور ایڈمنسٹریشن ٹولز
  • ترقیاتی ماحول (کنفیگریٹر کے نام سے جانا جاتا ہے)
  • iOS، Android اور Windows Phone کے لیے رن ٹائم ماحول (موبائل پلیٹ فارم 1C)

یہ تمام حصے، ویب کلائنٹ کے استثناء کے ساتھ، C++ میں لکھے گئے ہیں۔ مزید برآں، حال ہی میں اعلان کیا گیا ہے۔ نئی نسل کا کنفیگریٹر، جاوا میں لکھا گیا۔

مقامی ایپس

C++03 مقامی ایپلی کیشنز کو تیار کرنے کے لیے استعمال کیا جاتا ہے۔ ونڈوز کے لیے، Microsoft Visual C++ 12 (Windows XP کے ساتھ مطابقت رکھنے والا پروفائل) ایک کمپائلر کے طور پر استعمال ہوتا ہے، اور Linux اور Android کے لیے - gcc 4.8، iOS کے لیے - clang 5.0۔ استعمال شدہ معیاری لائبریری تمام آپریٹنگ سسٹمز اور کمپائلرز - STLPport کے لیے یکساں ہے۔ یہ حل STL کے نفاذ سے متعلق مخصوص غلطیوں کے امکان کو کم کرتا ہے۔ ہم فی الحال CLang کے ساتھ بھیجے گئے STL نفاذ پر منتقل ہونے کا منصوبہ بنا رہے ہیں، کیونکہ STLPport کو بند کر دیا گیا ہے اور یہ gcc کے C++11 فعال وضع سے مطابقت نہیں رکھتا ہے۔
سرور کا کوڈ بیس 99% عام ہے، کلائنٹ کا - 95%۔ مزید برآں، موبائل پلیٹ فارم بھی وہی C++ کوڈ استعمال کرتا ہے جیسا کہ "بڑا" ہے، حالانکہ وہاں اتحاد کا فیصد کچھ کم ہے۔
زیادہ تر C++ صارفین کی طرح، ہم زبان اور اس کی لائبریریوں کی 100% صلاحیتوں کو استعمال کرنے کا دعوی نہیں کرتے ہیں۔ لہذا، ہم عملی طور پر بوسٹ کا استعمال نہیں کرتے ہیں، اور زبان کی خصوصیات میں سے ایک متحرک قسم کاسٹنگ ہے۔ ایک ہی وقت میں، ہم فعال طور پر استعمال کرتے ہیں:

  • STL (خاص طور پر تار، کنٹینرز اور الگورتھم)
  • متعدد وراثت، بشمول متعدد نفاذ کی وراثت
  • پیٹرن
  • استثناء
  • سمارٹ پوائنٹرز (اپنی مرضی کے مطابق عمل درآمد)

انٹرفیس کی متعدد وراثت (مکمل طور پر تجریدی کلاسز) کا استعمال کرتے ہوئے، ایک جزو ماڈل ممکن ہو جاتا ہے، جس پر ذیل میں بحث کی جائے گی۔

اجزاء

ماڈیولریٹی کو یقینی بنانے کے لیے، تمام فعالیت کو اجزاء میں تقسیم کیا گیا ہے، جو کہ متحرک لائبریریاں ہیں (*.dll برائے Windows، *.so Linux کے لیے)۔ مجموعی طور پر ایک سو پچاس سے زائد اجزاء ہیں، ان میں سے چند کی تفصیل یہ ہے:

پسدید
پلیٹ فارم میٹا ڈیٹا انجن پر مشتمل ہے۔

accent
وہ اشیاء جنہیں ایپلیکیشن ڈویلپر اکاؤنٹنگ ریکارڈ بنانے کے لیے استعمال کرتے ہیں (اکاؤنٹس کے چارٹ اور اکاؤنٹنگ رجسٹر)

بی ایس ایل
ایمبیڈڈ لینگویج ایگزیکیوشن انجن

جوہری
میموری مختص کرنے والے کا حسب ضرورت نفاذ

dbeng8
فائل ڈیٹا بیس انجن۔ ISAM پر مبنی ایک سادہ فائل سرور ڈیٹا بیس انجن، جس میں ایک سادہ SQL پروسیسر بھی شامل ہے۔

wbase
ونڈوز یوزر انٹرفیس - ونڈو کلاسز، جی ڈی آئی رسائی، وغیرہ کو لاگو کرنے کے لیے بیس کلاسز اور فنکشنز پر مشتمل ہے۔

متعدد اجزاء میں تقسیم کئی نقطہ نظر سے مفید ہے:

  • علیحدگی بہتر ڈیزائن کو فروغ دیتی ہے، خاص طور پر بہتر کوڈ تنہائی
  • اجزاء کے ایک سیٹ سے آپ مختلف ترسیل کے اختیارات کو لچکدار طریقے سے جمع کر سکتے ہیں:
    • مثال کے طور پر، ایک پتلی کلائنٹ کی تنصیب wbase پر مشتمل ہوگی، لیکن اس میں بیک اینڈ نہیں ہوگا۔
    • لیکن wbase سرور پر، اس کے برعکس، ایسا نہیں ہوگا۔
    • دونوں آپشنز یقیناً nuke اور bsl پر مشتمل ہوں گے۔

پروگرام شروع ہونے پر اس لانچ آپشن کے لیے درکار تمام اجزاء لوڈ ہو جاتے ہیں۔ یہ، خاص طور پر، SCOM کلاسز کو رجسٹر کرنے کے لیے ضروری ہے، جس پر ذیل میں بات کی جائے گی۔

SCOM

نچلی سطح پر سڑنے کے لیے، SCOM نظام استعمال کیا جاتا ہے، ایک لائبریری جو نظریہ میں ATL سے ملتی جلتی ہے۔ ان لوگوں کے لیے جنہوں نے ATL کے ساتھ کام نہیں کیا، ہم مختصر طور پر اہم صلاحیتوں اور خصوصیات کی فہرست دیتے ہیں۔
خاص طور پر ڈیزائن کردہ SCOM کلاس کے لیے:

  • فیکٹری کے طریقے فراہم کرتا ہے جو آپ کو کسی دوسرے جزو سے صرف اس کا نام جانتے ہوئے کلاس بنانے کی اجازت دیتا ہے (عمل درآمد کو ظاہر کیے بغیر)
  • حوالہ شمار کرنے والا سمارٹ پوائنٹر انفراسٹرکچر فراہم کرتا ہے۔ SCOM کلاس لائف ٹائم کو دستی طور پر مانیٹر کرنے کی ضرورت نہیں ہے۔
  • آپ کو یہ جاننے کی اجازت دیتا ہے کہ آیا کوئی آبجیکٹ ایک مخصوص انٹرفیس کو لاگو کرتا ہے اور خود بخود ایک پوائنٹر کو آبجیکٹ میں پوائنٹر کو انٹرفیس میں تبدیل کرتا ہے۔
  • ایک سروس آبجیکٹ بنائیں جو ہمیشہ get_service طریقہ وغیرہ کے ذریعے قابل رسائی ہو۔

مثال کے طور پر، آپ json.dll جزو میں JSON (مثال کے طور پر JSONStreamReader) پڑھنے کے لیے ایک کلاس کی وضاحت کر سکتے ہیں۔
کلاسز اور مثالیں دوسرے اجزاء سے بنائی جا سکتی ہیں؛ انہیں SCOM مشین میں رجسٹر کرنے کی ضرورت ہے:

SCOM_CLASS_ENTRY(JSONStreamReader)

یہ میکرو ایک خاص سٹیٹک ریکارڈر کلاس کی وضاحت کرے گا، جس کا کنسٹرکٹر اس وقت بلایا جائے گا جب جزو کو میموری میں لوڈ کیا جائے گا۔
اس کے بعد، آپ کسی دوسرے جزو میں اس کی مثال بنا سکتے ہیں:

IJSONStreamReaderPtr jsonReader = create_instance<IJSONStreamReader>(SCOM_CLSIDOF(JSONStreamReader));

خدمات کو سپورٹ کرنے کے لیے، SCOM ایک اضافی، بلکہ پیچیدہ انفراسٹرکچر پیش کرتا ہے۔ اس کا مرکز ایک SCOM عمل کا تصور ہے، جو خدمات کو چلانے کے لیے ایک کنٹینر کے طور پر کام کرتا ہے (یعنی، سروس لوکیٹر کا کردار ادا کرتا ہے)، اور اس میں مقامی وسائل کا پابند بھی ہوتا ہے۔ SCOM عمل OS دھاگے سے جڑا ہوا ہے۔ اس کا شکریہ، درخواست کے اندر آپ اس طرح کی خدمات حاصل کر سکتے ہیں:

SCOM_Process* process = core::current_process();
if (process)
         return get_service<IMyService>(process);

مزید برآں، ایک دھاگے سے منسلک منطقی (SCOM) عمل کو تبدیل کرکے، آپ ایسی ایپلی کیشنز حاصل کرسکتے ہیں جو معلومات کی جگہ کے نقطہ نظر سے عملی طور پر آزاد ہیں، اسی دھاگے میں چلتی ہیں۔ اس طرح ہمارا پتلا کلائنٹ فائل ڈیٹا بیس کے ساتھ کام کرتا ہے - ایک OS پراسیس کے اندر دو SCOM پروسیس ہوتے ہیں، ایک کلائنٹ کے ساتھ منسلک ہوتا ہے، اور دوسرا سرور کے ساتھ۔ یہ نقطہ نظر ہمیں کوڈ کی تحریر کو یکجا کرنے کی اجازت دیتا ہے جو مقامی فائل ڈیٹا بیس اور "حقیقی" کلائنٹ سرور ورژن دونوں میں کام کرے گا۔ اس طرح کی یکسانیت کی قیمت بہت زیادہ ہے، لیکن مشق سے پتہ چلتا ہے کہ یہ اس کے قابل ہے۔

SCOM جزو ماڈل کی بنیاد پر، کاروباری منطق اور 1C: Enterprise کا انٹرفیس حصہ دونوں لاگو ہوتے ہیں۔

یوزر انٹرفیس

ویسے، انٹرفیس کے بارے میں. ہم معیاری ونڈوز کنٹرولز استعمال نہیں کرتے؛ ہمارے کنٹرول براہ راست Windows API پر لاگو ہوتے ہیں۔ لینکس ورژن کے لیے ایک پرت بنائی گئی ہے جو wxWidgets لائبریری کے ذریعے کام کرتی ہے۔
کنٹرولز کی لائبریری 1C:Enterprise کے دوسرے حصوں پر منحصر نہیں ہے اور ہمارے ذریعہ کئی دیگر چھوٹی اندرونی افادیت میں استعمال ہوتی ہے۔

1C کی ترقی کے سالوں میں: انٹرپرائز، کنٹرولز کی ظاہری شکل بدل گئی ہے، لیکن اصولوں میں ایک سنگین تبدیلی صرف ایک بار آئی، 2009 میں، ورژن 8.2 کے اجراء اور "منظم شکلوں" کی آمد کے ساتھ۔ ظاہری شکل کو تبدیل کرنے کے علاوہ، فارم لے آؤٹ کا اصول بنیادی طور پر بدل گیا ہے - عناصر کے بہاؤ لے آؤٹ کے حق میں عناصر کی پکسل بہ پکسل پوزیشننگ کو مسترد کیا گیا تھا۔ اس کے علاوہ، نئے ماڈل میں، کنٹرولز براہ راست ڈومین آبجیکٹ کے ساتھ کام نہیں کرتے ہیں، بلکہ خصوصی DTOs (ڈیٹا ٹرانسفر آبجیکٹ).
ان تبدیلیوں نے ایک 1C:Enterprise ویب کلائنٹ بنانا ممکن بنایا جو JavaScript کنٹرولز کی C++ منطق کو نقل کرتا ہے۔ ہم پتلی اور ویب کلائنٹس کے درمیان فعال مساوات برقرار رکھنے کی کوشش کرتے ہیں۔ ایسی صورتوں میں جہاں یہ ممکن نہیں ہے، مثال کے طور پر دستیاب JavaScript API کی حدود کی وجہ سے (مثال کے طور پر، فائلوں کے ساتھ کام کرنے کی صلاحیت بہت محدود ہے)، ہم اکثر C++ میں لکھے گئے براؤزر ایکسٹینشن کا استعمال کرتے ہوئے ضروری فعالیت کو نافذ کرتے ہیں۔ ہم فی الحال Internet Explorer اور Microsoft Edge (Windows)، Google Chrome (Windows)، Firefox (Windows اور Linux) اور Safari (MacOS) کو سپورٹ کرتے ہیں۔

اس کے علاوہ، 1C پلیٹ فارم پر موبائل ایپلیکیشنز کے لیے ایک انٹرفیس بنانے کے لیے منظم فارمز ٹیکنالوجی کا استعمال کیا جاتا ہے۔ موبائل آلات پر، آپریٹنگ سسٹم کی مقامی ٹیکنالوجیز کا استعمال کرتے ہوئے کنٹرولز کی رینڈرنگ لاگو کی جاتی ہے، لیکن فارم لے آؤٹ منطق اور انٹرفیس رسپانس کے لیے وہی کوڈ استعمال کیا جاتا ہے جیسا کہ "بڑے" 1C: انٹرپرائز پلیٹ فارم میں ہے۔

پلیٹ فارم "1C: انٹرپرائز" - ہڈ کے نیچے کیا ہے؟
لینکس OS پر 1C انٹرفیس

پلیٹ فارم "1C: انٹرپرائز" - ہڈ کے نیچے کیا ہے؟
موبائل ڈیوائس پر 1C انٹرفیس

دوسرے پلیٹ فارمز پر 1C انٹرفیس پلیٹ فارم "1C: انٹرپرائز" - ہڈ کے نیچے کیا ہے؟
ونڈوز OS پر 1C انٹرفیس

پلیٹ فارم "1C: انٹرپرائز" - ہڈ کے نیچے کیا ہے؟
انٹرفیس 1C - ویب کلائنٹ

آزاد مصدر

اگرچہ ہم ونڈوز کے تحت C++ ڈویلپرز کے لیے معیاری لائبریریوں کا استعمال نہیں کرتے ہیں (MFC، WinAPI سے کنٹرولز)، ہم تمام اجزاء خود نہیں لکھتے ہیں۔ لائبریری کا ذکر پہلے ہو چکا ہے۔ ڈبلیو ایکس ویزٹس، اور ہم بھی استعمال کرتے ہیں:

  • cURL HTTP اور FTP کے ساتھ کام کرنے کے لیے۔
  • اوپن ایس ایس ایل خفیہ نگاری کے ساتھ کام کرنے اور TLS کنکشن قائم کرنے کے لیے
  • libxml2 اور libxslt XML پارسنگ کے لیے
  • libetpan میل پروٹوکول کے ساتھ کام کرنے کے لیے (POP3، SMTP، IMAP)
  • مائمیٹک ای میل پیغامات کو پارس کرنے کے لیے
  • sqllite صارف کے نوشتہ جات کو ذخیرہ کرنے کے لیے
  • ICU بین الاقوامی کاری کے لیے

فہرست جاری ہے۔
مزید برآں، ہم ایک انتہائی ترمیم شدہ ورژن استعمال کرتے ہیں۔ گوگل ٹیسٹ и گوگل موک یونٹ ٹیسٹ تیار کرتے وقت۔
لائبریریوں کو SCOM جزو تنظیم کے ماڈل کے ساتھ موافقت کی ضرورت تھی۔
1C کا پھیلاؤ پلیٹ فارم کو اس میں استعمال ہونے والی لائبریریوں کے لیے طاقت کا بہترین امتحان بناتا ہے۔ مختلف قسم کے صارفین اور منظرنامے کوڈ کے انتہائی شاذ و نادر ہی استعمال ہونے والے علاقوں میں بھی غلطیوں کو تیزی سے ظاہر کرتے ہیں۔ ہم خود ان کو درست کرتے ہیں اور انہیں لائبریری کے مصنفین کو واپس دینے کی کوشش کرتے ہیں۔ بات چیت کا تجربہ بہت مختلف نکلتا ہے۔
ڈیولپرز cURL и libetpan پل کی درخواستوں کا فوری جواب دیں، لیکن پیچ، مثال کے طور پر، میں اوپن ایس ایس ایل ہم اسے واپس دینے میں کبھی کامیاب نہیں ہوئے۔

حاصل يہ ہوا

مضمون میں ہم نے 1C کی ترقی کے کئی اہم پہلوؤں کو چھوا: انٹرپرائز پلیٹ فارم۔ مضمون کے محدود دائرہ کار میں، ہم نے اپنی رائے میں، صرف چند دلچسپ پہلوؤں کو چھوا ہے۔
پلیٹ فارم کے مختلف میکانزم کی عمومی وضاحت مل سکتی ہے۔ یہاں.
مستقبل کے مضامین میں کون سے موضوعات آپ کے لیے دلچسپی کا باعث ہوں گے؟

1C موبائل پلیٹ فارم کو کیسے لاگو کیا جاتا ہے؟
ویب کلائنٹ کی اندرونی ساخت کی تفصیل؟
یا ہو سکتا ہے کہ آپ نئی ریلیز کے لیے خصوصیات کے انتخاب، ترقی اور جانچ کے عمل میں دلچسپی رکھتے ہوں؟

کمنٹس میں لکھیں!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں