1s-dən com bağlantısı vasitəsilə məlumatların qəbulu. V8: COM bağlantısı. COM bağlantısı vasitəsilə siyahıların qəbulu və müqayisəsi

Sual: COM IE 11-dən istifadə edərək saytın təhlili


Yaxşı gün.!
Sual ağrılı şəkildə məlumdur, məlumatı saytdan götürməlisiniz. Ancaq nüanslar var:
1. Birbaşa avtorizasiya səhifəsinə keçməyin yolu yoxdur (əvvəlcə ana səhifəyə keçin, LogIn linkinə klikləyin, avtorizasiya formasını alın və yalnız sonra daxil olun).
2. Siz vasitəsilə vebsayta daxil olmalısınız axtarış çubuğu məlumatları axtarın, sonra oxuyun və yenidən axtarın (məlumatlar rus və ingilis dillərində ola bilər, yəni axtarış üçün məlumatlar rus dilindədirsə, saytın "Rus versiyasında" axtarış etməlisiniz və bu başqa bir keçiddir başqa səhifəyə. Bu, ingilis dili ilə eyni məsələdir).

Nəhayət:
- ana səhifəyə keçin - daxil olun - məlumat axtarın - (lazım olduqda saytın başqa versiyasına keçin) - götürün.

Problem:
Linki izləyərkən məlumat "sənəd" mülkiyyətində oxunmur.
İki nöqtədə baş verir:
- daxil olmaq üçün linki izlədiyimiz zaman (bu bir düymə deyil, sadəcə bir keçiddir);
- saytdakı dili dəyişdirdiyimiz zaman (həmçinin bir keçid).

Qeyd
Əgər avtorizasiya mərhələsində bir keçidə əməl etməzdən əvvəl bir keçid alsanız, com-u bağlayın və IE.navigate("link") metodu ilə keçidlə yenidən açsanız, "sənəd" xüsusiyyətindəki məlumatlar normal şəkildə gedir. Ancaq saytda dili dəyişdirərkən eyni şeyi edə bilməyəcəksiniz, çünki... Yenidən daxil olmalıyam və üstəlik bu problemi məhz belə həll etmək istəməzdim.

Budur kod:

&Müştəri Prosedurunda SetWaitingIE(IE, SecondCall=False) Əgər IE DEYİL.Məşğul Olsa D = CurrentDate() + 3; While D >= CurrentDate() Loop Əgər IE.Məşğuldursa, Sonra Dəyişir; endIf; EndCycle; endIf; IE.Busy Loop EndLoop isə; IE.ReadyState olarkən< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>"tam" Cycle EndCycle; İstisna Əgər SecondCall Sonra Qayıdın; Başqa Link = IE.LocationURL; IE.Quit(); IE = GetCOM("InternetExplorer.Application"); IE.Navigate(Link); SetExpectIE(IE, Doğru); endIf; EndAttempt; EndProcedure &OnClient Function PerformUserAuthorization(IE, Link, Login, Password, Authorized=False, SC=0) Cəhd Elementləri = IE.Document.GetElementsByName("istifadəçi adı"); Elementlər.Uzunluq = 1 Əgər Elementlərin Hər El üçün Döngü El.Value = Giriş; EndCycle; endIf; Elementlər = IE.Document.GetElementsByName("parol"); Elementlər.Uzunluq = 1 olarsa, Elementlərin Hər El üçün Döngü El.Dəyər = Şifrə; EndCycle; endIf; IE.Document.GetElementById("ID").Click(); SetWaitingIE(IE); Səlahiyyətli = Doğrudur; İstisna Əgər CN > 3 O zaman False qaytarın; endIf; IE.Quit(); IE.Navigate(Link); SetWaitingIE(IE); MF = MF + 1; Əgər PerformUserAuthorization(IE, Link, Login, Password, SCH) Əgər True qaytarın; endIf; EndAttempt; Səlahiyyətli Qaytarma; EndFunction &OnClient Proseduru Yükləmə(Əmr) SpTables = GetListTablesForUpload(); Əgər SpTables = Yanlışdırsa, Qayıdın; endIf; IE = GetCOM("InternetExplorer.Application"); SpTable.SOURCE_LIST-dən hər bir sətir üçün RA dövrü = Row.ID; Resurs = String.RESOURCE; IE.Navigate(Resurs); SetWaitingIE(IE); Cəhd edin Əgər Line.NEW_PAGE_IN_LOGIN = 1 Sonra Siniflər = IE.Document.GetElementsByClassName("ClassName"); Əgər Classes.Length = 1 Əgər Siniflərdən Hər Bir Sinif üçün Döngü Resursu = Class.All(0).Href; Abort; EndCycle; IE.Quit(); IE = IE.Navigate(Resurs); SetWaitingIE(IE); İstisna Hesabatı("" +String.NAME + "" saytına qoşulma alınmadı!"); Abort; EndAttempt; Əks halda Report("Saytla əlaqə "" +String.NAME + "" uğursuz oldu!"); Abort; endIf; endIf; Əgər UserAuthorization (IE, Resource, String.LOGIN, String.PASSWORD) yerinə yetirilmirsə, onda bildirin ("" + String.NAME + "" saytında istifadəçi icazəsi tamamlanmayıb!"); Abort; endIf; Resurs = IE.LocationURL; Şəxslərin Siyahısı = SpTable.FACE_CODES.FindLines(New Structure("SOURCE", RA)); ListNotFound = Yeni massiv; Şəxslər Siyahısından Hər Bir Şəxs üçün Dövr Şəxsi Adı = Şəxs.NAME_IN_SITE; Bu rusca = CharacterCode(PersonName, 1) >= 1040; TechResource = ?(Bu Rus, StrReplace(Resurs, "en_US", "ru_RU"), StrReplace(Resurs, "ru_RU", "en_US")); Əgər TekResurs<>IE.LocationURL Sonra RootClasses = IE.Document.GetElementsByClassName("SinifAdı"); Əgər RootClasses.Length = 1 Əgər RootClasses-dən Hər RootClass üçün Döngü Sinifləri = RootClass.Children; Abort; EndCycle; AmGroup = Yanlış; RuGroup = Yanlış; Hər Sinifdən Sinif Döngüsü üçün HPreg(Class.ClassName) = "açılan başlıq" Əgər AmGroup = Tap(Class.InnerText, "Amerikalılar") > 0; RuGroup = Tap(Class.InnerText, "Avropa") > 0; ElseIf HPreg(Class.ClassName)<>"seçilmiş" Əgər AmGroup And Find(Class.All(0).InnerText, "English") > 0 OR RuGroup And Find(Class.All(0).InnerText, "Russia") > 0 then IE.Navigate(Class) .Hamısı(1).Href); SetWaitingIE(IE); Abort; endIf; endIf; EndCycle; endIf; endIf; IE.Document.GetElementById("ID").Dəyər = Şəxs Adı; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); Expect(IE) təyin etməyə çalışır; //Qəbul edilən verilənləri dövrələyin ExceptionListNotFound.Add(Person); Davam et; EndAttempt; EndCycle; İstisna Hesabatı("Xəta:" + Simvollar.PS + ErrorDescription()); Abort; EndAttempt; EndCycle; IE.Quit(); Prosedurun Sonu

Cavab:

Mövzu çox maraqlıdır, amma şəxsən təəssüf ki, bu problemi birtəhər başa düşmək üçün nə təcrübəm, nə də imkanım var. Bu mövzuda məlumat tapa bilsəniz, paylaşın.
--- Birlik mesajlar, 29 aprel 2016-cı il ---

