نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

اتصال کام در 1 ثانیه سه رکن کار با اشیاء COM


کلمات کلیدی: COM، اتصال، خارجی، OLE، اتوماسیون، اتصال، ComConnector، Srvr

هنگام استفاده از اتصالات COM 1C: Enterprise 8.0 برای دسترسی به داده ها، مزایای زیر در مقایسه با استفاده از سرور اتوماسیون وجود دارد:

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

  2. دسترسی سریع تر به ویژگی ها و روش های اشیاء 1C: Enterprise، زیرا سازماندهی یک دسترسی نیازی به ارتباطات بین فرآیندی ندارد.
  3. مصرف کمتر منابع سیستم عامل

به طور کلی، کار با 1C: Enterprise 8.0 از طریق اتصال COM مشابه کار با 1C: Enterprise در حالت اتوماسیون سرور است. تفاوت های اصلی به شرح زیر است:

  1. در مورد سرور Automation، یک برنامه کامل 1C: Enterprise 8.0 راه اندازی می شود و در مورد اتصال COM، یک سرور COM نسبتاً کوچک در حال پردازش راه اندازی می شود.

  2. هنگام کار از طریق اتصال COM، عملکرد به یک روش مرتبط با سازماندهی رابط کاربری 1C: Enterprise 8.0 در دسترس نیست.
  3. هنگام اجرای یک اتصال COM، ماژول برنامه پیکربندی 1C:Enterprise 8.0 استفاده نمی شود. نقش آن هنگام کار با اتصال COM توسط ماژول اتصال خارجی انجام می شود.

1.1 رویه ایجاد یک اتصال COM

برای سازماندهی دسترسی به داده های 1C: Enterprise 8.0 از طریق اتصال COM، دنباله اقدامات زیر انجام می شود:

  1. یک شی COM با شناسه V8.COMConnector ایجاد می شود که با کمک آن اتصال برقرار می شود.

  2. متد Connect شیء V8.COMConnector قبلا ایجاد شده فراخوانی می شود. روش Connect پیوندی را به یک شی اتصال COM با پایگاه اطلاعات 1C:Enterprise 8.0 برمی گرداند.
  3. از طریق شی اتصال COM دریافتی، به روش‌ها، ویژگی‌ها و اشیاء معتبر پایگاه اطلاعاتی که اتصال با آن برقرار می‌شود، دسترسی پیدا می‌کند.

مهم!به دلیل عدم وجود رابط کاربری در اتصال COM، نمی توان از همه اشیا، ویژگی ها و روش ها در اتصال COM استفاده کرد.

1C: اشیاء سازمانی قابل دسترسی خارجی از طریق اتصال COM:

  1. متغیرها و رویه ها/عملکردهای ماژول اتصال خارجی صادر شده است

  2. متغیرهای صادر شده و رویه ها/توابع ماژول های رایج
  3. شامل و حذف کل ماژول ها با تنظیم ویژگی های ماژول های رایج

  4. شامل و حذف قطعات ماژول های رایج با استفاده از یک پیش پردازنده
  5. زمینه جهانی 1C: Enterprise 8.0، به استثنای اشیایی که به طور محکم به برنامه مشتری مرتبط هستند (TextDocument، TabularDocument، ...)

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

همانطور که قبلاً ذکر شد، مسئولیت های ماژول برنامه هنگام کار از طریق اتصال COM توسط ماژول اتصال خارجی انجام می شود. این ماژول ممکن است دارای رویه های کنترل کننده رویداد When SystemStarts() و WhenSystemCompletes() باشد که به ترتیب می تواند شامل اقدامات انجام شده پس از مقداردهی اولیه و خاتمه اتصال باشد.

رویه‌ها، توابع و متغیرهای سراسری که در یک ماژول پیوستن خارجی با کلمه کلیدی Export تعریف می‌شوند، مانند مورد ماژول برنامه، بخشی از زمینه جهانی می‌شوند.

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

ویژگی های "Client"، "Server" و "External Connection" برای ماژول های رایج معرفی شده اند. آنها برای تعیین استفاده از ماژول ها در نسخه سرویس گیرنده - سرور و در حالت اتصال COM در پیکربندی در نظر گرفته شده اند.

