1c ماژول برنامه مدیریت شده است که در آن اجرا می شود. ماژول های رایج چه چیزی استفاده شود

سلام به همه
امروز در نظر خواهیم گرفت ماژول های پلت فرم 1C Enterprise 8.2، تعداد آنها بیشتر از نسخه 8.1 است و گاهی اوقات تشخیص آن چندان آسان نیست.
مثال:

اگر به راهنمای 1C نگاه کنید، تعریف زیر را برای ماژول خواهید دید:
ماژول برنامه ای است به زبان داخلی سیستم 1C: Enterprise.

و اگر ساده تر است پس: ب ماژول های 1Cشامل کد اجرایی، زمانی که وسایل بصری برای توصیف تعامل اشیاء در پیکربندی کننده کافی نیست، برای واکنش به اعمال سیستم یا کاربر ضروری است. همچنین در ماژول های برنامه می توانید روش های خود را شرح دهید.

هر خط کد در یک ماژول است، این تفاوت با 1C7.7 است، جایی که کد برنامه می تواند هم در سلول های جداول طرح بندی و هم در ویژگی های عناصر فرم قرار گیرد.

بیایید ماژول هایی را که در 1C 8.2 هستند فهرست کنیم

ماژول های پلت فرم 1C Enterprise 8.2:

مدول برنامه مدیریت شده
ماژول برنامه معمولی
ماژول اتصال خارجی
ماژول جلسه
ماژول های رایج
ماژول شی
ماژول فرم
ماژول مدیر شی
ماژول مدیریت ارزش
ماژول های Recordset

بخش های اصلی ماژول:
1. بخش توصیف متغیرهای محلی از این ماژول، می توانید یک دستورالعمل کامپایل را مشخص کنید (برای همه ماژول ها وجود ندارد).
2. بخش تشریح روشها و عملکردها. اگر یک دستورالعمل کامپایل ننویسید، به طور پیش فرض & AtServer است، ترتیب رویه ها و توابع مهم نیست.
3. بخش برنامه اصلی ماژول (شامل چند عملگر). این بخش هنگام دسترسی به یک ماژول اجرا می شود (برای همه ماژول ها وجود ندارد).

همه ماژول ها شامل بخش های اعلام متغیر و بخش برنامه اصلی نیستند.
به عنوان مثال: ماژول مشترک یا ماژول جلسه.

قوانین تدوین ماژول:
1. برخی از ماژول ها به طور کامل یا در سمت مشتری یا در سمت سرور کامپایل می شوند. تمام متدهای موجود در آنها یا سمت کلاینت یا سمت سرور هستند. یک نمونه ماژول مشتری یک ماژول برنامه مدیریت شده است.
2. برخی از ماژول ها می توانند روش های سرویس گیرنده و سرور را ترکیب کنند. در این صورت، برای هر روش، باید دستورالعمل های کامپایل - & AtClient یا & AtServer را مشخص کنید. یک مثال ماژول های فرم مدیریت شده است.

طبقه بندی ماژول ها:
1. اتاق های سرور. فقط در سمت سرور کامپایل شده است - ماژول شی، ماژول مدیر، ماژول مجموعه رکورد.
2. سمت مشتری. فقط بر روی مشتری، مانند ماژول برنامه مدیریت شده، کامپایل شده است.
3. ترکیبی. قابل کامپایل بر روی سرور و کلاینت - ماژول فرم و ماژول های رایج.

جایی که ماژول ها کامپایل می شوند:
1. Thin Client (امکان استفاده از مرورگر وب را فراهم می کند).
2. سرور.
3. مشتری ضخیم.

همانطور که می بینید، تعداد ماژول های کمی وجود ندارد، تقریباً هر جسم پیکربندی یک ماژول دارد که هدف خاص خود را دارد.

هدف هر ماژول 1C 8.2

نگهبانان:به خرید 1C Enterprise فکر کردید و نمی دانید از چه کسی؟ شرکت LBS در 20 شرکت برتر 1C: Franchisees گنجانده شده است. او درگیر اتوماسیون حسابداری بر اساس محصولات 1C است. محصولات 1C را از LBS خریداری کنید و پشتیبانی و خدمات با کیفیت 1C را دریافت کنید.

P.S. به حکایت لوکاشنکا بخند))

ماژول ها چیست و دقیقا برای چه چیزی در نظر گرفته شده اند؟ ماژول حاوی کد برنامه است. علاوه بر این، شایان ذکر است که بر خلاف پلتفرم 7.7 که کد می تواند هم در ویژگی های عناصر فرم و هم در سلول های جداول طرح بندی قرار گیرد، در پلت فرم 8.x هر خط کد باید در هر ماژول قرار گیرد. معمولاً یک ماژول از سه بخش تشکیل شده است - این بخشی است که متغیرها را توصیف می کند، بخشی که رویه ها و توابع را توصیف می کند و همچنین بخشی از برنامه اصلی است. این ساختار تقریباً برای همه ماژول‌های پلت فرم معمولی است، به استثنای برخی موارد. برخی از ماژول ها بخش اعلان متغیر و بخش برنامه اصلی ندارند. به عنوان مثال، Session Module و هر ماژول مشترک.

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