Anladığım kimi, SQl verilənlər bazasına giriş yoxdur?

--- Mesaj birləşməsi, 29 aprel 2016-cı il ---

Yaxşı, əgər təhlil edirsinizsə, onda hansı giriş?

Sual: COM bağlantısı 1C 8.3 - 1C 8.3 Bağlantıda sazlayıcıya daxil olmaq mümkündürmü?


Mən forum üzvlərindən soruşmaq istədim ki, mən 8.3.6 platformasında (BP 3.0) bir verilənlər bazasından öz-özünə yazılmış verilənlər bazasının (həmçinin işləyən) xarici əlaqə moduluna emaldan istifadə edərək COM bağlantısı vasitəsilə qoşulduqda ümumiyyətlə sazlamağın mümkün olub-olmadığını platformasında 8.3.6) və ondan ixrac prosedurlarını emaldan istifadə edərək çağırın? Məlumat bazaları hazırda fayl əsaslıdır və bir PC-də yerləşir, lakin server versiyası planlaşdırılır. Bu vaxta qədər mən COM bağlantısı üzərindən icra üçün ixtiyari kodu ötürmək, həmçinin xətaları qeyd etmək üçün aşağıdakı konstruksiyalardan istifadə edirdim. Xarici əlaqə modulunda öz-özünə yazılmış verilənlər bazasındakı prosedurların fraqmentləri bunlardır:

