1s'den com bağlantısıyla veri alınıyor. V8: COM bağlantısı. COM bağlantısı üzerinden numaralandırmayı alma ve karşılaştırma

Soru: COM IE 11 kullanarak bir siteyi ayrıştırma


İyi günler.!
Soru acı bir şekilde iyi biliniyor, bilgiyi siteden almanız gerekiyor. Ancak nüanslar var:
1. Doğrudan yetkilendirme sayfasına gitmenin bir yolu yoktur (önce ana sayfaya gidin, Oturum Aç bağlantısını tıklayın, yetkilendirme formunu alın ve ancak bundan sonra oturum açın).
2. Web sitesini şu adresten ziyaret etmeniz gerekir: arama çubuğu veri arayın, ardından okuyun ve tekrar arayın (veriler Rusça ve İngilizce olabilir, yani arama verileri Rusça ise, o zaman sitenin "Rusça versiyonunu" aramanız gerekir ve bu başka bir bağlantıdır) başka bir sayfaya. İngilizcede de aynı sorun var).

Sonunda:
- ana sayfaya gidin - giriş yapın - veri arayın - (gerekirse sitenin başka bir sürümüne gidin) - alın.

Sorun:
Bir bağlantıyı takip ederken veriler "belge" özelliğine okunmaz.
İki noktada meydana gelir:
- oturum açmak için bağlantıyı takip ettiğimizde (bu bir düğme değil, yalnızca bir bağlantıdır);
- sitedeki dili değiştirdiğimizde (aynı zamanda bir bağlantı).

Not
Yetkilendirme aşamasında bir bağlantıyı takip etmeden önce bir bağlantı alırsanız, com'u kapatıp IE.navigate("link") yöntemi üzerinden geçişle tekrar açarsanız, "document" özelliğindeki veriler normal şekilde gider. Ancak sitedeki dili değiştirirken aynı şeyi yapamazsınız çünkü... Tekrar giriş yapmam gerekiyor ve ayrıca bu sorunu tam olarak bu şekilde çözmek istemem.

İşte kod:

&İstemcide Prosedür SetWaitingIE(IE, SecondCall=False) IE.Busy DEĞİLSE O halde D = CurrentDate() + 3; D >= CurrentDate() iken Döngü IE.Busy ise Sonra İptal Et; endIf; EndCycle; endIf; IE.Busy Döngüsü EndLoop iken; IE.ReadyState iken< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>"tamamlanmış" Döngü EndCycle; İkinci Arama Sonra Geri Dönülmesi Durumunda İstisna; Diğer Bağlantı = IE.KonumURL'si; IE.Quit(); IE = GetCOM("InternetExplorer.Application"); IE.Navigate(Bağlantı); SetExpectIE(IE, True); endIf; Deneme Sonu; EndProcedure &OnClient Function PerformUserAuthorization(IE, Link, Login, Password, Authorized=False, SC=0) Attempt Elements = IE.Document.GetElementsByName("kullanıcı adı"); Elements.Length = 1 ise Elementlerin Her El'i İçin Döngü El.Value = Giriş; EndCycle; endIf; Öğeler = IE.Document.GetElementsByName("şifre"); Elements.Length = 1 ise Elementlerin Her El'i İçin Döngü El.Value = Şifre; EndCycle; endIf; IE.Document.GetElementById("ID").Click(); SetWaitingIE(IE); Yetkili = Doğru; İstisna Eğer CN > 3 ise Yanlış Döndür; endIf; IE.Quit(); IE.Navigate(Bağlantı); SetWaitingIE(IE); MF = MF + 1; PerformUserAuthorization(IE, Bağlantı, Giriş, Şifre, SCH) ise True'yu Döndürün; endIf; Deneme Sonu; İade Yetkilisi; EndFunction &OnClient Prosedürü Upload(Command) SpTables = GetListTablesForUpload(); SpTables = Yanlışsa Geri Dön; endIf; IE = GetCOM("InternetExplorer.Application"); SpTable.SOURCE_LIST Döngüsünden Her Satır İçin RA = Row.ID; Kaynak = String.RESOURCE; IE.Navigate(Kaynak); SetWaitingIE(IE); Deneyin If Line.NEW_PAGE_IN_LOGIN = 1 Then Classes = IE.Document.GetElementsByClassName("ClassName"); Classes.Length = 1 ise Her Sınıf İçin Sınıflardan Döngü Kaynağı = Class.All(0).Href; İptal; EndCycle; IE.Quit() deneniyor; IE = IE.Navigate(Kaynak); SetWaitingIE(IE); İstisna Raporu("" +String.NAME + "" sitesine bağlantı başarısız oldu!"); İptal; Deneme Sonu; Aksi halde Report("Siteye bağlantı "" +String.NAME + "" başarısız oldu!"); İptal; endIf; endIf; PerformUserAuthorization DEĞİLSE(IE, Kaynak, String.LOGIN, String.PASSWORD) Then Report("" + String.NAME + "" sitesindeki kullanıcı yetkilendirmesi tamamlanmadı!"); İptal; endIf; Kaynak = IE.KonumURL'si; Kişi Listesi = SpTable.FACE_CODES.FindLines(New Structure("SOURCE", RA)); Bulunamayan Liste = Yeni Dizi; Kişi Listesindeki Her Kişi İçin PersonName = Person.NAME_IN_SITE döngüsünü gerçekleştirin; Bu Rusça = KarakterKodu(KişiAdı, 1) >= 1040; TechResource = ?(Bu Rusçadır, StrReplace(Resource, "en_US", "ru_RU"), StrReplace(Resource, "ru_RU", "en_US")); TekResurs ise<>IE.LocationURL Sonra RootClasses = IE.Document.GetElementsByClassName("ClassName"); RootClasses.Length = 1 ise RootClasses'tan Her RootClass İçin Döngü Sınıfları = RootClass.Children; İptal; EndCycle; AmGroup = Yanlış; RuGroup = Yanlış; Sınıflardan Her Sınıf İçin Döngü Eğer HPreg(Class.ClassName) = "dropdown-header" Then AmGroup = Find(Class.InnerText, "Americans") > 0; RuGroup = Find(Class.InnerText, "Avrupa") > 0; ElseIf HPreg(Sınıf.SınıfAdı)<>"selected" Then If AmGroup And Find(Class.All(0).InnerText, "English") > 0 OR RuGroup And Find(Class.All(0).InnerText, "Russia") > 0 Then IE.Navigate(Class) .Tümü(1).Href); SetWaitingIE(IE); İptal; endIf; endIf; EndCycle; endIf; endIf; IE.Document.GetElementById("ID").Value = KişiAdı; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); SetExpect(IE)'yi kurmaya çalışıyorum; //Alınan veriyi devrelendir ExceptionListNotFound.Add(Person); Devam etmek; Deneme Sonu; EndCycle; İstisna Raporu("Hata:" + Semboller.PS + ErrorDescription()); İptal; Deneme Sonu; EndCycle; IE.Quit(); Prosedürün Sonu

Cevap:

Konu çok ilginç ama kişisel olarak maalesef bu sorunu bir şekilde anlama deneyimim ve hatta fırsatım yok. Bu konuyla ilgili bilgi bulabilirseniz lütfen paylaşın.
--- Bir dernek mesajlar, 29 Nisan 2016 ---

Anladığım kadarıyla SQL veritabanına erişim yok mu?

--- Mesaj birleştirme, 29 Nisan 2016 ---

Peki, eğer ayrıştırılıyorsa, o zaman ne tür bir erişim?

Soru: COM bağlantısı 1C 8.3 - 1C 8.3 Bağlantıya hata ayıklayıcıyı girmek mümkün mü


Forum üyelerine, platform 8.3.6 (BP 3.0) üzerindeki bir veritabanından kendi yazdığı bir veritabanının (aynı zamanda çalışan) harici bağlantı modülüne COM bağlantısı aracılığıyla bağlandığımda hata ayıklamanın mümkün olup olmadığını sormak istedim. Platform 8.3.6'da) ve işlemeyi kullanarak buradan aktarım prosedürlerini çağırıyor musunuz? Veritabanları şu anda dosya tabanlıdır ve tek bir bilgisayarda bulunmaktadır, ancak sunucu sürümü de planlanmaktadır. Bu zamana kadar, COM bağlantısı üzerinden yürütülecek rastgele kodu iletmek ve hataları günlüğe kaydetmek için aşağıdaki yapıları kullanıyordum. Harici bağlantı modülündeki kendi yazdığı veri tabanındaki prosedürlerin parçaları şunlardır:

Function ExecuteIn(CodeExecute, Yardımcı Parametre = "") Dışa Aktarma
Güvenlik kontrolü(); // Başka bir kullanıcı adına harici olarak bağlanırken kötü amaçlı kod yürütme girişimlerine karşı koruma Cevap = "0" //Hiçbir şeyin döndürülmesi gerekmiyorsa, kodda hata yoksa  //sadece Tamam'ı döndürür  //Çünkü İletilen kod hatalar içerebilir, bu durumda yürütülmesini bir denemeyle tamamlayacağız.Çalıştırmayı Deneyin(CodeExecute); // COM Bağlantısı (Libra Base Harici Bağlantı Modülü) aracılığıyla kodu başka bir bilgisayarda string olarak yürütünİstisna //eğer bir hata varsa metnini döndür Yanıt = ErrorDetailView(ErrorInfo()); Deneme Sonu; Yanıtla Geri Dön; EndFunction Function TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Başka bir kullanıcı adına harici olarak bağlanırken kötü amaçlı kod yürütme girişimlerine karşı koruma. OutParameter = "Terazi tabanı ile COM bağlantısı üzerinden bağlantı mevcuttur!"; Doğruyu Döndür; Son Fonksiyon
BP 3.0'dan aşağıdaki parçayı çalıştırıyorum:
Girişim
Com = Yeni COMObject("V83.COMConnector"); Bağlantı = Com.Connect ("Dosya = ""C:\1 c\Base_1C\Libra""; Usr = ""ComExchange""; Pwd = ""1"";"); TellUser("Test başarıyla tamamlandı! Terazi veritabanına bağlantı var"); İstisna Hatası = ErrorDetailView(ErrorInfo()); TellUser("Libra tabanına COM bağlantısı yok! Ayrıntılar"+Hata); Com=Tanımsız; Geri dönmek ; Deneme Sonu; Çıkış = ""; = "1" olarak; If Connection.Communication Test(In, Out) Then TellUser("Terazi konfigürasyonu ile iletişim testi başarılı! Cevap: "+Out); Aksi halde TellUser("Terazi konfigürasyonu ile iletişim testi başarısız oldu! Cevap: "+Out); EndIf ;
Elbette Execute(CodeString1C8) operatörüne girmenin mümkün olmayacağını anlıyorum, ancak uzak modül prosedürünü çağırırken böyle bir olasılık var mı? harici bağlantı ana veritabanından Connection.TestConnections(In, Out) kodunu, arama prosedürünün Security Check() işlevinde aynı hata ayıklayıcı oturumuna girmek için?
Bu konuyla ilgili bulabildiğim belgelere zaten baktım. Her iki konfigürasyonda da her yerde hata ayıklamayı ve kesme noktalarını etkinleştirecek seçenekleri ayarladım. Her iki yapılandırıcıyı da başlattım.
Bu durumda, Güvenlik Kontrolü() prosedürünün hatalarını harici bağlantı modülünün yanında daha da ayıklamak mümkün müdür?

Soru: COM bağlantısında yanlış IP adresi


Sunucular arasında V83.ComConnector üzerinden doküman aktarımını sağlayan işlem bulunmaktadır. Sunucu 1 (1C sürüm 8.2.19.90) her zaman Sunucu 2'ye (sürüm 8.3.8.2033) bağlanır. Bağlantı hattında sunucu 2'nin IP adresi vardı ve her şey yolunda gitti. Sunucu 1'de ayrıca sunucu 2'deki 8.3.9.2033 sürümündeki kurulu platformu da gördüm (eğer bu önemliyse).

Sorun şu ki, Sunucu 2'de IP adresi değişti, işlem elbette çalışmayı durdurdu ve bağlantı hattına yeni bir IP girdiğimde işlem, açıklaması hala eski IP (!) ve metin olan bir hata üretiyor “Başka bir bilgisayardan gerekli yanıtın gereken sürede alınamaması veya bağlantının kurulması nedeniyle bağlantı kurma girişimi başarısız oldu. kurulan bağlantı Zaten bağlı bir bilgisayardan gelen yanlış yanıt nedeniyle."

Her şeyi yeniden başlattılar, önbellekleri temizlediler vb., yöneticiler kendi açılarından her şeyin yolunda olduğuna yemin ediyorlar, bir sunucudan diğerine RDP vb. aracılığıyla giriş yapabilirsiniz.

Sorun ne olabilir, nasıl çözebilirim? İnternetin her yerine baktım ve böyle bir durum bulamadım!

Cevap:() %100 eminim! İkinci gün denediğimde, yazdığım gibi, hata ayıklayıcıyla bakıyorum, hatta bağlantı testi için aptalca bir tek hücreli işlem bile oluşturdum, o hata çıkıyor ve hepsi bu.

Soru: Farklı sürümlere COM bağlantısı