1.4 شیء "V8.COMConnector"

تنها کار حل شده توسط شیء V8.COMConnector COM ایجاد یک اتصال COM با پایگاه اطلاعاتی 1C:Enterprise 8.0 است. تعداد نامحدودی از اتصالات را می توان با استفاده از یک نمونه از شی V8.COMConnector ایجاد کرد. شی V8.COMConnector دارای یک روش اتصال واحد است که برای ایجاد یک اتصال COM با پایگاه اطلاعات 1C:Enterprise 8.0 طراحی شده است.

<СтрокаСоединенияИБ>

خط اتصال با سیستم امنیت اطلاعات زنجیره ای از قطعات به شکل Parameter=Value است. قطعات با ";" از یکدیگر جدا می شوند. اگر مقداری حاوی فضای خالی باشد، باید آن را در دو گیومه (") قرار دهیم.

پارامترهای رایج:

Usr - نام کاربری؛
Pwd - رمز عبور.

پارامتر زیر برای نسخه فایل تعریف شده است:

فایل - دایرکتوری پایگاه اطلاعاتی.

پارامترهای زیر برای گزینه مشتری-سرور تعریف شده است:

Srvr - 1C: نام سرور سازمانی؛
Ref - نام پایگاه اطلاعاتی روی سرور.

روش Connect یک اتصال COM به پایگاه اطلاعات 1C:Enterprise 8.0 برقرار می کند و پیوندی را به شی اتصال COM برمی گرداند.

// یک شی کانکتور ایجاد می شود
V8 = COMObject جدید ("V8.COMConnector");
// یک شی اتصال COM ایجاد می شود
اتصال = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")

1.5 شی اتصال COM

یک اتصال COM به پایگاه اطلاعاتی 1C: Enterprise دسترسی کامل به زمینه جهانی آن را فراهم می کند (به «زمینه اجرای ماژول برنامه» مراجعه کنید). بنابراین، یک اتصال COM می تواند به عنوان روش های خود داشته باشد: ثابت های سیستم، مقادیر مشخص شده در پیکربندی اشیایی که با استفاده از مدیران به آنها دسترسی پیدا می کنند (به عنوان مثال، ثابت ها، شمارش ها، دایرکتوری ها، اسناد، گزارش های اسناد، گزارش ها، پردازش، طرح هایی برای انواع ویژگی ها، حساب های طرح ها، طرح های انواع محاسبات، رجیسترها) و همچنین متغیرهای اعلام شده در ماژول اتصال خارجی با کلمه کلیدی Export.

علاوه بر این، اتصال COM دارای یک روش NewObject اضافی است که می تواند برای ایجاد مقادیر از انواع خاصی استفاده شود.

tz = اتصال. NewObject ("ValueTable");

روش رشته به شما امکان می دهد نمایش رشته ای از مقادیر 1C: Enterprise را بدست آورید.

View = Connection.String(Data.UniqueIdentifier());

1.6. ویژگی های کار با اتصال COM

در Automation و در یک اتصال COM، TRUE و FALSE مقادیر زیر را دارند: -1 (منهای یک) و 0.

امکان سازماندهی مجموعه ای از اتصالات COM وجود دارد. در همان زمان، چندین شیء اتصال COM در سرور دریافت کننده 1C: Enterprise ایجاد می شود و زمان کمتری برای ایجاد یک اتصال می گیرد، زیرا نیازی به ایجاد یک شی جدید نیست.

یک شی جدید Query Builder پیاده سازی شده است که برای تولید متون پرس و جو بر اساس تنظیمات مشخص شده طراحی شده است. این شی از عملکرد سازنده گزارش پشتیبانی می کند که به خروجی گزارش به سند صفحه گسترده یا سایر وظایف مربوط به رابط کاربر مربوط نمی شود. این شی را می توان در سرور 1C: Enterprise و در یک اتصال COM استفاده کرد.

هنگام اجرای زبان داخلی در سرور 1C: Enterprise می توانید از اشیاء COM استفاده کنید.

خطاهای COM به استثناهای زبان جاسازی شده تبدیل می شوند.

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

وقتی می خواهیم داده های چند جدول را همزمان ببینیم، i.e. برای جمع آوری چندین جدول در یک جدول، مفهوم اتصال جداول و روابط بین آنها بوجود می آید. چهار نوع اتصال وجود دارد:

  • ترک کرد؛
  • درست،
  • درونی؛ داخلی؛
  • کامل.

ما به هر نوع با استفاده از یک مثال انتزاعی نگاه خواهیم کرد. 2 جدول وجود دارد، در اول اطلاعات توصیفی در مورد مورد ذخیره می کنیم، در جدول دوم در مورد موجودی آن:

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

اتصال سمت چپ

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

درخواست.متن =
"انتخاب کنید
| نامگذاری.محصول،
| Nomenclature.Color AS ColorNomenclature,
| Remains.Color AS Color Remains,
| تعادل. کمیت
|از

";

هیچ منطبقی برای صندلی از جدول باقیمانده ها وجود نداشت، بنابراین فیلدها با مقادیر NULL پر شدند، که باید توسط تابع ISNULL پردازش شوند، به 1C 8 توابع زبان پرس و جو مراجعه کنید.

اتصال سمت چپ تقریباً مانند یک حلقه در یک حلقه کار می کند - اولین رکورد را از جدول سمت چپ می گیرد و از تمام رکوردهای جدول سمت راست عبور می کند تا اطمینان حاصل شود که شرایط اتصال برقرار است. سپس رکورد دوم از جدول سمت چپ گرفته می شود و به همین ترتیب. اگر به طور ناگهانی چندین رکورد از جدول سمت راست شرایط اتصال را برآورده کند، سپس چندین ردیف به جدول حاصل اضافه می شود (با توجه به تعداد اتصالات موفق، همانطور که می بینیم، جدول به دست آمده آموزنده نیست، داده ها منعکس نمی شوند). ماهیت واقعی است، بنابراین بهتر است این جداول را با دو فیلد مرتبط کنید: Product و Color، فقط این بار NULL ها را مدیریت خواهیم کرد:

درخواست.متن =
"انتخاب کنید
| نامگذاری.محصول،
| نامگذاری.رنگ،
| ISNULL(Remaining.Quantity, 0) AS Quantity
|از
| نامگذاری AS نامگذاری
| چپ پیوستن به باقی مانده به عنوان باقی مانده
| نرم افزار Nomenclature.Product = Remaining.Product

اتصال درست

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

پیوستن داخلی

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

درخواست.متن =
"انتخاب کنید
| نامگذاری.محصول،
| نامگذاری.رنگ،
| Remainings.Quantity AS مقدار
|از
| نامگذاری AS نامگذاری
| INNER JOIN Remainders AS Remainders
| نرم افزار Nomenclature.Product = Remaining.Product
| و Nomenclature.Color = Remaining.Color";

اتصال کامل

پیوستن کامل به همه رکوردها از هر دو جدول منجر می شود، آن رکوردهایی که شرایط اتصال را برآورده می کنند متصل می شوند، رکوردهایی که شرایط اتصال را برآورده نمی کنند همچنان در نتیجه پرس و جو ختم می شوند، اما با برخی از فیلدهای NULL. Complete مانند اتصالات چپ و راست در یک است.

ممکن است مشکلات زیادی در مورد این موضوع وجود داشته باشد، بیایید سعی کنیم یکی از آنها را حل کنیم. سازمان ما فروشنده 2 کارخانه مبلمان "زاریا" و "راسوت" است. مجموعه با هزینه هر یک از کارخانه ها در جداول مختلف ذخیره می شود. لازم است یک لیست قیمت واحد تهیه کنید و محصولات را با حداقل قیمت در آن قرار دهید:

بیایید یک پیوست کامل با مجموعه ای از تمام فیلدها اعمال کنیم، ما بر اساس محصول به هم متصل خواهیم شد:

درخواست.متن =
"انتخاب کنید
| نامگذاری Zarya.Product AS ProductZarya,
| نامگذاریZarya.قیمت به عنوان قیمت Zarya,
| نامگذاری Rassvet محصول AS محصول Rassvet،
| نامگذاریRassvet.Price AS PriceRassvet
|از

این دقیقاً همان چیزی نیست که ما به آن نیاز داریم، بیایید زمینه محصول را با هم ترکیب کنیم و NULL ها را پردازش کنیم:

درخواست.متن =
"انتخاب کنید
//ساخت ISNULL در بخش توابع زبان پرس و جو مورد بحث قرار گرفت
//اگر قیمت تعریف نشده است، آن را مقداردهی اولیه کنید
//چرا 1000000 توضیح زیر را ببینید
| ISNULL(NomenclatureZarya.Price, 1000000) AS PriceZarya,
| ISNULL(NomenclatureRassvet.Price, 1000000) AS PriceRassvet
|از
| نامگذاریZarya AS NomenclatureZarya
| FULL CONNECTION NomenclatureDawn AS NomenclatureDawn
| نرم افزار NomenclatureZarya.Product = NomenclatureDawn.Product";

تنها چیزی که باقی می ماند انتخاب حداقل قیمت است. متن درخواست نهایی به صورت زیر خواهد بود:

درخواست.متن =
"انتخاب کنید
| ISNULL(NomenclatureZarya.Product، NomenclatureDawn.Product) AS محصول،
| انتخاب
| WHEN THERE ISNULL(NomenclatureZarya.Price, 1000000) > ISNULL(NomenclatureRassvet.Price, 1000000)
| THEN ISNULL (NomenclatureRassvet.Price, 1000000)
| ELSE ISNULL (نامگذاری Zarya.Price, 1000000)
| پایان به عنوان قیمت
|از
| نامگذاریZarya AS NomenclatureZarya
| FULL CONNECTION NomenclatureDawn AS NomenclatureDawn
| نرم افزار NomenclatureZarya.Product = NomenclatureDawn.Product";

اگر قیمت (NULL) تعریف نشده باشد، باید با مقداری مقداردهی اولیه شود، در غیر این صورت عملیات مقایسه برای بیشتر/کمتر با یک خطا ناموفق خواهد بود. ما قیمت را با مقدار غیر واقعی بزرگ مقداردهی اولیه می کنیم تا در عملیات مقایسه "بازنده" شود، زیرا با توجه به شرایط مشکل، کمترین قیمت را انتخاب می کنیم.

← توابع زبان پرس و جو 1C 8 | به پرس و جوهای 1C 8 می پیوندد →

یکی از گزینه های تبادل داده بین پایگاه های داده 1C تبادل از طریق اتصال COM است.

با استفاده از اتصال COM، می توانید از یک پایگاه داده 1C به پایگاه داده دیگری متصل شوید و داده ها را بخوانید یا بنویسید. این روش را می توان هم در نسخه های سرویس گیرنده-سرور پایگاه های داده و هم در پایگاه های داده فایل استفاده کرد. در این مقاله به نمونه هایی از این نوع اتصال می پردازیم. نمونه ها از پلتفرم 8.2 استفاده می کنند.

شما می توانید دو نوع شی COM برای برنامه 1C ایجاد کنید. این V82.Applicationو V82.COMConnector. در صورت V82.Applicationیک نسخه تقریباً کامل از برنامه 1C راه اندازی شد. در صورت استفاده V82.COMConnectorیک بخش کوچک سرور راه اندازی شد.
سرعت عمل در این مورد بالاتر است، اما برخی از عملکردها ممکن است در دسترس نباشند. به طور خاص، کار با فرم ها و ماژول های رایج که خاصیت کار با اتصالات خارجی برای آنها تنظیم نشده است. بیشتر شما باید استفاده کنید V82.COMConnectorو فقط در صورت عدم عملکرد V82.Application. تفاوت در سرعت عملیات می تواند به ویژه در پایگاه های داده با حجم زیاد قابل توجه باشد.

پس بیایید شروع کنیم

  1. بیایید یک شی COM ایجاد کنیم
    • برای V82.Applicationاتصال = COMObject جدید ("V82.Application") ;
    • برای V82.COMConnectorاتصال = COMObject جدید ("V82.COMConnector");
  2. بیایید یک رشته اتصال ایجاد کنیم
    • برای نسخه سرور پایگاه داده ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • برای نسخه فایل پایگاه داده ConnectionString = "File = " "PathKBase" "؛ Usr = نام کاربری؛ Pwd = رمز عبور";
  3. اتصال به پایگاه دادهتلاش اتصال = اتصال. اتصال (ConnectionString)؛ Exception Message = New MessageToUser; پیام. متن = + ErrorDescription() ; پیام. برای گزارش () ; پایان تلاش ;
  4. قطع ارتباط از پایگاه دادهاتصال = تعریف نشده

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

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

حالا بیایید همه کدها را کنار هم بگذاریم

اتصال = COMObject جدید ("V82.Application") ; //Connection = New COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "File = ""С:\MyBase""؛ Usr = Petya؛ Pwd = 123";تلاش اتصال = اتصال. اتصال (ConnectionString)؛ Exception Message = New MessageToUser; پیام. متن = "نمی توان به پایگاه داده متصل شد"+ DescriptionError() ; پیام. برای گزارش () ; پایان تلاش ; اتصال = تعریف نشده

برای نوع اتصال V82.Applicationاین روش برای شی COM که در ابتدا ایجاد شده بود و برای استفاده می شود V82.COMConnectorروش برای اتصال اعمال می شود. سپس درخواست با استفاده از ابزارهای استاندارد 1C پردازش می شود. در کد به شکل زیر است:

درخواست = اتصال. NewObject("درخواست") ; // برای V82.COMConnector درخواست = اتصال. NewObject("درخواست") ; // برای V82.Application درخواست. متن = "انتخاب کنید | کد پست های سازمان ها، | موقعیت های سازمان ها.نام|از | فهرست پست های سازمان ها به عنوان موقعیت های سازمان ها"; نتیجه = درخواست اجرا کن()؛ نمونه = نتیجه انتخاب کنید() ؛ انتخاب خداحافظ. Next() Loop EndLoop ;

برای نسخه 1C: Enterprise 8.3 همه چیز بدون تغییر باقی می ماند به جز اینکه هنگام ایجاد اشیاء COM باید از آن استفاده کنید "V83.COMConnector"یا "V83.Application".

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

ما از طریق COM به پایگاه داده 1C متصل می شویم

برای پیاده سازی اتصال COM در 1C، از مکانیزم خاصی به نام COMConnector استفاده می شود. این آبجکت به همراه پلتفرم نصب می شود و برای اتصال پایگاه های اطلاعاتی استفاده می شود. لازم به ذکر است که برای نسخه های 8.2 و 8.3 از اشیاء با نام های مختلف - به ترتیب "V82.COMConnector" و "V83.COMConnector" استفاده می شود.

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

برای اینکه بتوانید به پایگاه داده دیگری متصل شوید و اطلاعات لازم را درخواست کنید، باید داده های زیر را بدانید:

  1. چه نوع است - فایل یا سرویس گیرنده-سرور.
  2. در کجا قرار دارد؛
  3. از چه نام و رمز عبوری می توانید برای ورود استفاده کنید؟
  4. شما به چه داده هایی علاقه مند هستید؟

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

Connection ParametersFileIB = "File=""Path_to_database""; Usr=""User_name"";Pwd=""Password"""; Connection ParametersClientServerIB = "Srvr=""Server_Name""; Ref=""Database_Name""; Usr=""User_Name""; Pwd=""Password""";

عملکرد اتصال ساده است و اگر همه پارامترها به درستی مشخص شده باشند، نباید سؤالی ایجاد کند. برای سرعت بخشیدن به اشکال زدایی و تجزیه و تحلیل خطاهای احتمالی، بهتر است اتصال را در ساختار "Try" قرار دهید. تابع مقداری از نوع "COM object" را برمی گرداند که با آن برای به دست آوردن داده های لازم کار خواهید کرد.

&OnServer Function ConnectToBase() exportConnectionIB Parameters = "File=""E:\1c database\ERP""; Usr=""Administrator"";Pwd=""1"""; V83COMCon= COMObject جدید ("V83.COMConnector"); تلاش برای بازگشت V83COMCon.Connect (پارامترهای اتصال IB); گزارش استثنا (ErrorDescription()); بازگشت تعریف نشده؛ EndAttempt; EndFunction

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

ما داده ها را از پایگاه داده 1C دریافت می کنیم

پس از دریافت شی مورد نظر، باید داده ها را از پایگاه داده دیگری بخوانید. برای انجام این کار، از یک درخواست از طریق اتصال COM در 1C 8.3 با استفاده از مقدار دریافتی نوع "COM object" از تابع استفاده می کنیم. مهم است که ابتدا به پایگاه داده متصل شوید و سپس درخواست را اجرا کنید. اجرا از طریق روش NewObject انجام می شود و نوع شی را به صورت رشته ای به عنوان پارامتر - "Request" مشخص می کند.

رویه &روی سرور TestCOMOnServer() اتصال = ConnectToBase(); اگر TypeValue(Connection) Type("Undefined") سپس RequestBPZO = Connection.NewObject("Request"); RequestBPZO.Text = "انتخاب اول 15 | DirectoryUser.Name به عنوان نام |FROM | Directory.users AS DirectoryUser"; Selection = RequestBPZO.Execute().select(); در حالی که Selection.next() حلقه گزارش (Selection.Number); چرخه پایان endIf; پایان رویه >

به عنوان مثال، برای به دست آوردن اطلاعات در مورد کاربران یک بخش خاص، از طریق پارامترها در درخواست شرط می گذاریم. یک پارامتر از نوع ساده خواهد بود - یک رشته، و تقسیم یک پیوند به عنصر دایرکتوری "ساختار سازمانی" خواهد بود. نتیجه پرس و جو جدولی با فیلدهای فهرست شده از نوع موجود در پایگاه داده ای است که اتصال COM به آن رخ داده است. اگر نیاز به تبدیل آنها به انواع دیگر دارید، از توابع پلت فرم استاندارد استفاده کنید:

  • خط ();
  • عدد()؛
  • تاریخ().
RequestBPZO = Connection.NewObject("درخواست"); RequestBPZO.Text = "اولین 15 را انتخاب کنید | DirectoryUser.Name به عنوان نام | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department = &RequiredDepartment | و DirectoryUser.Name مانند ""%"" + &RequiredName"+ "%""" درخواست BPZO.SetParameter("بخش مورد نیاز"، اتصال. دایرکتوری ها. ساختار سازمانی. یافتن با کد ("00-000023")); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Select = RequestBPZO.Execute().select(); در حالی که Selection.next() حلقه گزارش (Selection.Name); چرخه پایان

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

RequestBPZO = Connection.NewObject.("درخواست"); RequestBPZO.Text = "اولین 15 را انتخاب کنید | DirectoryUser.Name به عنوان نام | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department B (&NecessaryDepartment) | و DirectoryUser.Name مانند ""%""""""""%" "؛ Array of Departments = Connection.NewObject("Array"); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000023")); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000038")); Array of Departments.Add(Connection.Directories.Enterprise Structure.Find By Code("00-000046")); RequestBPZO.SetParameter("RequiredDepartment"، Array ofDepartments); RequestBPZO.SetParameter("RequiredName","Ekaterina"); Select = RequestBPZO.Execute().select(); در حالی که Selection.next() حلقه گزارش (Selection.Name); چرخه پایان

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

StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); اگر NOT ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) سپس NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Name; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Individual; NewUser.Write(); endIf;

همچنین، یک اتصال COM حق استفاده از رویه ها و عملکردهای ماژول های رایج 1C را با فعال بودن ویژگی "اتصال خارجی" دارد. علاوه بر این شرط، تابع یا رویه فراخوانده شده باید Export باشد و شامل اقدامات تعاملی انجام شده روی سرور نباشد. در غیر این صورت، خطای نامعتبر بودن عملیات را مشاهده خواهید کرد.

ترکیب..؛ VariableFunction = اتصال..; فراخوانی تابع> نام ماژول عمومی> فراخوانی رویه> نام ماژول عمومی>

امکانات اتصال خارجی با پایگاه داده دیگر در 1C بسیار گسترده است و می تواند به شما امکان انجام کارهای زیادی را بدهد. مهم است که بتوانیم ابزارها را به درستی ارزیابی کنیم و راه حل بهینه را انتخاب کنیم. در بیشتر موارد، این مهارت تنها با تجربه یا با مطالعه نمونه هایی از کار متخصصان مجرب پدیدار می شود.

بهترین مقالات در این زمینه