Funksiya ExecuteIn(CodeExecute, Köməkçi Parametr = "") İxrac
Təhlükəsizlik yoxlanışı(); // Başqa bir istifadəçinin adından xaricdən qoşulduqda zərərli kodu icra etmək cəhdlərindən qorunma Cavab = "0" //Əgər heç bir şeyin qaytarılmasına ehtiyac yoxdursa, kodda heç bir səhv yoxdursa  // OK qaytarır  //Çünki Göndərilən kodda səhvlər ola bilər, onda biz onun icrasını bir cəhdlə bağlayacağıq.İcra etməyə çalışın(CodeExecute); // COM Bağlantısı (Libra Base Xarici Bağlantı Modulu) vasitəsilə kodu başqa bir kompüterdə sətir kimi icra edinİstisna   //səhv varsa, onun mətnini qaytarın Cavab = ErrorDetailView(ErrorInfo()); EndAttempt; Cavabın qaytarılması; EndFunction Function TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Başqa bir istifadəçinin adından xaricdən qoşulduqda zərərli kodu icra etmək cəhdlərindən qorunma. OutParameter = "COM bağlantısı vasitəsilə miqyas bazası ilə əlaqə var!"; Həqiqi qaytarın; EndFunction
BP 3.0-dan mən aşağıdakı fraqmenti yerinə yetirirəm:
Cəhd
Com = Yeni COMObject("V83.COMConnector"); Əlaqə = Com.Connect ("File=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("Sınaqdan keçdi! Şkala verilənlər bazası ilə əlaqə var"); İstisna xətası = ErrorDetailView(ErrorInfo()); TellUser("Tərəzi bazasına COM bağlantısı yoxdur! Təfərrüatlar"+Xəta); Com=Qeyri-müəyyən; Qayıdış; EndAttempt; Out = ""; In = "1"; Əgər Əlaqə.Əlaqə Testi(Giriş, Çıxış) O zaman TellUser("Şkala konfiqurasiyası ilə rabitə testi uğurludur! Cavab: "+Out); Əks halda TellUser("Şkala konfiqurasiyası ilə əlaqə testi uğursuz oldu! Cavab: "+Out); EndIf;
Əlbəttə, başa düşürəm ki, Execute(CodeString1C8) operatoruna daxil olmaq mümkün olmayacaq, lakin uzaq modul prosedurunu çağırarkən belə bir imkan varmı? xarici əlaqəƏsas verilənlər bazasından Connection.TestConnections(In, Out) öz kodunu eyni sazlama seansına onların çağırış prosedurunun Security Check() funksiyasına daxil etmək üçün?
Artıq bu məsələ ilə bağlı tapa biləcəyim sənədlərə baxdım. Mən hər iki konfiqurasiyada sazlama və kəsilmə nöqtələrini aktivləşdirmək üçün seçimləri təyin etdim. Hər iki konfiquratoru işə saldım.
Bu vəziyyətdə xarici əlaqə modulunun tərəfində Təhlükəsizlik Yoxlanışı() prosedurunu daha da aradan qaldırmaq mümkündürmü?

Sual: COM bağlantısında səhv IP ünvanı


V83.ComConnector vasitəsilə sənədləri serverlər arasında köçürən emal var. Server 1 (1C versiyası 8.2.19.90) həmişə Server 2-yə qoşulur (versiya 8.3.8.2033). Bağlantı xəttində 2-ci serverin IP ünvanı var idi və hər şey yaxşı işləyirdi. 1-ci serverin özündə də quraşdırılmış platformanı 2-ci serverdəki kimi, 8.3.9.2033 versiyası (bu vacibdirsə) gördüm.

Problem ondadır ki, Server 2-də IP ünvanı dəyişdi, emal təbii ki, işləməyi dayandırdı və mən əlaqə xəttinə yeni IP daxil edəndə emal xəta yaradır, onun təsviri hələ də köhnə IP (!) və mətndir. “Bağlantı qurmaq cəhdi uğursuz oldu, çünki tələb olunan cavab tələb olunan müddətdə başqa bir kompüterdən alınmadı və ya qurulmuş əlaqə artıq qoşulmuş kompüterdən yanlış cavaba görə."

Hər şeyi yenidən işə saldılar, keşləri təmizlədilər və s., adminlər and içirlər ki, hər şey qaydasındadır, RDP vasitəsilə bir serverdən digərinə daxil ola bilərsiniz və s.

Nə səhv ola bilər, bunu necə həll edə bilərəm? Bütün internetə baxdım və belə bir vəziyyət tapa bilmədim!

Cavab:() 100% əminəm! İkinci gün cəhd edirəm, yazdığım kimi, ona bir sazlayıcı ilə baxıram, hətta bir əlaqə testi üçün axmaq bir hüceyrəli emal yaratdım, bu səhv açılır və budur

Sual: COM-un müxtəlif versiyalara qoşulması


Hamıya salam.
Fərqli verilənlər bazalarından fərqli məlumatları toplayan və hər şeyi bir yığına birləşdirən "Birləşdirmə" verilənlər bazam var. Problem ondadır ki, bu verilənlər bazalarına com vasitəsilə qoşulmaq lazımdır, lakin onlar fərqli versiyalardır, ona görə də sonda belə bir xəta alıram.
Bağlantı xətası!(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Kontekst metoduna zəng edərkən xəta (Connect) : İstisna baş verdi (V83.COMConnector. 1 ) : Müştəri və server versiyaları arasında uyğunsuzluq 1 C:Enterprise Client versiyalar fərqlidir və server (8.3. 8.1964 - 8.3. 6.2332), müştəri tətbiqi: COM bağlantısı

Bir əlaqə qurdum, digəri kəsilir...

Bilirəm ki, komponent xidməti vasitəsilə siz hər bir versiya üçün “öz siniflərinizi (bağlayıcılarınızı)” yarada və sonra sinfin platforma versiyasına uyğun Yeni COM Obyektini yarada bilərsiniz... bəlkə də səhv edirəm.

Bu problemin öhdəsindən gəlməyə kömək et...

Cavab: bu qədər... sualı siləcəm..

Sual: Doldurma emalında Com xətası


Salam.
8.2 Pərakəndə satış 1.
Mən 8.1-ə qoşuluram. Adi konf.
com vasitəsilə verilənlər bazasına qoşuluram və sənəd yaratmağa çalışıram, lakin “CreateDocument()” və ya “GetObject()” çağırarkən prosedurda xəta baş verir. Emal Doldurma. şək bax.

Mən 8.1 verilənlər bazasında eyni şeyi sınayıram, lakin heç bir səhv yoxdur və mən Doldurma Emalına da daxil deyiləm.
Nə səhv ola bilər?

Cavab: turboq, əyri yazılmış sənəd modulu!

5 dəqiqədən sonra əlavə olunur
Onu çağırmırlar! O, tərtib etməyə çalışır! Lakin ComConnector vasitəsilə qoşulduqda Dialoq Rejimi problemi MÖVCUD YOXDUR, sənəd modulu tərtib edilə bilməz.
Belə hallarda, obyekt modulunda dialoqla işləmək lazım olduqda, preprosessor üçün təlimatlardan istifadə edin.

Bu, sizin səhviniz deyil, qoşulduğunuz verilənlər bazasında sənəd modulunda səhvdir.

Verilənlər bazasında kod müştəridə icra olunur və Dialoq rejimi var, buna görə də hər şey səhvsiz baş verir.

Qoşulmaq üçün ComConnector, V8.Application istifadə etməyin, onda interfeys əşyaları sizin üçün əlçatan olacaq

5 dəqiqədən sonra əlavə olunur
=======================================================================================================================
xarici əlaqənin təsvirindən (SP) ComConnections haqqında oxumağınız lazım olanları qalın hərflərlə vurğuladım

Təsvir:

Ümumiyyətlə, 1C: Enterprise 8 ilə xarici əlaqə vasitəsilə işləmək server avtomatlaşdırma rejimində 1C: Enterprise ilə işləməyə bənzəyir. Əsas fərqlər aşağıdakılardır:

  • Avtomatlaşdırma serveri vəziyyətində, tam hüquqlu 1C: Enterprise 8 tətbiqi işə salınır və xarici əlaqə vəziyyətində nisbətən kiçik bir prosesdə olan COM serveri işə salınır.
  • Xarici əlaqə ilə işləyərkən mövcud deyil funksionallıq, 1C: Enterprise 8 istifadəçi interfeysinin təşkili ilə bağlı bu və ya digər şəkildə;
  • Xarici əlaqə işləyərkən idarə olunan proqram modulu (modul müntəzəm tətbiq) konfiqurasiya 1C:Enterprise 8. Xarici əlaqə ilə işləyərkən onun rolunu xarici əlaqə modulu oynayır.
Xarici əlaqədən istifadə edərkən, Avtomatlaşdırma serverindən istifadə ilə müqayisədə aşağıdakı üstünlüklər var:
  • Ayrı bir proses yaratmağa ehtiyac olmadığı üçün daha sürətli əlaqə quraşdırma əməliyyat sistemi, və bütün hərəkətlər zəng prosesi çərçivəsində həyata keçirilir;
  • 1C:Müəssisə obyektlərinin xassələrinə və metodlarına daha sürətli çıxış, çünki girişin təşkili proseslərarası əlaqə tələb etmir;
  • Əməliyyat sistemi resurslarının daha az istehlakı.
Xarici əlaqə vasitəsilə 1C: Enterprise 8 məlumatlarına girişi təşkil etmək üçün aşağıdakı hərəkətlər ardıcıllığı yerinə yetirilir:
  • COM əlaqə meneceri yaradılır, onun köməyi ilə əlaqə qurulur;
  • COM əlaqə menecerinin Connect metoduna zəng edilir. Connect metodu ilə xarici əlaqə qaytarır məlumat bazası 1C: Müəssisə 8;
  • xarici əlaqə vasitəsilə əlaqənin qurulduğu infobazanın etibarlı metodlarına, xassələrinə və obyektlərinə çıxış əldə edilir.
Vacibdir! İstifadəçi interfeysinin olmaması səbəbindən bütün obyektlər, xüsusiyyətlər və metodlar xarici əlaqədə istifadə edilə bilməz.
Xarici birləşmə təmin edir tam giriş onun qlobal kontekstinə. Buna görə də, metodları kimi xarici əlaqə ola bilər: sistem sabitləri, konfiquratorda göstərilən obyektlərin dəyərləri, giriş menecerlərdən istifadə etməklə həyata keçirilir (məsələn, sabitlər, siyahılar, kataloqlar, sənədlər, sənəd jurnalları, hesabatlar , emal, xarakteristikalar növlərinin planları, hesablar planları, hesablama tipli planlar, registrlər), həmçinin Export açar sözü ilə xarici əlaqə modulunda elan edilmiş dəyişənlər.

Mövcudluq:

İnteqrasiya.

Sual: COM bağlantısı, xarakteristikalar tip planı


Vəzifə COM bağlantısı vasitəsilə xarakterik tiplərin məlum planında proqramlı şəkildə yeni element yaratmaqdır. Əlaqə qurulub, burada hər şey qaydasındadır.

Mən belə yazıram:

TypeDescriptionTech = New TypeDescription("DirectoryLink. Qarşı tərəflər"); Məqsəd Xüsusiyyətləri = Bağlantı. Xarakteristika növlərinin planları. Obyektlərin Kateqoriyalarının Xüsusiyyətlərinin Məqsədləri. FindByName(“Fiziki şəxslər” kataloqu”); NewElement = Bağlantı. Xarakteristika növlərinin planları. Obyekt xassələri. CreateItem(); YeniElement. Ad = Əmlak Adı; YeniElement. PropertyAssignment = PropertyAssignment; YeniElement. ValueType = DescriptionTypesTech;

Son xətt işləmir. Bu başa düşüləndir, o, 1C-nin işlədiyi verilənlər bazası üçün belə bir növ tapır, amma mənə əlavə edilmiş verilənlər bazası üçün bir növ lazımdır. Necə əldə etmək olar?

Mənim versiyamda “Xüsusi Siyahı” dəyər tipli element sadəcə yaradılmışdır. Prinsipcə işləyir, amma bir növ çirkindir.

Platforma 8.3. COM bağlantısı ilkin şərtdir. İstifadəsi olmayan həllər maraq doğurmur.

Cavab:

Rolls. Təşəkkürlər, işlədi.

Sual: COM bağlantısı. Sorğu parametri problemi


Yaxşı gün.
COM bağlantısı vasitəsilə sorğu ilə bağlı problem.

Perem TK; ArrayItems = COM.NewObject("Array"); TZNomenklatura Sikl Nomenklaturasından Hər Sətir üçün = COM.Directories.Nomenclature.GetLink(COM.NewObject("UniqueIdentifier", Abbr(String.Nomenclature.Identifier))); Nomenklatura Array.Add(Nomenklatura); EndCycle; Əgər ArrayItems.Quantity()<>0 Sonra Sorğu = COM.NewObject("Sorğu"); Request.Text = "SEÇ |QiymətlərİtemlərSliceSon.Mallar Nomenklaturası, |QiymətlərƏşyalarSliceSon.SatışQiymət AS Qiymət, |QiymətlərƏşyalarSliceSon.RateƏDV, |PriceesItemsSliceSon.RateNP |FROM |Qeydiyyat.ItemSliceLast.RateNP TipQiymətlər |Və İnventar İnventar B ( &Nomenklatura Massivi) |Və İnventar və Materiallar.Bu Qrup = FALSE |Və Qeydiyyatçı LINK Sənədi.Satış Qiymətlərini Tənzimləmə) AS NomenklaturaQiymətləriSliceLast"; Request.SetParameter("Element Massivi", Element Massivi); Request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); Request.SetParameter("PriceType", COM.Directories.PriceTypes.GetRef(COM.NewObject("UniqueIdentifier", ParameterStructure.PriceType.Identifier))); TZ = COM.NewObject("Dəyər Cədvəli"); TK = Request.Run().Yüklə (); Əks halda TK = Yeni Dəyər Cədvəli; TK.Columns.Add("Nomenklatura"); TK.Columns.Add("Qiymət"); TK.Columns.Add("Faiz"); TK.Columns.Add("ƏDV dərəcəsi"); endIf;

Problem dəqiq olaraq elementdə və ya elementlər massivindədir; siz onları parametr kimi təyin etsəniz, sorğu boş qiymətləri qaytarır; bu parametri ümumiyyətlə göstərməsəniz, sorğu düzgün məlumatları qaytarır.
Həmin xarici verilənlər bazasının sorğu konsolunda hər şey problemsiz işlənir.
Nə səhv ola bilər?

Cavab:

Bunu VremTable vasitəsilə etməyə çalışın. Sütunları olan dəyərlər cədvəli yaradın. kimi, doldurun, sorğuya çəkin və sonra daxili əlaqə ilə tətbiq edin.

Sual: Fayl verilənlər bazasından fayl verilənlər bazasına Com əlaqəsi


Sabahınız xeyir. Mənim 8.3 fayl verilənlər bazam var, ondan com bağlantısından istifadə edərək başqa fayl verilənlər bazasına qoşulmağa çalışıram:

Kataloq = "C:\Users\1C\İş axını (test)"; İstifadəçi = "Administrator"; Parol = ""; Bağlantı Parametrləri = "Fayl="+Kataloq+";Usr="+İstifadəçi+";Pwd="+Parol+";"; V83 = Yeni COMObject("V83.COMConnector"); Bağlantı cəhdi = V83.Connect(ConnectionParameters); İstisna Hesabatı ("Sənəd axınına qoşulmaq mümkün olmadı!"); EndAttempt;


İstisna xəta təsviri olmadan atılır.
Hər iki verilənlər bazası 8.3-də işə salınmağa məcburdur. Kataloq və istifadəçi düzgün göstərilib. Səbəb nə ola bilər?

Cavab:

Kod xəttini yazıram V82 = New COMObject(" V83.COMConnector"); və kodun qalan hissəsi dəyişikliksiz aşağıdakı kimidir.

Mənbə və təyinat platformalarının versiyaları fərqli olduqda xəta baş verir.

Kitabxananın hansı versiyasında qeydiyyatdan keçmək və harada qeydiyyatdan keçmək aydın deyil?

Düşünürəm ki, kitabxananı, 8.2.18.61 versiyasını qeydiyyatdan keçirməliyəm və bunu yarasa faylı vasitəsilə edirəm.

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

msk-test1c:1641 -- bu server 8.3.5.1098
V82 = Yeni COMObject("V82. COMConnector"); Hesabat (“Mühasibat uçotu 3.0-a qoşulun...”); Qoşulmağa cəhd = V82. Connect("srvr = ""msk- test1c:1641""; ref = ""db_test""; usr = ""Administrator""; pwd = ""123"""); Xəbərdarlıq ("Hurray bağlantısı quruldu!"); İstisna Hesabatı ("Verilənlər bazası ilə əlaqə yoxdur!"); Hesabat (ErrorDescription()); // Məlumat = Hata Haqqında Məlumat(); // Hesabat ("Təsvir = "" + Məlumat. Təsvir + """); // Hesabat ("ModuleName= "" + Info.ModuleName + """); // Hesabat ("LineNumber=" + Info.LineNumber); // Hesabat ("SourceLine=" "" + Info.SourceString + """); Qaytar; EndAttempt;

Kitabxananı harada, müştəridə, 8.2 serverində, 8.3 serverində qeydiyyatdan keçirməli? Aşağıdakı şəkil.
(müştəri-server versiyası və 1C verilənlər bazasının fayl versiyası üçün)

Cavab: Veb xidməti vasitəsilə bir terminalla əlaqə qurmaq tapşırığı var idi. Baza, yaxşı, deyək ki, yüngül çəkidir. Həmçinin 0,5 və ya daha sürətli?

Bunu demək çətindir - kifayət qədər məlumatım yoxdur. 0,5 saniyədən, üçüncü tərəfin maşınında lazımsız 1C klientindən, 1C mühərrikini yenilədikdən sonra kitabxana versiyalarının minus sinxronizasiyasından, mənfi lənətə gəlmiş komsafearray, normal adlar və sahə tipləri... O bizi düşündü. digər tərəf (1C ilə inteqrasiya edən bir sistem) 1C zənglərini yeni bir "sistem rabitəsi modelinə" yenidən yazmalı olduqları ortaya çıxanda "başa düşməyəcəklər". Ancaq test verilənlər bazasında bir funksiyanı bir dəfə sınamışıq, indi biz "mümkün qədər tez xidmətə keçək" deyə sataşırıq.

Sual: Com obyektləri üçün TypeContains-dən necə istifadə etmək olar?


Əgər Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) O zaman IsNomenklatura = Doğrudur; endIf;

