دریافت داده از طریق اتصال com از 1s. V8: اتصال COM. دریافت و مقایسه شمارش از طریق اتصال COM

سوال: تجزیه سایت با استفاده از COM IE 11


روز خوب.!
این سوال به طرز دردناکی شناخته شده است، شما باید اطلاعات را از سایت بگیرید. اما تفاوت های ظریف وجود دارد:
1. راهی برای رفتن مستقیم به صفحه مجوز وجود ندارد (ابتدا به صفحه اصلی بروید، روی لینک LogIn کلیک کنید، فرم مجوز را دریافت کنید و فقط سپس وارد شوید).
2. باید از طریق وب سایت مراجعه کنید نوار جستجوداده ها را جستجو کنید، سپس آن را بخوانید و دوباره جستجو کنید (داده ها می توانند به زبان روسی و انگلیسی باشند، یعنی اگر داده های جستجو به زبان روسی باشد، باید در "نسخه روسی" سایت جستجو کنید، و این یک پیوند دیگر است. به صفحه ای دیگر. در مورد انگلیسی هم همین مشکل وجود دارد).

در نهایت:
- به صفحه اصلی بروید - وارد شوید - به دنبال داده بگردید - (در صورت لزوم به نسخه دیگری از سایت بروید) - آن را بگیرید.

مسئله:
هنگام دنبال کردن یک پیوند، داده ها در ویژگی "سند" خوانده نمی شوند.
در دو نقطه اتفاق می افتد:
- وقتی پیوند را برای ورود دنبال می کنیم (این یک دکمه نیست، بلکه فقط یک پیوند است)؛
- وقتی زبان سایت را تغییر می دهیم (همچنین یک پیوند).

توجه داشته باشید
اگر قبل از دنبال کردن یک پیوند در مرحله مجوز، پیوندی را دریافت کردید، com را ببندید و با انتقال از طریق متد IE.navigate("link") دوباره آن را باز کنید، سپس داده‌های موجود در ویژگی "document" به حالت عادی می‌روند. اما هنگام تغییر زبان در سایت نمی توانید همین کار را انجام دهید، زیرا ... من باید دوباره وارد سیستم شوم و به علاوه نمی‌خواهم این مشکل را دقیقاً به این شکل حل کنم.

این هم کد:

&در رویه کلاینت SetWaitingIE(IE، SecondCall=False) اگر IE.Busy نباشد D = CurrentDate() + 3; در حالی که D >= CurrentDate() حلقه اگر IE.Busy سپس Abort; endIf; چرخه پایان endIf; در حالی که IE.Busy Loop EndLoop; در حالی که IE.ReadyState< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>چرخه پایانی "کامل"؛ استثنا اگر SecondCall سپس Return; Else Link = IE.LocationURL; IE.Quit(); IE = GetCOM ("InternetExplorer.Application"); IE.Navigate(لینک)؛ SetExpectIE (IE، True); endIf; EndAttempt; EndProcedure &OnClient Function PerformUserAuthorization(IE, Link, Login, Password, Authorized=False, SC=0) Attempt Elements = IE.Document.GetElementsByName("username"); اگر Elements.Length = 1 سپس برای هر El Of Elements Loop El.Value = Login; چرخه پایان endIf; Elements = IE.Document.GetElementsByName("password"); اگر Elements.Length = 1 سپس برای هر El Of Elements Loop El.Value = Password; چرخه پایان endIf; IE.Document.GetElementById("ID").کلیک کنید(); SetWaitingIE (IE); مجاز = درست. استثنا اگر CN > 3 سپس Return False; endIf; IE.Quit(); IE.Navigate(لینک)؛ SetWaitingIE (IE); MF = MF + 1; اگر PerformUserAuthorization (IE، Link، Login، Password، SCH) سپس True را برگردانید. endIf; EndAttempt; بازگشت مجاز؛ EndFunction &OnClient Procedure Upload(Command) SpTables = GetListTablesForUpload(); اگر SpTables = False سپس Return; endIf; IE = GetCOM ("InternetExplorer.Application"); برای هر ردیف از SpTable.SOURCE_LIST چرخه RA = Row.ID; منبع = String.RESOURCE; IE.Navigate(Resource); SetWaitingIE (IE); اگر Line.NEW_PAGE_IN_LOGIN = 1 سپس Classes = IE.Document.GetElementsByClassName("ClassName") را امتحان کنید. اگر Classes.Length = 1 سپس برای هر کلاس از Classes Loop Resource = Class.All(0).Href; سقط چرخه پایان تلاش IE.Quit(); IE = IE.Navigate(Resource); SetWaitingIE (IE); Exception Report("اتصال به سایت "" +String.NAME + "" ناموفق بود!"); سقط EndAttempt; در غیر این صورت Report("اتصال به سایت "" +String.NAME + "" ناموفق بود!"); سقط endIf; endIf; اگر NOT PerformUserAuthorization(IE, Resource, String.LOGIN, String.PASSWORD) سپس Report ("مجوز کاربر در سایت "" + String.NAME + "" تکمیل نشده است!"); سقط endIf; منبع = IE.LocationURL; لیست افراد = SpTable.FACE_CODES.FindLines(ساختار جدید("SOURCE", RA)); ListNotFound = آرایه جدید; برای هر فرد از فهرست افراد چرخه نام شخص = شخص.NAME_IN_SITE; این روسی است = CharacterCode(PersonName, 1) >= 1040; TechResource = ?(این روسی است، StrReplace(منبع، "en_US"، "ru_RU")، StrReplace(منبع، "ru_RU"، "en_US")). اگر TekResurs<>IE.LocationURL سپس RootClasses = IE.Document.GetElementsByClassName("ClassName"); اگر RootClasses.Length = 1 سپس برای هر RootClass از RootClasses Loop Classes = RootClass.Children; سقط چرخه پایان AmGroup = نادرست; RuGroup = نادرست; برای هر Class From Classes Loop If HPreg(Class.ClassName) = "Dropdown-header" سپس AmGroup = Find(Class.InnerText, "Americans") > 0; RuGroup = Find(Class.InnerText, "Europe") > 0; ElseIf HPreg (Class.ClassName)<>"انتخاب شده" سپس اگر AmGroup And Find(Class.All(0).InnerText، "English") > 0 OR RuGroup And Find(Class.All(0).InnerText، "Russia") > 0 سپس IE.Navigate(Class .All(1).Href); SetWaitingIE (IE); سقط endIf; endIf; چرخه پایان endIf; endIf; IE.Document.GetElementById("ID").Value = PersonName; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); تلاش برای SetExpect (IE); //داده های دریافتی را مدار کنید ExceptionListNotFound.Add(Person); ادامه هید؛ EndAttempt; چرخه پایان گزارش استثنا ("خطا:" + Symbols.PS + ErrorDescription()); سقط EndAttempt; چرخه پایان IE.Quit(); پایان رویه

پاسخ:

موضوع بسیار جالب است، اما شخصاً متأسفانه نه تجربه و نه حتی فرصتی برای درک این مشکل دارم. اگر اطلاعاتی در این زمینه یافتید، لطفاً آن را به اشتراک بگذارید.
--- یک انجمنپیام ها، 29 آوریل 2016 ---

همانطور که متوجه شدم، دسترسی به پایگاه داده SQl وجود ندارد؟

--- ادغام پیام، 29 آوریل 2016 ---

خوب، اگر تجزیه، پس چه نوع دسترسی؟

سوال: اتصال COM 1C 8.3 - 1C 8.3 آیا امکان وارد کردن دیباگر در اتصال وجود دارد؟


می‌خواستم از اعضای انجمن بپرسم که آیا هنگام اتصال از طریق یک اتصال COM با استفاده از پردازش از یک پایگاه داده در پلتفرم 8.3.6 (BP 3.0) به ماژول اتصال خارجی یک پایگاه داده خودنویس (همچنین در حال اجرا) می‌توان اشکال زدایی کرد. روی پلت فرم 8.3.6) و صادرات از آن را رویه هایی با استفاده از پردازش فراخوانی کنید؟ پایگاه داده ها در حال حاضر مبتنی بر فایل هستند و بر روی یک رایانه شخصی قرار دارند، اما نسخه سرور برنامه ریزی شده است. تا این زمان، من از ساختارهای زیر برای انتقال کد دلخواه برای اجرا از طریق اتصال COM و همچنین برای ثبت خطاها استفاده می کردم. در اینجا قطعاتی از رویه ها در پایگاه داده خودنوشته در ماژول اتصال خارجی آمده است:

تابع ExecuteIn (CodeExecute، پارامتر کمکی = "") صادرات
بازرسی امنیتی()؛ // محافظت در برابر تلاش برای اجرای کد مخرب هنگام اتصال خارجی از طرف یک کاربر دیگرپاسخ = "0" //اگر نیازی به بازگرداندن چیزی نباشد، اگر هیچ خطایی در کد وجود نداشته باشد  // فقط اوکی برمی گرداند  //زیرا کد ارسال شده ممکن است حاوی خطا باشد، سپس در تلاشی اجرای آن را بسته بندی می کنیم.سعی کنید اجرا کنید (CodeExecute)؛ // کد را به عنوان یک رشته در رایانه دیگری از طریق یک اتصال COM (ماژول اتصال خارجی پایه Libra) اجرا کنید.استثنا   //اگر خطایی وجود دارد، متن آن را برگردانید Response = ErrorDetailView(ErrorInfo()); پایان تلاش ; بازگشت پاسخ; تابع EndFunction TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // محافظت در برابر تلاش برای اجرای کد مخرب هنگام اتصال خارجی از طرف یک کاربر دیگر. OutParameter = "ارتباط با پایه مقیاس از طریق اتصال COM وجود دارد!"; بازگشت درست ؛ EndFunction
از BP 3.0 قطعه زیر را اجرا می کنم:
تلاش
Com = New COMObject("V83.COMConnector"); Connection = Com.Connect ("File=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("آزمایش انجام شد! اتصال به پایگاه داده مقیاس وجود دارد"); Exception Error = ErrorDetailView(ErrorInfo()); TellUser("هیچگونه اتصال COM به پایه Libra وجود ندارد! جزئیات"+خطا); Com = تعریف نشده ; برگشت ؛ پایان تلاش ; خارج = ""; در = "1"؛ اگر Connection.Communication Test(In, Out) سپس TellUser("تست ارتباط با پیکربندی مقیاس موفقیت آمیز بود! پاسخ: "+Out); در غیر این صورت TellUser("آزمون ارتباط با پیکربندی مقیاس ناموفق بود! پاسخ: "+Out); EndIf
البته می‌دانم که نمی‌توان عملگر Execute(CodeString1C8) را وارد کرد، اما آیا هنگام فراخوانی یک روش ماژول از راه دور چنین امکانی وجود دارد. اتصال خارجیاز پایگاه داده اصلی Connection.TestConnections(In, Out) تا کد آن را در همان جلسه دیباگر در تابع Security Check() رویه فراخوانی خود وارد کنید؟
من قبلاً به اسنادی که در مورد این موضوع پیدا کردم نگاه کردم. من گزینه هایی را برای فعال کردن اشکال زدایی و نقاط شکست در همه جا در هر دو پیکربندی تنظیم کردم. من هر دو پیکربندی را راه اندازی کردم.
آیا حتی در این شرایط امکان اشکال زدایی رویه Security Check() بیشتر در کنار ماژول اتصال خارجی وجود دارد؟

سوال: آدرس IP اشتباه در اتصال COM


پردازشی وجود دارد که اسناد را از طریق V83.ComConnector بین سرورها منتقل می کند. سرور 1 (نسخه 1C 8.2.19.90) همیشه به سرور 2 (نسخه 8.3.8.2033) متصل می شود. خط اتصال حاوی آدرس IP سرور 2 بود و همه چیز به خوبی کار می کرد. در خود سرور 1 نیز پلتفرم نصب شده را روی سرور 2 نسخه 8.3.9.2033 دیدم (اگر این مهم باشد).

مشکل اینجاست که در سرور 2 آدرس IP تغییر کرد، البته پردازش متوقف شد و وقتی یک IP جدید را در خط اتصال وارد کردم، پردازش خطایی ایجاد می کند که شرح آن هنوز IP قدیمی (!) و متن است. تلاش برای برقراری ارتباط ناموفق بود، زیرا پاسخ مورد نیاز از رایانه دیگری در مدت زمان مورد نیاز دریافت نشد، یا ارتباط برقرار کردبه دلیل پاسخ نادرست از رایانه ای که قبلاً متصل است."

آنها همه چیز را ریبوت کردند، کش ها را پاک کردند و غیره، ادمین ها قسم می خورند که همه چیز از طرف آنها خوب است، شما می توانید از طریق RDP از سروری به سرور دیگر وارد شوید و غیره.

چه مشکلی می تواند داشته باشد، چگونه می توانم آن را حل کنم؟ تمام اینترنت را گشتم و چنین موقعیتی را پیدا نکردم!

پاسخ:() 100% مطمئن! روز دومی که سعی کردم، همانطور که نوشتم، با یک دیباگر به آن نگاه کردم، حتی یک پردازش تک سلولی احمقانه برای آزمایش اتصال ایجاد کردم، آن خطا ظاهر می شود و تمام

سوال: اتصال COM به نسخه های مختلف


سلام به همه.
من یک پایگاه داده ala "Consolidation" دارم که داده های مختلف را از پایگاه های داده مختلف جمع آوری می کند و همه چیز را در یک شمع جمع می کند. مشکل اینه که باید از طریق com به این دیتابیس ها وصل بشی ولی ورژن های مختلف هستن و در نهایت با خطای مشابه مواجه میشم
خطای اتصال!(ExternalProcessing.TransferHistory.Form.Form.Form(12)): خطا هنگام فراخوانی روش زمینه (اتصال) : یک استثنا رخ داد (V83.COMConnector. 1): عدم تطابق بین کلاینت و سرور نسخه 1 C:Enterprise Client نسخه ها متفاوت است و سرور (8.3. 8.1964 - 8.3. 6.2332)، برنامه مشتری: اتصال COM

من یک اتصال را راه اندازی کردم، یکی دیگر قطع شد...

من می دانم که به نوعی، از طریق سرویس کامپوننت، می توانید برای هر نسخه "کلاس های (کانکتورها)" خود را ایجاد کنید و سپس یک New COM Object مطابق با نسخه پلتفرم کلاس ایجاد کنید... شاید من اشتباه می کنم.

کمکم کن تا بر این مشکل غلبه کنم...

پاسخ:همین... سوال رو حذف میکنم..

سوال: خطای Com در پردازش پر کردن


سلام.
8.2 خرده فروشی 1.
من به 8.1 متصل می شوم که یک conf معمولی نیست.
من از طریق com به پایگاه داده متصل می شوم و سعی می کنم یک سند ایجاد کنم، اما هنگام فراخوانی "CreateDocument()" یا "GetObject()" خطایی در رویه رخ می دهد. پردازش پر کردن. شکل را ببینید

من همین کار را در خود دیتابیس 8.1 امتحان می کنم اما هیچ خطایی وجود ندارد و همچنین وارد Filling Processing نمی شوم.
اشتباه چه می تواند باشد؟

پاسخ: توربوک، یک ماژول سند نوشته شده کج!

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

این اشتباه شما نیست، بلکه یک خطا در ماژول سند در پایگاه داده ای است که به آن متصل می شوید.

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

از ComConnector، V8.Application برای اتصال استفاده نکنید، سپس چیزهای رابط در دسترس شما خواهد بود

بعد از 5 دقیقه اضافه شد
=======================================================================================================================
از توضیحات اتصال خارجی (SP) آنچه را که باید در مورد ComConnection بخوانید را با خط برجسته برجسته کردم

شرح:

به طور کلی، کار با 1C:Enterprise 8 از طریق یک اتصال خارجی مشابه کار با 1C:Enterprise در حالت Automation سرور است. تفاوت های اصلی به شرح زیر است:

  • در مورد سرور اتوماسیون، یک برنامه کامل 1C: Enterprise 8 راه اندازی می شود و در مورد اتصال خارجی، یک سرور COM نسبتاً کوچک در حال پردازش راه اندازی می شود.
  • هنگام کار از طریق اتصال خارجی در دسترس نیست عملکرد، به یک روش مرتبط با سازماندهی رابط کاربری 1C: Enterprise 8؛
  • هنگام اجرای یک اتصال خارجی، ماژول برنامه مدیریت شده (ماژول برنامه منظم) پیکربندی 1C: Enterprise 8. نقش آن هنگام کار با یک اتصال خارجی توسط ماژول اتصال خارجی انجام می شود.
هنگام استفاده از اتصال خارجی، مزایای زیر در مقایسه با استفاده از سرور اتوماسیون وجود دارد:
  • راه اندازی سریع تر اتصال، زیرا نیازی به ایجاد فرآیند جداگانه نیست سیستم عامل، و تمام اقدامات در فرآیند فراخوانی انجام می شود.
  • دسترسی سریع تر به ویژگی ها و روش های اشیاء 1C: Enterprise، زیرا سازماندهی یک دسترسی نیازی به ارتباطات بین فرآیندی ندارد.
  • مصرف کمتر منابع سیستم عامل
برای سازماندهی دسترسی به داده های 1C: Enterprise 8 از طریق یک اتصال خارجی، دنباله اقدامات زیر انجام می شود:
  • یک مدیر اتصال COM ایجاد می شود که با کمک آن اتصال برقرار می شود.
  • یک تماس با روش Connect مدیر اتصال COM برقرار می شود. روش Connect یک اتصال بیرونی را با پایگاه اطلاع رسانی 1C: Enterprise 8;
  • از طریق یک اتصال خارجی، دسترسی به روش‌ها، ویژگی‌ها و اشیاء معتبر پایگاه اطلاعاتی که اتصال با آن برقرار می‌شود، ایجاد می‌شود.
مهم! به دلیل عدم وجود رابط کاربری، نمی توان از همه اشیا، ویژگی ها و روش ها در یک اتصال بیرونی استفاده کرد.
اتصال بیرونی فراهم می کند دسترسی کاملبه بافت جهانی آن بنابراین، یک اتصال خارجی به عنوان روش‌های آن می‌تواند داشته باشد: ثابت‌های سیستم، مقادیر اشیاء مشخص‌شده در پیکربندی، که دسترسی به آنها با استفاده از مدیران انجام می‌شود (به عنوان مثال، ثابت‌ها، شمارش‌ها، فهرست‌ها، اسناد، گزارش‌های اسناد، گزارش‌ها. ، پردازش، طرح های انواع ویژگی ها، نمودار حساب ها، طرح های نوع محاسبات، ثبت ها) و همچنین متغیرهای اعلام شده در ماژول اتصال خارجی با کلمه کلیدی Export.

دسترسی:

ادغام.

سوال: اتصال COM، طرح نوع مشخصات


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

من اینطور می نویسم:

TypeDescriptionTech = New TypeDescription("DirectoryLink. Counterparties"); PurposeProperties = اتصال. طرح های انواع مشخصه ها. مقاصد خواص مقوله های اشیاء. FindByName("دایرکتوری "افراد")؛ NewElement = اتصال. طرح های انواع مشخصه ها. ویژگی های شی CreateItem(); NewElement. نام = PropertyName; NewElement. PropertyAssignment = PropertyAssignment; NewElement. ValueType = DescriptionTypesTech;

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

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

Platformform 8.3. اتصال COM یک پیش نیاز است. راه حل های بدون استفاده از آن مورد توجه نیستند.

پاسخ:

رول. ممنون، کار کرد

سوال: اتصال COM. مشکل پارامتر پرس و جو


روز خوب.
مشکل در درخواست از طریق اتصال COM.

Perem TK; ArrayItems = COM.NewObject("Array"); برای هر خط از TZNomenclature Cycle Nomenclature = COM.Directories.Nomenclature.GetLink(COM.NewObject("UniqueIdentifier", Abbr(String.Nomenclature.Identifier))); Nomenclature Array.Add(Nomenclature); چرخه پایان If ArrayItems.Quantity()<>0 سپس Request = COM.NewObject("Request"); Request.Text = "SELECT |PricesItemsSliceLast.Commodities AS Nomenclature, |PricesItemsSliceLast.SalePrice AS Price, |PricesItemsSliceLast.RateVAT, |PricesItemsSliceLast.RateNP |FROMItemsSliceLast.RateNP |FROMItemsSliceLast,RateNP |FROM. es = &TypePrices |و موجودی B ( &Array of Nomenclature) |And Inventory and Materials.ThisGroup = FALSE | And Registrar LINK Document.Setting SalesPrices) AS NomenclaturePricesSliceLast"; Request.SetParameter("آرایه آیتم"، آرایه آیتم); Request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); Request.SetParameter("PriceType"، COM.Directories.PriceTypes.GetRef(COM.NewObject("UniqueIdentifier"، ParameterStructure.PriceType.Identifier))); TZ = COM.NewObject("Value Table"); TK = Request.Run().Upload(); در غیر این صورت TK = New ValueTable; TK.Columns.Add("نامگذاری"); TK.Columns.Add("قیمت"); TK.Columns.Add("درصد"); TK.Columns.Add("نرخ مالیات بر ارزش افزوده"); endIf;

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

پاسخ:

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

سوال: اتصال Com از پایگاه داده فایل به پایگاه داده فایل


صبح بخیر. من یک پایگاه داده فایل 8.3 دارم که از طریق آن سعی می کنم با استفاده از اتصال com به پایگاه داده فایل دیگری متصل شوم:

دایرکتوری = "C:\Users\1C\Workflow (تست)"; کاربر = "مدیر"; رمز عبور = ""; پارامترهای اتصال = "File="+Directory+";Usr="+User+";Pwd="+Password+";"; V83 = COMObject جدید ("V83.COMConnector"); تلاش برای اتصال = V83.Connect(ConnectionParameters); گزارش استثنا ("نمی توان به جریان سند متصل شد!")؛ EndAttempt;


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

پاسخ:

من خط کد V82 = New COMObject(" V83 COMConnector")؛ و بقیه کد به صورت زیر است، بدون تغییر.

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

مشخص نیست کدام نسخه از کتابخانه را ثبت کنیم و کجا آن را ثبت کنیم؟

فکر می کنم باید کتابخانه نسخه 8.2.18.61 را ثبت کنم و این کار را از طریق یک فایل bat انجام می دهم.

regsvr32 /n /i:user "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll"
مکث

msk-test1c:1641 -- این سرور 8.3.5.1098 است
V82 = COMObject جدید ("V82. COMConnector"); گزارش ("اتصال به حسابداری 3.0...")؛ تلاش برای اتصال = V82. Connect("srvr = ""msk- test1c:1641""; ref = ""db_test""; usr = ""Administrator""; pwd = ""123"""); اطلاع دهید ("اتصال هورای برقرار شد!")؛ گزارش استثنا ("بدون اتصال به پایگاه داده!")؛ گزارش(ErrorDescription()); // اطلاعات = اطلاعات درباره خطا()؛ // گزارش("شرح= "" + اطلاعات. توضیحات + """)؛ // گزارش ("ModuleName= "" + Info.ModuleName + """)؛ // گزارش ("LineNumber=" + Info.LineNumber)؛ // گزارش ("SourceLine= "" + Info.SourceString + """)؛ بازگشت؛ EndAttempt.

کتابخانه را کجا، روی مشتری، روی سرور 8.2، روی سرور 8.3 ثبت کنیم؟ شکل زیر.
(برای نسخه مشتری-سرور و برای نسخه فایل پایگاه داده 1C)

پاسخ:وظیفه برقراری ارتباط با یک پایانه از طریق وب سرویس وجود داشت. پایه، خوب، بیایید بگوییم وزن سبک است. همچنین 0.5 یا سریعتر؟

گفتنش سخت است - من اطلاعات کافی ندارم. ما از 0.5 ثانیه راضی بودیم، منهای کلاینت غیرضروری 1C در یک دستگاه شخص ثالث، منهای همگام سازی نسخه های کتابخانه پس از به روز رسانی موتور 1C، منهای لعنتی comsafearray، نام های معمولی و انواع زمینه ... او به ما فکر کرد طرف دیگر (سیستمی که با 1C ادغام می شود) "آنها متوجه نمی شوند" وقتی معلوم شود که باید تماس های 1C خود را به یک "مدل ارتباط سیستمی" جدید بازنویسی کنند. اما با یک بار امتحان کردن یک تابع در پایگاه داده آزمایشی، اکنون ما را با "بیایید در اسرع وقت به سرویس تغییر دهیم."

سوال: چگونه از TypeContains برای اشیاء Com استفاده کنیم؟


اگر Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) سپس IsNomenclature = True; endIf;