Herkese selam.
Farklı veritabanlarından farklı verileri toplayan ve her şeyi tek bir yığında toplayan "Konsolidasyon" adlı bir veritabanım var. Sorun şu ki, bu veritabanlarına com aracılığıyla bağlanmanız gerekiyor, ancak bunlar farklı sürümler, bu yüzden sonunda şöyle bir hata alıyorum:
Bağlantı hatası!(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Bağlam yöntemini çağırırken hata (Connect) : Bir istisna oluştu (V83.COMConnector.1 ) : İstemci ve sunucu sürümleri arasında uyumsuzluk 1 C:Enterprise Client sürümler farklı ve sunucu (8.3.8.1964 - 8.3.6.2332), istemci uygulaması: COM bağlantısı

Bir bağlantı kuruyorum, diğeri kopuyor...

Bir şekilde, bileşen hizmeti aracılığıyla, her sürüm için "kendi sınıflarınızı (bağlayıcılar)" oluşturabileceğinizi ve ardından sınıfın platform sürümüne karşılık gelen Yeni bir COM Nesnesi oluşturabileceğinizi biliyorum... belki de yanılıyorum.

Bu sorunu aşmama yardım edin...

Cevap:İşte bu... Soruyu kaldıracağım..

Soru: Doldurma İşleminde Com Hatası


Merhaba.
8.2 Perakende 1.
8.1'e bağlanıyorum Tipik bir yapılandırma değil.
Veritabanına com üzerinden bağlanıp bir belge oluşturmaya çalışıyorum ancak “CreateDocument()” veya “GetObject()” çağrıldığında prosedürde bir hata oluşuyor İşlemeDolgu. şek.

Aynı şeyi 8.1 veritabanının kendisinde de deniyorum ama hata yok ve Doldurma İşlemine de girmiyorum.
Yanlış olan ne olabilir?

Cevap: turboq, çarpık yazılmış bir belge modülü!

5 dakika sonra eklendi
O çağrılmadı! Derlemeye çalışıyor! Ancak ComConnector aracılığıyla bağlanırken Diyalog Modu sorunu MEVCUT OLMADIĞINDAN, belge modülü derlenemez.
Bu gibi durumlarda, bir nesne modülünde bir iletişim kutusuyla çalışmanın uygulanması gerektiğinde, ön işlemciye verilen talimatları kullanın.

Bu sizin hatanız değil, bağlandığınız veritabanındaki belge modülündeki bir hatadır.

Veritabanında kod istemcide yürütülür ve bir Diyalog Modu vardır, böylece her şey hatasız gerçekleşir

Bağlantı için ComConnector, V8.Application'ı kullanmayın, o zaman arayüz şeyleri kullanımınıza sunulacaktır

5 dakika sonra eklendi
=======================================================================================================================
harici bağlantının (SP) açıklamasından ComConnections hakkında okumanız gerekenleri kalın harflerle vurguladım

Tanım:

Genel olarak, 1C:Enterprise 8 ile harici bir bağlantı aracılığıyla çalışmak, 1C:Enterprise ile sunucu Otomasyonu modunda çalışmaya benzer. Temel farklar aşağıdaki gibidir:

  • Bir Otomasyon sunucusu durumunda, tam teşekküllü bir 1C:Enterprise 8 uygulaması başlatılır ve harici bir bağlantı durumunda, nispeten küçük bir işlem içi COM sunucusu başlatılır.
  • Harici bağlantıyla çalışırken kullanılamaz işlevsellik 1C:Enterprise 8 kullanıcı arayüzünün organizasyonuyla ilgili şu veya bu şekilde;
  • Harici bir bağlantı çalıştırırken, yönetilen uygulama modülü (modül düzenli uygulama) yapılandırma 1C:Enterprise 8. Harici bir bağlantıyla çalışırken rolü, harici bağlantı modülü tarafından oynanır.
Harici bir bağlantı kullanıldığında Otomasyon sunucusu kullanmaya kıyasla aşağıdaki avantajlar vardır:
  • Ayrı bir işlem oluşturulması gerekmediği için daha hızlı bağlantı kurulumu işletim sistemi ve tüm eylemler çağrı süreci içerisinde gerçekleştirilir;
  • Erişimin düzenlenmesi işlemler arası iletişim gerektirmediği için 1C:Enterprise nesnelerinin özelliklerine ve yöntemlerine daha hızlı erişim;
  • İşletim sistemi kaynaklarının daha az tüketimi.
1C:Enterprise 8 verilerine harici bir bağlantı aracılığıyla erişimi düzenlemek için aşağıdaki eylem dizisi gerçekleştirilir:
  • bağlantının kurulduğu bir COM bağlantı yöneticisi oluşturulur;
  • COM bağlantı yöneticisinin Connect yöntemine bir çağrı yapılır. Connect yöntemi ile bir dış bağlantı döndürür bilgi tabanı 1C: İşletme 8;
  • harici bir bağlantı aracılığıyla bağlantı kurulan bilgi tabanının geçerli yöntemlerine, özelliklerine ve nesnelerine erişim sağlanır.
Önemli! Kullanıcı arayüzünün olmaması nedeniyle tüm nesneler, özellikler ve yöntemler bir dış bağlantıda kullanılamaz.
Dış birleştirme şunları sağlar: tam erişim küresel bağlamına. Bu nedenle, yöntemleri olarak harici bir bağlantı şunları içerebilir: sistem sabitleri, yapılandırıcıda belirtilen nesnelerin değerleri, erişim yöneticiler kullanılarak gerçekleştirilir (örneğin, sabitler, numaralandırmalar, dizinler, belgeler, belge günlükleri, raporlar) , işleme, özellik türleri planları, hesap planları, hesaplama türü planları, kayıtlar) ve ayrıca harici bağlantı modülünde Export anahtar sözcüğüyle bildirilen değişkenler.

Kullanılabilirlik:

Entegrasyon.

Soru: COM bağlantısı, özellik tipi planı


Görev, bir COM bağlantısı aracılığıyla bilinen bir karakteristik tür planında programlı olarak yeni bir öğe oluşturmaktır. Bağlantı kuruldu, burada her şey yolunda.

Şöyle yazıyorum:

TypeDescriptionTech = New TypeDescription("DirectoryLink.Karşı Taraflar"); AmaçÖzellikler = Bağlantı. Karakteristik Türlerinin Planları. Nesne Kategorilerinin Özelliklerinin Amaçları. Ada Göre Bul(“Dizin “Bireyler””); NewElement = Bağlantı. Karakteristik Türlerinin Planları. Nesne Özellikleri. CreateItem(); Yeni Öğe. Ad = ÖzellikAdı; Yeni Öğe. ÖzellikAtaması = ÖzellikAtaması; Yeni Öğe. ValueType = AçıklamaTypesTech;

Son satır çalışmıyor. Ve bu anlaşılabilir bir durum, 1C'nin çalıştığı veritabanı için böyle bir tür buluyor, ancak ekli veritabanı için bir türe ihtiyacım var. Nasıl elde edilir?

Benim versiyonumda, "Özel Liste" değer türüne sahip bir öğe basitçe oluşturuldu. Prensipte çalışıyor ama bir şekilde çirkin.

Platformformu 8.3. COM bağlantısı bir önkoşuldur. Kullanımı olmayan çözümler ilgi çekici değildir.

Cevap:

Rulo. Teşekkürler, işe yaradı.

Soru: COM bağlantısı. Sorgu parametresi sorunu


İyi günler.
COM bağlantısı üzerinden istekle ilgili sorun.