"Rekvizit" başqa bir 1c verilənlər bazası ilə bir com əlaqəsindən alındı. Müqayisə edərkən xəta baş verir:

(ExternalProcessing.Coefficient Recalculation.Form.Form.Form(183)): Kontekst metodunu çağırarkən xəta (ContainsType)
Əgər Attribute.Type.ContainsType(Type("DirectoryLink.Nomenklatura")) Sonra
ona görə:
İstisna baş verdi (1C: Enterprise 8.3.8.1964): Tip uyğunsuzluğu (parametr nömrəsi "1")

Mən com növü ilə müqayisə edilməlidir şübhəli? Tipi necə düzgün yoxlamaq olar?

Cavab:

O, yuvarlanmır. Problemi belə həll etdim:
Xarici əlaqə işarəsi ilə ümumi moduldakı qəbuledici verilənlər bazasında kod belədir:

Funksiya CheckAttributeType(Atribut, Type) İxrac Qaytarma Atribut.Type.ContainsType(Type(Type)); EndFunction

Qoşulduğum verilənlər bazasında Com vasitəsilə proseduru çağırıram:

ComConnection.Avis_ExchangeProcedures.CheckAttributeType(Atribut, "DirectoryLink.Nomenklatura")

Çap (Ctrl+P)

1C verilənlər bazası arasında məlumat mübadiləsi variantlarından biri COM bağlantısı vasitəsilə mübadilədir. COM bağlantısından istifadə edərək, bir 1C verilənlər bazasından digərinə qoşula və məlumatları oxuya və ya yaza bilərsiniz. Bu üsul həm verilənlər bazalarının müştəri-server versiyalarında, həm də fayl verilənlər bazalarında istifadə edilə bilər. Bu məqalə platforma 8.3-də bu cür əlaqələrdən bəhs edir