"Props" از یک اتصال com با پایگاه داده 1c دیگر دریافت شد. هنگام مقایسه یک خطا رخ می دهد:

(ExternalProcessing.Coefficient Recalculation.Form.Form.Form(183)): خطا هنگام فراخوانی متد زمینه (ContainsType)
If Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) سپس
به خاطر اینکه:
یک استثنا رخ داد (1C: Enterprise 8.3.8.1964): عدم تطابق نوع (پارامتر شماره "1")

من فکر می کنم باید با نوع com مقایسه شود؟ چگونه نوع را به درستی بررسی کنیم؟

پاسخ:

نمی چرخد. من مسئله را اینگونه حل کردم:
در پایگاه داده گیرنده در ماژول عمومی با تیک چک باکس اتصال خارجی، کد این است:

تابع CheckAttributeType(Attribute, Type) Export Return Attribute.Type.ContainsType(Type(Type)); EndFunction

در پایگاه داده ای که از آن متصل می شوم، رویه را از طریق Com فراخوانی می کنم:

ComConnection.Avis_ExchangeProcedures.CheckAttributeType(ویژگی، "DirectoryLink.Nomenclature")

چاپ (Ctrl+P)

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

اتصال com

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

یک اتصال OLE ایجاد کنید

اتصال = COMObject جدید ("V83.Application") ;