Perem TK; ArrayItems = COM.NewObject("Array"); TZNomenclature Döngüsü Adlandırmasındaki Her Satır İçin = COM.Directories.Nomenclature.GetLink(COM.NewObject("UniqueIdentifier", Abbr(String.Nomenclature.Identifier))); Adlandırma Array.Add(Adlandırma); EndCycle; If ArrayItems.Quantity()<>0 Sonra İstek = COM.NewObject("İstek"); Request.text = "Select | FriceSitemsSlicelast.Commities olarak, | Fiyatlar, fiyat olarak fiyat olarak, | FiyatsIsIlast.RateVat, | RegisterInformation.Pricesslicelast (| & DatAdoc, | Nomenclature) |Ve Envanter ve Malzemeler.ThisGroup = FALSE |Ve Kayıt Kuruluşu LINK Belgesi.SatışFiyatlarını Ayarlama) AS NomenclaturePricesSliceLast"; request.SetParameter("Öğe Dizisi", Öğe Dizisi); request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); request.SetParameter("PriceType", COM.Directories.PriceTypes.GetRef(COM.NewObject("UniqueIdentifier", ParameterStructure.PriceType.Identifier))); TZ = COM.NewObject("Değer Tablosu"); TK = request.Run().Upload(); Aksi halde TK = Yeni Değer Tablosu; TK.Columns.Add("Adlandırma"); TK.Columns.Add("Fiyat"); TK.Columns.Add("Yüzde"); TK.Columns.Add("KDV oranı"); endIf;

Sorun tam olarak öğede veya öğe dizisindedir; bunları parametre olarak ayarlarsanız istek boş fiyatlar döndürür; bu parametreyi hiç belirtmezseniz istek doğru verileri döndürür.
Aynı harici veritabanının sorgu konsolunda her şey sorunsuz bir şekilde işlenir.
Yanlış olan ne olabilir?

Cevap:

Bunu VremTable aracılığıyla yapmayı deneyin. Sütunlarla bir değerler tablosu oluşturun. Mesela doldurun, isteğe çekin ve ardından dahili bir bağlantıyla uygulayın.

Soru: Dosya veritabanından dosya veritabanına Com bağlantısı


Günaydın. Com bağlantısı kullanarak başka bir dosya veritabanına bağlanmaya çalıştığım 8.3 dosya veritabanım var:

Dizin = "C:\Kullanıcılar\1C\İş Akışı (test)"; Kullanıcı = "Yönetici"; Şifre = ""; Bağlantı Parametreleri = "Dosya="+Directory+";Usr="+Kullanıcı+";Pwd="+Şifre+";"; V83 = Yeni COMObject("V83.COMConnector"); Bağlantı Denemesi = V83.Connect(ConnectionParameters); İstisna Raporu("Belge akışına bağlanılamadı!"); Deneme Sonu;


Hata açıklaması olmadan bir istisna atılır.
Her iki veritabanı da 8.3'te başlatılmak zorunda kalıyor. Dizin ve kullanıcı doğru şekilde belirtildi. Sebebi ne olabilir?

Cevap:

V82 = New COMObject(" kod satırını yazıyorum V83.COMConnector"); ve kodun geri kalanı değişiklik olmadan aşağıdaki gibidir.

Kaynak ve hedef platformların sürümleri farklı olduğunda hata oluşur.

Kütüphanenin hangi sürümünün kaydedileceği ve nereye kaydedileceği belli değil mi?

Sanırım kitaplığı 8.2.18.61 sürümüne kaydetmem gerekiyor ve bunu bir yarasa dosyası aracılığıyla yapıyorum

regsvr32 /n /i:kullanıcı "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll"
Duraklat

msk-test1c:1641 -- bu sunucu 8.3.5.1098
V82 = Yeni COMObject("V82.COMConnector"); Rapor ("Muhasebe 3.0'a Bağlan..."); Bağlanmayı Denemek = V82. Connect("srvr = ""msk-test1c:1641""; ref = ""db_test""; usr = ""Yönetici""; pwd = ""123"""); Bildir ("Yaşasın bağlantı kuruldu!"); İstisna Raporu("Veritabanına bağlantı yok!"); Rapor(HataAçıklaması()); // Bilgi = Hata Hakkında Bilgi(); // Rapor("Açıklama= "" + Bilgi.Açıklama + """); // Rapor ("ModülAdı= "" + Bilgi.ModülAdı + """); // Rapor ("HatNumarası=" + Bilgi.HatNumarası); // Rapor ("KaynakHat=) "" + Info.SourceString + """); Return; EndAttempt;

Kütüphane istemcide, 8.2 sunucusunda, 8.3 sunucusunda nereye kaydedilmeli? Aşağıdaki şekil.
(istemci-sunucu sürümü ve 1C veritabanının dosya sürümü için)

Cevap: Bir web hizmeti aracılığıyla bir terminalle iletişim kurma görevi vardı. Taban, diyelim ki hafif. Ayrıca 0,5 veya daha hızlı mı?

Bunu söylemek zor; elimde yeterli veri yok. 0,5 saniyeden memnun kaldık, eksi üçüncü taraf bir makinedeki gereksiz 1C istemcisi, eksi 1C motorunu güncelledikten sonra kütüphane sürümlerinin senkronizasyonu, eksi kahrolası comsafearray, normal isimler ve alan türleri... Bizi düşündü diğer taraf (1C ile entegre olan bir sistem), 1C çağrılarını yeni bir "sistem iletişim modeline" yeniden yazmaları gerektiği ortaya çıktığında "anlamayacaklar". Ancak test veritabanında bir kez bir işlevi denedikten sonra, şimdi "hadi en kısa zamanda hizmete geçelim" diye alay ediliyoruz.

Soru: Com nesneleri için TypeContains nasıl kullanılır?


If Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Then There IsNomenclature = True; endIf;

"Props" başka bir 1c veritabanıyla olan com bağlantısından alındı. Karşılaştırma sırasında bir hata oluşuyor:

(ExternalProcessing.Cotained Recalculation.Form.Form.Form(183)): Bağlam yöntemini çağırırken hata oluştu (ContainsType)
If Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Sonra
yüzünden:
Bir istisna oluştu (1C:Enterprise 8.3.8.1964): Tip uyuşmazlığı (parametre numarası "1")

Com'daki türle karşılaştırılması gerektiğinden şüpheleniyorum? Tip nasıl doğru şekilde kontrol edilir?

Cevap:

Yuvarlanmıyor. Sorunu şu şekilde çözdüm:
Genel modüldeki alıcı veri tabanında, harici bağlantı onay kutusu işaretliyken kod şöyledir:

Function CheckAttributeType(Attribute, Type) Export Return Attribute.Type.ContainsType(Type(Type)); Son Fonksiyon

Bağlandığım veritabanında prosedürü Com aracılığıyla çağırıyorum:

ComConnection.Avis_ExchangeProcedures.CheckAttributeType(Attribute, "DirectoryLink.Nomenclature")

Yazdır (Ctrl+P)

1C veritabanları arasında veri alışverişi yapma seçeneklerinden biri COM bağlantısı üzerinden alışveriş yapmaktır. COM bağlantısını kullanarak bir 1C veritabanından diğerine bağlanabilir ve veri okuyabilir veya yazabilirsiniz. Bu yöntem hem veritabanlarının istemci-sunucu versiyonlarında hem de dosya veritabanlarında kullanılabilir. Bu makalede platform 8.3'teki bu tür bağlantılar ele alınmaktadır