com bağlantısı

1C tətbiqi üçün iki növ COM obyekti yarada bilərsiniz. Bu ole əlaqələrdir V83. Tətbiq və com əlaqələri V83.COMConnector . halda V83. Tətbiq 1C tətbiqinin demək olar ki, tam hüquqlu bir nüsxəsi istifadəyə verildi. İstifadəsi halında V83.COMConnector Kiçik bir server hissəsi işə salınır. Bu vəziyyətdə işləmə sürəti daha yüksəkdir, lakin bəzi funksiyalar mövcud olmaya bilər. Xüsusilə, xarici əlaqələrlə işləmək xüsusiyyətinin təyin olunmadığı formalar və ümumi modullarla işləmək. Əsasən istifadə etməlisiniz V83.COMConnector və yalnız funksionallıq olmaması halında V83. Tətbiq. Əməliyyat sürətindəki fərq böyük həcmli verilənlər bazalarında xüsusilə nəzərə çarpa bilər. Platforma 8.2 üçün istifadə olunur V82.Application və ya V82.COMConnector

OLE bağlantısı qurun

Bağlantı = Yeni COMObject(“V83.Application” );

COM bağlantısı qurun

Bağlantı = Yeni COMObject(“V83.COMConnector” );

Bağlantı sətri

//Müştəri-server seçimi üçün
Bağlantı sətri= “Srvr = ““ServerName” “;Ref = “ “BaseName” ;
//Fayl rejimi seçimi üçün:
Bağlantı sətri= "Fayl = ""PathKBase" “; Usr = İstifadəçi adı; Pwd = Parol”;
Cəhd
Əlaqə = Əlaqə . Qoşun(ConnectionString);
İstisna
Mesaj = New MessageToUser;
Mesaj . Mətn = “Verilənlər bazasına qoşulmaq alınmadı” + Təsvir Səhvləri(); Mesaj . Hesabat vermək();
EndAttempt;

Bağlantının kəsilməsi

Əlaqə = Müəyyən edilməmişdir;
Obyekt üçün V83. Tətbiq Bağlantını dayandırmaq lazımdır, əks halda natamam seans qalacaq, sonra əl ilə silinməli olacaq. halda V83.COMConnectorəlaqənin qurulduğu prosedur başa çatdıqdan sonra avtomatik olaraq əlaqə pozulur.Və daha bir kiçik nöqtə var. Bağlantı qurulan istifadəçi üçün onun parametrlərində "Proqramı bağlayarkən təsdiq tələb et" qutusu söndürülməlidir.

NewObject() metodu

Yeni obyekt yaratmaq üçün NewObject() metodundan istifadə edə bilərsiniz, məsələn:

üçün V83.COMConnector

COM sorğusu = Əlaqə. YeniObyekt( "Soruş") ;
TableCOM = Əlaqə. YeniObyekt( “Dəyərlər Cədvəli”) ;
ArrayCOM = Bağlantı. NewObject("Masiv");

ViewCOM =Connection.NewObject

üçün V83. Tətbiq

RequestOLE = Əlaqə. NewObject(" sorğu") ;
TableOLE = Bağlantı. YeniObyekt(“Dəyərlər Cədvəli”) ;
ArrayOLE = Connection.NewObject(“massiv”);
ViewCOM =Connection.NewObject(“UniqueIdentifier”, StringUID);

COM sorğusu . Mətn ="SEÇİN
| Təşkilatların Vəzifələri Kodeks,
| Təşkilatların Vəzifələri.Adı
|FROM | Directory.Təşkilatların mövqeləri
TƏŞKİLATLARIN MƏVQƏLƏRİ NECƏ”;

Nəticə = RequestCOM. Run();
Nümunə = Nəticə. () seçin;
Salam Seçim. Sonrakı()Velosiped
EndCycle;
Siz həmçinin konfiqurasiya obyekti menecerlərindən istifadə edə bilərsiniz:
DirectoryCOM = Bağlantı. Kataloqlar. DirectoryName;
DocumentCOM = Əlaqə. Sənədlər. DocumentName;
RegisterCOM = Bağlantı. Məlumat registrləri. RegisterName;

COM bağlantısı vasitəsilə siyahıların qəbulu və müqayisəsi

Konfiqurasiyada müəyyən edilmiş siyahı elementlərinin dəyərlərini müqayisə etmək üçün bu elementləri müqayisəsi asan olan primitiv növlərdən birinə çevirmək lazımdır. Belə növlər ya rəqəmli tip, ya da simli tip ola bilər. Sadalama elementinin dəyərini aşağıdakı kimi rəqəmsal tipə çevirə bilərsiniz:

Element = Connection.Directories.Directory1.FindByCode(1).Props1;

PossibleValues ​​= Enum Element.Metadata().Enum Dəyərləri;

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

EnumerationItemNumber = 0 olarsa, hesabat verin( “Saya dəyəri1”);

ElseIfEnumerationItemNumber = 1 Sonra Hesabat ("SaylamaDəyəri2");

endIf;

Obyektin identifikatorla COM vasitəsilə əldə edilməsi

Konfiqurasiya obyekti menecerləri vasitəsilə biz bir com obyekti əldə edirik, məsələn:
DocumentCOM = Əlaqə. Sənədlər. DocumentName;

Sonra unikal identifikator sətri alırıq:

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

İdentifikator = Yeni U unikalİdentifikator (StringUID);
İLƏ linkByIdentifier = Sənədlər[DocumentName].GetLink(İdentifikator);

Əgər identifikatora görə sənəd üzrə com obyektini tapmaq lazımdırsa, onda belə yazmalısınız:

WidCOM = Connection.NewObject(“UniqueIdentifier”, StringUID);
LinkByIdentifier = Connection.Documents[SənədAdı].GetLink(WidCOM);

Məlumatları bir 1C konfiqurasiyasından digərinə ötürməyin bir yolu COM istifadə edən proqram bağlantısıdır. Bir çox şirkətlər bir neçə fərqli verilənlər bazasından istifadə edirlər, onların arasında müəyyən əlaqələr və asılılıqlar olmalıdır. Yalnız məlumatları ötürmək deyil, həm də müəyyən məlumat emalını həyata keçirmək lazımdırsa, COM bağlantısı optimal mexanizm olacaqdır. Başqa bir 1C verilənlər bazasından məlumatları təhlil etmək bacarığı hər hansı bir tərtibatçı üçün faydalıdır.

COM vasitəsilə 1C verilənlər bazasına qoşuluruq

1C-də COM əlaqəsini həyata keçirmək üçün COMConnector adlı xüsusi mexanizm istifadə olunur. Bu obyekt platforma ilə birlikdə quraşdırılır və infobazaları birləşdirmək üçün istifadə olunur. Qeyd etmək lazımdır ki, 8.2 və 8.3 versiyaları üçün müxtəlif adlara malik obyektlərdən istifadə olunur - müvafiq olaraq “V82.COMConnector” və “V83.COMConnector”.

Unutmayın ki, COM-un verilənlər bazasına qoşulma müddəti lisenziyaya başa gəlir - bir neçə əlaqənin eyni vaxtda icrası ilə məşğul olmayın. Bu, məhdud sayda lisenziyaya malik olan təşkilatlar üçün xüsusilə vacibdir. Bu problem informasiya bazasına aktiv istifadəçi əlaqələri olmadıqda yerinə yetirilən adi tapşırıqların köməyi ilə həll edilə bilər.