یک اتصال COM ایجاد کنید

اتصال = COMObject جدید ("V83.COMConnector");

رشته اتصال

//برای گزینه مشتری-سرور
رشته اتصال= "Srvr = ""ServerName" ";Ref = " "BaseName" ;
/گزینه /For file mode:
رشته اتصال= "File = "PathKBase" "؛ Usr = نام کاربری; Pwd = رمز عبور;
تلاش
اتصال = اتصال . اتصال(ConnectionString)؛
استثنا
Message = New MessageToUser;
پیام . متن = "اتصال به پایگاه داده ناموفق بود" + DescriptionErrors(); پیام . برای گزارش ();
پایان تلاش ;

قطع ارتباط

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

متد NewObject().

برای ایجاد یک شی جدید، می توانید از متد ()NewObject استفاده کنید، به عنوان مثال:

برای V83.COMConnector

RequestCOM = اتصال NewObject( "درخواست ") ;
TableCOM = اتصال NewObject( "جدول ارزش ها") ;
ArrayCOM = اتصال. NewObject ("آرایه") ;

ViewCOM =Connection.NewObject

برای V83.Application

RequestOLE = اتصال NewObject(" درخواست ") ;
TableOLE = اتصال. NewObject("جدول ارزش ها") ;
ArrayOLE = Connection.NewObject("آرایه" ) ؛
ViewCOM =Connection.NewObject("UniqueIdentifier"، StringUID)؛