iletişim bağlantısı

1C uygulaması için iki tür COM nesnesi oluşturabilirsiniz. Bu ole bağlantıları V83.Uygulama ve iletişim bağlantıları V83.COM Bağlayıcı . durumunda V83.Uygulama 1C uygulamasının neredeyse tam teşekküllü bir kopyası başlatıldı. Kullanım durumunda V83.COM Bağlayıcı Küçük bir sunucu kısmı başlatıldı. Bu durumda çalışma hızı daha yüksektir ancak bazı işlevler kullanılamayabilir. Özellikle, harici bağlantılarla çalışma özelliğinin ayarlanmadığı formlar ve ortak modüllerle çalışma. Çoğunlukla kullanmalısınız V83.COM Bağlayıcı ve yalnızca işlevsellik eksikliği durumunda V83.Uygulama. Çalışma hızındaki fark özellikle büyük hacimli veritabanlarında fark edilebilir. Kullanılan platform 8.2 için V82.Application veya V82.COMConnector

OLE bağlantısı kurma

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

COM bağlantısı kurma

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

Bağlantı dizisi

//İstemci-sunucu seçeneği için
Bağlantı dizisi= “Srvr = ““SunucuAdı” “;Ref = “ “TemelAdı” ;
//Dosya modu seçeneği için:
Bağlantı dizisi= “Dosya = ““YolKBazı” “; Usr = KullanıcıAdı; Pwd = Şifre”;
Girişim
Bağlantı = Bağlantı . Bağlamak(Bağlantı dizisi) ;
İstisna
Mesaj = Yeni MesajToKullanıcı;
İleti . Metin = “Veritabanına bağlanılamadı” + AçıklamaErrors(); İleti . Rapor etmek();
Deneme Sonu;

Bağlantının kesilmesi

Bağlantı = Tanımsız;
Nesne için V83.Uygulama Bağlantıyı sonlandırmak gerekir, aksi takdirde tamamlanmamış bir oturum kalır ve bunun daha sonra manuel olarak silinmesi gerekir. durumunda V83.COM Bağlayıcı Bağlantının yapıldığı prosedür tamamlandığında bağlantı otomatik olarak kesiliyor ve bir küçük nokta daha var. Bağlantının yapıldığı kullanıcı için ayarlarında “Programı kapatırken onay iste” onay kutusu devre dışı bırakılmalıdır.

NewObject() yöntemi

Yeni bir nesne oluşturmak için NewObject() yöntemini kullanabilirsiniz, örneğin:

İçin V83.COM Bağlayıcı

COM isteği = Bağlantı. YeniNesne( "Rica etmek ") ;
TabloCOM = Bağlantı. YeniNesne( “Değerler Tablosu”) ;
ArrayCOM = Bağlantı. NewObject(“Dizi”);

ViewCOM =Connection.NewObject

İçin V83.Uygulama