ماژول برنامه

ماژول به گونه ای طراحی شده است که لحظات راه اندازی برنامه (بارگیری پیکربندی) و پایان آن را دریافت کند. و مراحل بررسی را می توان در رویدادهای مربوطه قرار داد. به عنوان مثال، در شروع برنامه، هر گونه داده پیکربندی مرجع را به روز کنید، در پایان کار، بپرسید که آیا اصلاً ارزش ترک آن را دارد یا خیر، شاید روز کاری هنوز تمام نشده است. علاوه بر این، رویدادهای تجهیزات خارجی، به عنوان مثال، تجارت یا مالی را رهگیری می کند. لازم به ذکر است که ماژول برنامه تنها در صورت راه اندازی تعاملی، رویدادهای توصیف شده را رهگیری می کند. آن ها هنگامی که خود پنجره برنامه ایجاد می شود. اگر برنامه در حالت اتصال راه اندازی شود، این اتفاق نمی افتد.

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

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

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

ماژول اتصال خارجی

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

مانند ماژول برنامه، بخش هایی که متغیرها، روش ها و بخشی از برنامه اصلی را توصیف می کنند، در اینجا موجود است. شما همچنین می توانید متغیرها و روش های صادرات را اعلام کنید. تفاوت این است که در حالت com-connection، تمام کارها با infobase در سمت سرور انجام می شود، بنابراین ماژول اتصال خارجی منحصراً روی سرور کامپایل می شود. بر این اساس، متغیرهای صادرات و روش های ماژول های مشتری رایج در آن موجود نیست.

ماژول جلسه

این یک ماژول بسیار تخصصی است و صرفاً برای مقداردهی اولیه پارامترهای جلسه در نظر گرفته شده است. چرا باید ماژول خود را برای این کار بسازید؟ این به دلیل این واقعیت است که فرآیند اولیه سازی ممکن است نیاز به اجرای برخی از کدها داشته باشد و علاوه بر این، برنامه می تواند تحت کلاینت های مختلف (که منجر به اجرای ماژول های مختلف برنامه یا ماژول اتصال خارجی می شود) و پارامترهای جلسه راه اندازی شود. باید در هر حالت راه اندازی مقداردهی اولیه شود. بنابراین، یک ماژول اضافی مورد نیاز بود که در هر حالت راه اندازی برنامه اجرا می شود.

یک رویداد SessionParameterSetting در ماژول جلسه وجود دارد که در ابتدا اجرا می شود، حتی قبل از رویداد ماژول برنامه BeforeSystemWorking. بخش اعلام متغیر و بخش برنامه اصلی در آن موجود نیست. و همچنین نمی توانید روش های صادرات را اعلام کنید. ماژول در سمت سرور کامپایل شده است.

وسوسه نشوید که هر بار که برنامه راه اندازی می شود، این ماژول اجرا می شود و کدهایی را در آن قرار دهید که مستقیماً به مقدار دهی اولیه پارامترهای جلسه مربوط نمی شود. این به این دلیل است که کنترلر SessionParameterSetting را می توان به طور مکرر در طول عملیات سیستم فراخوانی کرد. به عنوان مثال، این اتفاق زمانی می افتد که ما به پارامترهای اولیه اولیه دسترسی پیدا می کنیم. و اگرچه امکان گرفتن لحظه اولین راه‌اندازی این رویداد وجود دارد (RequiredParameters از نوع Undefined است)، اما باید توجه داشت که این ماژول در حالت امتیازی کامپایل شده است. حقوق دسترسی را کنترل نمی کند. و نکته دوم اینکه هنوز نمیتوانیم صد در صد از راه اندازی سیستم مطمئن باشیم. ناگهان، خرابی در ماژول برنامه رخ می دهد و ما سعی می کنیم برخی از اقدامات را با پایگاه داده انجام دهیم.

ماژول های رایج

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

  • این یک قانون خوب است که از پرچم جهانی در همه جا استفاده نکنید. این کار زمان راه اندازی برنامه را کوتاه می کند و همچنین خوانایی کد را بهبود می بخشد (البته اگر ماژول عمومی نام معنی داری داشته باشد).
  • استفاده از بیش از یک پرچم تلفیقی توصیه نمی شود. روش‌های زیادی وجود ندارد که نیاز به انجام در زمینه‌های مختلف داشته باشند، و اگر چنین روش‌هایی همچنان مورد نیاز باشند، می‌توان یک ماژول مشترک جداگانه برای آنها تشخیص داد.
  • پرچم "Call Server" فقط در صورتی معنی دارد که ماژول "On Server" کامپایل شده باشد. بنابراین، برای جلوگیری از مشکلات مختلف، باید تیک تمام پرچم‌های کامپایل دیگر را بردارید.
  • اگر در روش های ماژول پردازش انبوه داده ها، خواندن و نوشتن در پایگاه داده وجود دارد، برای افزایش سرعت کار، بهتر است با تنظیم پرچم "Privileged" کنترل دسترسی را غیرفعال کنید. این حالت فقط برای ماژول های به اشتراک گذاشته شده در سرور در دسترس است.