Başqa verilənlər bazasına qoşulmaq və lazımi məlumatları tələb etmək üçün aşağıdakı məlumatları bilməlisiniz:

  1. Bu hansı növdür - fayl və ya müştəri-server;
  2. Harada yerləşir;
  3. Daxil olmaq üçün hansı ad və paroldan istifadə edə bilərsiniz?
  4. Hansı məlumatlar sizi maraqlandırır?

İlk üç nöqtədən COM əlaqəsini həyata keçirmək üçün bir sıra parametrlər yaratmalısınız. İnformasiya təhlükəsizliyinin növündən asılı olaraq, fərqli olacaq görünüş. Alınan sətirdən istifadə edərək, hər hansı bir üsuldan istifadə edərək təhlil və emal üçün başqa bir verilənlər bazasından məlumat toplaya biləcəyiniz bir əlaqə qurulur.

Bağlantı ParametrləriFileIB = "Fayl=""Məlumat bazasına_yol""; Usr=""İstifadəçi_adı"";Pwd=""Parol"""; Connection ParametersClientServerIB = "Srvr=""Server_Name""; Ref=""Database_Name""; Usr=""User_Name""; Pwd=""Parol""";

Bağlantı funksiyası sadədir və bütün parametrlər düzgün göstərildiyi təqdirdə heç bir sual yaratmamalıdır. Sazlama və təhlili sürətləndirmək üçün mümkün səhvlərəlaqəni "Cəhd et" konstruksiyasına əlavə etmək daha yaxşıdır. Funksiya lazımi məlumatları əldə etmək üçün işləyəcəyiniz "COM obyekti" tipli bir dəyəri qaytaracaq.

&OnServer Funksiyası ConnectToBase() exportConnectionIB Parametrləri = "Fayl=""E:\1c verilənlər bazası\ERP""; Usr=""Administrator"";Pwd=""1"""; V83COMCon= Yeni COMObject("V83.COMConnector"); Geri qayıtmağa cəhd V83COMCon.Connect(IB Bağlantı Parametrləri); İstisna Hesabatı (ErrorDescription()); Müəyyən edilməmiş qayıt; EndAttempt; EndFunction

COM bağlantısı vasitəsilə siz nəinki məlumatları seçə, həm də onu qoşulduğunuz verilənlər bazasına əlavə edə bilərsiniz. Unutmayın ki, biz COM obyekti vasitəsilə 4 primitiv məlumat növünü ötürə bilərik. Digər növlər platformanın daxili axtarış funksiyalarından istifadə etməklə müəyyən edilməlidir. Nəzərə alın ki, qlobal platforma funksiyaları COM bağlantısı vasitəsilə də çağırılır.

Biz 1C verilənlər bazasından məlumat alırıq

İstədiyiniz obyekti aldıqdan sonra başqa verilənlər bazasından məlumatları oxumalısınız. Bunu etmək üçün, funksiyadan "COM obyekti" növünün qəbul edilmiş dəyərindən istifadə edərək 1C 8.3-də COM bağlantısı vasitəsilə sorğudan istifadə edirik. Əvvəlcə verilənlər bazasına qoşulmaq və sonra sorğunu yerinə yetirmək vacibdir. İcra NewObject metodu ilə baş verir, sətir şəklində obyekt növünü parametr kimi - "Sorğu" kimi göstərir.

&OnServer Proseduru TestCOMOnServer() Əlaqəsi = ConnectToBase(); Əgər TypeValue(Connection) Type("Qeyri-müəyyən") Əgər RequestBPZO = Connection.NewObject("Sorğu"); RequestBPZO.Text = "İlk 15-i SEÇ | DirectoryUser.Name AS Name |FROM | Directory.users AS DirectoryUser"; Seçin = RequestBPZO.Execute().select(); While Selection.next() loop Report(Selection.Number); EndCycle; endIf; Prosedurun Sonu >

Məsələn, müəyyən bir şöbənin istifadəçiləri haqqında məlumat əldə etmək üçün sorğuda parametrlər vasitəsilə şərt qoyacağıq. Parametrlərdən biri sadə tipli olacaq - sətir, bölmə isə "Müəssisə strukturu" kataloq elementinə keçid olacaq. Sorğunun nəticəsi COM əlaqəsinin baş verdiyi verilənlər bazasında mövcud olan tipli sadalanan sahələrin olduğu bir cədvəldir. Onları başqa növlərə çevirmək lazımdırsa, standart platforma funksiyalarından istifadə edin:

  • Xətt();
  • Nömrə();
  • Tarixi().
RequestBPZO = Connection.NewObject("Sorğu"); RequestBPZO.Text = "İlk 15 SEÇ | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I HARADA | DirectoryUser.Department = &RequiredDepartment | Və DirectoryUser.Name kimi ""%"" + &RequiredName+ ""%""" ; Sorğu BPZO.SetParameter("Tələb olunan Departament", Bağlantı. Kataloqlar. Müəssisə Strukturu. Kodla Tap("00-000023")); RequestBPZO.SetParameter("Tələb olunanAd","Ekaterina"); Seçin = RequestBPZO.Execute().select(); While Selection.next() loop Report(Selection.Name); EndCycle;

Bir neçə parametr, məsələn, şöbələr əsasında seçim üçün verilənlər bazasına massivi köçürmək lazımdırsa, NewObject əmrindən də istifadə olunur. Eynilə, siz siyahı və ya dəyərlər cədvəlini keçid vasitəsilə başqa verilənlər bazasının elementləri ilə doldura bilərsiniz. Axtarmaq üçün hamısı əlçatandır mövcud üsullar platforma obyektləri və mexanizmləri.

RequestBPZO = Connection.NewObject.("Sorğu"); RequestBPZO.Text = "İlk 15 SEÇ | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I HERE | DirectoryUser.Department B (&NecessaryDepartment) | And DirectoryUser.Name like ""%"" + &NecessaryName+ ""%" " "; Departamentlər massivi = Connection.NewObject("Masivi"); Departamentlər massivi. Əlavə et(Bağlantı.Directories.Müəssisə Strukturu. Kodla Tap("00-000023")); Departamentlər Massivi.Əlavə (Bağlantı.Directories.Müəssisə Strukturu. Kodla Tap("00-000038")); Departamentlər Massivi.Əlavə (Bağlantı.Directories.Müəssisə Strukturu. Kodla Tap("00-000046")); BPZO.SetParameter sorğusu ("Tələb olunan şöbə", Departamentlər massivi); RequestBPZO.SetParameter("Tələb olunanAd","Ekaterina"); Seçin = RequestBPZO.Execute().select(); While Selection.next() loop Report(Selection.Name); EndCycle;

Sənədləri və ya kataloq elementlərini köçürərkən, müəyyən bir obyektin ötürülməsinə nəzarət etmək məsələsi həmişə ortaya çıxır. COM birləşmələrinin köməyi ilə bu cür problemlər unikal identifikator vasitəsilə həll edilə bilər. Siz “GetLink” funksiyasından istifadə edərək, identifikatordan sətir kimi istifadə edərək cari informasiya təhlükəsizliyindən identifikatorla plug-in verilənlər bazasında obyekt tapmalısınız. Biri tapılmadıqda, onu COM bağlantısından istifadə edərək yarada bilərsiniz.

StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Əgər ValueFilled DEYİLsə(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) onda NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Ad; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Fərdi; NewUser.Write(); endIf;