TalepOLE = Bağlantı. YeniNesne(“ Rica etmek ") ;
TableOLE = Bağlantı. YeniNesne(“Değerler Tablosu”) ;
ArrayOLE = Connection.NewObject("Sıralamak" ) ;
ViewCOM =Connection.NewObject(“Benzersiz Tanımlayıcı”, StringUID);

COM isteği . Metin ="SEÇMEK
| Kuruluşların Pozisyonları Kodu,
| Kuruluşların Pozisyonları.Adı
|DAN | Dizin.Kuruluşların Pozisyonları
ORGANİZASYONLARIN KONUMLARI NASIL YAPILIR?;

Sonuç = COM iste. Koşmak();
Örnek = Sonuç. Seçmek () ;
Güle güle Seçim. Sonraki()Döngü
EndCycle;
Yapılandırma nesnesi yöneticilerini de kullanabilirsiniz:
DirectoryCOM = Bağlantı. Dizinler. DizinAdı;
DocumentCOM = Bağlantı. Dokümantasyon. BelgeAdı;
RegisterCOM = Bağlantı. Bilgi Kayıtları. KayıtAdı ;

COM bağlantısı üzerinden numaralandırmayı alma ve karşılaştırma

Konfigürasyonda tanımlanan numaralandırma elemanlarının değerlerini karşılaştırmak için bu elemanları karşılaştırması kolay ilkel tiplerden birine dönüştürmek gerekir. Bu türler sayısal tür veya dize türü olabilir. Bir numaralandırma öğesinin değerini şu şekilde bir sayısal türe dönüştürebilirsiniz:

Numaralandırma Öğesi = Connection.Directories.Directory1.FindByCode(1).Props1;

OlasıValues ​​= Enum Element.Metadata().Enum Değerleri;

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

EnumerationItemNumber = 0 ise Rapor( “Numara değeri1”);

ElseIfEnumerationItemNumber = 1 Daha sonra Rapor("NumaralandırmaDeğeri2");

endIf;

Tanımlayıcıya göre COM aracılığıyla bir nesne alınıyor

Yapılandırma nesnesi yöneticileri aracılığıyla bir com nesnesi elde ederiz, örneğin:
DocumentCOM = Bağlantı. Dokümantasyon. BelgeAdı;

Daha sonra benzersiz bir tanımlayıcı dize elde ederiz:

StringUID =Bağlantı.string ( DocumentCOM.UniqueIdentifier())

Tanımlayıcı = Yeni U benzersiz Tanımlayıcı (StringUID);
İLE linkByIdentifier = Belgeler[BelgeAdı].GetLink(Identifier);

Tanımlayıcıya göre belgeye göre bir com nesnesi bulmanız gerekiyorsa, şu şekilde yazmanız gerekir:

WidCOM = Connection.NewObject(“Benzersiz Tanımlayıcı”, StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);

Verileri bir 1C konfigürasyonundan diğerine aktarmanın bir yolu, COM kullanan bir yazılım bağlantısıdır. Birçok şirket, aralarında belirli bağlantıların ve bağımlılıkların olması gereken birkaç farklı veri tabanı kullanır. Yalnızca veri aktarmak değil, aynı zamanda belirli veri işlemlerini gerçekleştirmek de gerekiyorsa, COM bağlantısı en uygun mekanizma olacaktır. Başka bir 1C veritabanındaki verileri analiz etme yeteneği, herhangi bir geliştirici için faydalıdır.

COM aracılığıyla 1C veritabanına bağlanıyoruz

1C'de bir COM bağlantısı uygulamak için COMConnector adı verilen özel bir mekanizma kullanılır. Bu nesne platformla birlikte kurulur ve bilgi tabanlarına bağlanmak için kullanılır. 8.2 ve 8.3 sürümleri için farklı adlara sahip nesnelerin kullanıldığına dikkat edilmelidir - sırasıyla “V82.COMConnector” ve “V83.COMConnector”.

Veritabanına COM bağlantısının süresinin bir lisansa mal olduğunu unutmayın - birkaç bağlantının aynı anda yürütülmesine kapılmayın. Bu özellikle sınırlı sayıda lisansa sahip kuruluşlar için önemlidir. Bu sorun, bilgi tabanına aktif kullanıcı bağlantısı olmadığında yürütülen rutin görevlerin yardımıyla çözülebilir.

Başka bir veritabanına bağlanabilmek ve gerekli bilgileri talep edebilmek için aşağıdaki verileri bilmeniz gerekir:

  1. Ne tür - dosya mı yoksa istemci-sunucu mu?
  2. Nerede bulunuyor;
  3. Giriş yapmak için hangi adı ve şifreyi kullanabilirsiniz?
  4. Hangi verilerle ilgileniyorsunuz?

Bir COM bağlantısını uygulamak için ilk üç noktadan itibaren bir parametre dizisi oluşturmanız gerekir. Bilgi güvenliği türüne bağlı olarak farklılık gösterecektir. dış görünüş. Alınan dizeyi kullanarak, herhangi bir yöntemi kullanarak analiz ve işleme için başka bir veritabanından veri toplayabileceğiniz bir bağlantı kurulur.

Bağlantı ParametreleriFileIB = "File=""Path_to_database""; Usr=""Kullanıcı_adı"";Pwd=""Şifre"""; Bağlantı ParametreleriClientServerIB = "Srvr = ""Sunucu_Adı""; Ref = ""Veritabanı_Adı""; Usr = ""Kullanıcı_Adı""; Pwd = ""Şifre""";

Bağlantı işlevi basittir ve tüm parametreler doğru şekilde belirtilirse herhangi bir soru ortaya çıkmamalıdır. Hata ayıklamayı ve analizi hızlandırmak için olası hatalar bağlantıyı "Dene" yapısına dahil etmek daha iyidir. İşlev, gerekli verileri elde etmek için çalışacağınız "COM nesnesi" türünde bir değer döndürecektir.

&OnServer Function ConnectToBase() importConnectionIB Parameters = "File=""E:\1c veritabanı\ERP""; Usr=""Yönetici"";Pwd=""1"""; V83COMCon= Yeni COMObject("V83.COMConnector"); Dönüş Denemesi V83COMCon.Connect(IB Bağlantı Parametreleri); İstisna Raporu(ErrorDescription()); Tanımsız Dönüş; Deneme Sonu; Son Fonksiyon

COM bağlantısı aracılığıyla yalnızca verileri seçmekle kalmaz, aynı zamanda bağlandığınız veritabanına da ekleyebilirsiniz. Bir COM nesnesi aracılığıyla 4 temel veri türünü aktarabileceğimizi unutmayın. Platformun yerleşik arama işlevleri kullanılarak diğer türlerin belirtilmesi gerekecektir. Lütfen global platform işlevlerinin COM bağlantısı yoluyla da çağrıldığını unutmayın.

1C veritabanından veri alıyoruz

İstediğiniz nesneyi aldıktan sonra başka bir veritabanındaki verileri okumanız gerekir. Bunu yapmak için, işlevden "COM nesnesi" türünün alınan değerini kullanarak 1C 8.3'te COM bağlantısı aracılığıyla bir istek kullanıyoruz. Önce veritabanına bağlanıp ardından isteği yürütmek önemlidir. Yürütme, nesne türünü dize biçiminde parametre - "İstek" olarak belirten NewObject yöntemi aracılığıyla gerçekleşir.

&OnServer Prosedürü TestCOMOnServer() Bağlantı = ConnectToBase(); If TypeValue(Connection) Type("Tanımsız") Then requestBPZO = Connection.NewObject("Request"); requestBPZO.Text = "İlk 15'i SEÇİN | DirectoryUser.Name AS Name |FROM | Directory.users AS DirectoryUser"; Select = requestBPZO.Execute().select(); While Selection.next() döngü Raporu(Selection.Number); EndCycle; endIf; Prosedürün Sonu >

Örneğin belirli bir departmanın kullanıcıları hakkında bilgi edinmek için istekte parametreler aracılığıyla bir koşul belirleyeceğiz. Bir parametre basit tipte olacaktır - bir dize ve bölüm "Kurumsal Yapı" dizin öğesine bir bağlantı olacaktır. Sorgunun sonucu, COM bağlantısının gerçekleştiği veritabanında mevcut olan türdeki alanların listelendiği bir tablodur. Bunları başka türlere dönüştürmeniz gerekiyorsa standart platform işlevlerini kullanın:

  • Astar();
  • Sayı();
  • Tarihi().
requestBPZO = Connection.NewObject("İstek"); requestBPZO.Text = "İlk 15'i SEÇ | DirectoryUser.Name AS Adı | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department = &RequiredDepartment | Ve DirectoryUser.Name like ""%"" + &RequiredName+ ""%""" ; BPZO.SetParameter("Gerekli Departman", Bağlantı. Dizinler. Kurumsal Yapı. Koda Göre Bul("00-000023")); requestBPZO.SetParameter("GerekliAd", "Ekaterina"); Select = requestBPZO.Execute().select(); While Selection.next() döngü Raporu(Selection.Name); EndCycle;

Departmanlar gibi çeşitli parametrelere göre seçim yapmak üzere bir diziyi veritabanına aktarmanız gerekiyorsa, NewObject komutu da kullanılır. Benzer şekilde, bir liste veya değer tablosunu bir bağlantı aracılığıyla başka bir veritabanının öğeleriyle doldurarak iletebilirsiniz. Aramanız için hepsi mevcut mevcut yöntemler platform nesneleri ve mekanizmaları.

requestBPZO = Connection.NewObject.("İstek"); requestBPZO.Text = "İlk 15'i SEÇ | DirectoryUser.Name AS Adı | FROM | Directory.Users AS DirectoryUser I WHERE | DirectoryUser.Department B (&GerekliDepartman) | Ve DirectoryUser.Name like ""%"" + &NecessaryName+ ""%" " "; Departman Dizisi = Connection.NewObject("Array"); Departmanlar Dizisi.Add(Connection.Directories.Kurumsal Yapı.Koda Göre Bul("00-000023")); Departmanlar Dizisi.Add(Connection.Directories.Kurumsal Yapı.Koda Göre Bul("00-000038")); Departmanlar Dizisi.Add(Connection.Directories.Kurumsal Yapı.Koda Göre Bul("00-000046")); Talep BPZO.SetParameter("Gerekli Departman", Departman Dizisi); requestBPZO.SetParameter("GerekliAd", "Ekaterina"); Select = requestBPZO.Execute().select(); While Selection.next() döngü Raporu(Selection.Name); EndCycle;

Belgeleri veya dizin öğelerini aktarırken, belirli bir nesnenin aktarımının kontrol edilmesi sorunu her zaman ortaya çıkar. COM bağlantılarının yardımıyla bu tür sorunlar benzersiz bir tanımlayıcı aracılığıyla çözülebilir. Tanımlayıcıyı bir dize olarak kullanarak, "GetLink" işlevini kullanarak mevcut bilgi güvenliğinden gelen tanımlayıcıya göre eklenti veritabanındaki bir nesneyi bulmanız gerekir. Bulunamazsa COM bağlantısını kullanarak oluşturabilirsiniz.

StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) DEĞİLSE NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directoryes.Users.FindByCode("00-0000313").Name; NewUser.Individual = Directoryes.Users.FindByCode("00-0000313").Individual; NewUser.Write(); endIf;