RequestCOM . متن ="انتخاب کنید
| موقعیت های سازمان ها. کد،
| موقعیت های سازمان ها. نام
|از | فهرست پست های سازمان ها
چگونه به موقعیت های سازمان ها”;

نتیجه = RequestCOM. اجرا کن()؛
نمونه = نتیجه انتخاب کنید () ؛
انتخاب خداحافظ. بعد()چرخه
چرخه پایان ;
همچنین می توانید از مدیران شی پیکربندی استفاده کنید:
DirectoryCOM = اتصال. دایرکتوری ها نام دایرکتوری
DocumentCOM = اتصال مستندات. نام سند؛
RegisterCOM = اتصال. ثبت اطلاعات. RegisterName ;

دریافت و مقایسه شمارش از طریق اتصال COM

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

تعداد مورد = Connection.Directories.Directory1.FindByCode(1).Props1;

PossibleValues ​​= Enum Element.Metadata().Enum Values;

EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement)));

اگر EnumerationItemNumber = 0 سپس گزارش دهید( "Enumer value1");

ElseIfEnumerationItemNumber = 1 سپسگزارش ("EnumerationValue2");

endIf;

بازیابی یک شی از طریق COM توسط شناسه

از طریق مدیران اشیاء پیکربندی، یک شی com به دست می آوریم، به عنوان مثال:
DocumentCOM = اتصال مستندات. نام سند؛