ماژول فرم

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

ماژول شی

این ماژول برای بسیاری از اشیاء پیکربندی معمولی است و در حالت کلی برای پردازش رویدادهای شی در نظر گرفته شده است. به عنوان مثال، رویدادهای ضبط و حذف اشیا، رویداد ارسال اسناد و غیره.

برخی از رویدادهای ماژول شی، رویدادهای ماژول فرم را کپی می کنند. به عنوان مثال، ضبط رویدادها. با این حال، باید درک کرد که رویدادهای ماژول فرم منحصراً بر روی فرم خاص شی اجرا می شود. به طور کلی، می تواند چندین مورد از این اشکال وجود داشته باشد. و رویدادهای ماژول شی در هر صورت حتی در لحظه فراخوانی می شوند کار برنامه ایبا شی بنابراین، اگر نیاز به اجرای کد در همه موارد دارید، بهتر است از رویدادهای ماژول شی برای این کار استفاده کنید.

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

ماژول مدیر شی

این ماژول برای بسیاری از اشیاء پیکربندی وجود دارد. هدف اصلی این ماژول تعریف مجدد رویداد انتخاب استاندارد است که در لحظه ورودی به خط رخ می دهد و عملکرد مدیر را گسترش می دهد. ماژول در سمت سرور کامپایل شده است. امکان تعریف ویژگی ها و روش های صادرات وجود دارد. فراخوانی روش های صادرات مدیر نیازی به ایجاد خود شیء ندارد.

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

افسانه روی نمودار: О.М. مشتری - ماژول مشترک مشتری. O. M. سرور - ماژول مشترک سرور. م.ف. مشتری - رویه های مشتری ماژول فرم. م.ف. سرور - رویه های سرور ماژول فرم.

چاپ (Ctrl + P)

اشیایی که در شاخه درخت پیکربندی ماژول‌های عمومی قرار دارند، حاوی متون توابع و رویه‌هایی هستند که می‌توانند از هر ماژول پیکربندی دیگری فراخوانی شوند.
توجه! یک ماژول مشترک فقط می تواند شامل تعاریف رویه ها و توابع باشد.
رویه‌ها و توابع متداول ماژول که سرفصل‌ها نشان می‌دهند کلمه کلیدیصادرات از جمله قطعات جزءزمینه جهانی می‌توانید در بخش «قالب متون منبع» درباره مراحل نوشتن در ماژول عمومی اطلاعات بیشتری کسب کنید ماژول های نرم افزاری"و" اپراتورها "از زبان تعبیه شده کمک می کنند.
برای ویرایش یک ماژول معمولی، در پالت خصوصیات یک شی از نوع Common Modules در پنجره Configuration، در ویژگی Module، روی پیوند Open کلیک کنید. متن ماژول عمومی برای ویرایش در ویرایشگر متن سیستم 1C: Enterprise در حالت ویرایش متن ماژول برنامه صادر می شود.
ماژول مشترک که بخشی از پیکربندی است، فقط به عنوان بخشی از پیکربندی ذخیره می شود.
ویژگی Global تعیین می کند که آیا روش های صادراتی ماژول مشترک بخشی از زمینه جهانی هستند یا خیر.
اگر ویژگی Global روی True تنظیم شود، روش های صادر شده ماژول مشترک به عنوان روش های زمینه جهانی در دسترس هستند.
اگر ویژگی Global روی False تنظیم شده باشد، یک ویژگی در زمینه جهانی با نامی ایجاد می شود که با نام ماژول رایج در ابرداده مطابقت دارد. این ویژگی فقط خواندنی است. مقدار این ویژگی شی CommonModule است. روش های صادراتی این ماژول مشترک از طریق این شی در دسترس هستند. بنابراین، فراخوانی متدهای ماژول‌های رایج غیرجهانی شبیه XXXXX.YYYYY است، که در آن XXXXX نام ویژگی مربوط به زمینه ماژول مشترک است و YYYYY نام متد صادر شده از ماژول مشترک است.
مثال:

WorkSales Equipment.ConnectBarcode Scanner ();

زمینه های مختلف و ماژول های مشترک