Ayrıca COM bağlantısı, "Harici bağlantı" özelliği etkinken ortak 1C modüllerindeki prosedürleri ve işlevleri kullanma hakkına sahiptir. Bu duruma ek olarak, çağrılan fonksiyon veya prosedürün dışa aktarılması ve sunucuda gerçekleştirilen etkileşimli eylemleri içermemesi gerekir. Aksi takdirde işlemin geçersiz olduğuna dair bir hata görürsünüz.

Birleştirmek..; DeğişkenFonksiyon = Bağlantı..; işlev çağrısı>genel modül adı>prosedür çağrısı>genel modül adı>

1C'deki başka bir veritabanıyla harici bağlantı olanakları oldukça kapsamlıdır ve birçok görevi gerçekleştirmenize izin verebilir. Araçları doğru bir şekilde değerlendirebilmek ve en uygun çözümü seçebilmek önemlidir. Çoğu durumda, bu beceri yalnızca deneyimle veya deneyimli uzmanların çalışma örneklerini inceleyerek ortaya çıkar.


Anahtar Kelimeler: COM, bağlantı, harici, OLE, Otomasyon, Connect, ComConnector, Srvr

Verilere erişmek için 1C:Enterprise 8.0 COM bağlantılarını kullanırken, Otomasyon sunucusu kullanmaya kıyasla aşağıdaki avantajlar vardır:

  1. Ayrı bir işletim sistemi süreci oluşturmaya gerek olmadığından ve tüm eylemler çağrı süreci içerisinde gerçekleştirildiğinden daha hızlı bağlantı kurulumu;

  2. Erişimin düzenlenmesi işlemler arası iletişim gerektirmediği için 1C:Enterprise nesnelerinin özelliklerine ve yöntemlerine daha hızlı erişim;
  3. İşletim sistemi kaynaklarının daha az tüketimi.

Genel olarak, 1C:Enterprise 8.0 ile COM bağlantısı aracılığıyla çalışmak, 1C:Enterprise ile sunucu Otomasyonu modunda çalışmaya benzer. Temel farklar aşağıdaki gibidir:

  1. Otomasyon sunucusu durumunda, tam teşekküllü bir 1C:Enterprise 8.0 uygulaması başlatılır ve COM bağlantısı durumunda nispeten küçük bir işlem içi COM sunucusu başlatılır.

  2. Bir COM bağlantısı üzerinden çalışırken, 1C:Enterprise 8.0 kullanıcı arayüzünün organizasyonuyla ilgili şu veya bu şekilde işlevsellik mevcut değildir;
  3. COM bağlantısını çalıştırırken 1C:Enterprise 8.0 yapılandırma uygulama modülü kullanılmaz. COM bağlantısıyla çalışırken rolü harici bağlantı modülü tarafından oynanır.

1.1 COM bağlantısı kurma prosedürü

COM bağlantısı üzerinden 1C:Enterprise 8.0 verilerine erişimi düzenlemek için aşağıdaki eylem dizisi gerçekleştirilir:

  1. bağlantının kurulduğu V8.COMConnector tanımlayıcısıyla bir COM nesnesi oluşturulur;

  2. önceden oluşturulan V8.COMConnector nesnesinin Connect yöntemi çağrılır. Connect yöntemi, 1C:Enterprise 8.0 bilgi tabanına sahip bir COM bağlantı nesnesine bir bağlantı döndürür;
  3. Alınan COM bağlantı nesnesi üzerinden bağlantının kurulduğu bilgi bankasının geçerli yöntemlerine, özelliklerine ve nesnelerine erişilir.

Önemli! COM bağlantısında kullanıcı arayüzünün bulunmamasından dolayı tüm nesneler, özellikler ve yöntemler COM bağlantısında kullanılamaz.

COM bağlantısı aracılığıyla dışarıdan erişilebilen 1C:Enterprise nesneleri:

  1. Harici birleştirme modülünün dışa aktarılan değişkenleri ve prosedürleri/işlevleri

  2. Dışa aktarılan değişkenler ve ortak modüllerin prosedürleri/işlevleri
  3. Ortak modüllerin özelliklerini ayarlayarak tüm modülleri dahil etme ve hariç tutma

  4. Bir ön işlemci kullanarak ortak modüllerin parçalarını dahil etme ve hariç tutma
  5. İstemci uygulamasına sıkı bir şekilde bağlı nesneler hariç olmak üzere genel bağlam 1C:Enterprise 8.0 (TextDocument, TabularDocument, ...)

1.2 Harici bağlantı modülü

Daha önce belirtildiği gibi, COM bağlantısı üzerinden çalışırken uygulama modülünün sorumlulukları harici bağlantı modülü tarafından gerçekleştirilir. Bu modül, sırasıyla bağlantının başlatılması ve sonlandırılması üzerine gerçekleştirilen eylemleri içerebilen When SystemStarts() ve WhenSystemCompletes() olay işleyici prosedürlerine sahip olabilir.

Dışa aktarma anahtar sözcüğüyle harici bir birleştirme modülünde tanımlanan prosedürler, işlevler ve genel değişkenler, uygulama modülünde olduğu gibi küresel bağlamın parçası haline gelir.

1.3 Ortak modüller

Ortak modüller için "İstemci", "Sunucu" ve "Harici Bağlantı" özellikleri eklendi. İstemci - sunucu versiyonunda ve COM bağlantı modunda modüllerin konfigürasyonda kullanımını belirlemeye yöneliktirler.

1.4 Nesne "V8.COMConnector"

V8.COMConnector COM nesnesi tarafından çözülen tek görev, 1C:Enterprise 8.0 bilgi tabanıyla bir COM bağlantısı kurmaktır. V8.COMConnector nesnesinin bir örneği kullanılarak sınırsız sayıda bağlantı kurulabilir. V8.COMConnector nesnesi, 1C:Enterprise 8.0 bilgi tabanıyla COM bağlantısı kurmak için tasarlanmış tek bir Connect yöntemine sahiptir.

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

Bilgi güvenliği sistemi ile bağlantı hattı Parametre=Değer formundaki parçalardan oluşan bir zincirdir. Parçalar birbirinden ";" ile ayrılır. Değer boşluk içeriyorsa, içine alınmalıdır ikili alıntı (").

Ortak parametreler:

Usr - kullanıcı adı;
Pwd - şifre.

Dosya sürümü için aşağıdaki parametre tanımlanmıştır:

Dosya - bilgi tabanı dizini.

İstemci-sunucu seçeneği için aşağıdaki parametreler tanımlanmıştır:

Srvr - 1C:Kurumsal sunucu adı;
Ref - sunucudaki bilgi tabanının adı.

Connect yöntemi, 1C:Enterprise 8.0 bilgi tabanına bir COM bağlantısı kurar ve COM bağlantı nesnesine bir bağlantı döndürür.

// Bir bağlayıcı nesnesi oluşturulur
V8 = Yeni COMObject("V8.COMConnector");
// bir COM bağlantı nesnesi yaratıldı
Bağlantı = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")

1.5 COM bağlantı nesnesi

1C:Enterprise bilgi tabanına COM bağlantısı, genel bağlamına tam erişim sağlar (bkz. “Program modülü yürütme bağlamı”). Bu nedenle, bir COM bağlantısının yöntemleri şunlar olabilir: sistem sabitleri, yöneticiler kullanılarak erişilen nesnelerin yapılandırıcısında belirtilen değerler (örneğin, sabitler, numaralandırmalar, dizinler, belgeler, belge günlükleri, raporlar, işlemler, türler için planlar) karakteristiklerin, hesap planlarının, hesaplama türlerinin planlarının, kayıtların) yanı sıra Dış bağlantı modülünde Export anahtar sözcüğüyle bildirilen değişkenler.