Həmçinin, COM bağlantısı "Xarici əlaqə" xüsusiyyəti aktivləşdirilmiş ümumi 1C modullarından prosedur və funksiyalardan istifadə etmək hüququna malikdir. Bu şərtə əlavə olaraq, çağırılan funksiya və ya prosedur ixrac edilməli və serverdə yerinə yetirilən interaktiv hərəkətləri ehtiva etməməlidir. Əks halda, əməliyyatın etibarsız olması ilə bağlı bir səhv görəcəksiniz.

Qarışıq..; VariableFunction = Əlaqə..; funksiya çağırışı>ümumi modul adı>prosedur çağırışı>ümumi modul adı>

1C-də başqa bir verilənlər bazası ilə xarici əlaqə imkanları olduqca genişdir və bir çox işi yerinə yetirməyə imkan verə bilər. Alətləri düzgün qiymətləndirməyi və optimal həll yolunu seçməyi bacarmaq vacibdir. Əksər hallarda bu bacarıq yalnız təcrübə ilə və ya təcrübəli mütəxəssislərin işinin nümunələrini öyrənməklə ortaya çıxır.


Açar sözlər: COM, əlaqə, xarici, OLE, Automation, Connect, ComConnector, Srvr

Məlumata daxil olmaq üçün 1C: Enterprise 8.0 COM bağlantılarından istifadə edərkən Avtomatlaşdırma serverindən istifadə ilə müqayisədə aşağıdakı üstünlüklər mövcuddur:

  1. Daha sürətli əlaqə qurulması, çünki ayrıca əməliyyat sistemi prosesi yaratmağa ehtiyac yoxdur və bütün hərəkətlər zəng prosesi çərçivəsində həyata keçirilir;

  2. 1C:Müəssisə obyektlərinin xassələrinə və metodlarına daha sürətli çıxış, çünki girişin təşkili proseslərarası əlaqə tələb etmir;
  3. Əməliyyat sistemi resurslarının daha az istehlakı.

Ümumiyyətlə, COM bağlantısı vasitəsilə 1C: Enterprise 8.0 ilə işləmək serverin avtomatlaşdırılması rejimində 1C: Enterprise ilə işləməyə bənzəyir. Əsas fərqlər aşağıdakılardır:

  1. Avtomatlaşdırma serveri vəziyyətində, tam hüquqlu 1C: Enterprise 8.0 proqramı işə salınır və COM bağlantısı vəziyyətində, nisbətən kiçik bir prosesdə olan COM server işə salınır.

  2. COM bağlantısı ilə işləyərkən, 1C: Enterprise 8.0 istifadəçi interfeysinin təşkili ilə əlaqəli bu və ya digər şəkildə funksionallıq mövcud deyil;
  3. COM bağlantısı işləyərkən 1C: Enterprise 8.0 konfiqurasiya proqram modulu istifadə edilmir. COM bağlantısı ilə işləyərkən onun rolunu xarici əlaqə modulu oynayır.

1.1 COM əlaqəsinin qurulması proseduru

COM bağlantısı vasitəsilə 1C: Enterprise 8.0 məlumatlarına girişi təşkil etmək üçün aşağıdakı hərəkətlər ardıcıllığı yerinə yetirilir:

  1. V8.COMConnector identifikatoru ilə COM obyekti yaradılır, onun köməyi ilə əlaqə qurulur;

  2. əvvəl yaradılmış V8.COMConnector obyektinin Connect metodu çağırılır. Connect metodu 1C: Enterprise 8.0 məlumat bazası ilə COM əlaqə obyektinə keçidi qaytarır;
  3. Qəbul edilən COM əlaqə obyekti vasitəsilə əlaqənin qurulduğu infobazanın etibarlı metodlarına, xassələrinə və obyektlərinə daxil olur.

Vacibdir! COM əlaqəsində istifadəçi interfeysinin olmaması səbəbindən COM əlaqəsində bütün obyektlər, xüsusiyyətlər və metodlar istifadə edilə bilməz.

1C: COM bağlantısı vasitəsilə xaricdən əldə edilə bilən müəssisə obyektləri:

  1. Xarici birləşmə modulunun ixrac edilmiş dəyişənləri və prosedurları/funksiyaları

  2. İxrac edilmiş dəyişənlər və ümumi modulların prosedurları/funksiyaları
  3. Ümumi modulların xüsusiyyətlərini təyin etməklə bütün modulları daxil etmək və istisna etmək

  4. Preprosessordan istifadə edərək ümumi modulların fraqmentlərinin daxil edilməsi və xaric edilməsi
  5. Qlobal kontekst 1C: Müəssisə 8.0, müştəri tətbiqi ilə sıx əlaqəli obyektlər istisna olmaqla (TextDocument, TabularDocument, ...)

1.2 Xarici əlaqə modulu

Artıq qeyd edildiyi kimi, COM bağlantısı ilə işləyərkən tətbiq modulunun vəzifələri xarici əlaqə modulu tərəfindən yerinə yetirilir. Bu modulda müvafiq olaraq əlaqənin işə salınması və dayandırılması zamanı yerinə yetirilən hərəkətləri ehtiva edən SystemStarts() və WhenSystemCompletes() hadisələrin idarəedicisi prosedurları ola bilər.

Export açar sözü ilə xarici birləşmə modulunda müəyyən edilmiş prosedurlar, funksiyalar və qlobal dəyişənlər, proqram modulunda olduğu kimi qlobal kontekstin bir hissəsinə çevrilirlər.

1.3 Ümumi modullar

Ümumi modullar üçün "Müştəri", "Server" və "Xarici Əlaqə" xassələri təqdim edilmişdir. Onlar konfiqurasiyada modulların müştəri-server versiyasında və COM əlaqə rejimində istifadəsini müəyyən etmək üçün nəzərdə tutulub.

1.4 "V8.COMConnector" obyekti

V8.COMConnector COM obyekti tərəfindən həll edilən yeganə vəzifə 1C: Enterprise 8.0 məlumat bazası ilə COM əlaqəsinin qurulmasıdır. V8.COMConnector obyektinin bir nümunəsindən istifadə etməklə qeyri-məhdud sayda əlaqə qurmaq olar. V8.COMConnector obyekti 1C: Enterprise 8.0 məlumat bazası ilə COM əlaqəsi yaratmaq üçün nəzərdə tutulmuş vahid Connect metoduna malikdir.

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

İnformasiya təhlükəsizliyi sistemi ilə əlaqə xətti Parametr=Dəyər formasında fraqmentlər silsiləsi təşkil edir. Fraqmentlər bir-birindən ";" ilə ayrılır. Dəyərdə boşluq varsa, o, içəriyə daxil edilməlidir ikiqat sitatlar (").

Ümumi parametrlər:

Usr - istifadəçi adı;
Pwd - parol.

Fayl versiyası üçün aşağıdakı parametr müəyyən edilmişdir:

Fayl - məlumat bazası kataloqu.

Müştəri-server seçimi üçün aşağıdakı parametrlər müəyyən edilmişdir:

Srvr - 1C:Müəssisə serverinin adı;
Ref - serverdəki məlumat bazasının adı.

Qoşulma metodu 1C: Enterprise 8.0 infobazasına COM əlaqəsi yaradır və COM əlaqə obyektinə keçidi qaytarır.

// Bağlayıcı obyekt yaradıldı
V8 = Yeni COMObject("V8.COMConnector");
// COM əlaqə obyekti yaradılır
Əlaqə = V8.Connect("Fayl=""c:\InfoBases\Ticarət""; Usr=""Direktor"";")

1.5 COM əlaqə obyekti

1C: Enterprise infobazasına COM bağlantısı onun qlobal kontekstinə tam girişi təmin edir (“Proqram modulunun icra konteksti”nə baxın). Buna görə də, bir COM bağlantısı öz üsulları kimi ola bilər: sistem sabitləri, menecerlərdən istifadə edərək əldə edilən obyektlərin konfiquratorunda göstərilən dəyərlər (məsələn, sabitlər, siyahılar, kataloqlar, sənədlər, sənəd jurnalları, hesabatlar, emal, növlər üçün planlar). xüsusiyyətlərin, planların hesablarının, hesablama növlərinin planlarının, registrlərin), həmçinin Export açar sözü ilə xarici əlaqə modulunda elan edilmiş dəyişənlərin.