با استفاده از ویژگی های ماژول های رایج و دستورالعمل های پیش پردازنده، می توانید اجرای روش های مختلف ماژول های رایج را در زمینه مورد نظر سازماندهی کنید.
هر ویژگی یک ماژول مشترک مسئول کامپایل (و اجرای) یک ماژول مشترک در یک زمینه خاص است.
ویژگی های زیر در دسترس هستند که مسئول زمینه ای هستند که متدهای ماژول مشترک در آن در دسترس هستند:
مشتری (برنامه معمولی)- روش های ماژول مشترک در حالت برنامه معمولی برای مشتری ضخیم در دسترس خواهد بود.
● - متدهای ماژول مشترک برای تین کلاینت، وب کلاینت و همچنین برای کلاینت ضخیم در دسترس خواهد بود.
حالت برنامه مدیریت شده؛
● سرور - روش های ماژول مشترک در سرور در دسترس خواهد بود.
اتصال خارجی- روش های ماژول مشترک در دسترس خواهد بود اتصال خارجی.
اگر چندین ویژگی به طور همزمان تنظیم شود، به این معنی است که متدهای ماژول مشترک در چندین زمینه در دسترس خواهند بود.
اگر یک ماژول مشترک دارای ویژگی Server و مجموعه ای از ویژگی های دیگر باشد، به این معنی است که ماژول مشترک به طور همزمان روی سرور و در کلاینت انتخاب شده در دسترس خواهد بود. باید درک کرد که در واقع چندین نسخه از کد کامپایل شده (با توجه به تعداد مشتریان انتخاب شده و برای خود سرور) خواهد بود.
علاوه بر این، اگر روش واقع در چنین ماژول مشترکی از سمت کلاینت فراخوانی شود، از کپی مشتری ماژول مشترک استفاده می شود و اگر از سرور - کپی سرور استفاده شود. در این مورد، با استفاده از دستورالعمل های پیش پردازنده (جزئیات را در اینجا ببینید)، می توانید سرور را در برابر کدهایی که نمی توان روی آن اجرا کرد، محافظت کنید.
بیایید به یک مثال نگاه کنیم. در یک ماژول مشترک (که می تواند بر روی تین مشتریو روی سرور) روشی وجود دارد که در سمت تین کلاینت و سمت سرور کمی رفتار متفاوتی دارد. بیایید ببینیم چگونه می توانید این کار را انجام دهید:



# If Thin Client سپس
// نمایش یک هشدار
نمایش هشدار کاربر("در مورد مشتری")؛
#EndIf
پایان رویه
سپس، در سمت سرور، کد به شکل زیر است:
روش روش CommonModule ()صادرات
// کدهای مهم مختلف اینجا قرار می گیرد
پایان رویه
در سمت تین کلاینت، کد به شکل زیر خواهد بود:
ProcedureCommonModuleMethod () صادرات
// کدهای مهم مختلف اینجا قرار می گیرد
// نمایش یک هشدار
ShowUserNotification ("روی مشتری")؛
پایان رویه

چندین روش برای انتقال کنترل از کلاینت به سرور وجود دارد:
● یک روش از ماژول مشترک سرور را فراخوانی کنید.
● در یک فرم یا ماژول فرمان، متدی را فراخوانی کنید که قبل از آن دستورالعمل های کامپایل وجود دارد & AtServer، & AtServerWithoutContext