Ayrıca COM bağlantısında belirli türlerde değerler oluşturmak için kullanılabilecek ek bir NewObject yöntemi vardır.

tk = Bağlantı. NewObject("ValueTable");

Dize yöntemi 1C:Enterprise değerlerinin dize temsillerini elde etmenizi sağlar.

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

1.6. COM bağlantısıyla çalışmanın özellikleri

Otomasyonda ve COM bağlantısında DOĞRU ve YANLIŞ şu değerlere sahiptir: -1 (eksi bir) ve 0.

COM bağlantılarından oluşan bir havuz düzenlemek mümkündür. Aynı zamanda, alıcı sunucu 1C:Enterprise'da ÖNCEDEN birkaç COM bağlantı nesnesi oluşturulur ve yeni bir nesne oluşturmaya gerek olmadığından bağlantı kurmak daha da az zaman alır.

Belirtilen ayarlara göre sorgu metinleri oluşturmak için tasarlanmış yeni bir Sorgu Oluşturucu nesnesi uygulandı. Bu nesne Bir raporun bir elektronik tablo belgesine çıkarılmasıyla ilgili olmayan rapor oluşturucu işlevini ve raporla ilgili diğer görevleri destekler. Kullanıcı arayüzü. Bu nesne 1C:Enterprise sunucusunda ve COM bağlantısında kullanılabilir.

1C:Enterprise sunucusunda yerleşik dili çalıştırırken COM nesnelerini kullanabilirsiniz.

COM hataları katıştırılmış dil istisnalarına dönüştürülür.

Yapılandırma geçersiz bir nesne oluşturmaya çalışırsa, ör. elektronik tablo belgesi, harici bir bağlantı modülünde, paylaşılan bir modülde veya bir nesne modülünde, COM bağlantısı kurulamayabilir veya istisnai olarak kesilebilir.

1C veritabanları arasında veri alışverişi yapma seçeneklerinden biri COM bağlantısı üzerinden alışveriş yapmaktır.

COM bağlantısını kullanarak bir 1C veritabanından diğerine bağlanabilir ve veri okuyabilir veya yazabilirsiniz. Bu yöntem hem veritabanlarının istemci-sunucu versiyonlarında hem de dosya veritabanlarında kullanılabilir. Bu yazıda bu tür bağlantı örneklerine bakacağız. Örnekler platform 8.2'yi kullanıyor.

1C uygulaması için iki tür COM nesnesi oluşturabilirsiniz. Bu V82.Uygulama Ve V82.COM Bağlayıcı. durumunda V82.Uygulama 1C uygulamasının neredeyse tam teşekküllü bir kopyası başlatıldı. kullanım durumunda V82.COM Bağlayıcı Küçük bir sunucu kısmı başlatıldı.
Bu durumda çalışma hızı daha yüksektir ancak bazı işlevler kullanılamayabilir. Özellikle, harici bağlantılarla çalışma özelliğinin ayarlanmadığı formlar ve ortak modüllerle çalışma. Çoğunlukla kullanmalısınız V82.COM Bağlayıcı ve yalnızca işlevsellik eksikliği durumunda V82.Uygulama. Çalışma hızındaki fark özellikle büyük hacimli veritabanlarında fark edilebilir.

Öyleyse başlayalım

  1. Bir COM nesnesi oluşturalım
    • İçin V82.Uygulama Bağlantı = Yeni COMObject("V82.Application" ) ;
    • İçin V82.COM Bağlayıcı Bağlantı = Yeni COMObject("V82.COMConnector" ) ;
  2. Bir bağlantı dizesi oluşturalım
    • veritabanının sunucu sürümü için ConnectionString = "Srvr = " "SunucuAdı" ";Ref = " "BaseName" ;
    • veritabanının dosya sürümü için ConnectionString = "File = " "PathKBase" "; Usr = KullanıcıAdı; Pwd = Şifre";
  3. Veritabanına bağlanma Bağlantı Denemesi = Bağlantı. Connect(ConnectionString) ; İstisna Mesajı = Yeni MesajToKullanıcı; İleti. Metin = + ErrorDescription() ; İleti. Rapor etmek() ; Deneme Sonu;
  4. Veritabanıyla bağlantının kesilmesi Bağlantı = Tanımsız;

    Nesne için V82.Uygulama Bağlantıyı sonlandırmak gerekir, aksi takdirde tamamlanmamış bir oturum kalır ve bunun daha sonra manuel olarak silinmesi gerekir. durumunda V82.COM Bağlayıcı Bağlantının yapıldığı prosedür tamamlandığında bağlantı otomatik olarak kesiliyor ve bir küçük nokta daha var.

    Bağlantının yapıldığı kullanıcı için ayarlarında “Programı kapatırken onay iste” onay kutusu devre dışı bırakılmalıdır.

Şimdi tüm kodu bir araya getirelim

Bağlantı = Yeni COMObject("V82.Application" ) ; //Bağlantı = Yeni COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Sunucu1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Dosya = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Bağlantı Denemesi = Bağlantı. Connect(ConnectionString) ; İstisna Mesajı = Yeni MesajToKullanıcı; İleti. Metin = "Veritabanına bağlanılamadı"+ AçıklamaHatası() ; İleti. Rapor etmek() ; Deneme Sonu; Bağlantı = Tanımsız;

Bağlantı türü için V82.Uygulama yöntem, başlangıçta oluşturulan COM nesnesi için kullanılır ve V82.COM Bağlayıcı Bağlantıya yöntem uygulanır. taleple ilgili daha fazla çalışma devam ediyor standart araçlar 1C. kodda şöyle görünür:

Talep = Bağlantı. NewObject("İstek"); // İçin V82.COM Bağlayıcı Talep = Bağlantı. NewObject("İstek"); // İçin V82.Uygulama Rica etmek. Metin = "SEÇ | Kuruluşların Pozisyonları Kodu, | Kuruluşların Pozisyonları.Adı|DAN | Rehber. Organizasyonların Pozisyonları AS Organizasyonların Pozisyonları"; Sonuç = Talep. Koşmak(); Örnek = Sonuç. Seçmek() ; Güle güle Seçim. Sonraki() Döngü EndLoop ;

Sürüm 1C:Enterprise 8.3 için, COM nesneleri oluştururken kullanmanız gerekenler dışında her şey değişmeden kalır "V83.COM Bağlayıcısı" veya "V83.Uygulama".




Tepe