Bundan əlavə, COM bağlantısı müəyyən növlərin dəyərlərini yaratmaq üçün istifadə edilə bilən əlavə NewObject metoduna malikdir.

tk = Bağlantı. NewObject("Dəyər Cədvəli");

String metodu 1C:Enterprise dəyərlərinin sətir təsvirlərini əldə etməyə imkan verir.

Görünüş = Connection.String(Data.UniqueIdentifier());

1.6. COM bağlantısı ilə işləmək xüsusiyyətləri

Avtomatlaşdırmada və COM əlaqəsində TRUE və FALSE aşağıdakı dəyərlərə malikdir: -1 (mənfi bir) və 0.

COM əlaqələrinin hovuzunu təşkil etmək mümkündür. Eyni zamanda, qəbul edən server 1C: Enterprise-də bir neçə COM əlaqə obyekti ƏVVƏLDƏ yaradılır və yeni obyekt yaratmağa ehtiyac olmadığı üçün əlaqə yaratmaq daha da az vaxt tələb edir.

Müəyyən edilmiş parametrlər əsasında sorğu mətnləri yaratmaq üçün nəzərdə tutulmuş yeni Query Builder obyekti tətbiq edilmişdir. Bu obyekt hesabatın elektron cədvəl sənədinə çıxarılması və digər tapşırıqlarla əlaqəli olmayan hesabat qurucu funksiyasını dəstəkləyir. istifadəçi interfeysi. Bu obyekt 1C: Enterprise serverində və COM bağlantısında istifadə edilə bilər.

1C: Enterprise serverində daxili dili işləyərkən COM obyektlərindən istifadə edə bilərsiniz.

COM xətaları daxili dil istisnalarına çevrilir.

Konfiqurasiya etibarsız obyekt yaratmağa cəhd edərsə, məs. elektron cədvəl sənədi, xarici əlaqə modulunda, paylaşılan modulda və ya obyekt modulunda COM bağlantısı istisna hal kimi qurulmaya və ya kəsilə bilər.

1C verilənlər bazası arasında məlumat mübadiləsi variantlarından biri COM bağlantısı vasitəsilə mübadilədir.

COM bağlantısından istifadə edərək, bir 1C verilənlər bazasından digərinə qoşula və məlumatları oxuya və ya yaza bilərsiniz. Bu üsul həm verilənlər bazalarının müştəri-server versiyalarında, həm də fayl verilənlər bazalarında istifadə edilə bilər. Bu yazıda bu tip əlaqə nümunələrinə baxacağıq. Nümunələr platforma 8.2-dən istifadə edir.

1C tətbiqi üçün iki növ COM obyekti yarada bilərsiniz. Bu V82. TətbiqV82.COMConnector. halda V82. Tətbiq 1C tətbiqinin demək olar ki, tam hüquqlu bir nüsxəsi istifadəyə verildi. istifadə edildiyi halda V82.COMConnector Kiçik bir server hissəsi işə salınır.
Bu vəziyyətdə işləmə sürəti daha yüksəkdir, lakin bəzi funksiyalar mövcud olmaya bilər. Xüsusilə, xarici əlaqələrlə işləmək xüsusiyyətinin təyin olunmadığı formalar və ümumi modullarla işləmək. Əsasən istifadə etməlisiniz V82.COMConnector və yalnız funksionallıq olmaması halında V82. Tətbiq. Əməliyyat sürətindəki fərq böyük həcmli verilənlər bazalarında xüsusilə nəzərə çarpa bilər.

Beləliklə, başlayaq

  1. COM obyekti yaradaq
    • üçün V82. Tətbiq Bağlantı = Yeni COMObject("V82.Application" );
    • üçün V82.COMConnector Bağlantı = Yeni COMObject("V82.COMConnector" );
  2. Bir əlaqə sətri yaradaq
    • verilənlər bazasının server versiyası üçün ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • verilənlər bazasının fayl versiyası üçün ConnectionString = "Fayl = " "PathKBase" "; Usr = İstifadəçi adı; Pwd = Parol";
  3. Verilənlər bazasına qoşulma Bağlantı cəhdi = Bağlantı. Connect(ConnectionString); İstisna Mesajı = New MessageToUser; Mesaj. Mətn = + ErrorDescription() ; Mesaj. Hesabat vermək (); EndAttempt;
  4. Verilənlər bazası ilə əlaqə kəsilirƏlaqə = Müəyyən edilməmişdir;

    Obyekt üçün V82. Tətbiq Bağlantını dayandırmaq lazımdır, əks halda natamam seans qalacaq, sonra əl ilə silinməli olacaq. halda V82.COMConnectorəlaqənin qurulduğu prosedur başa çatdıqdan sonra avtomatik olaraq əlaqə pozulur.Və daha bir kiçik nöqtə var.

    Bağlantı qurulan istifadəçi üçün onun parametrlərində "Proqramı bağlayarkən təsdiq tələb et" qutusu söndürülməlidir.

İndi bütün kodu bir yerə qoyaq

Bağlantı = Yeni COMObject("V82.Application" ); //Bağlantı = Yeni COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Fayl = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Bağlantı cəhdi = Bağlantı. Connect(ConnectionString); İstisna Mesajı = New MessageToUser; Mesaj. Mətn = "Verilənlər bazasına qoşulmaq mümkün olmadı"+ DescriptionError(); Mesaj. Hesabat vermək (); EndAttempt; Əlaqə = Müəyyən edilməmişdir;

Bağlantı növü üçün V82. Tətbiqüsul ilkin olaraq yaradılmış COM obyekti və üçün istifadə olunur V82.COMConnectorəlaqə üsulu tətbiq edilir. sorğu gəlirləri ilə sonrakı iş standart vasitələr 1C. kodda belə görünür:

Sorğu = Bağlantı. NewObject("Sorğu"); // Üçün V82.COMConnector Sorğu = Bağlantı. NewObject("Sorğu"); // Üçün V82. Tətbiq Sorğu. Mətn = "SEÇ | Təşkilatların Vəzifələri Kodeks, | Təşkilatların Vəzifələri.Adı|FROM | Kataloq. Təşkilatların Vəzifələri AS Təşkilatların Vəzifələri"; Nəticə = Sorğu. Run(); Nümunə = Nəticə. seçin(); Salam Seçim. Next() Loop EndLoop ;

1C: Enterprise 8.3 versiyası üçün hər şey dəyişməz olaraq qalır, istisna olmaqla, COM obyektlərini yaratarkən istifadə etməlisiniz "V83.COMConnector" və ya "V83. Tətbiq".




Üst