در عین حال، فراخوانی متدهای ماژول های مشترک کلاینت (که ویژگی Server برای آنها تنظیم نشده است) و روش های مشتری یک ماژول فرم یا ماژول فرمان از رویه های سرور غیرممکن است. کنترل پس از تکمیل فراخوانی خارجی به روش سرور به مشتری باز می گردد.
استثنا متدهای ماژول فرم و ماژول فرمان است که قبل از آنها دستورالعمل های کامپایل وجود دارد. & OnClientOnServer, & OnClientOnServerWithout Context
همچنین باید به نکات زیر اشاره کرد:
● اگر یک ماژول مشترک برای بیش از یک کلاینت در دسترس است، هنگام نوشتن کد، حداکثر محدودیت‌هایی را که کلاینت‌ها ممکن است اعمال کنند، در نظر بگیرید، یا از دستورالعمل‌های پیش‌پردازنده برای "ایزوله کردن" کدهای ویژه کلاینت استفاده کنید.
● دستورالعمل‌های پیش‌پردازنده همچنین زمانی معنا پیدا می‌کنند که یک ماژول مشترک دارای چندین زمینه اجرایی باشد، به عنوان مثال، یک اتصال خارجی و یک مشتری نازک، یا (که بسیار رایج‌تر است) یک کلاینت و سرور. در این مورد، دستورالعمل‌های پیش‌پردازنده، کدهای تعاملی را که نمی‌توان در سرور استفاده کرد، اما روی کلاینت امکان‌پذیر است، قاب می‌کند (نمونه بالا را ببینید).
برای اطلاعات بیشتر در مورد دستورالعمل‌های پیش‌پردازنده و دستورالعمل‌های کامپایل، به بخش رویه‌ها و توابع اجرا از راهنمای زبان تعبیه‌شده مراجعه کنید.
ویژگی Call server برای کنترل توانایی فراخوانی روش های صادر شده ماژول مشترک سرور از کد مشتری استفاده می شود.
اگر ویژگی تنظیم شده باشد، روش های صادر شده ماژول مشترک سرور برای تماس از مشتری در دسترس هستند. اگر ویژگی تنظیم نشده باشد، چنین روش های صادر شده را فقط می توان از روش های سمت سرور فراخوانی کرد (هر دو روش ماژول های رایج سمت سرور و روش های سمت سرور ماژول فرم و ماژول های فرمان).
نصیحت. توصیه می‌شود در مواردی که ماژول مشترک سرور شامل روش‌هایی است که نمی‌خواهید از سوی کلاینت تماس بگیرید (مثلاً به دلایل امنیتی) ویژگی Call server را روی False تنظیم کنید.
توجه داشته باشید... اگر خواص همزمان تنظیم شوند مشتری (برنامه معمولی), مشتری (برنامه مدیریت شده), اتصال خارجی، سپس ویژگی Server Call به طور خودکار پاک می شود. اگر ویژگی Call server تنظیم شده باشد، ویژگی ها به طور خودکار بازنشانی می شوند. مشتری (برنامه معمولی), مشتری (برنامه مدیریت شده)و اتصال خارجیاگر این خصوصیات به طور همزمان تنظیم شوند.
ویژگی ممتازبرای غیرفعال کردن کنترل دسترسی هنگام اجرای روش های یک ماژول مشترک در نظر گرفته شده است.
توجه داشته باشید. اگر ملک ممتازتنظیم می شود، سپس ویژگی Server به طور خودکار روی ماژول مشترک تنظیم می شود و بقیه ویژگی ها بازنشانی می شوند ( مشتری (برنامه معمولی), مشتری (برنامه مدیریت شده)و در اتصال خارجی). یک ماژول اشتراکی ممتاز فقط می تواند روی سرور اجرا شود.

استفاده مجدد از مقادیر بازگشتی

اگر ماژول مشترک جهانی نباشد، ویژگی Return value reuse در دسترس می شود. این ویژگی می تواند مقادیر زیر را داشته باشد:
● استفاده نکنید — استفاده مجدد از مقدار بازگشتی برای عملکردهای این ماژول رایج استفاده نمی شود.
● در زمان تماس و در زمان جلسه — روش تعیین استفاده مجدد از داده برای ماژول مشترک استفاده می شود. ماهیت این روش این است که در هنگام اجرای کد، سیستم پارامترها و نتیجه تابع را پس از اولین فراخوانی تابع به خاطر می آورد. وقتی تابع با همان پارامترها دوباره فراخوانی می شود، مقدار ذخیره شده (از اولین تماس) بدون اجرای خود تابع برگردانده می شود. اگر تابع در حین اجرای خود مقادیر پارامترها را تغییر دهد، فراخوانی مکرر تابع این کار را انجام نخواهد داد.
ویژگی های زیر برای ذخیره نتایج تماس قابل تشخیص است:
● اگر تابع در سرور اجرا شود و از کد سرور فراخوانی شود، مقادیر پارامتر و نتیجه تماس برای جلسه فعلی در سمت سرور ذخیره می شود.
● اگر تابع روی یک کلاینت ضخیم یا نازک اجرا شود، مقادیر پارامترها و نتایج تماس در سمت مشتری ذخیره می شود.
● اگر تابع در سمت سرور اجرا شود، اما از کد مشتری فراخوانی شود، مقادیر پارامترهای تماس هم در سمت مشتری و هم در سمت سرور (برای جلسه فعلی) به خاطر سپرده می شوند.
مقادیر ذخیره شده حذف می شوند:
● اگر ویژگی در زمان تماس تنظیم شده باشد:
● در سمت سرور - هنگامی که کنترل از سرور برگردانده می شود.
● در سمت سرویس گیرنده - زمانی که یک رویه یا عملکرد زبان سطح بالا تعبیه شده (که توسط سیستم از رابط فراخوانی می شود و نه از رویه یا عملکرد دیگری از زبان تعبیه شده) پایان می یابد.
● اگر ویژگی ماژول مشترک روی For time of session تنظیم شده باشد:
● در سمت سرور - در پایان جلسه.
● در سمت مشتری - زمانی که برنامه مشتری بسته است.
مقادیر ذخیره شده حذف خواهند شد:
● روی سرور، در fat Client، در اتصال خارجی، در تین کلاینت و در وب کلاینت با سرعت اتصال معمولی - 20 دقیقه پس از محاسبه مقدار ذخیره شده یا 6 دقیقه پس از آخرین استفاده.
● در تین کلاینت و سرویس گیرنده وب با سرعت اتصال کم - 20 دقیقه پس از محاسبه مقدار ذخیره شده.
● در صورت کمبود حافظه دسترسی تصادفیدر گردش کار سرور؛
● هنگام راه اندازی مجدد یک گردش کار.
● هنگامی که یک مشتری به یک جریان کاری متفاوت تغییر می کند.
پس از حذف مقادیر، فراخوانی تابع صادر شده مانند تماس اول انجام می شود.
این ویژگی ماژول های رایج بر اجرای رویه ها تأثیر نمی گذارد - رویه ها همیشه اجرا می شوند.