سپس یک رشته شناسه منحصر به فرد دریافت می کنیم:

StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())

شناسه = U جدید شناسه منحصر به فرد (StringUID);
با linkByIdentifier = اسناد[DocumentName].GetLink(Identifier);

اگر می خواهید یک شی com را با سند بر اساس شناسه پیدا کنید، باید به این صورت بنویسید:

WidCOM = Connection.NewObject("UniqueIdentifier"، StringUID)؛
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);

یکی از راه های انتقال داده از یک پیکربندی 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"; Select = 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")); درخواست BPZO.SetParameter("Required Department", Array of Departments); 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 بسیار گسترده است و می تواند به شما امکان انجام کارهای زیادی را بدهد. مهم است که بتوانیم ابزارها را به درستی ارزیابی کنیم و راه حل بهینه را انتخاب کنیم. در بیشتر موارد، این مهارت تنها با تجربه یا با مطالعه نمونه هایی از کار متخصصان با تجربه ظاهر می شود.


کلمات کلیدی: 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 اضافی است که می تواند برای ایجاد مقادیر از انواع خاصی استفاده شود.

tk = اتصال. 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 برقرار نشود یا به عنوان یک استثنا قطع شود.

یکی از گزینه های تبادل داده بین پایگاه های داده 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".

تجزیه سایت چیست؟.


بالا