اگر یک ماژول مشترک برای استفاده مجدد از مقادیر بازگشتی تنظیم شده باشد، تعدادی محدودیت بر روی انواع پارامتر توابع صادر شده اعمال می شود. انواع پارامتر فقط می تواند باشد:
● انواع اولیه ( تعریف نشده، NULL، بولی، عدد، رشته، تاریخ).
● هرگونه ارجاع به اشیاء پایگاه داده.
● سازه هایی با مقادیر دارایی از انواع فوق. در این حالت، هویت پارامترها "توسط محتوای" ساختارها کنترل می شود.
اگر تابع صادراتی هر شی را برگرداند، در واقع یک مرجع به شی ذخیره شده در حافظه پنهان بازگردانده می شود. اگر پس از دریافت این مرجع، تغییری در وضعیت شی ایجاد شود، پس فراخوانی بعدی به همان تابع منجر به بازگشت یک مرجع به شی از قبل تغییر یافته بدون اجرای واقعی تابع خواهد شد. این رفتار تا زمانی که مقدار ذخیره شده (به هر دلیلی) حذف نشود ادامه خواهد داشت. به عبارت دیگر - تغییر وضعیت یک شی به دست آمده در نتیجه فراخوانی یک تابع از یک ماژول مشترک با استفاده مجددمقادیر بازگشتی مبنای فراخوانی تابع واقعی نیست. همچنین باید به خاطر داشت که حافظه پنهان اشیاء برگشتی نسبت به آن بی تفاوت است
وضعیت حالت ممتاز در زمان فراخوانی تابع با استفاده مجدد از مقادیر بازگشتی. این ویژگی می تواند منجر شود ویژگی بعدیرفتار - اخلاق:
● اجرای واقعی فراخوانی تابع با استفاده مجدد از مقادیر برگشتی (اولین تماس) با فعال بودن حالت ممتاز انجام شد.
● هنگام اجرای تابع، یک شی دریافت شد که با غیرفعال کردن حالت ممتاز قابل دریافت نیست.
● فراخوانی های تابع بعدی بدون تنظیم حالت ممتاز انجام شد.
● با این حال، تا زمانی که حافظه پنهان اشیاء برگشتی پاک شود یا تماس واقعی تکرار نشود، تابع یک شیء غیرقابل دسترس را برمی گرداند.
● برعکس نیز صادق است، زمانی که اولین تماس بدون تنظیم حالت ممتاز انجام می شود و در حالت ممتاز، شیئی که می توانست در حالت ممتاز به دست آید، برگردانده نمی شود.

اگر یک ماژول مشترک دارای ویژگی باشد استفاده مجدد از مقادیر بازگشتیبرای مدت زمان جلسه، سپس مقادیر نوع تنظیم شده است مدیر جدول موقت.
اگر تابعی از یک ماژول مشترک، با استفاده مجدد از مجموعه، از همان ماژول مشترک فراخوانی شود (مثلاً با نام CommonModule)، ویژگی زیر را به خاطر بسپارید: اگر تابع با نام MyFunction () فراخوانی شود، سپس هر بار که تابع فراخوانی شود، تابع اجرا خواهد شد... برای استفاده از مقادیر ذخیره شده، تابع باید با نام کامل آن فراخوانی شود:
CommonModule.MyFunction ().
روش زمینه جهانی همه مقادیر قابل استفاده مجدد را، هم در سمت سرور و هم سمت سرویس گیرنده، صرف نظر از اینکه روش فراخوانی شده است، حذف می کند. پس از اجرای روش RefreshReusedValues ​​()اولین فراخوانی تابع به طور کامل اجرا می شود.

تقریباً تمام اشیاء پیکربندی دارای یک ماژول مدیر و برای اکثر آبجکت ها یک ماژول شی هستند. اغلب برنامه نویسان تازه کار تفاوت در هدف این دو ماژول را درک نمی کنند.

درک تفاوت در هدف آنها به شما امکان می دهد یک کد برنامه ساختارمندتر بنویسید و در برخی موارد منابع سرور 1C را ذخیره کنید و عملکرد راه حل برنامه را افزایش دهید.

در این مقاله، تفاوت های اساسی بین این ماژول ها را هم از بعد تئوری و هم در یک مثال کاربردی خاص بررسی خواهیم کرد.

تئوری

بیایید به اصول برنامه نویسی شی گرا (OOP) بپردازیم و با مثال خود قیاسی را ترسیم کنیم. در OOP، متدهای مربوط به اشیا را می توان به دو دسته تقسیم کرد ایستا و ساده. روش های سادهفقط می توان برای یک شی خاص که در زمینه فعلی کد برنامه به آن دسترسی داریم فراخوانی شد. روش های استاتیک دسترسی مستقیم به داده های شی ندارند. برای اشاره به یک شی، ابتدا باید یک نمونه از آن ایجاد کنید. همین امر در مورد پلتفرم 1C: Enterprise 8.x نیز صدق می کند.

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

بیایید از تئوری به عمل برویم.

تمرین

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

روش چاپ در ماژول شی

در ماژول شی دایرکتوری، تابع زیر را اضافه کنید:

// ارجاع به عنصر مرجع را به تابع منتقل کنیدتابع PrintSelected Items (پیوند) صادرات TabDoc = سند جدولی جدید. چیدمان = مراجع. کالاها دریافت طرح بندی ("طرح بندی")؛ درخواست = درخواست جدید; استعلام متن = "انتخاب | محصولات ... نمایندگی AS محصول،| کالاها ... حذف علامت،| کالاها ... کد فروشنده |از جانب| فهرست راهنما ... محصولات AS محصولات| کجا | کالاها ... پیوند در (&ArrayProducts)"؛ درخواست. SetParameter ("ArrayProducts", Link); // انتخاب را با پیوند تنظیم کنید

کد برنامه به طور کامل توسط طراح چاپ تولید می شود. تنها چیزی که قابل توجه است انتخاب با ارجاع به آیتم کاتالوگ "محصولات" در درخواست است. مرجع به عنوان یک پارامتر به تابع ارسال می شود. در نتیجه فراخوانی تابع "PrintSelected Items"، سند صفحه گستردهبا یک کالای پر شده

کد برنامه برای فراخوانی متد شی "PrintSelected Items" با دستور فرم "Print" در لیست زیر نشان داده شده است:

رویه چاپ و روی مشتری (فرمان) // فراخوانی رویه سرور برای دریافت سند صفحه گسترده تولید شده TabDoc = PrintServer (); // سند صفحه گسترده تولید شده را نشان دهید TabDoc. نمایش () ; EndProcedure & AtServer Function PrintServer () // شی فرم را به شی کاتالوگ "محصولات" تبدیل کنید تا تابع را از ماژول شیء فراخوانی کنید ObjectGood = FormInValue ("Object"); // رویه ماژول شی را فراخوانی می کنیم و پیوندی را به آیتم فرهنگ لغت فعلی منتقل می کنیم. نتیجه // به سمت مشتری بازگردیدآیتم شی را برگردانید. چاپ اقلام انتخابی (شیء. پیوند). EndFunction

بنابراین، ما عنصر فعلی دایرکتوری را چاپ کرده ایم و با شی آن کار می کنیم. اما به این وظیفه گفته شد که لیستی از محصولاتی را که خود کاربر باید انتخاب کند چاپ کند. هنگام کار با یک شی، چنین فرصتی را به کاربر بدهید راه سادهممکن به نظر نمی رسد چاپ از لیست اقلام موجود در کاتالوگ "محصولات" بسیار صحیح است.

روش چاپ در ماژول مدیر

روش صادرات زیر را به ماژول مدیر دایرکتوری اضافه کنید:

// مجموعه ای از پیوندها را به محصولات ارسال کنیدتابع چاپ اقلام انتخاب شده (آرایه اقلام) صادرات TabDocs = سند جدولی جدید. چیدمان = مراجع. کالاها دریافت طرح بندی ("طرح بندی")؛ درخواست = درخواست جدید; استعلام متن = "انتخاب | محصولات ... نمایندگی AS محصول،| کالاها ... حذف علامت،| کالاها ... کد فروشنده |از جانب| فهرست راهنما ... محصولات AS محصولات| کجا | کالاها ... پیوند در (&ArrayProducts) SetParameter ("Array of Goods", Array of Goods); // انتخاب را بر اساس آرایه تنظیم کنیدنتیجه = درخواست اجرا کن ()؛ AreaHeader = Layout. GetScope ("عنوان")؛ AreaFooter = Layout. GetArea ("زیرزمین")؛ AreaTablesHead = Layout. GetArea ("Tablehead")؛ AreaFooterTables = Layout. GetArea ("پانویس جدول")؛ DetailRecords Area = Layout. GetArea ("جزئیات")؛ TabDoc. پاک کردن (); TabDoc. نمایش (ScopeHeader)؛ TabDoc. نمایش (ScopeTableHap)؛ TabDoc. StartAutoGroupLines (); SampleDetailed Records = نتیجه. انتخاب کنید() ؛ در حالی که SampleDetailed Records. بعد () Loop DetailRecords Area. گزینه ها. پر کردن (SelectionDetailed Records); TabDoc. خروجی (DetailRecordsArea، SelectionDetailRecords. Level ()); پایان چرخه؛ TabDoc. EndAutoGroupLines (); TabDoc. خروجی (ScopeTableFootball); TabDoc. نمایش (AreaFooter)؛ بازگشت TabDoc; EndFunction

تفاوت اصلی با یک تابع در یک ماژول شی، پارامتر تابع است. اکنون آرایه ای با پیوندهایی به محصولاتی که باید چاپ شوند به عنوان پارامتر ارسال می شود.

کد برنامه ماژول فرمان فرم "Print" به شکل زیر است:

& در رویه مشتری چاپ (فرمان) TabDoc = PrintServer (); TabDoc. نمایش () ; EndProcedure & AtServer Function PrintServer () // آرایه ای از پیوندهای محصولات انتخاب شده را در فهرست دایرکتوری ارسال کنید // به عملکرد ماژول مدیر "PrintSelected Items"راهنماهای بازگشت. کالاها PrintSelectedProducts (Items. List. SelectedLines); EndFunction

در این حالت، نتیجه اجرای دستور در حالت 1C: Enterprise به صورت زیر خواهد بود:

در صورت استفاده از متد از ماژول manager، می‌توانیم بدون دریافت شیء برای هر پیوند، به داده‌های فهرست «محصولات» دسترسی داشته باشیم. از آنجایی که گرفتن یک شی به معنای دریافت تمام داده ها از پایگاه داده برای یک عنصر مرجع و قرار دادن داده های دریافتی در RAM است، اجرای کار به روش دوم تأثیر مثبتی بر عملکرد خواهد داشت. در واقع، در این مورد، ما از حداقل منابع (RAM) ماشین سرور استفاده خواهیم کرد.

چه چیزی باید استفاده کنید؟

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

V پیکربندی معمولی"مدیریت تجارت" نسخه 11 یک ماژول مدیریت پرکاربرد برای چاپ اسناد است. اگر به پیکربندی "Manufacturing Enterprise Management" نگاه کنید، ماژول مدیر عملا استفاده نمی شود، زیرا پیکربندی در نسخه های قدیمی تر پلت فرم نوشته شده است، جایی که این مکانیسم به طور کامل پشتیبانی نمی شود.

پیکربندی با مثال هایی از مقاله.

ماژول های پلت فرم 1C: Enterprise 8.3، 8.2

ماژول های رایج

توابعی که با پرچم "صادرات" در چنین ماژولی اعلام می شوند را می توان از هر نقطه از پیکربندی فراخوانی کرد. تماس از طریق CommonModuleName.FunctionName () انجام می شود.

هیچ بخش متغیری در این ماژول ها وجود ندارد.

اجرای ماژول های رایج به پارامترهای تنظیم شده در ویژگی های آنها بستگی دارد:

پرچم "جهانی"

اگر این پرچم تنظیم شود، پس زمینه چنین ماژولی جهانی می شود. یعنی هنگام دسترسی به توابع صادراتی آن، نیازی به تعیین نام ماژول ندارید. اما نام توابع صادراتی آن باید در زمینه پیکربندی جهانی منحصر به فرد باشد.

پرچم سرور

توابع چنین ماژولی را می توان بر روی سرور اجرا کرد.

پرچم مشتری (برنامه معمولی).

توابع چنین ماژولی را می توان در حالت برنامه معمولی روی کلاینت اجرا کرد.

پرچم مشتری (برنامه مدیریت شده).

عملکردهای چنین ماژولی را می توان در حالت برنامه مدیریت شده بر روی مشتری اجرا کرد.

پرچم تماس سرور

این پرچم برای ماژول هایی با مجموعه پرچم "سرور" در دسترس است. به کاربر اجازه می دهد تا توابع صادراتی این ماژول را (برای اجرا در سرور) فراخوانی کند.

پرچم پیوستن خارجی

عملکردهای صادراتی چنین ماژولی را می توان در صورت اتصال از یک منبع خارجی فراخوانی کرد.

پرچم "ممتاز"

در یک ماژول با چنین پرچمی، بررسی حقوق غیرفعال خواهد شد. مناسب برای بهره وری یا اقدامات مدیریتی.

گزینه استفاده مجدد

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

ماژول برنامه

طراحی شده برای رسیدگی به رویدادهای راه اندازی و خاموش شدن برنامه. دو نوع وجود دارد: برای برنامه های معمولی و مدیریت شده.

آن را بیش از حد بارگذاری نکنید، زیرا این بر زمان راه اندازی برنامه تأثیر می گذارد.

ماژول جلسه

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

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

با احترام، (معلم و توسعه دهنده).